@scality/data-browser-library 1.0.0-preview.11

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 (256) hide show
  1. package/dist/components/Editor.d.ts +12 -0
  2. package/dist/components/Editor.js +28 -0
  3. package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
  4. package/dist/components/__tests__/BucketCreate.test.js +408 -0
  5. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +1 -0
  6. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
  7. package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
  8. package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
  9. package/dist/components/__tests__/BucketList.test.d.ts +1 -0
  10. package/dist/components/__tests__/BucketList.test.js +415 -0
  11. package/dist/components/__tests__/BucketNotificationCreatePage.test.d.ts +1 -0
  12. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +316 -0
  13. package/dist/components/__tests__/BucketOverview.test.d.ts +1 -0
  14. package/dist/components/__tests__/BucketOverview.test.js +769 -0
  15. package/dist/components/__tests__/BucketPolicyPage.test.d.ts +1 -0
  16. package/dist/components/__tests__/BucketPolicyPage.test.js +268 -0
  17. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
  19. package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
  20. package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
  21. package/dist/components/__tests__/CreateFolderButton.test.d.ts +1 -0
  22. package/dist/components/__tests__/CreateFolderButton.test.js +147 -0
  23. package/dist/components/__tests__/DeleteBucketButton.test.d.ts +1 -0
  24. package/dist/components/__tests__/DeleteBucketButton.test.js +272 -0
  25. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
  26. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
  27. package/dist/components/__tests__/DeleteObjectButton.test.d.ts +1 -0
  28. package/dist/components/__tests__/DeleteObjectButton.test.js +302 -0
  29. package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
  30. package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
  31. package/dist/components/__tests__/MetadataSearch.test.d.ts +1 -0
  32. package/dist/components/__tests__/MetadataSearch.test.js +201 -0
  33. package/dist/components/__tests__/ObjectList.test.d.ts +1 -0
  34. package/dist/components/__tests__/ObjectList.test.js +283 -0
  35. package/dist/components/__tests__/UploadButton.test.d.ts +1 -0
  36. package/dist/components/__tests__/UploadButton.test.js +144 -0
  37. package/dist/components/buckets/BucketCreate.d.ts +49 -0
  38. package/dist/components/buckets/BucketCreate.js +237 -0
  39. package/dist/components/buckets/BucketDetails.d.ts +1 -0
  40. package/dist/components/buckets/BucketDetails.js +106 -0
  41. package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
  42. package/dist/components/buckets/BucketLifecycleFormPage.js +1085 -0
  43. package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
  44. package/dist/components/buckets/BucketLifecycleList.js +270 -0
  45. package/dist/components/buckets/BucketList.d.ts +15 -0
  46. package/dist/components/buckets/BucketList.js +146 -0
  47. package/dist/components/buckets/BucketLocation.d.ts +3 -0
  48. package/dist/components/buckets/BucketLocation.js +16 -0
  49. package/dist/components/buckets/BucketOverview.d.ts +88 -0
  50. package/dist/components/buckets/BucketOverview.js +291 -0
  51. package/dist/components/buckets/BucketPage.d.ts +2 -0
  52. package/dist/components/buckets/BucketPage.js +47 -0
  53. package/dist/components/buckets/BucketPolicyButton.d.ts +7 -0
  54. package/dist/components/buckets/BucketPolicyButton.js +18 -0
  55. package/dist/components/buckets/BucketPolicyPage.d.ts +1 -0
  56. package/dist/components/buckets/BucketPolicyPage.js +236 -0
  57. package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
  58. package/dist/components/buckets/BucketReplicationFormPage.js +834 -0
  59. package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
  60. package/dist/components/buckets/BucketReplicationList.js +189 -0
  61. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  62. package/dist/components/buckets/BucketVersioning.js +73 -0
  63. package/dist/components/buckets/DeleteBucketButton.d.ts +8 -0
  64. package/dist/components/buckets/DeleteBucketButton.js +78 -0
  65. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
  66. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
  67. package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
  68. package/dist/components/buckets/EmptyBucketButton.js +232 -0
  69. package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
  70. package/dist/components/buckets/EmptyBucketSummary.js +60 -0
  71. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
  72. package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
  73. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  74. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  75. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +1 -0
  76. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +234 -0
  77. package/dist/components/buckets/notifications/EventsSection.d.ts +1 -0
  78. package/dist/components/buckets/notifications/EventsSection.js +123 -0
  79. package/dist/components/buckets/notifications/events.d.ts +12 -0
  80. package/dist/components/buckets/notifications/events.js +27 -0
  81. package/dist/components/index.d.ts +21 -0
  82. package/dist/components/index.js +22 -0
  83. package/dist/components/layouts/ArrowNavigation.d.ts +4 -0
  84. package/dist/components/layouts/ArrowNavigation.js +16 -0
  85. package/dist/components/layouts/BrowserPageLayout.d.ts +12 -0
  86. package/dist/components/layouts/BrowserPageLayout.js +51 -0
  87. package/dist/components/objects/CreateFolderButton.d.ts +29 -0
  88. package/dist/components/objects/CreateFolderButton.js +118 -0
  89. package/dist/components/objects/DeleteObjectButton.d.ts +8 -0
  90. package/dist/components/objects/DeleteObjectButton.js +191 -0
  91. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -0
  92. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +356 -0
  93. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +3 -0
  94. package/dist/components/objects/ObjectDetails/ObjectSummary.js +241 -0
  95. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +3 -0
  96. package/dist/components/objects/ObjectDetails/ObjectTags.js +272 -0
  97. package/dist/components/objects/ObjectDetails/index.d.ts +9 -0
  98. package/dist/components/objects/ObjectDetails/index.js +75 -0
  99. package/dist/components/objects/ObjectList.d.ts +40 -0
  100. package/dist/components/objects/ObjectList.js +453 -0
  101. package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
  102. package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
  103. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
  104. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
  105. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
  106. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +158 -0
  107. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
  108. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
  109. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
  110. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
  111. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
  112. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
  113. package/dist/components/objects/ObjectPage.d.ts +1 -0
  114. package/dist/components/objects/ObjectPage.js +45 -0
  115. package/dist/components/objects/UploadButton.d.ts +34 -0
  116. package/dist/components/objects/UploadButton.js +229 -0
  117. package/dist/components/providers/DataBrowserProvider.d.ts +20 -0
  118. package/dist/components/providers/DataBrowserProvider.js +42 -0
  119. package/dist/components/search/MetadataSearch.d.ts +5 -0
  120. package/dist/components/search/MetadataSearch.js +162 -0
  121. package/dist/components/search/SearchHints.d.ts +8 -0
  122. package/dist/components/search/SearchHints.js +21 -0
  123. package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
  124. package/dist/components/ui/ArrayFieldActions.js +43 -0
  125. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
  126. package/dist/components/ui/ConfirmDeleteRuleModal.js +43 -0
  127. package/dist/components/ui/DeleteObjectModalContent.d.ts +5 -0
  128. package/dist/components/ui/DeleteObjectModalContent.js +71 -0
  129. package/dist/components/ui/FilterFormSection.d.ts +44 -0
  130. package/dist/components/ui/FilterFormSection.js +159 -0
  131. package/dist/components/ui/Search.elements.d.ts +17 -0
  132. package/dist/components/ui/Search.elements.js +59 -0
  133. package/dist/components/ui/Table.elements.d.ts +36 -0
  134. package/dist/components/ui/Table.elements.js +87 -0
  135. package/dist/config/factory.d.ts +63 -0
  136. package/dist/config/factory.js +74 -0
  137. package/dist/config/types.d.ts +46 -0
  138. package/dist/config/types.js +0 -0
  139. package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
  140. package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
  141. package/dist/hooks/__tests__/useIsBucketEmpty.test.d.ts +1 -0
  142. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +122 -0
  143. package/dist/hooks/bucketConfiguration.d.ts +168 -0
  144. package/dist/hooks/bucketConfiguration.js +67 -0
  145. package/dist/hooks/bucketOperations.d.ts +36 -0
  146. package/dist/hooks/bucketOperations.js +12 -0
  147. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.d.ts +1 -0
  148. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +276 -0
  149. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.d.ts +1 -0
  150. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +259 -0
  151. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.d.ts +1 -0
  152. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +166 -0
  153. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.d.ts +1 -0
  154. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +200 -0
  155. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.d.ts +1 -0
  156. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +179 -0
  157. package/dist/hooks/factories/index.d.ts +18 -0
  158. package/dist/hooks/factories/index.js +5 -0
  159. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +13 -0
  160. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +76 -0
  161. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +8 -0
  162. package/dist/hooks/factories/useCreateS3LoginHook.js +22 -0
  163. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +5 -0
  164. package/dist/hooks/factories/useCreateS3MutationHook.js +50 -0
  165. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +3 -0
  166. package/dist/hooks/factories/useCreateS3QueryHook.js +51 -0
  167. package/dist/hooks/index.d.ts +13 -0
  168. package/dist/hooks/index.js +13 -0
  169. package/dist/hooks/loginOperations.d.ts +21 -0
  170. package/dist/hooks/loginOperations.js +9 -0
  171. package/dist/hooks/objectOperations.d.ts +190 -0
  172. package/dist/hooks/objectOperations.js +67 -0
  173. package/dist/hooks/presignedOperations.d.ts +73 -0
  174. package/dist/hooks/presignedOperations.js +72 -0
  175. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  176. package/dist/hooks/useBatchObjectLegalHold.js +45 -0
  177. package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
  178. package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
  179. package/dist/hooks/useEmptyBucket.d.ts +27 -0
  180. package/dist/hooks/useEmptyBucket.js +116 -0
  181. package/dist/hooks/useISVBucketDetection.d.ts +15 -0
  182. package/dist/hooks/useISVBucketDetection.js +27 -0
  183. package/dist/hooks/useIsBucketEmpty.d.ts +7 -0
  184. package/dist/hooks/useIsBucketEmpty.js +36 -0
  185. package/dist/hooks/useLoginMutation.d.ts +21 -0
  186. package/dist/hooks/useLoginMutation.js +9 -0
  187. package/dist/hooks/useS3Client.d.ts +1 -0
  188. package/dist/hooks/useS3Client.js +13 -0
  189. package/dist/hooks/useTableRowSelection.d.ts +9 -0
  190. package/dist/hooks/useTableRowSelection.js +45 -0
  191. package/dist/index.d.ts +6 -0
  192. package/dist/index.js +6 -0
  193. package/dist/schemas/bucketPolicySchema.json +321 -0
  194. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -0
  195. package/dist/test/msw/handlers/deleteBucket.js +14 -0
  196. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -0
  197. package/dist/test/msw/handlers/getBucketAcl.js +96 -0
  198. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -0
  199. package/dist/test/msw/handlers/getBucketLocation.js +23 -0
  200. package/dist/test/msw/handlers/getBucketPolicy.d.ts +11 -0
  201. package/dist/test/msw/handlers/getBucketPolicy.js +72 -0
  202. package/dist/test/msw/handlers/headObject.d.ts +1 -0
  203. package/dist/test/msw/handlers/headObject.js +17 -0
  204. package/dist/test/msw/handlers/listBuckets.d.ts +1 -0
  205. package/dist/test/msw/handlers/listBuckets.js +24 -0
  206. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -0
  207. package/dist/test/msw/handlers/listObjectVersions.js +83 -0
  208. package/dist/test/msw/handlers/listObjects.d.ts +1 -0
  209. package/dist/test/msw/handlers/listObjects.js +66 -0
  210. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -0
  211. package/dist/test/msw/handlers/objectLegalHold.js +24 -0
  212. package/dist/test/msw/handlers/objectRetention.d.ts +1 -0
  213. package/dist/test/msw/handlers/objectRetention.js +27 -0
  214. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -0
  215. package/dist/test/msw/handlers/putBucketAcl.js +18 -0
  216. package/dist/test/msw/handlers/putObject.d.ts +1 -0
  217. package/dist/test/msw/handlers/putObject.js +16 -0
  218. package/dist/test/msw/handlers.d.ts +4 -0
  219. package/dist/test/msw/handlers.js +109 -0
  220. package/dist/test/msw/index.d.ts +2 -0
  221. package/dist/test/msw/index.js +3 -0
  222. package/dist/test/msw/server.d.ts +4 -0
  223. package/dist/test/msw/server.js +20 -0
  224. package/dist/test/msw/utils.d.ts +2 -0
  225. package/dist/test/msw/utils.js +13 -0
  226. package/dist/test/setup.d.ts +1 -0
  227. package/dist/test/setup.js +90 -0
  228. package/dist/test/testUtils.d.ts +181 -0
  229. package/dist/test/testUtils.js +310 -0
  230. package/dist/test/utils/errorHandling.test.d.ts +1 -0
  231. package/dist/test/utils/errorHandling.test.js +423 -0
  232. package/dist/types/index.d.ts +51 -0
  233. package/dist/types/index.js +0 -0
  234. package/dist/utils/constants.d.ts +12 -0
  235. package/dist/utils/constants.js +9 -0
  236. package/dist/utils/deletion/index.d.ts +2 -0
  237. package/dist/utils/deletion/index.js +2 -0
  238. package/dist/utils/deletion/messages.d.ts +5 -0
  239. package/dist/utils/deletion/messages.js +29 -0
  240. package/dist/utils/deletion/types.d.ts +11 -0
  241. package/dist/utils/deletion/types.js +0 -0
  242. package/dist/utils/errorHandling.d.ts +63 -0
  243. package/dist/utils/errorHandling.js +84 -0
  244. package/dist/utils/hooks.d.ts +2 -0
  245. package/dist/utils/hooks.js +26 -0
  246. package/dist/utils/index.d.ts +4 -0
  247. package/dist/utils/index.js +4 -0
  248. package/dist/utils/proxyMiddleware.d.ts +18 -0
  249. package/dist/utils/proxyMiddleware.js +56 -0
  250. package/dist/utils/s3Client.d.ts +5 -0
  251. package/dist/utils/s3Client.js +36 -0
  252. package/dist/utils/s3RuleUtils.d.ts +53 -0
  253. package/dist/utils/s3RuleUtils.js +101 -0
  254. package/dist/utils/useFeatures.d.ts +1 -0
  255. package/dist/utils/useFeatures.js +7 -0
  256. package/package.json +84 -0
@@ -0,0 +1,453 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { ConstrainedText, FormattedDateTime, Icon, Link, PrettyBytes, Text, Toggle, Wrap, spacing } from "@scality/core-ui";
3
+ import { Box, Table } from "@scality/core-ui/dist/next";
4
+ import { useCallback, useEffect, useMemo, useState } from "react";
5
+ import { useSearchObjects, useSearchObjectsVersions } from "../../hooks/index.js";
6
+ import { useBatchObjectLegalHold } from "../../hooks/useBatchObjectLegalHold.js";
7
+ import { useQueryParams } from "../../utils/hooks.js";
8
+ import { useFeatures } from "../../utils/useFeatures.js";
9
+ import CreateFolderButton from "./CreateFolderButton.js";
10
+ import MetadataSearch from "../search/MetadataSearch.js";
11
+ import UploadButton from "./UploadButton.js";
12
+ import DeleteObjectButton from "./DeleteObjectButton.js";
13
+ const DEFAULT_PAGE_SIZE = 20;
14
+ const getVersionTextColor = (row)=>{
15
+ const isLatest = row.original.IsLatest;
16
+ const isVersion = "version" === row.original.type;
17
+ return !isLatest && isVersion ? "infoPrimary" : "textPrimary";
18
+ };
19
+ const ObjectList = ({ bucketName, prefix, onObjectSelect, onPrefixChange })=>{
20
+ const [showVersions, setShowVersions] = useState(false);
21
+ const isMetadataSearchEnabled = useFeatures("metadatasearch");
22
+ const metadataSearchQuery = useQueryParams().get("metadatasearch");
23
+ const [selectedObjects, setSelectedObjects] = useState([]);
24
+ const searchParams = useMemo(()=>{
25
+ const baseParams = {
26
+ Bucket: bucketName,
27
+ Prefix: prefix,
28
+ MaxKeys: DEFAULT_PAGE_SIZE,
29
+ Delimiter: "/"
30
+ };
31
+ if (isMetadataSearchEnabled && metadataSearchQuery) return {
32
+ ...baseParams,
33
+ Search: metadataSearchQuery
34
+ };
35
+ return baseParams;
36
+ }, [
37
+ bucketName,
38
+ prefix,
39
+ isMetadataSearchEnabled,
40
+ metadataSearchQuery
41
+ ]);
42
+ const listObjectsQuery = useSearchObjects(searchParams, {
43
+ enabled: !showVersions
44
+ });
45
+ const listVersionsQuery = useSearchObjectsVersions(searchParams, {
46
+ enabled: showVersions
47
+ });
48
+ const activeQuery = showVersions ? listVersionsQuery : listObjectsQuery;
49
+ useEffect(()=>{
50
+ setSelectedObjects([]);
51
+ }, [
52
+ prefix,
53
+ showVersions
54
+ ]);
55
+ const { data, error, hasNextPage, fetchNextPage, isFetchingNextPage, isLoading } = activeQuery;
56
+ const objectsForLegalHold = useMemo(()=>{
57
+ const objects = [];
58
+ if (showVersions && listVersionsQuery.data?.pages) listVersionsQuery.data.pages.forEach((page)=>{
59
+ if (page.Versions) page.Versions.forEach((version)=>{
60
+ if (version.Key) objects.push({
61
+ Key: version.Key,
62
+ VersionId: version.VersionId
63
+ });
64
+ });
65
+ });
66
+ else if (!showVersions && data?.pages) data.pages.forEach((page)=>{
67
+ if (page.Contents) page.Contents.forEach((obj)=>{
68
+ if (obj.Key) objects.push({
69
+ Key: obj.Key
70
+ });
71
+ });
72
+ });
73
+ return objects;
74
+ }, [
75
+ data,
76
+ showVersions,
77
+ listVersionsQuery.data
78
+ ]);
79
+ const { data: legalHoldData } = useBatchObjectLegalHold(bucketName, objectsForLegalHold, true);
80
+ const tableData = useMemo(()=>{
81
+ const folders = [];
82
+ const items = [];
83
+ if (showVersions) {
84
+ if (listObjectsQuery.data?.pages) listObjectsQuery.data.pages.forEach((page)=>{
85
+ if (page.CommonPrefixes) page.CommonPrefixes.forEach((cp)=>{
86
+ if (cp.Prefix) {
87
+ const folderName = cp.Prefix.replace(prefix, "").replace(/\/$/, "");
88
+ folders.push({
89
+ Key: cp.Prefix,
90
+ displayName: folderName + "/",
91
+ type: "folder",
92
+ LastModified: void 0,
93
+ Size: void 0
94
+ });
95
+ }
96
+ });
97
+ });
98
+ if (listVersionsQuery.data?.pages) {
99
+ const itemsByKey = {};
100
+ listVersionsQuery.data.pages.forEach((page)=>{
101
+ if (page.Versions) page.Versions.forEach((version)=>{
102
+ if (version.Key) {
103
+ if (!itemsByKey[version.Key]) itemsByKey[version.Key] = [];
104
+ itemsByKey[version.Key].push(version);
105
+ }
106
+ });
107
+ if (page.DeleteMarkers) page.DeleteMarkers.forEach((marker)=>{
108
+ if (marker.Key) {
109
+ if (!itemsByKey[marker.Key]) itemsByKey[marker.Key] = [];
110
+ itemsByKey[marker.Key].push({
111
+ ...marker,
112
+ isDeleteMarker: true
113
+ });
114
+ }
115
+ });
116
+ });
117
+ Object.keys(itemsByKey).sort().forEach((key)=>{
118
+ const allItems = itemsByKey[key];
119
+ allItems.sort((a, b)=>{
120
+ if (a.IsLatest) return -1;
121
+ if (b.IsLatest) return 1;
122
+ const aDate = a.LastModified ? new Date(a.LastModified).getTime() : 0;
123
+ const bDate = b.LastModified ? new Date(b.LastModified).getTime() : 0;
124
+ return bDate - aDate;
125
+ });
126
+ allItems.forEach((item)=>{
127
+ const baseName = item.Key.replace(prefix, "");
128
+ const isLatest = item.IsLatest;
129
+ const isDeleteMarker = "isDeleteMarker" in item && item.isDeleteMarker;
130
+ const legalHoldKey = `${item.Key}:${item.VersionId || "null"}`;
131
+ const isLegalHoldEnabled = legalHoldData?.[legalHoldKey]?.isLegalHoldEnabled || false;
132
+ if (isDeleteMarker) items.push({
133
+ ...item,
134
+ displayName: baseName,
135
+ type: "deleteMarker",
136
+ IsLatest: isLatest,
137
+ isDeleteMarker: true,
138
+ isLegalHoldEnabled
139
+ });
140
+ else items.push({
141
+ ...item,
142
+ displayName: baseName,
143
+ type: "version",
144
+ IsLatest: isLatest,
145
+ isLegalHoldEnabled
146
+ });
147
+ });
148
+ });
149
+ }
150
+ } else if (data?.pages) data.pages.forEach((page)=>{
151
+ if (page.CommonPrefixes) page.CommonPrefixes.forEach((cp)=>{
152
+ if (cp.Prefix) {
153
+ const folderName = cp.Prefix.replace(prefix, "").replace(/\/$/, "");
154
+ folders.push({
155
+ Key: cp.Prefix,
156
+ displayName: folderName + "/",
157
+ type: "folder",
158
+ LastModified: void 0,
159
+ Size: void 0
160
+ });
161
+ }
162
+ });
163
+ if (page.Contents) page.Contents.forEach((obj)=>{
164
+ if (obj.Key && !obj.Key.endsWith("/")) {
165
+ const legalHoldKey = `${obj.Key}:null`;
166
+ const isLegalHoldEnabled = legalHoldData?.[legalHoldKey]?.isLegalHoldEnabled || false;
167
+ items.push({
168
+ ...obj,
169
+ displayName: obj.Key.replace(prefix, ""),
170
+ type: "object",
171
+ isLegalHoldEnabled
172
+ });
173
+ }
174
+ });
175
+ });
176
+ const allItems = [
177
+ ...folders,
178
+ ...items
179
+ ];
180
+ return allItems;
181
+ }, [
182
+ data,
183
+ prefix,
184
+ showVersions,
185
+ listObjectsQuery.data,
186
+ listVersionsQuery.data,
187
+ legalHoldData
188
+ ]);
189
+ const columns = useMemo(()=>{
190
+ const cols = [
191
+ {
192
+ Header: "Name",
193
+ accessor: "displayName",
194
+ id: "name",
195
+ sortType: (rowA, rowB)=>{
196
+ const aIsFolder = "folder" === rowA.original.type;
197
+ const bIsFolder = "folder" === rowB.original.type;
198
+ if (aIsFolder && !bIsFolder) return -1;
199
+ if (!aIsFolder && bIsFolder) return 1;
200
+ const aName = String(rowA.values.displayName || "");
201
+ const bName = String(rowB.values.displayName || "");
202
+ return aName.localeCompare(bName);
203
+ },
204
+ Cell: ({ value, row })=>{
205
+ const displayValue = value;
206
+ const isFolder = "folder" === row.original.type;
207
+ const isVersion = "version" === row.original.type;
208
+ const isDeleteMarker = "deleteMarker" === row.original.type;
209
+ const isLatest = row.original.IsLatest;
210
+ let iconName;
211
+ iconName = isFolder ? "Folder" : isDeleteMarker ? "Deletion-marker" : "File";
212
+ const shouldIndent = isVersion && !isLatest;
213
+ const isLegalHoldEnabled = Boolean(row.original.isLegalHoldEnabled);
214
+ return /*#__PURE__*/ jsx(ConstrainedText, {
215
+ text: /*#__PURE__*/ jsxs("div", {
216
+ style: {
217
+ display: "flex",
218
+ alignItems: "center",
219
+ gap: spacing.r8,
220
+ paddingLeft: shouldIndent ? spacing.r24 : 0
221
+ },
222
+ children: [
223
+ /*#__PURE__*/ jsx(Icon, {
224
+ name: iconName,
225
+ size: "sm",
226
+ color: getVersionTextColor(row)
227
+ }),
228
+ isLegalHoldEnabled && /*#__PURE__*/ jsx(Icon, {
229
+ name: "Rebalance",
230
+ size: "sm",
231
+ color: getVersionTextColor(row)
232
+ }),
233
+ isDeleteMarker ? /*#__PURE__*/ jsx(Text, {
234
+ color: getVersionTextColor(row),
235
+ children: displayValue
236
+ }) : /*#__PURE__*/ jsx(Link, {
237
+ onClick: (e)=>{
238
+ e.stopPropagation();
239
+ if (isFolder) onPrefixChange?.(row.original.Key || "");
240
+ else onObjectSelect(row.original);
241
+ },
242
+ children: /*#__PURE__*/ jsx(Text, {
243
+ color: getVersionTextColor(row),
244
+ children: displayValue
245
+ })
246
+ })
247
+ ]
248
+ }),
249
+ lineClamp: 2
250
+ });
251
+ },
252
+ cellStyle: {
253
+ flex: "2",
254
+ width: "unset"
255
+ }
256
+ }
257
+ ];
258
+ if (showVersions) cols.push({
259
+ Header: "Version ID",
260
+ accessor: "VersionId",
261
+ id: "versionId",
262
+ Cell: ({ row })=>{
263
+ const isFolder = "folder" === row.original.type;
264
+ const isDeleteMarker = "deleteMarker" === row.original.type;
265
+ const isLatest = row.original.IsLatest;
266
+ if (isFolder || isDeleteMarker) return /*#__PURE__*/ jsx(Text, {
267
+ children: "-"
268
+ });
269
+ const versionId = "version" === row.original.type ? row.original.VersionId || "-" : "-";
270
+ const textColor = isLatest ? void 0 : "infoPrimary";
271
+ return /*#__PURE__*/ jsx(ConstrainedText, {
272
+ text: versionId,
273
+ lineClamp: 1,
274
+ color: textColor
275
+ });
276
+ },
277
+ cellStyle: {
278
+ flex: "1.5",
279
+ textAlign: "left",
280
+ paddingRight: spacing.r16,
281
+ width: "unset",
282
+ maxWidth: "8rem"
283
+ }
284
+ });
285
+ cols.push({
286
+ Header: "Modified on",
287
+ accessor: "LastModified",
288
+ id: "lastModified",
289
+ Cell: ({ value, row })=>{
290
+ if ("folder" === row.original.type || !value) return /*#__PURE__*/ jsx(Text, {
291
+ children: "-"
292
+ });
293
+ const dateValue = value;
294
+ return /*#__PURE__*/ jsx(Text, {
295
+ color: getVersionTextColor(row),
296
+ children: /*#__PURE__*/ jsx(FormattedDateTime, {
297
+ format: "date-time-second",
298
+ value: new Date(dateValue)
299
+ })
300
+ });
301
+ },
302
+ cellStyle: {
303
+ flex: "1",
304
+ textAlign: "right",
305
+ paddingRight: spacing.r16,
306
+ width: "unset",
307
+ minWidth: "10rem"
308
+ }
309
+ }, {
310
+ Header: "Size",
311
+ accessor: "Size",
312
+ id: "size",
313
+ Cell: ({ value, row })=>{
314
+ if ("folder" === row.original.type || null == value) return /*#__PURE__*/ jsx(Text, {
315
+ children: "-"
316
+ });
317
+ const sizeValue = value;
318
+ return /*#__PURE__*/ jsx(Wrap, {
319
+ style: {
320
+ justifyContent: "flex-end"
321
+ },
322
+ children: /*#__PURE__*/ jsx(Text, {
323
+ color: getVersionTextColor(row),
324
+ children: /*#__PURE__*/ jsx(PrettyBytes, {
325
+ bytes: sizeValue,
326
+ decimals: 2
327
+ })
328
+ })
329
+ });
330
+ },
331
+ cellStyle: {
332
+ flex: "1",
333
+ textAlign: "right",
334
+ paddingRight: spacing.r16,
335
+ width: "unset"
336
+ }
337
+ }, {
338
+ Header: "Storage Location",
339
+ accessor: "StorageClass",
340
+ id: "storageClass",
341
+ Cell: ({ value, row })=>{
342
+ if (!value) return /*#__PURE__*/ jsx(Text, {
343
+ children: "-"
344
+ });
345
+ const storageClass = value;
346
+ return /*#__PURE__*/ jsx(Wrap, {
347
+ style: {
348
+ justifyContent: "flex-end"
349
+ },
350
+ children: /*#__PURE__*/ jsx(Text, {
351
+ color: getVersionTextColor(row),
352
+ children: "STANDARD" === storageClass ? "default" : storageClass
353
+ })
354
+ });
355
+ },
356
+ cellStyle: {
357
+ flex: "1",
358
+ textAlign: "right",
359
+ paddingRight: spacing.r16,
360
+ width: "unset"
361
+ }
362
+ });
363
+ return cols;
364
+ }, [
365
+ onObjectSelect,
366
+ onPrefixChange,
367
+ showVersions
368
+ ]);
369
+ const handleReachBottom = useCallback(()=>{
370
+ if (hasNextPage && !isFetchingNextPage) fetchNextPage();
371
+ }, [
372
+ hasNextPage,
373
+ isFetchingNextPage,
374
+ fetchNextPage
375
+ ]);
376
+ const tableStatus = isLoading ? "loading" : error ? "error" : "success";
377
+ return /*#__PURE__*/ jsxs(Table, {
378
+ columns: columns,
379
+ data: tableData,
380
+ status: tableStatus,
381
+ onBottom: handleReachBottom,
382
+ entityName: {
383
+ en: {
384
+ singular: "object",
385
+ plural: "objects"
386
+ }
387
+ },
388
+ children: [
389
+ /*#__PURE__*/ jsxs(Wrap, {
390
+ padding: spacing.r16,
391
+ children: [
392
+ isMetadataSearchEnabled ? /*#__PURE__*/ jsx(MetadataSearch, {
393
+ isError: !!error
394
+ }) : /*#__PURE__*/ jsx(Table.SearchWithQueryParams, {
395
+ queryParams: "search"
396
+ }),
397
+ /*#__PURE__*/ jsxs(Box, {
398
+ display: "flex",
399
+ justifyContent: "space-between",
400
+ alignItems: "center",
401
+ gap: spacing.r8,
402
+ children: [
403
+ /*#__PURE__*/ jsxs(Box, {
404
+ display: "flex",
405
+ alignItems: "center",
406
+ gap: spacing.r8,
407
+ children: [
408
+ /*#__PURE__*/ jsx(UploadButton, {
409
+ bucket: bucketName,
410
+ prefix: prefix,
411
+ onUploadSuccess: ()=>{},
412
+ onUploadError: ()=>{}
413
+ }),
414
+ /*#__PURE__*/ jsx(CreateFolderButton, {
415
+ bucket: bucketName,
416
+ prefix: prefix,
417
+ onFolderSuccess: ()=>{},
418
+ onFolderError: ()=>{}
419
+ }),
420
+ /*#__PURE__*/ jsx(DeleteObjectButton, {
421
+ objects: selectedObjects,
422
+ bucketName: bucketName
423
+ })
424
+ ]
425
+ }),
426
+ /*#__PURE__*/ jsx(Toggle, {
427
+ toggle: showVersions,
428
+ onChange: (e)=>setShowVersions(e.target.checked),
429
+ label: "List Versions"
430
+ })
431
+ ]
432
+ })
433
+ ]
434
+ }),
435
+ /*#__PURE__*/ jsx(Table.MultiSelectableContent, {
436
+ rowHeight: "h40",
437
+ onMultiSelectionChanged: (rows)=>{
438
+ const objects = rows.map((row)=>row.original);
439
+ setSelectedObjects(objects);
440
+ },
441
+ onSingleRowSelected: (row)=>{
442
+ onObjectSelect(row.original);
443
+ },
444
+ onToggleAll: (selected)=>{
445
+ console.log("Toggle all", selected);
446
+ },
447
+ separationLineVariant: "backgroundLevel1",
448
+ isLoadingMoreItems: isFetchingNextPage
449
+ })
450
+ ]
451
+ });
452
+ };
453
+ export { ObjectList };
@@ -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 { useISVBucketStatus } from "../../../hooks/index.js";
3
+ import { Icon } from "@scality/core-ui";
4
+ import { Button } from "@scality/core-ui/dist/next";
5
+ import { useNavigate } from "react-router-dom";
6
+ const EditRetentionButton = ({ bucketName })=>{
7
+ const navigate = useNavigate();
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;