@scality/data-browser-library 1.0.0-preview.9 → 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 (285) 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.js +271 -105
  9. package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
  10. package/dist/components/__tests__/BucketDetails.test.js +421 -0
  11. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +13 -0
  12. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +178 -178
  13. package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
  14. package/dist/components/__tests__/BucketList.test.js +463 -239
  15. package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
  16. package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
  17. package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
  19. package/dist/components/__tests__/BucketOverview.test.js +281 -266
  20. package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
  21. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +15 -0
  22. package/dist/components/__tests__/BucketReplicationFormPage.test.js +544 -544
  23. package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
  24. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  25. package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
  26. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
  27. package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
  28. package/dist/components/__tests__/EmptyBucketButton.test.js +59 -59
  29. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  30. package/dist/components/__tests__/ObjectList.test.js +741 -240
  31. package/dist/components/__tests__/UploadButton.test.js +45 -45
  32. package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
  33. package/dist/components/breadcrumb/Breadcrumb.js +37 -0
  34. package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
  35. package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
  36. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
  37. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
  38. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
  39. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
  40. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
  41. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
  42. package/dist/components/breadcrumb/index.d.ts +8 -0
  43. package/dist/components/breadcrumb/index.js +4 -0
  44. package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
  45. package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
  46. package/dist/components/buckets/BucketAccessor.d.ts +2 -0
  47. package/dist/components/buckets/BucketAccessor.js +125 -0
  48. package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
  49. package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
  50. package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
  51. package/dist/components/buckets/BucketCorsPage.js +234 -0
  52. package/dist/components/buckets/BucketCreate.d.ts +3 -2
  53. package/dist/components/buckets/BucketCreate.js +89 -47
  54. package/dist/components/buckets/BucketDetails.d.ts +42 -0
  55. package/dist/components/buckets/BucketDetails.js +249 -85
  56. package/dist/components/buckets/BucketLifecycleFormPage.js +206 -190
  57. package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
  58. package/dist/components/buckets/BucketLifecycleList.js +47 -47
  59. package/dist/components/buckets/BucketList.d.ts +7 -8
  60. package/dist/components/buckets/BucketList.js +158 -101
  61. package/dist/components/buckets/BucketLocation.js +4 -4
  62. package/dist/components/buckets/BucketOverview.d.ts +22 -2
  63. package/dist/components/buckets/BucketOverview.js +394 -187
  64. package/dist/components/buckets/BucketPage.js +43 -21
  65. package/dist/components/buckets/BucketPolicyPage.js +155 -127
  66. package/dist/components/buckets/BucketReplicationFormPage.js +134 -133
  67. package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
  68. package/dist/components/buckets/BucketReplicationList.js +42 -42
  69. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  70. package/dist/components/buckets/BucketVersioning.js +76 -0
  71. package/dist/components/buckets/DeleteBucketButton.js +8 -8
  72. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
  73. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +2 -2
  74. package/dist/components/buckets/EmptyBucketButton.js +24 -24
  75. package/dist/components/buckets/EmptyBucketSummary.d.ts +2 -2
  76. package/dist/components/buckets/EmptyBucketSummary.js +1 -1
  77. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +1 -1
  78. package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
  79. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  80. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  81. package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
  82. package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
  83. package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
  84. package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
  85. package/dist/components/buckets/notifications/EventsSection.js +145 -29
  86. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  87. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  88. package/dist/components/buckets/notifications/events.d.ts +71 -7
  89. package/dist/components/buckets/notifications/events.js +98 -16
  90. package/dist/components/index.d.ts +27 -20
  91. package/dist/components/index.js +17 -10
  92. package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
  93. package/dist/components/layouts/ArrowNavigation.js +28 -0
  94. package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
  95. package/dist/components/layouts/BrowserPageLayout.js +10 -5
  96. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  97. package/dist/components/objects/CreateFolderButton.js +12 -12
  98. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  99. package/dist/components/objects/DeleteObjectButton.js +19 -21
  100. package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
  101. package/dist/components/objects/GetPresignedUrlButton.js +255 -0
  102. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
  103. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
  104. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
  105. package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
  106. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
  107. package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
  108. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
  109. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
  110. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
  111. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
  112. package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
  113. package/dist/components/objects/ObjectDetails/index.js +152 -40
  114. package/dist/components/objects/ObjectList.d.ts +12 -10
  115. package/dist/components/objects/ObjectList.js +590 -263
  116. package/dist/components/objects/ObjectLock/EditRetentionButton.js +4 -4
  117. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +15 -15
  118. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
  119. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +32 -31
  120. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
  121. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
  122. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +51 -51
  123. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +78 -78
  124. package/dist/components/objects/ObjectPage.js +12 -8
  125. package/dist/components/objects/UploadButton.d.ts +3 -3
  126. package/dist/components/objects/UploadButton.js +10 -10
  127. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
  128. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
  129. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  130. package/dist/components/providers/DataBrowserProvider.js +60 -38
  131. package/dist/components/providers/QueryProvider.d.ts +9 -0
  132. package/dist/components/providers/QueryProvider.js +21 -0
  133. package/dist/components/search/MetadataSearch.js +29 -28
  134. package/dist/components/search/SearchHints.js +1 -1
  135. package/dist/components/ui/ArrayFieldActions.js +12 -7
  136. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +2 -2
  137. package/dist/components/ui/ConfirmDeleteRuleModal.js +6 -1
  138. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  139. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  140. package/dist/components/ui/FilterFormSection.d.ts +2 -2
  141. package/dist/components/ui/FilterFormSection.js +29 -29
  142. package/dist/components/ui/Search.elements.d.ts +2 -2
  143. package/dist/components/ui/Search.elements.js +7 -7
  144. package/dist/components/ui/Table.elements.d.ts +2 -1
  145. package/dist/components/ui/Table.elements.js +18 -12
  146. package/dist/config/__tests__/factory.test.d.ts +1 -0
  147. package/dist/config/__tests__/factory.test.js +311 -0
  148. package/dist/config/factory.d.ts +10 -56
  149. package/dist/config/factory.js +23 -71
  150. package/dist/config/types.d.ts +212 -34
  151. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
  152. package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
  153. package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
  154. package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
  155. package/dist/hooks/__tests__/useISVBucketDetection.test.js +45 -45
  156. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
  157. package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
  158. package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
  159. package/dist/hooks/bucketConfiguration.d.ts +8 -1
  160. package/dist/hooks/bucketConfiguration.js +52 -51
  161. package/dist/hooks/bucketOperations.d.ts +10 -1
  162. package/dist/hooks/bucketOperations.js +10 -9
  163. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
  164. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
  165. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
  166. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
  167. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +65 -65
  168. package/dist/hooks/factories/index.d.ts +4 -4
  169. package/dist/hooks/factories/index.js +2 -2
  170. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  171. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
  172. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  173. package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
  174. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  175. package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
  176. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  177. package/dist/hooks/factories/useCreateS3QueryHook.js +11 -6
  178. package/dist/hooks/index.d.ts +19 -12
  179. package/dist/hooks/index.js +16 -9
  180. package/dist/hooks/loginOperations.d.ts +1 -1
  181. package/dist/hooks/loginOperations.js +1 -1
  182. package/dist/hooks/objectOperations.d.ts +2 -2
  183. package/dist/hooks/objectOperations.js +50 -49
  184. package/dist/hooks/presignedOperations.d.ts +4 -4
  185. package/dist/hooks/presignedOperations.js +5 -5
  186. package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
  187. package/dist/hooks/useAccessibleBuckets.js +115 -0
  188. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  189. package/dist/hooks/useBatchObjectLegalHold.js +48 -0
  190. package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
  191. package/dist/hooks/useBucketConfigEditor.js +82 -0
  192. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  193. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  194. package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
  195. package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
  196. package/dist/hooks/useEmptyBucket.js +11 -11
  197. package/dist/hooks/useFeatures.d.ts +7 -0
  198. package/dist/hooks/useFeatures.js +8 -0
  199. package/dist/hooks/useISVBucketDetection.js +6 -6
  200. package/dist/hooks/useIsBucketEmpty.js +4 -4
  201. package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
  202. package/dist/hooks/useLimitedAccessFlow.js +23 -0
  203. package/dist/hooks/useS3Client.d.ts +6 -0
  204. package/dist/hooks/useS3Client.js +3 -2
  205. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  206. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  207. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  208. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  209. package/dist/index.d.ts +6 -6
  210. package/dist/index.js +2 -2
  211. package/dist/schemas/bucketPolicySchema.json +3 -13
  212. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  213. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  214. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  215. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  216. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  217. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  218. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  219. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  220. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  221. package/dist/test/msw/handlers/headObject.js +31 -13
  222. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  223. package/dist/test/msw/handlers/listBuckets.js +5 -3
  224. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  225. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  226. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  227. package/dist/test/msw/handlers/listObjects.js +35 -23
  228. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  229. package/dist/test/msw/handlers/objectLegalHold.js +32 -17
  230. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  231. package/dist/test/msw/handlers/objectRetention.js +31 -17
  232. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  233. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  234. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  235. package/dist/test/msw/handlers/putObject.js +27 -12
  236. package/dist/test/msw/handlers.d.ts +3 -3
  237. package/dist/test/msw/handlers.js +77 -54
  238. package/dist/test/msw/index.d.ts +2 -2
  239. package/dist/test/msw/index.js +1 -1
  240. package/dist/test/msw/server.d.ts +1 -1
  241. package/dist/test/msw/server.js +1 -1
  242. package/dist/test/msw/utils.js +2 -2
  243. package/dist/test/setup.d.ts +1 -1
  244. package/dist/test/setup.js +13 -30
  245. package/dist/test/testUtils.d.ts +85 -33
  246. package/dist/test/testUtils.js +176 -111
  247. package/dist/test/utils/errorHandling.test.js +119 -119
  248. package/dist/types/index.d.ts +49 -36
  249. package/dist/types/monaco.d.ts +13 -0
  250. package/dist/types/monaco.js +0 -0
  251. package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
  252. package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
  253. package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
  254. package/dist/utils/__tests__/s3Client.test.js +340 -0
  255. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  256. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
  257. package/dist/utils/constants.d.ts +10 -0
  258. package/dist/utils/constants.js +19 -9
  259. package/dist/utils/deletion/index.d.ts +2 -2
  260. package/dist/utils/deletion/index.js +1 -1
  261. package/dist/utils/deletion/messages.d.ts +1 -1
  262. package/dist/utils/deletion/messages.js +4 -4
  263. package/dist/utils/errorHandling.d.ts +3 -3
  264. package/dist/utils/errorHandling.js +6 -6
  265. package/dist/utils/hooks.js +8 -8
  266. package/dist/utils/index.d.ts +5 -4
  267. package/dist/utils/index.js +4 -2
  268. package/dist/utils/proxyMiddleware.d.ts +32 -13
  269. package/dist/utils/proxyMiddleware.js +90 -36
  270. package/dist/utils/s3Client.d.ts +14 -4
  271. package/dist/utils/s3Client.js +5 -26
  272. package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
  273. package/dist/utils/s3ConfigIdentifier.js +57 -0
  274. package/dist/utils/s3RuleUtils.d.ts +5 -5
  275. package/dist/utils/s3RuleUtils.js +17 -17
  276. package/package.json +10 -8
  277. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
  278. package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
  279. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
  280. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
  281. package/dist/hooks/useLoginMutation.d.ts +0 -21
  282. package/dist/hooks/useLoginMutation.js +0 -9
  283. package/dist/utils/useFeatures.d.ts +0 -1
  284. package/dist/utils/useFeatures.js +0 -7
  285. /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
@@ -0,0 +1,9 @@
1
+ import { QueryClient } from '@tanstack/react-query';
2
+ import type React from 'react';
3
+ export interface QueryProviderProps {
4
+ children: React.ReactNode;
5
+ queryClient?: QueryClient;
6
+ enableDevtools?: boolean;
7
+ }
8
+ export declare const defaultQueryClient: QueryClient;
9
+ export declare const QueryProvider: React.FC<QueryProviderProps>;
@@ -0,0 +1,21 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3
+ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
4
+ const defaultQueryClient = new QueryClient({
5
+ defaultOptions: {
6
+ queries: {
7
+ staleTime: 300000,
8
+ retry: 2
9
+ }
10
+ }
11
+ });
12
+ const QueryProvider = ({ children, queryClient = defaultQueryClient, enableDevtools = 'development' === process.env.NODE_ENV })=>/*#__PURE__*/ jsxs(QueryClientProvider, {
13
+ client: queryClient,
14
+ children: [
15
+ children,
16
+ enableDevtools && /*#__PURE__*/ jsx(ReactQueryDevtools, {
17
+ initialIsOpen: false
18
+ })
19
+ ]
20
+ });
21
+ export { QueryProvider, defaultQueryClient };
@@ -1,51 +1,52 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { usePrefixWithSlash, useQueryParams } from "../../utils/hooks.js";
2
+ import { Icon } from "@scality/core-ui";
3
+ import { Box, Button, Input } from "@scality/core-ui/dist/next";
3
4
  import { useCallback, useEffect, useRef, useState } from "react";
4
- import { useLocation, useNavigate } from "react-router-dom";
5
+ import { useLocation } from "react-router";
6
+ import { useDataBrowserNavigate } from "../../hooks/useDataBrowserNavigate.js";
7
+ import { usePrefixWithSlash, useQueryParams } from "../../utils/hooks.js";
5
8
  import { SearchContainer, SearchInputContainer, searchIcon } from "../ui/Search.elements.js";
6
- import { Box, Button, Input } from "@scality/core-ui/dist/next";
7
- import { Icon } from "@scality/core-ui";
8
9
  import { SearchHints } from "./SearchHints.js";
9
10
  const METADATA_SEARCH_HINT_ITEMS = [
10
11
  {
11
12
  label: 'files with extension ".pdf"',
12
- query: "key like /pdf$/"
13
+ query: 'key like /pdf$/'
13
14
  },
14
15
  {
15
- label: "files bigger than 1MB",
16
- query: "content-length > 1000000"
16
+ label: 'files bigger than 1MB',
17
+ query: 'content-length > 1000000'
17
18
  },
18
19
  {
19
- label: "file names that contain scality (case insensitive)",
20
- query: "key like /scality/i"
20
+ label: 'file names that contain scality (case insensitive)',
21
+ query: 'key like /scality/i'
21
22
  },
22
23
  {
23
- label: "files with metadata field color set to green",
24
+ label: 'files with metadata field color set to green',
24
25
  query: 'x-amz-meta-color="green"'
25
26
  },
26
27
  {
27
- label: "files tagged with color blue",
28
- query: "tags.color=blue"
28
+ label: 'files tagged with color blue',
29
+ query: 'tags.color=blue'
29
30
  },
30
31
  {
31
- label: "PDF files (from content-type)",
32
- query: "content-type=application/pdf"
32
+ label: 'PDF files (from content-type)',
33
+ query: 'content-type=application/pdf'
33
34
  },
34
35
  {
35
- label: "file names that contain the word Report (case sensitive)",
36
- query: "key like Report"
36
+ label: 'file names that contain the word Report (case sensitive)',
37
+ query: 'key like Report'
37
38
  },
38
39
  {
39
- label: "files waiting to be replicated",
40
+ label: 'files waiting to be replicated',
40
41
  query: 'replication-status="PENDING"'
41
42
  }
42
43
  ];
43
44
  const MetadataSearch = ({ isError })=>{
44
- const navigate = useNavigate();
45
+ const navigate = useDataBrowserNavigate();
45
46
  const location = useLocation();
46
47
  const query = useQueryParams();
47
- const searchInput = query.get("metadatasearch");
48
- const [inputText, setInputText] = useState(searchInput || "");
48
+ const searchInput = query.get('metadatasearch');
49
+ const [inputText, setInputText] = useState(searchInput || '');
49
50
  const [hintsShown, setHintsShown] = useState(false);
50
51
  const prefixWithSlash = usePrefixWithSlash();
51
52
  const inputRef = useRef(null);
@@ -54,8 +55,8 @@ const MetadataSearch = ({ isError })=>{
54
55
  e.preventDefault();
55
56
  if (!inputText || prefixWithSlash) return;
56
57
  const newQuery = new URLSearchParams(location.search);
57
- newQuery.set("metadatasearch", inputText);
58
- navigate(`${location.pathname}?${newQuery.toString()}`);
58
+ newQuery.set('metadatasearch', inputText);
59
+ navigate(`?${newQuery.toString()}`);
59
60
  }, [
60
61
  inputText,
61
62
  prefixWithSlash,
@@ -80,19 +81,19 @@ const MetadataSearch = ({ isError })=>{
80
81
  const handleClickOutside = (event)=>{
81
82
  if (hintsShown && inputRef.current && hintsRef.current && !inputRef.current.contains(event.target) && !hintsRef.current.contains(event.target)) setHintsShown(false);
82
83
  };
83
- document.addEventListener("mousedown", handleClickOutside);
84
+ document.addEventListener('mousedown', handleClickOutside);
84
85
  return ()=>{
85
- document.removeEventListener("mousedown", handleClickOutside);
86
+ document.removeEventListener('mousedown', handleClickOutside);
86
87
  };
87
88
  }, [
88
89
  hintsShown
89
90
  ]);
90
91
  const reset = useCallback(()=>{
91
92
  setHintsShown(false);
92
- setInputText("");
93
+ setInputText('');
93
94
  const newQuery = new URLSearchParams(location.search);
94
- newQuery.delete("metadatasearch");
95
- navigate(`${location.pathname}?${newQuery.toString()}`);
95
+ newQuery.delete('metadatasearch');
96
+ navigate(`?${newQuery.toString()}`);
96
97
  }, [
97
98
  location,
98
99
  navigate
@@ -135,7 +136,7 @@ const MetadataSearch = ({ isError })=>{
135
136
  name: "Close"
136
137
  }),
137
138
  tooltip: {
138
- overlay: "Reset search"
139
+ overlay: 'Reset search'
139
140
  },
140
141
  onClick: reset,
141
142
  "aria-label": "Clear search input"
@@ -17,5 +17,5 @@ const SearchHints = /*#__PURE__*/ forwardRef(({ hints, onHintClick }, ref)=>/*#_
17
17
  }, index))
18
18
  ]
19
19
  }));
20
- SearchHints.displayName = "SearchHints";
20
+ SearchHints.displayName = 'SearchHints';
21
21
  export { SearchHints };
@@ -1,8 +1,13 @@
1
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import { Button } from "@scality/core-ui/dist/next";
3
- import { Icon } from "@scality/core-ui";
4
- function ArrayFieldActions({ onRemove, onAdd, canRemove, canAdd = true, showAdd, removeLabel = "Remove", addLabel = "Add" }) {
5
- return /*#__PURE__*/ jsxs(Fragment, {
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Icon, spacing } from "@scality/core-ui";
3
+ import { convertSizeToRem } from "@scality/core-ui/dist/components/inputv2/inputv2";
4
+ import { Box, Button } from "@scality/core-ui/dist/next";
5
+ function ArrayFieldActions({ onRemove, onAdd, canRemove, canAdd = true, showAdd, removeLabel = 'Remove', addLabel = 'Add' }) {
6
+ return /*#__PURE__*/ jsxs(Box, {
7
+ display: "flex",
8
+ width: convertSizeToRem('1/2'),
9
+ gap: spacing.r8,
10
+ justifyContent: "flex-start",
6
11
  children: [
7
12
  /*#__PURE__*/ jsx(Button, {
8
13
  icon: /*#__PURE__*/ jsx(Icon, {
@@ -15,7 +20,7 @@ function ArrayFieldActions({ onRemove, onAdd, canRemove, canAdd = true, showAdd,
15
20
  disabled: !canRemove,
16
21
  tooltip: {
17
22
  overlay: removeLabel,
18
- placement: "top"
23
+ placement: 'top'
19
24
  }
20
25
  }),
21
26
  showAdd && /*#__PURE__*/ jsx(Button, {
@@ -28,7 +33,7 @@ function ArrayFieldActions({ onRemove, onAdd, canRemove, canAdd = true, showAdd,
28
33
  "aria-label": addLabel,
29
34
  tooltip: {
30
35
  overlay: addLabel,
31
- placement: "top"
36
+ placement: 'top'
32
37
  },
33
38
  disabled: !canAdd
34
39
  })
@@ -3,8 +3,8 @@ interface ConfirmDeleteRuleModalProps {
3
3
  isOpen: boolean;
4
4
  /** Rule ID to display in confirmation message */
5
5
  ruleId: string;
6
- /** Type of rule (e.g., "lifecycle", "replication") */
7
- ruleType: "lifecycle" | "replication";
6
+ /** Type of rule (e.g., "lifecycle", "replication", "notification") */
7
+ ruleType: 'lifecycle' | 'replication' | 'notification';
8
8
  /** Whether deletion is in progress */
9
9
  isDeleting: boolean;
10
10
  /** Callback when user confirms deletion */
@@ -2,7 +2,12 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Loader, Modal, Stack, Wrap } from "@scality/core-ui";
3
3
  import { Button } from "@scality/core-ui/dist/next";
4
4
  function ConfirmDeleteRuleModal({ isOpen, ruleId, ruleType, isDeleting, onConfirm, onCancel }) {
5
- const ruleTypeLabel = "lifecycle" === ruleType ? "Lifecycle" : "Replication";
5
+ const ruleTypeLabels = {
6
+ lifecycle: 'Lifecycle',
7
+ replication: 'Replication',
8
+ notification: 'Notification'
9
+ };
10
+ const ruleTypeLabel = ruleTypeLabels[ruleType];
6
11
  return /*#__PURE__*/ jsxs(Modal, {
7
12
  close: onCancel,
8
13
  isOpen: isOpen,
@@ -1,4 +1,4 @@
1
- import { Objects } from "../objects/DeleteObjectButton";
1
+ import type { Objects } from '../objects/DeleteObjectButton';
2
2
  export declare const DeleteObjectModalContent: ({ objects, onRemove, }: {
3
3
  objects: Objects;
4
4
  onRemove: (key: string) => void;
@@ -12,30 +12,30 @@ const Container = styled_components(Box)`
12
12
  const DeleteObjectModalContent = ({ objects, onRemove })=>{
13
13
  const columns = useMemo(()=>[
14
14
  {
15
- Header: "Name",
16
- accessor: "Key",
15
+ Header: 'Name',
16
+ accessor: 'Key',
17
17
  Cell: ({ value })=>/*#__PURE__*/ jsx(ConstrainedText, {
18
18
  text: value,
19
19
  lineClamp: 1
20
20
  }),
21
- id: "name"
21
+ id: 'name'
22
22
  },
23
23
  {
24
- Header: "Size",
25
- accessor: "Size",
24
+ Header: 'Size',
25
+ accessor: 'Size',
26
26
  cellStyle: {
27
- textAlign: "right"
27
+ textAlign: 'right'
28
28
  },
29
29
  Cell: ({ value })=>/*#__PURE__*/ jsx(PrettyBytes, {
30
30
  bytes: Number(value)
31
31
  }),
32
- id: "size"
32
+ id: 'size'
33
33
  },
34
34
  {
35
- Header: "",
36
- accessor: "type",
35
+ Header: '',
36
+ accessor: 'type',
37
37
  cellStyle: {
38
- width: "0.625rem"
38
+ width: '0.625rem'
39
39
  },
40
40
  Cell: (row)=>{
41
41
  const objectKey = row.row.original.Key;
@@ -52,7 +52,7 @@ const DeleteObjectModalContent = ({ objects, onRemove })=>{
52
52
  onRemove
53
53
  ]);
54
54
  const HEADER_AND_SPACING_ROWS = 3;
55
- const rowHeight = "h40";
55
+ const rowHeight = 'h40';
56
56
  const tableRowHeightInRem = tableRowHeight[rowHeight];
57
57
  return /*#__PURE__*/ jsx(Container, {
58
58
  height: `calc(${objects.length + HEADER_AND_SPACING_ROWS} * (${tableRowHeightInRem}rem + 1px))`,
@@ -62,7 +62,7 @@ const DeleteObjectModalContent = ({ objects, onRemove })=>{
62
62
  children: /*#__PURE__*/ jsx(Table.SingleSelectableContent, {
63
63
  rowHeight: "h40",
64
64
  separationLineVariant: "backgroundLevel3",
65
- selectedId: "Name",
65
+ selectedId: 'Name',
66
66
  onRowSelected: ()=>{}
67
67
  })
68
68
  })
@@ -1,6 +1,6 @@
1
- import { UseFormRegisterReturn } from "react-hook-form";
1
+ import type { UseFormRegisterReturn } from 'react-hook-form';
2
2
  export interface FilterFormValues {
3
- filterType: "none" | "prefix" | "tags" | "and";
3
+ filterType: 'none' | 'prefix' | 'tags' | 'and';
4
4
  prefix: string;
5
5
  tags: Array<{
6
6
  key: string;
@@ -5,28 +5,28 @@ import { Box, Input, Select } from "@scality/core-ui/dist/next";
5
5
  import { ArrayFieldActions } from "./ArrayFieldActions.js";
6
6
  const filterTypeOptions = [
7
7
  {
8
- value: "none",
9
- label: "All objects"
8
+ value: 'none',
9
+ label: 'All objects'
10
10
  },
11
11
  {
12
- value: "prefix",
13
- label: "Prefix filter"
12
+ value: 'prefix',
13
+ label: 'Prefix filter'
14
14
  },
15
15
  {
16
- value: "tags",
17
- label: "Tags filter"
16
+ value: 'tags',
17
+ label: 'Tags filter'
18
18
  },
19
19
  {
20
- value: "and",
21
- label: "Prefix and tags filter"
20
+ value: 'and',
21
+ label: 'Prefix and tags filter'
22
22
  }
23
23
  ];
24
- const shouldShowPrefix = (filterType)=>"prefix" === filterType || "and" === filterType;
25
- const shouldShowTags = (filterType)=>"tags" === filterType || "and" === filterType;
24
+ const shouldShowPrefix = (filterType)=>'prefix' === filterType || 'and' === filterType;
25
+ const shouldShowTags = (filterType)=>'tags' === filterType || 'and' === filterType;
26
26
  function FilterFormSection({ filterType, onFilterTypeChange, prefixRegister, tagFields, tagKeyRegister, tagValueRegister, getTagKeyValue, getTagValueValue, appendTag, removeTag, errors, forceLabelWidth = convertRemToPixels(15) }) {
27
27
  return /*#__PURE__*/ jsxs(FormSection, {
28
28
  title: {
29
- name: "Filter"
29
+ name: 'Filter'
30
30
  },
31
31
  forceLabelWidth: forceLabelWidth,
32
32
  children: [
@@ -50,7 +50,7 @@ function FilterFormSection({ filterType, onFilterTypeChange, prefixRegister, tag
50
50
  direction: "horizontal",
51
51
  error: errors?.prefix?.message,
52
52
  helpErrorPosition: "bottom",
53
- required: "prefix" === filterType,
53
+ required: 'prefix' === filterType,
54
54
  content: /*#__PURE__*/ jsx(Input, {
55
55
  id: "prefix",
56
56
  placeholder: "folder/",
@@ -109,8 +109,8 @@ function FilterFormSection({ filterType, onFilterTypeChange, prefixRegister, tag
109
109
  showAdd: index === tagFields.length - 1,
110
110
  onRemove: ()=>removeTag(index),
111
111
  onAdd: ()=>appendTag({
112
- key: "",
113
- value: ""
112
+ key: '',
113
+ value: ''
114
114
  }),
115
115
  canRemove: tagFields.length > 1,
116
116
  canAdd: !!getTagKeyValue(index) && !!getTagValueValue(index),
@@ -126,32 +126,32 @@ function FilterFormSection({ filterType, onFilterTypeChange, prefixRegister, tag
126
126
  });
127
127
  }
128
128
  const createFilterValidationSchema = (Joi)=>({
129
- filterType: Joi.string().valid("none", "prefix", "tags", "and").required(),
130
- prefix: Joi.when("filterType", {
131
- is: "prefix",
129
+ filterType: Joi.string().valid('none', 'prefix', 'tags', 'and').required(),
130
+ prefix: Joi.when('filterType', {
131
+ is: 'prefix',
132
132
  then: Joi.string().required().min(1).messages({
133
- "string.empty": "Prefix is required when using prefix filter",
134
- "string.min": "Prefix is required when using prefix filter"
133
+ 'string.empty': 'Prefix is required when using prefix filter',
134
+ 'string.min': 'Prefix is required when using prefix filter'
135
135
  }),
136
- otherwise: Joi.when("filterType", {
137
- is: "and",
138
- then: Joi.string().allow("").optional(),
136
+ otherwise: Joi.when('filterType', {
137
+ is: 'and',
138
+ then: Joi.string().allow('').optional(),
139
139
  otherwise: Joi.any()
140
140
  })
141
141
  }),
142
- tags: Joi.when("filterType", {
143
- is: Joi.valid("tags", "and"),
142
+ tags: Joi.when('filterType', {
143
+ is: Joi.valid('tags', 'and'),
144
144
  then: Joi.array().items(Joi.object({
145
145
  key: Joi.string().required().max(128).messages({
146
- "string.empty": "Tag key is required",
147
- "string.max": "Tag key must not exceed 128 characters"
146
+ 'string.empty': 'Tag key is required',
147
+ 'string.max': 'Tag key must not exceed 128 characters'
148
148
  }),
149
149
  value: Joi.string().required().max(256).messages({
150
- "string.empty": "Tag value is required",
151
- "string.max": "Tag value must not exceed 256 characters"
150
+ 'string.empty': 'Tag value is required',
151
+ 'string.max': 'Tag value must not exceed 256 characters'
152
152
  })
153
153
  })).min(1).messages({
154
- "array.min": "At least one tag is required when using tag filter"
154
+ 'array.min': 'At least one tag is required when using tag filter'
155
155
  }),
156
156
  otherwise: Joi.array().optional()
157
157
  })
@@ -1,4 +1,4 @@
1
- import { IconColor, IconName } from "@scality/core-ui/dist/components/icon/Icon.component";
1
+ import type { IconColor, IconName } from '@scality/core-ui/dist/components/icon/Icon.component';
2
2
  export declare const SearchContainer: import("styled-components").StyledComponent<"form", any, {
3
3
  isHidden?: boolean;
4
4
  }, never>;
@@ -10,7 +10,7 @@ type SearchIcon = {
10
10
  name: IconName;
11
11
  color: IconColor;
12
12
  };
13
- export declare const searchIcon: ({ isMetadata, isError, }: {
13
+ export declare const searchIcon: ({ isMetadata, isError }: {
14
14
  isMetadata: boolean;
15
15
  isError: boolean;
16
16
  }) => SearchIcon;
@@ -5,7 +5,7 @@ const SearchContainer = styled_components.form`
5
5
  display: flex;
6
6
  max-width: 600px;
7
7
  margin-right: ${spacing.r20};
8
- visibility: ${(props)=>props.isHidden ? "hidden" : "visible"};
8
+ visibility: ${(props)=>props.isHidden ? 'hidden' : 'visible'};
9
9
  gap: ${spacing.r8};
10
10
  `;
11
11
  const SearchInputContainer = styled_components.div`
@@ -44,16 +44,16 @@ const HintsTitle = styled_components.div`
44
44
  `;
45
45
  const searchIcon = ({ isMetadata, isError })=>{
46
46
  if (isError) return {
47
- name: "Close",
48
- color: "statusCritical"
47
+ name: 'Close',
48
+ color: 'statusCritical'
49
49
  };
50
50
  if (isMetadata) return {
51
- name: "Check",
52
- color: "statusHealthy"
51
+ name: 'Check',
52
+ color: 'statusHealthy'
53
53
  };
54
54
  return {
55
- name: "Search",
56
- color: "textSecondary"
55
+ name: 'Search',
56
+ color: 'textSecondary'
57
57
  };
58
58
  };
59
59
  export { HintItem, HintsContainer, HintsTitle, SearchContainer, SearchInputContainer, searchIcon };
@@ -7,8 +7,9 @@ export declare const Body: ({ children, ...props }: {
7
7
  export declare const Group: ({ children, ...props }: {
8
8
  children: React.ReactNode;
9
9
  }) => import("react/jsx-runtime").JSX.Element;
10
- export declare const GroupName: ({ children, ...props }: {
10
+ export declare const GroupName: ({ children, action, ...props }: {
11
11
  children: React.ReactNode;
12
+ action?: React.ReactNode;
12
13
  }) => import("react/jsx-runtime").JSX.Element;
13
14
  export declare const GroupContent: ({ children, ...props }: {
14
15
  children: React.ReactNode;
@@ -1,4 +1,4 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Text, spacing } from "@scality/core-ui";
3
3
  import { Box } from "@scality/core-ui/dist/next";
4
4
  import styled_components from "styled-components";
@@ -20,14 +20,20 @@ const Group = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
20
20
  ...props,
21
21
  children: children
22
22
  });
23
- const GroupName = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
23
+ const GroupName = ({ children, action, ...props })=>/*#__PURE__*/ jsxs(Box, {
24
+ display: "flex",
25
+ justifyContent: "space-between",
26
+ alignItems: "center",
24
27
  marginBottom: spacing.r10,
25
28
  ...props,
26
- children: /*#__PURE__*/ jsx(Text, {
27
- isEmphazed: true,
28
- color: "textPrimary",
29
- children: children
30
- })
29
+ children: [
30
+ /*#__PURE__*/ jsx(Text, {
31
+ isEmphazed: true,
32
+ color: "textPrimary",
33
+ children: children
34
+ }),
35
+ action
36
+ ]
31
37
  });
32
38
  const GroupContent = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
33
39
  display: "flex",
@@ -47,16 +53,16 @@ const Row = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
47
53
  });
48
54
  const RawKey = styled_components.div`
49
55
  color: ${(props)=>props.principal ? props.theme.textPrimary : props.theme?.textSecondary};
50
- font-weight: ${(props)=>props.principal ? "bold" : "normal"};
56
+ font-weight: ${(props)=>props.principal ? 'bold' : 'normal'};
51
57
  ${(props)=>props.required ? `
52
58
  &:after {
53
59
  content: '*';
54
60
  }
55
- ` : ""}
61
+ ` : ''}
56
62
  `;
57
63
  const Key = styled_components(RawKey)`
58
64
  && {
59
- flex: ${(props)=>props.size || "0.35"};
65
+ flex: ${(props)=>props.size || '0.35'};
60
66
  min-width: 0;
61
67
  }
62
68
  `;
@@ -76,12 +82,12 @@ const TableContainer = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
76
82
  });
77
83
  const GroupValues = styled_components.div`
78
84
  display: flex;
79
- flex: ${(props)=>props.size || "0.65"};
85
+ flex: ${(props)=>props.size || '0.65'};
80
86
  justify-content: space-between;
81
87
  align-items: center;
82
88
  min-width: 0;
83
89
  `;
84
90
  const ExtraCell = styled_components.div`
85
- margin-left: ${(props)=>props.marginLeft || "1.429rem"};
91
+ margin-left: ${(props)=>props.marginLeft || '1.429rem'};
86
92
  `;
87
93
  export { Body, ExtraCell, Group, GroupContent, GroupName, GroupValues, Key, Row, Table, TableContainer, Value };
@@ -0,0 +1 @@
1
+ export {};