@scality/data-browser-library 1.0.0-preview.8 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/dist/components/DataBrowserUI.d.ts +12 -0
  2. package/dist/components/DataBrowserUI.js +99 -0
  3. package/dist/components/Editor.d.ts +1 -1
  4. package/dist/components/Editor.js +3 -3
  5. package/dist/components/__tests__/BucketAccessor.test.js +214 -0
  6. package/dist/components/__tests__/BucketCorsPage.test.d.ts +1 -0
  7. package/dist/components/__tests__/BucketCorsPage.test.js +263 -0
  8. package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
  9. package/dist/components/__tests__/BucketCreate.test.js +574 -0
  10. package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
  11. package/dist/components/__tests__/BucketDetails.test.js +421 -0
  12. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +14 -0
  13. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
  14. package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
  15. package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
  16. package/dist/components/__tests__/BucketList.test.js +495 -81
  17. package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
  19. package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
  20. package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
  21. package/dist/components/__tests__/BucketOverview.test.js +484 -179
  22. package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
  23. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +16 -0
  24. package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
  25. package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
  26. package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
  27. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  28. package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
  29. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
  30. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
  31. package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
  32. package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
  33. package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
  34. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  35. package/dist/components/__tests__/ObjectList.test.js +741 -240
  36. package/dist/components/__tests__/UploadButton.test.js +45 -45
  37. package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
  38. package/dist/components/breadcrumb/Breadcrumb.js +37 -0
  39. package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
  40. package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
  41. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
  42. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
  43. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
  44. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
  45. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
  46. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
  47. package/dist/components/breadcrumb/index.d.ts +8 -0
  48. package/dist/components/breadcrumb/index.js +4 -0
  49. package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
  50. package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
  51. package/dist/components/buckets/BucketAccessor.d.ts +2 -0
  52. package/dist/components/buckets/BucketAccessor.js +125 -0
  53. package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
  54. package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
  55. package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
  56. package/dist/components/buckets/BucketCorsPage.js +234 -0
  57. package/dist/components/buckets/BucketCreate.d.ts +50 -0
  58. package/dist/components/buckets/BucketCreate.js +279 -0
  59. package/dist/components/buckets/BucketDetails.d.ts +42 -0
  60. package/dist/components/buckets/BucketDetails.js +256 -40
  61. package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
  62. package/dist/components/buckets/BucketLifecycleFormPage.js +1086 -0
  63. package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
  64. package/dist/components/buckets/BucketLifecycleList.js +270 -0
  65. package/dist/components/buckets/BucketList.d.ts +6 -4
  66. package/dist/components/buckets/BucketList.js +161 -94
  67. package/dist/components/buckets/BucketLocation.js +4 -4
  68. package/dist/components/buckets/BucketOverview.d.ts +86 -5
  69. package/dist/components/buckets/BucketOverview.js +481 -192
  70. package/dist/components/buckets/BucketPage.js +44 -22
  71. package/dist/components/buckets/BucketPolicyPage.js +155 -127
  72. package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
  73. package/dist/components/buckets/BucketReplicationFormPage.js +835 -0
  74. package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
  75. package/dist/components/buckets/BucketReplicationList.js +189 -0
  76. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  77. package/dist/components/buckets/BucketVersioning.js +76 -0
  78. package/dist/components/buckets/DeleteBucketButton.js +8 -8
  79. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
  80. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
  81. package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
  82. package/dist/components/buckets/EmptyBucketButton.js +232 -0
  83. package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
  84. package/dist/components/buckets/EmptyBucketSummary.js +60 -0
  85. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
  86. package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
  87. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  88. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  89. package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
  90. package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
  91. package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
  92. package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
  93. package/dist/components/buckets/notifications/EventsSection.js +145 -29
  94. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  95. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  96. package/dist/components/buckets/notifications/events.d.ts +71 -7
  97. package/dist/components/buckets/notifications/events.js +98 -16
  98. package/dist/components/index.d.ts +27 -13
  99. package/dist/components/index.js +20 -6
  100. package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
  101. package/dist/components/layouts/ArrowNavigation.js +28 -0
  102. package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
  103. package/dist/components/layouts/BrowserPageLayout.js +10 -5
  104. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  105. package/dist/components/objects/CreateFolderButton.js +12 -12
  106. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  107. package/dist/components/objects/DeleteObjectButton.js +19 -21
  108. package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
  109. package/dist/components/objects/GetPresignedUrlButton.js +255 -0
  110. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
  111. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
  112. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
  113. package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
  114. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
  115. package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
  116. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
  117. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
  118. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
  119. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
  120. package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
  121. package/dist/components/objects/ObjectDetails/index.js +152 -40
  122. package/dist/components/objects/ObjectList.d.ts +12 -10
  123. package/dist/components/objects/ObjectList.js +590 -263
  124. package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
  125. package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
  126. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
  127. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
  128. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
  129. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +159 -0
  130. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
  131. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
  132. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
  133. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
  134. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
  135. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
  136. package/dist/components/objects/ObjectPage.js +12 -8
  137. package/dist/components/objects/UploadButton.d.ts +3 -3
  138. package/dist/components/objects/UploadButton.js +10 -10
  139. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
  140. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
  141. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  142. package/dist/components/providers/DataBrowserProvider.js +60 -38
  143. package/dist/components/providers/QueryProvider.d.ts +9 -0
  144. package/dist/components/providers/QueryProvider.js +21 -0
  145. package/dist/components/search/MetadataSearch.js +29 -28
  146. package/dist/components/search/SearchHints.js +1 -1
  147. package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
  148. package/dist/components/ui/ArrayFieldActions.js +43 -0
  149. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
  150. package/dist/components/ui/ConfirmDeleteRuleModal.js +48 -0
  151. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  152. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  153. package/dist/components/ui/FilterFormSection.d.ts +44 -0
  154. package/dist/components/ui/FilterFormSection.js +159 -0
  155. package/dist/components/ui/Search.elements.d.ts +2 -2
  156. package/dist/components/ui/Search.elements.js +7 -7
  157. package/dist/components/ui/Table.elements.d.ts +2 -1
  158. package/dist/components/ui/Table.elements.js +18 -12
  159. package/dist/config/__tests__/factory.test.d.ts +1 -0
  160. package/dist/config/__tests__/factory.test.js +311 -0
  161. package/dist/config/factory.d.ts +14 -49
  162. package/dist/config/factory.js +23 -68
  163. package/dist/config/types.d.ts +212 -34
  164. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
  165. package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
  166. package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
  167. package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
  168. package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
  169. package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
  170. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
  171. package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
  172. package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
  173. package/dist/hooks/bucketConfiguration.d.ts +8 -1
  174. package/dist/hooks/bucketConfiguration.js +52 -51
  175. package/dist/hooks/bucketOperations.d.ts +10 -1
  176. package/dist/hooks/bucketOperations.js +10 -9
  177. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
  178. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
  179. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
  180. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
  181. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +95 -52
  182. package/dist/hooks/factories/index.d.ts +4 -4
  183. package/dist/hooks/factories/index.js +2 -2
  184. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  185. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
  186. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  187. package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
  188. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  189. package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
  190. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  191. package/dist/hooks/factories/useCreateS3QueryHook.js +29 -3
  192. package/dist/hooks/index.d.ts +19 -8
  193. package/dist/hooks/index.js +16 -5
  194. package/dist/hooks/loginOperations.d.ts +1 -1
  195. package/dist/hooks/loginOperations.js +1 -1
  196. package/dist/hooks/objectOperations.d.ts +2 -2
  197. package/dist/hooks/objectOperations.js +50 -49
  198. package/dist/hooks/presignedOperations.d.ts +4 -4
  199. package/dist/hooks/presignedOperations.js +5 -5
  200. package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
  201. package/dist/hooks/useAccessibleBuckets.js +115 -0
  202. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  203. package/dist/hooks/useBatchObjectLegalHold.js +48 -0
  204. package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
  205. package/dist/hooks/useBucketConfigEditor.js +82 -0
  206. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  207. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  208. package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
  209. package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
  210. package/dist/hooks/useEmptyBucket.d.ts +27 -0
  211. package/dist/hooks/useEmptyBucket.js +116 -0
  212. package/dist/hooks/useFeatures.d.ts +7 -0
  213. package/dist/hooks/useFeatures.js +8 -0
  214. package/dist/hooks/useISVBucketDetection.d.ts +15 -0
  215. package/dist/hooks/useISVBucketDetection.js +27 -0
  216. package/dist/hooks/useIsBucketEmpty.js +4 -4
  217. package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
  218. package/dist/hooks/useLimitedAccessFlow.js +23 -0
  219. package/dist/hooks/useS3Client.d.ts +6 -0
  220. package/dist/hooks/useS3Client.js +3 -2
  221. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  222. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  223. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  224. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  225. package/dist/hooks/useTableRowSelection.d.ts +9 -0
  226. package/dist/hooks/useTableRowSelection.js +45 -0
  227. package/dist/index.d.ts +6 -6
  228. package/dist/index.js +2 -2
  229. package/dist/schemas/bucketPolicySchema.json +3 -13
  230. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  231. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  232. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  233. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  234. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  235. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  236. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  237. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  238. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  239. package/dist/test/msw/handlers/headObject.js +31 -13
  240. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  241. package/dist/test/msw/handlers/listBuckets.js +5 -3
  242. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  243. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  244. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  245. package/dist/test/msw/handlers/listObjects.js +35 -23
  246. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  247. package/dist/test/msw/handlers/objectLegalHold.js +32 -17
  248. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  249. package/dist/test/msw/handlers/objectRetention.js +31 -17
  250. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  251. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  252. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  253. package/dist/test/msw/handlers/putObject.js +27 -12
  254. package/dist/test/msw/handlers.d.ts +3 -3
  255. package/dist/test/msw/handlers.js +77 -54
  256. package/dist/test/msw/index.d.ts +2 -2
  257. package/dist/test/msw/index.js +1 -1
  258. package/dist/test/msw/server.d.ts +1 -1
  259. package/dist/test/msw/server.js +1 -1
  260. package/dist/test/msw/utils.js +2 -2
  261. package/dist/test/setup.d.ts +1 -1
  262. package/dist/test/setup.js +13 -30
  263. package/dist/test/testUtils.d.ts +170 -36
  264. package/dist/test/testUtils.js +229 -116
  265. package/dist/test/utils/errorHandling.test.js +146 -108
  266. package/dist/types/index.d.ts +49 -36
  267. package/dist/types/monaco.d.ts +13 -0
  268. package/dist/types/monaco.js +0 -0
  269. package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
  270. package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
  271. package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
  272. package/dist/utils/__tests__/s3Client.test.js +340 -0
  273. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  274. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
  275. package/dist/utils/constants.d.ts +22 -0
  276. package/dist/utils/constants.js +19 -0
  277. package/dist/utils/deletion/index.d.ts +2 -2
  278. package/dist/utils/deletion/index.js +1 -1
  279. package/dist/utils/deletion/messages.d.ts +1 -1
  280. package/dist/utils/deletion/messages.js +4 -4
  281. package/dist/utils/errorHandling.d.ts +12 -3
  282. package/dist/utils/errorHandling.js +12 -7
  283. package/dist/utils/hooks.js +8 -8
  284. package/dist/utils/index.d.ts +5 -2
  285. package/dist/utils/index.js +5 -1
  286. package/dist/utils/proxyMiddleware.d.ts +32 -13
  287. package/dist/utils/proxyMiddleware.js +90 -36
  288. package/dist/utils/s3Client.d.ts +14 -4
  289. package/dist/utils/s3Client.js +5 -26
  290. package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
  291. package/dist/utils/s3ConfigIdentifier.js +57 -0
  292. package/dist/utils/s3RuleUtils.d.ts +53 -0
  293. package/dist/utils/s3RuleUtils.js +101 -0
  294. package/package.json +10 -8
  295. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
  296. package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
  297. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
  298. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
  299. package/dist/hooks/useLoginMutation.d.ts +0 -21
  300. package/dist/hooks/useLoginMutation.js +0 -9
  301. package/dist/utils/useFeatures.d.ts +0 -1
  302. package/dist/utils/useFeatures.js +0 -7
  303. /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
@@ -0,0 +1,4 @@
1
+ export declare const EditRetentionButton: ({ bucketName }: {
2
+ bucketName: string;
3
+ }) => import("react/jsx-runtime").JSX.Element;
4
+ export default EditRetentionButton;
@@ -0,0 +1,32 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Icon } from "@scality/core-ui";
3
+ import { Button } from "@scality/core-ui/dist/next";
4
+ import { useISVBucketStatus } from "../../../hooks/index.js";
5
+ import { useDataBrowserNavigate } from "../../../hooks/useDataBrowserNavigate.js";
6
+ const EditRetentionButton = ({ bucketName })=>{
7
+ const navigate = useDataBrowserNavigate();
8
+ const { isVeeamBucket, isCommvaultBucket, isISVManaged, isLoading } = useISVBucketStatus(bucketName);
9
+ const tooltipOverlay = isCommvaultBucket ? 'Edition is disabled as it is managed by Commvault.' : isVeeamBucket ? 'Edition is disabled as it is managed by Veeam.' : void 0;
10
+ return /*#__PURE__*/ jsx(Button, {
11
+ id: "edit-retention-btn",
12
+ variant: "outline",
13
+ label: "Edit",
14
+ "aria-label": "Edit default retention",
15
+ icon: /*#__PURE__*/ jsx(Icon, {
16
+ name: "Pencil"
17
+ }),
18
+ type: "button",
19
+ onClick: ()=>{
20
+ navigate(`/buckets/${bucketName}/objects/object-lock-settings`);
21
+ },
22
+ disabled: isISVManaged,
23
+ ...tooltipOverlay && {
24
+ tooltip: {
25
+ overlay: tooltipOverlay
26
+ }
27
+ },
28
+ isLoading: isLoading
29
+ });
30
+ };
31
+ const ObjectLock_EditRetentionButton = EditRetentionButton;
32
+ export { EditRetentionButton, ObjectLock_EditRetentionButton as default };
@@ -0,0 +1,3 @@
1
+ export default function ObjectLockRetentionSettings({ isEditRetentionSettings, }: {
2
+ isEditRetentionSettings?: boolean;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,211 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { Checkbox, FormGroup, FormSection, Stack, Text } from "@scality/core-ui";
3
+ import { convertRemToPixels } from "@scality/core-ui/dist/components/tablev2/TableUtils";
4
+ import { Input, Select } from "@scality/core-ui/dist/next";
5
+ import { Controller, useFormContext } from "react-hook-form";
6
+ function ObjectLockRetentionSettings({ isEditRetentionSettings = false }) {
7
+ const { control, register, watch, formState: { errors }, setValue } = useFormContext();
8
+ const isDefaultRetentionEnabled = watch('isDefaultRetentionEnabled');
9
+ const isObjectLockEnabled = watch('isObjectLockEnabled');
10
+ const matchVersioning = (checked)=>{
11
+ if (checked) setValue('isVersioning', true);
12
+ };
13
+ return /*#__PURE__*/ jsxs(FormSection, {
14
+ title: isEditRetentionSettings ? void 0 : {
15
+ name: 'Object-lock'
16
+ },
17
+ forceLabelWidth: convertRemToPixels(17.5),
18
+ children: [
19
+ /*#__PURE__*/ jsx(FormGroup, {
20
+ id: "isObjectLockEnabled",
21
+ label: "Object-lock",
22
+ content: /*#__PURE__*/ jsx(Checkbox, {
23
+ id: "isObjectLockEnabled",
24
+ label: isObjectLockEnabled ? 'Enabled' : 'Disabled',
25
+ disabled: isEditRetentionSettings && isObjectLockEnabled,
26
+ ...register('isObjectLockEnabled', {
27
+ onChange (e) {
28
+ matchVersioning(e.target.checked);
29
+ }
30
+ })
31
+ }),
32
+ labelHelpTooltip: /*#__PURE__*/ jsxs("ul", {
33
+ children: [
34
+ /*#__PURE__*/ jsx("li", {
35
+ children: "Permanently allows objects in this bucket to be locked"
36
+ }),
37
+ /*#__PURE__*/ jsx("li", {
38
+ children: "Object-lock option cannot be removed after bucket creation, but you will be able to disable the retention itself on edition."
39
+ }),
40
+ /*#__PURE__*/ jsx("li", {
41
+ children: "Once the bucket is created, you might be blocked from deleting the objects and the bucket."
42
+ }),
43
+ /*#__PURE__*/ jsx("li", {
44
+ children: "Enabling Object-lock automatically activates Versioning for the bucket, and you won’t be able to suspend Versioning."
45
+ })
46
+ ]
47
+ }),
48
+ helpErrorPosition: "bottom",
49
+ disabled: isEditRetentionSettings
50
+ }),
51
+ isObjectLockEnabled && /*#__PURE__*/ jsxs(Fragment, {
52
+ children: [
53
+ /*#__PURE__*/ jsx(FormGroup, {
54
+ id: "isDefaultRetentionEnabled",
55
+ label: "Default Retention",
56
+ helpErrorPosition: "bottom",
57
+ labelHelpTooltip: isEditRetentionSettings ? /*#__PURE__*/ jsxs("ul", {
58
+ children: [
59
+ /*#__PURE__*/ jsx("li", {
60
+ children: "These settings apply only to new objects placed into the bucket without any specific object-lock parameters."
61
+ }),
62
+ /*#__PURE__*/ jsx("li", {
63
+ children: "Automatically protect objects put into this bucket from being deleted or overwritten."
64
+ }),
65
+ /*#__PURE__*/ jsx("li", {
66
+ children: "If objects are uploaded into the bucket with their own Retention settings, these will override the Default Retention setting placed on the bucket."
67
+ })
68
+ ]
69
+ }) : /*#__PURE__*/ jsxs("ul", {
70
+ children: [
71
+ /*#__PURE__*/ jsx("li", {
72
+ children: "Automatically protect objects put into this bucket from being deleted or overwritten."
73
+ }),
74
+ /*#__PURE__*/ jsx("li", {
75
+ children: "These settings apply only to new objects placed into the bucket without any specific object-lock parameters."
76
+ }),
77
+ /*#__PURE__*/ jsx("li", {
78
+ children: "You can activate this option after the bucket creation."
79
+ }),
80
+ /*#__PURE__*/ jsx("li", {
81
+ children: "If objects are uploaded into the bucket with their own Retention settings, these will override the Default Retention setting placed on the bucket."
82
+ })
83
+ ]
84
+ }),
85
+ content: /*#__PURE__*/ jsx(Checkbox, {
86
+ id: "isDefaultRetentionEnabled",
87
+ label: isDefaultRetentionEnabled ? 'Active' : 'Inactive',
88
+ ...register('isDefaultRetentionEnabled')
89
+ })
90
+ }),
91
+ /*#__PURE__*/ jsx(FormGroup, {
92
+ id: "objectlockMode",
93
+ label: "Retention mode",
94
+ direction: "vertical",
95
+ disabled: !isDefaultRetentionEnabled,
96
+ helpErrorPosition: "bottom",
97
+ content: /*#__PURE__*/ jsx("div", {
98
+ style: {
99
+ opacity: isDefaultRetentionEnabled ? 1 : 0.5
100
+ },
101
+ children: /*#__PURE__*/ jsxs(Stack, {
102
+ direction: "vertical",
103
+ children: [
104
+ /*#__PURE__*/ jsxs(Stack, {
105
+ direction: "vertical",
106
+ children: [
107
+ /*#__PURE__*/ jsxs(Stack, {
108
+ children: [
109
+ /*#__PURE__*/ jsx("input", {
110
+ id: "locktype-governance",
111
+ type: "radio",
112
+ value: "GOVERNANCE",
113
+ disabled: !isDefaultRetentionEnabled,
114
+ ...register('retentionMode')
115
+ }),
116
+ /*#__PURE__*/ jsx("label", {
117
+ htmlFor: "locktype-governance",
118
+ children: "Governance"
119
+ })
120
+ ]
121
+ }),
122
+ /*#__PURE__*/ jsx(Text, {
123
+ color: "textSecondary",
124
+ isEmphazed: true,
125
+ variant: "Smaller",
126
+ children: "A user with a specific IAM permissions can overwrite/delete protected object versions during the retention period."
127
+ })
128
+ ]
129
+ }),
130
+ /*#__PURE__*/ jsxs(Stack, {
131
+ children: [
132
+ /*#__PURE__*/ jsx("input", {
133
+ id: "locktype-compliance",
134
+ type: "radio",
135
+ value: "COMPLIANCE",
136
+ disabled: !isDefaultRetentionEnabled,
137
+ ...register('retentionMode')
138
+ }),
139
+ /*#__PURE__*/ jsx("label", {
140
+ htmlFor: "locktype-compliance",
141
+ children: "Compliance"
142
+ })
143
+ ]
144
+ }),
145
+ /*#__PURE__*/ jsx(Text, {
146
+ color: "textSecondary",
147
+ isEmphazed: true,
148
+ variant: "Smaller",
149
+ children: "No one can overwrite protected object versions during the retention period."
150
+ })
151
+ ]
152
+ })
153
+ })
154
+ }),
155
+ /*#__PURE__*/ jsx(FormGroup, {
156
+ id: "retentionPeriod",
157
+ label: "Retention period",
158
+ direction: "horizontal",
159
+ helpErrorPosition: "bottom",
160
+ help: "Must be a positive whole number.",
161
+ error: errors.retentionPeriod?.message,
162
+ disabled: !isDefaultRetentionEnabled,
163
+ content: /*#__PURE__*/ jsxs(Stack, {
164
+ direction: "horizontal",
165
+ children: [
166
+ /*#__PURE__*/ jsx(Controller, {
167
+ control: control,
168
+ name: "retentionPeriod",
169
+ render: ({ field: { onChange, value: retentionPeriod } })=>/*#__PURE__*/ jsx(Input, {
170
+ id: "retentionPeriod",
171
+ name: "retentionPeriod",
172
+ value: retentionPeriod,
173
+ onChange: (e)=>onChange(e.target.valueAsNumber),
174
+ type: "number",
175
+ step: "1",
176
+ min: "1",
177
+ size: "2/3"
178
+ })
179
+ }),
180
+ /*#__PURE__*/ jsx(Controller, {
181
+ control: control,
182
+ name: "retentionPeriodFrequencyChoice",
183
+ defaultValue: 'DAYS',
184
+ render: ({ field: { onChange, value: retentionPeriodFrequencyChoice } })=>/*#__PURE__*/ jsxs(Select, {
185
+ id: "retentionPeriodFrequencyChoice",
186
+ onChange: onChange,
187
+ placeholder: "retentionPeriodFrequencyChoice",
188
+ value: retentionPeriodFrequencyChoice,
189
+ disabled: !isDefaultRetentionEnabled,
190
+ size: '1/3',
191
+ children: [
192
+ /*#__PURE__*/ jsx(Select.Option, {
193
+ value: 'DAYS',
194
+ children: "Days"
195
+ }),
196
+ /*#__PURE__*/ jsx(Select.Option, {
197
+ value: 'YEARS',
198
+ children: "Years"
199
+ })
200
+ ]
201
+ })
202
+ })
203
+ ]
204
+ })
205
+ })
206
+ ]
207
+ })
208
+ ]
209
+ });
210
+ }
211
+ export { ObjectLockRetentionSettings as default };
@@ -0,0 +1,9 @@
1
+ import Joi from 'joi';
2
+ export declare const objectLockRetentionSettingsValidationRules: {
3
+ isObjectLockEnabled: Joi.BooleanSchema<boolean>;
4
+ isDefaultRetentionEnabled: Joi.BooleanSchema<boolean>;
5
+ retentionMode: Joi.AlternativesSchema<any>;
6
+ retentionPeriod: Joi.AlternativesSchema<any>;
7
+ retentionPeriodFrequencyChoice: Joi.AlternativesSchema<any>;
8
+ };
9
+ export declare function ObjectLockSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,159 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { joiResolver } from "@hookform/resolvers/joi";
3
+ import { Form, Icon, Loader, Stack, Text, useToast } from "@scality/core-ui";
4
+ import { Button } from "@scality/core-ui/dist/next";
5
+ import joi from "joi";
6
+ import { useEffect, useRef } from "react";
7
+ import { FormProvider, useForm } from "react-hook-form";
8
+ import { useParams } from "react-router";
9
+ import { useGetBucketObjectLockConfiguration, useSetBucketObjectLockConfiguration } from "../../../hooks/index.js";
10
+ import { useDataBrowserNavigate } from "../../../hooks/useDataBrowserNavigate.js";
11
+ import ObjectLockRetentionSettings from "./ObjectLockRetentionSettings.js";
12
+ const objectLockRetentionSettingsValidationRules = {
13
+ isObjectLockEnabled: joi.boolean(),
14
+ isDefaultRetentionEnabled: joi.boolean().default(false),
15
+ retentionMode: joi.when('isDefaultRetentionEnabled', {
16
+ is: joi.equal(true),
17
+ then: joi.string().valid('GOVERNANCE', 'COMPLIANCE').required(),
18
+ otherwise: joi.any()
19
+ }),
20
+ retentionPeriod: joi.when('isDefaultRetentionEnabled', {
21
+ is: joi.equal(true),
22
+ then: joi.number().integer().min(1).required(),
23
+ otherwise: joi.any()
24
+ }),
25
+ retentionPeriodFrequencyChoice: joi.when('isDefaultRetentionEnabled', {
26
+ is: joi.equal(true),
27
+ then: joi.string().valid('DAYS', 'YEARS').required(),
28
+ otherwise: joi.any()
29
+ })
30
+ };
31
+ const schema = joi.object(objectLockRetentionSettingsValidationRules);
32
+ function ObjectLockSettings() {
33
+ const { bucketName } = useParams();
34
+ const navigate = useDataBrowserNavigate();
35
+ const { showToast } = useToast();
36
+ const { data: objectLockData, status: objectLockStatus } = useGetBucketObjectLockConfiguration({
37
+ Bucket: bucketName
38
+ });
39
+ const setBucketObjectLockMutation = useSetBucketObjectLockConfiguration();
40
+ const isObjectLockEnabled = objectLockData?.ObjectLockConfiguration?.ObjectLockEnabled === 'Enabled';
41
+ const defaultRetention = objectLockData?.ObjectLockConfiguration?.Rule?.DefaultRetention;
42
+ const useFormMethods = useForm({
43
+ mode: 'all',
44
+ resolver: joiResolver(schema),
45
+ defaultValues: {
46
+ isObjectLockEnabled: isObjectLockEnabled,
47
+ isDefaultRetentionEnabled: !!defaultRetention,
48
+ retentionMode: defaultRetention?.Mode || 'GOVERNANCE',
49
+ retentionPeriod: defaultRetention?.Days || defaultRetention?.Years || 1,
50
+ retentionPeriodFrequencyChoice: defaultRetention ? defaultRetention?.Days ? 'DAYS' : 'YEARS' : 'DAYS'
51
+ }
52
+ });
53
+ const { watch, setValue, handleSubmit, formState: { isValid } } = useFormMethods;
54
+ const isObjectLockEnabledValue = watch('isObjectLockEnabled');
55
+ const isFormInitialized = useRef(false);
56
+ useEffect(()=>{
57
+ if ('success' === objectLockStatus && objectLockData && !isFormInitialized.current) {
58
+ const isEnabled = objectLockData.ObjectLockConfiguration?.ObjectLockEnabled === 'Enabled';
59
+ const defaultRet = objectLockData.ObjectLockConfiguration?.Rule?.DefaultRetention;
60
+ setValue('isObjectLockEnabled', isEnabled);
61
+ setValue('isDefaultRetentionEnabled', !!defaultRet);
62
+ if (defaultRet) {
63
+ setValue('retentionMode', defaultRet.Mode);
64
+ setValue('retentionPeriod', defaultRet.Days || defaultRet.Years || 1);
65
+ setValue('retentionPeriodFrequencyChoice', defaultRet.Days ? 'DAYS' : 'YEARS');
66
+ }
67
+ isFormInitialized.current = true;
68
+ }
69
+ }, [
70
+ objectLockData,
71
+ objectLockStatus,
72
+ setValue
73
+ ]);
74
+ const handleCancel = ()=>{
75
+ navigate(`/buckets/${bucketName}`);
76
+ };
77
+ const onSubmit = (data)=>{
78
+ setBucketObjectLockMutation.mutate({
79
+ Bucket: bucketName,
80
+ ObjectLockConfiguration: data.isObjectLockEnabled ? {
81
+ ObjectLockEnabled: 'Enabled',
82
+ ...data.isDefaultRetentionEnabled && {
83
+ Rule: {
84
+ DefaultRetention: {
85
+ Mode: data.retentionMode,
86
+ ...'DAYS' === data.retentionPeriodFrequencyChoice ? {
87
+ Days: data.retentionPeriod
88
+ } : {
89
+ Years: data.retentionPeriod
90
+ }
91
+ }
92
+ }
93
+ }
94
+ } : void 0
95
+ }, {
96
+ onSuccess: ()=>{
97
+ showToast({
98
+ open: true,
99
+ message: 'Object Lock settings saved successfully',
100
+ status: 'success'
101
+ });
102
+ navigate(`/buckets/${bucketName}`);
103
+ },
104
+ onError: (error)=>{
105
+ const errorMessage = error instanceof Error ? error.message : 'Failed to save Object Lock settings';
106
+ showToast({
107
+ open: true,
108
+ message: errorMessage,
109
+ status: 'error'
110
+ });
111
+ }
112
+ });
113
+ };
114
+ if ('pending' === objectLockStatus) return /*#__PURE__*/ jsx(Loader, {
115
+ centered: true,
116
+ children: /*#__PURE__*/ jsx(Text, {
117
+ children: "Loading retention settings..."
118
+ })
119
+ });
120
+ return /*#__PURE__*/ jsx(FormProvider, {
121
+ ...useFormMethods,
122
+ children: /*#__PURE__*/ jsx(Form, {
123
+ onSubmit: handleSubmit(onSubmit),
124
+ requireMode: "partial",
125
+ layout: {
126
+ kind: 'page',
127
+ title: 'Object-lock settings'
128
+ },
129
+ rightActions: /*#__PURE__*/ jsxs(Stack, {
130
+ gap: "r16",
131
+ children: [
132
+ /*#__PURE__*/ jsx(Button, {
133
+ id: "cancel-btn",
134
+ variant: "outline",
135
+ onClick: handleCancel,
136
+ type: "button",
137
+ label: "Cancel",
138
+ disabled: setBucketObjectLockMutation.isPending
139
+ }),
140
+ /*#__PURE__*/ jsx(Button, {
141
+ disabled: !isValid || !isObjectLockEnabledValue || setBucketObjectLockMutation.isPending,
142
+ id: "edit-retention-setting-btn",
143
+ type: "submit",
144
+ variant: "primary",
145
+ label: "Save",
146
+ icon: /*#__PURE__*/ jsx(Icon, {
147
+ name: "Save"
148
+ }),
149
+ isLoading: setBucketObjectLockMutation.isPending
150
+ })
151
+ ]
152
+ }),
153
+ children: /*#__PURE__*/ jsx(ObjectLockRetentionSettings, {
154
+ isEditRetentionSettings: true
155
+ })
156
+ })
157
+ });
158
+ }
159
+ export { ObjectLockSettings, objectLockRetentionSettingsValidationRules };
@@ -0,0 +1,8 @@
1
+ import type { GetObjectRetentionCommandOutput } from '@aws-sdk/client-s3';
2
+ export declare function getDefaultRetention(retentionData: GetObjectRetentionCommandOutput | null | undefined): {
3
+ isDefaultRetentionEnabled: boolean;
4
+ defaultRetentionUntilDate: Date;
5
+ defaultRetentionMode: import("@aws-sdk/client-s3").ObjectLockRetentionMode;
6
+ };
7
+ export declare function getDefaultMinRetainUntilDate(d: Date | null | undefined, mode: string): string;
8
+ export declare function getRetainUntilDateHint(dateString: string): string;
@@ -0,0 +1,39 @@
1
+ function getDefaultRetention(retentionData) {
2
+ const isDefaultRetentionEnabled = retentionData?.Retention !== void 0 && null !== retentionData.Retention;
3
+ const defaultRetentionUntilDate = retentionData?.Retention?.RetainUntilDate ? new Date(retentionData.Retention.RetainUntilDate) : new Date();
4
+ const defaultRetentionMode = retentionData?.Retention?.Mode || 'GOVERNANCE';
5
+ return {
6
+ isDefaultRetentionEnabled,
7
+ defaultRetentionUntilDate,
8
+ defaultRetentionMode
9
+ };
10
+ }
11
+ function getDefaultMinRetainUntilDate(d, mode) {
12
+ const tomorrow = new Date();
13
+ tomorrow.setDate(tomorrow.getDate() + 1);
14
+ const futureDate = formatDateForInput(tomorrow);
15
+ if (!d) return futureDate;
16
+ const previousRetainUntilDate = 'GOVERNANCE' === mode ? formatDateForInput(d) : formatDateForInput(addDays(d, 1));
17
+ return previousRetainUntilDate > futureDate ? previousRetainUntilDate : futureDate;
18
+ }
19
+ function formatDateForInput(date) {
20
+ const year = date.getFullYear();
21
+ const month = String(date.getMonth() + 1).padStart(2, '0');
22
+ const day = String(date.getDate()).padStart(2, '0');
23
+ return `${year}-${month}-${day}`;
24
+ }
25
+ function addDays(date, days) {
26
+ const result = new Date(date);
27
+ result.setDate(result.getDate() + days);
28
+ return result;
29
+ }
30
+ function getRetainUntilDateHint(dateString) {
31
+ const now = new Date();
32
+ const retainUntilDate = new Date(dateString);
33
+ const diffInMs = retainUntilDate.getTime() - now.getTime();
34
+ const diffInDays = Math.floor(diffInMs / 86400000);
35
+ if (diffInDays < 1) return '(within 24 hours from now)';
36
+ if (1 === diffInDays) return '(1 day from now)';
37
+ return `(${diffInDays} days from now)`;
38
+ }
39
+ export { getDefaultMinRetainUntilDate, getDefaultRetention, getRetainUntilDateHint };