@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
@@ -1,3 +1,3 @@
1
- import { ObjectCommonProps } from ".";
2
- declare const ObjectTags: ({ bucketName, objectKey, versionId, }: ObjectCommonProps) => import("react/jsx-runtime").JSX.Element;
1
+ import type { ObjectCommonProps } from '.';
2
+ declare const ObjectTags: ({ bucketName, objectKey, versionId }: ObjectCommonProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export { ObjectTags };
@@ -1,9 +1,12 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from "react";
3
- import { Icon, Loader, Text, spacing } from "@scality/core-ui";
2
+ import { Icon, Loader, Text, spacing, useToast } from "@scality/core-ui";
3
+ import { convertSizeToRem } from "@scality/core-ui/dist/components/inputv2/inputv2";
4
4
  import { Box, Button, Input } from "@scality/core-ui/dist/next";
5
+ import { useEffect, useState } from "react";
5
6
  import { Controller, useFieldArray, useForm } from "react-hook-form";
6
7
  import { useDeleteObjectTagging, useObjectTagging, useSetObjectTagging } from "../../../hooks/index.js";
8
+ import { useInvalidateQueries } from "../../providers/DataBrowserProvider.js";
9
+ import { ArrayFieldActions } from "../../ui/ArrayFieldActions.js";
7
10
  const MAX_TAGS_PER_OBJECT = 10;
8
11
  const MAX_TAG_KEY_LENGTH = 128;
9
12
  const MAX_TAG_VALUE_LENGTH = 256;
@@ -18,21 +21,21 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
18
21
  });
19
22
  const setTaggingMutation = useSetObjectTagging();
20
23
  const deleteTaggingMutation = useDeleteObjectTagging();
24
+ const { showToast } = useToast();
25
+ const invalidateQueries = useInvalidateQueries();
21
26
  const [isInitialized, setIsInitialized] = useState(false);
22
- const [lastUsedMutation, setLastUsedMutation] = useState(null);
23
- const { control, handleSubmit, setValue, formState: { errors, isValid, isSubmitting } } = useForm({
24
- mode: "onChange",
27
+ const { control, handleSubmit, setValue, watch, formState: { errors, isValid, isSubmitting } } = useForm({
28
+ mode: 'onChange',
25
29
  defaultValues: {
26
30
  tags: []
27
31
  }
28
32
  });
29
33
  const { fields, append, remove } = useFieldArray({
30
34
  control,
31
- name: "tags"
35
+ name: 'tags'
32
36
  });
33
37
  useEffect(()=>{
34
38
  setIsInitialized(false);
35
- setLastUsedMutation(null);
36
39
  setTaggingMutation.reset();
37
40
  deleteTaggingMutation.reset();
38
41
  }, [
@@ -41,13 +44,17 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
41
44
  versionId
42
45
  ]);
43
46
  useEffect(()=>{
44
- if (tagsData && "success" === tagsStatus && !isInitialized) {
47
+ if (tagsData && 'success' === tagsStatus && !isInitialized) {
45
48
  const tags = tagsData.TagSet || [];
46
49
  const rows = tags.map((tag)=>({
47
- key: tag.Key || "",
48
- value: tag.Value || ""
50
+ key: tag.Key || '',
51
+ value: tag.Value || ''
49
52
  }));
50
- setValue("tags", rows);
53
+ if (0 === rows.length) rows.push({
54
+ key: '',
55
+ value: ''
56
+ });
57
+ setValue('tags', rows);
51
58
  setIsInitialized(true);
52
59
  }
53
60
  }, [
@@ -58,38 +65,54 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
58
65
  ]);
59
66
  const onSubmit = async (data)=>{
60
67
  try {
61
- if (0 === data.tags.length) {
62
- setLastUsedMutation("delete");
63
- await deleteTaggingMutation.mutateAsync({
64
- Bucket: bucketName,
65
- Key: objectKey,
66
- ...getVersionParams()
67
- });
68
- } else {
69
- setLastUsedMutation("set");
70
- await setTaggingMutation.mutateAsync({
71
- Bucket: bucketName,
72
- Key: objectKey,
73
- ...getVersionParams(),
74
- Tagging: {
75
- TagSet: data.tags.map((row)=>({
76
- Key: row.key.trim(),
77
- Value: row.value.trim()
78
- }))
68
+ const validTags = data.tags.filter((tag)=>tag.key.trim() && tag.value.trim());
69
+ if (0 === validTags.length) await deleteTaggingMutation.mutateAsync({
70
+ Bucket: bucketName,
71
+ Key: objectKey,
72
+ ...getVersionParams()
73
+ });
74
+ else await setTaggingMutation.mutateAsync({
75
+ Bucket: bucketName,
76
+ Key: objectKey,
77
+ ...getVersionParams(),
78
+ Tagging: {
79
+ TagSet: validTags.map((row)=>({
80
+ Key: row.key.trim(),
81
+ Value: row.value.trim()
82
+ }))
83
+ }
84
+ });
85
+ await invalidateQueries({
86
+ queryKey: [
87
+ 'GetObjectTagging',
88
+ {
89
+ Bucket: bucketName,
90
+ Key: objectKey,
91
+ ...getVersionParams()
79
92
  }
80
- });
81
- }
93
+ ]
94
+ });
95
+ showToast({
96
+ open: true,
97
+ message: 'Tags saved successfully',
98
+ status: 'success'
99
+ });
82
100
  } catch (error) {
83
- console.error("Failed to save tags:", error);
101
+ const errorMessage = error instanceof Error ? error.message : 'Failed to save tags';
102
+ showToast({
103
+ open: true,
104
+ message: errorMessage,
105
+ status: 'error'
106
+ });
84
107
  }
85
108
  };
86
- if ("pending" === tagsStatus) return /*#__PURE__*/ jsx(Box, {
109
+ if ('pending' === tagsStatus) return /*#__PURE__*/ jsx(Box, {
87
110
  display: "flex",
88
111
  justifyContent: "center",
89
112
  padding: spacing.r32,
90
113
  children: /*#__PURE__*/ jsx(Loader, {})
91
114
  });
92
- if ("error" === tagsStatus) return /*#__PURE__*/ jsx(Box, {
115
+ if ('error' === tagsStatus) return /*#__PURE__*/ jsx(Box, {
93
116
  padding: spacing.r16,
94
117
  children: /*#__PURE__*/ jsx(Text, {
95
118
  color: "statusCritical",
@@ -112,37 +135,14 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
112
135
  isEmphazed: true,
113
136
  children: "Edit Tags"
114
137
  }),
115
- /*#__PURE__*/ jsxs(Box, {
116
- display: "flex",
117
- alignItems: "center",
118
- gap: spacing.r8,
119
- children: [
120
- "set" === lastUsedMutation && setTaggingMutation.isSuccess && /*#__PURE__*/ jsx(Text, {
121
- color: "statusHealthy",
122
- children: "Saved successfully"
123
- }),
124
- "delete" === lastUsedMutation && deleteTaggingMutation.isSuccess && /*#__PURE__*/ jsx(Text, {
125
- color: "statusHealthy",
126
- children: "Saved successfully"
127
- }),
128
- "set" === lastUsedMutation && setTaggingMutation.isError && /*#__PURE__*/ jsx(Text, {
129
- color: "statusCritical",
130
- children: setTaggingMutation.error?.message || "Failed to save"
131
- }),
132
- "delete" === lastUsedMutation && deleteTaggingMutation.isError && /*#__PURE__*/ jsx(Text, {
133
- color: "statusCritical",
134
- children: deleteTaggingMutation.error?.message || "Failed to save"
135
- }),
136
- /*#__PURE__*/ jsx(Button, {
137
- variant: "primary",
138
- label: "Save",
139
- disabled: !isValid || isSubmitting,
140
- type: "submit",
141
- icon: /*#__PURE__*/ jsx(Icon, {
142
- name: "Save"
143
- })
144
- })
145
- ]
138
+ /*#__PURE__*/ jsx(Button, {
139
+ variant: "primary",
140
+ label: "Save",
141
+ disabled: !isValid || isSubmitting,
142
+ type: "submit",
143
+ icon: /*#__PURE__*/ jsx(Icon, {
144
+ name: "Save"
145
+ })
146
146
  })
147
147
  ]
148
148
  }),
@@ -152,8 +152,9 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
152
152
  flexDirection: "column",
153
153
  gap: spacing.r12,
154
154
  children: [
155
- fields.length > 0 && /*#__PURE__*/ jsxs(Box, {
155
+ /*#__PURE__*/ jsxs(Box, {
156
156
  display: "flex",
157
+ gap: spacing.r8,
157
158
  children: [
158
159
  /*#__PURE__*/ jsx(Box, {
159
160
  flex: "1",
@@ -170,16 +171,12 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
170
171
  isEmphazed: true,
171
172
  children: "Value"
172
173
  })
174
+ }),
175
+ /*#__PURE__*/ jsx(Box, {
176
+ width: convertSizeToRem('1/3')
173
177
  })
174
178
  ]
175
179
  }),
176
- 0 === fields.length && "success" === tagsStatus && /*#__PURE__*/ jsx(Box, {
177
- padding: spacing.r16,
178
- children: /*#__PURE__*/ jsx(Text, {
179
- color: "textSecondary",
180
- children: "No tags configured. Add tags to categorize this object."
181
- })
182
- }),
183
180
  fields.map((field, index)=>/*#__PURE__*/ jsxs(Box, {
184
181
  children: [
185
182
  /*#__PURE__*/ jsxs(Box, {
@@ -191,13 +188,10 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
191
188
  control: control,
192
189
  name: `tags.${index}.key`,
193
190
  rules: {
194
- required: "Key is required",
195
- maxLength: {
196
- value: MAX_TAG_KEY_LENGTH,
197
- message: `Key must be ${MAX_TAG_KEY_LENGTH} characters or less`
198
- },
199
191
  validate: (value, formValues)=>{
200
- if (!value.trim()) return "Key cannot be empty or whitespace only";
192
+ if (1 === formValues.tags.length && !value.trim() && !formValues.tags[0].value.trim()) return true;
193
+ if (!value.trim()) return 'Key cannot be empty or whitespace only';
194
+ if (value.length > MAX_TAG_KEY_LENGTH) return `Key must be ${MAX_TAG_KEY_LENGTH} characters or less`;
201
195
  const keys = formValues.tags.map((t)=>t.key.trim());
202
196
  const duplicates = keys.filter((k)=>k === value.trim());
203
197
  return duplicates.length > 1 ? `Duplicate key "${value.trim()}"` : true;
@@ -219,13 +213,10 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
219
213
  control: control,
220
214
  name: `tags.${index}.value`,
221
215
  rules: {
222
- required: "Value is required",
223
- maxLength: {
224
- value: MAX_TAG_VALUE_LENGTH,
225
- message: `Value must be ${MAX_TAG_VALUE_LENGTH} characters or less`
226
- },
227
- validate: (value)=>{
228
- if (!value.trim()) return "Value cannot be empty or whitespace only";
216
+ validate: (value, formValues)=>{
217
+ if (1 === formValues.tags.length && !value.trim() && !formValues.tags[0].key.trim()) return true;
218
+ if (!value.trim()) return 'Value cannot be empty or whitespace only';
219
+ if (value.length > MAX_TAG_VALUE_LENGTH) return `Value must be ${MAX_TAG_VALUE_LENGTH} characters or less`;
229
220
  return true;
230
221
  }
231
222
  },
@@ -237,14 +228,23 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
237
228
  "aria-label": `Tag ${index + 1} value`
238
229
  })
239
230
  }),
240
- /*#__PURE__*/ jsx(Button, {
241
- variant: "secondary",
242
- icon: /*#__PURE__*/ jsx(Icon, {
243
- name: "Delete"
244
- }),
245
- onClick: ()=>remove(index),
246
- "aria-label": "Delete row",
247
- type: "button"
231
+ /*#__PURE__*/ jsx(ArrayFieldActions, {
232
+ showAdd: index === fields.length - 1,
233
+ onRemove: ()=>{
234
+ remove(index);
235
+ if (1 === fields.length) append({
236
+ key: '',
237
+ value: ''
238
+ });
239
+ },
240
+ onAdd: ()=>append({
241
+ key: '',
242
+ value: ''
243
+ }),
244
+ canRemove: true,
245
+ canAdd: fields.length < MAX_TAGS_PER_OBJECT && !!watch(`tags.${index}.key`) && !!watch(`tags.${index}.value`),
246
+ removeLabel: "Remove tag",
247
+ addLabel: "Add tag"
248
248
  })
249
249
  ]
250
250
  }),
@@ -262,35 +262,7 @@ const ObjectTags = ({ bucketName, objectKey, versionId })=>{
262
262
  ]
263
263
  })
264
264
  ]
265
- }, field.id)),
266
- /*#__PURE__*/ jsxs(Box, {
267
- children: [
268
- /*#__PURE__*/ jsx(Button, {
269
- variant: "secondary",
270
- icon: /*#__PURE__*/ jsx(Icon, {
271
- name: "Create-add"
272
- }),
273
- label: "Add Tag",
274
- onClick: ()=>append({
275
- key: "",
276
- value: ""
277
- }),
278
- type: "button",
279
- disabled: fields.length >= MAX_TAGS_PER_OBJECT
280
- }),
281
- fields.length >= MAX_TAGS_PER_OBJECT && /*#__PURE__*/ jsx(Box, {
282
- paddingTop: spacing.r8,
283
- children: /*#__PURE__*/ jsxs(Text, {
284
- color: "statusWarning",
285
- children: [
286
- "Maximum ",
287
- MAX_TAGS_PER_OBJECT,
288
- " tags allowed per object"
289
- ]
290
- })
291
- })
292
- ]
293
- })
265
+ }, field.id))
294
266
  ]
295
267
  })
296
268
  ]