@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.
- package/dist/components/DataBrowserUI.d.ts +12 -0
- package/dist/components/DataBrowserUI.js +99 -0
- package/dist/components/Editor.d.ts +1 -1
- package/dist/components/Editor.js +3 -3
- package/dist/components/__tests__/BucketAccessor.test.js +214 -0
- package/dist/components/__tests__/BucketCorsPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketCorsPage.test.js +263 -0
- package/dist/components/__tests__/BucketCreate.test.js +271 -105
- package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
- package/dist/components/__tests__/BucketDetails.test.js +421 -0
- package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +13 -0
- package/dist/components/__tests__/BucketLifecycleFormPage.test.js +178 -178
- package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
- package/dist/components/__tests__/BucketList.test.js +463 -239
- package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
- package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
- package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
- package/dist/components/__tests__/BucketOverview.test.js +281 -266
- package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
- package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +15 -0
- package/dist/components/__tests__/BucketReplicationFormPage.test.js +544 -544
- package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
- package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
- package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
- package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
- package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
- package/dist/components/__tests__/EmptyBucketButton.test.js +59 -59
- package/dist/components/__tests__/MetadataSearch.test.js +65 -65
- package/dist/components/__tests__/ObjectList.test.js +741 -240
- package/dist/components/__tests__/UploadButton.test.js +45 -45
- package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
- package/dist/components/breadcrumb/Breadcrumb.js +37 -0
- package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
- package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
- package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
- package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
- package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
- package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
- package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
- package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
- package/dist/components/breadcrumb/index.d.ts +8 -0
- package/dist/components/breadcrumb/index.js +4 -0
- package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
- package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
- package/dist/components/buckets/BucketAccessor.d.ts +2 -0
- package/dist/components/buckets/BucketAccessor.js +125 -0
- package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
- package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
- package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
- package/dist/components/buckets/BucketCorsPage.js +234 -0
- package/dist/components/buckets/BucketCreate.d.ts +3 -2
- package/dist/components/buckets/BucketCreate.js +89 -47
- package/dist/components/buckets/BucketDetails.d.ts +42 -0
- package/dist/components/buckets/BucketDetails.js +249 -85
- package/dist/components/buckets/BucketLifecycleFormPage.js +206 -190
- package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
- package/dist/components/buckets/BucketLifecycleList.js +47 -47
- package/dist/components/buckets/BucketList.d.ts +7 -8
- package/dist/components/buckets/BucketList.js +158 -101
- package/dist/components/buckets/BucketLocation.js +4 -4
- package/dist/components/buckets/BucketOverview.d.ts +22 -2
- package/dist/components/buckets/BucketOverview.js +394 -187
- package/dist/components/buckets/BucketPage.js +43 -21
- package/dist/components/buckets/BucketPolicyPage.js +155 -127
- package/dist/components/buckets/BucketReplicationFormPage.js +134 -133
- package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
- package/dist/components/buckets/BucketReplicationList.js +42 -42
- package/dist/components/buckets/BucketVersioning.d.ts +4 -0
- package/dist/components/buckets/BucketVersioning.js +76 -0
- package/dist/components/buckets/DeleteBucketButton.js +8 -8
- package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
- package/dist/components/buckets/DeleteBucketConfigRuleButton.js +2 -2
- package/dist/components/buckets/EmptyBucketButton.js +24 -24
- package/dist/components/buckets/EmptyBucketSummary.d.ts +2 -2
- package/dist/components/buckets/EmptyBucketSummary.js +1 -1
- package/dist/components/buckets/EmptyBucketSummaryList.d.ts +1 -1
- package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
- package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
- package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
- package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
- package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
- package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
- package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
- package/dist/components/buckets/notifications/EventsSection.js +145 -29
- package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
- package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
- package/dist/components/buckets/notifications/events.d.ts +71 -7
- package/dist/components/buckets/notifications/events.js +98 -16
- package/dist/components/index.d.ts +27 -20
- package/dist/components/index.js +17 -10
- package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
- package/dist/components/layouts/ArrowNavigation.js +28 -0
- package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
- package/dist/components/layouts/BrowserPageLayout.js +10 -5
- package/dist/components/objects/CreateFolderButton.d.ts +2 -2
- package/dist/components/objects/CreateFolderButton.js +12 -12
- package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
- package/dist/components/objects/DeleteObjectButton.js +19 -21
- package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
- package/dist/components/objects/GetPresignedUrlButton.js +255 -0
- package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
- package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
- package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
- package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
- package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
- package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
- package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
- package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
- package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
- package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
- package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
- package/dist/components/objects/ObjectDetails/index.js +152 -40
- package/dist/components/objects/ObjectList.d.ts +12 -10
- package/dist/components/objects/ObjectList.js +590 -263
- package/dist/components/objects/ObjectLock/EditRetentionButton.js +4 -4
- package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +15 -15
- package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
- package/dist/components/objects/ObjectLock/ObjectLockSettings.js +32 -31
- package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
- package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
- package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +51 -51
- package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +78 -78
- package/dist/components/objects/ObjectPage.js +12 -8
- package/dist/components/objects/UploadButton.d.ts +3 -3
- package/dist/components/objects/UploadButton.js +10 -10
- package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
- package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
- package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
- package/dist/components/providers/DataBrowserProvider.js +60 -38
- package/dist/components/providers/QueryProvider.d.ts +9 -0
- package/dist/components/providers/QueryProvider.js +21 -0
- package/dist/components/search/MetadataSearch.js +29 -28
- package/dist/components/search/SearchHints.js +1 -1
- package/dist/components/ui/ArrayFieldActions.js +12 -7
- package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +2 -2
- package/dist/components/ui/ConfirmDeleteRuleModal.js +6 -1
- package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
- package/dist/components/ui/DeleteObjectModalContent.js +12 -12
- package/dist/components/ui/FilterFormSection.d.ts +2 -2
- package/dist/components/ui/FilterFormSection.js +29 -29
- package/dist/components/ui/Search.elements.d.ts +2 -2
- package/dist/components/ui/Search.elements.js +7 -7
- package/dist/components/ui/Table.elements.d.ts +2 -1
- package/dist/components/ui/Table.elements.js +18 -12
- package/dist/config/__tests__/factory.test.d.ts +1 -0
- package/dist/config/__tests__/factory.test.js +311 -0
- package/dist/config/factory.d.ts +10 -56
- package/dist/config/factory.js +23 -71
- package/dist/config/types.d.ts +212 -34
- package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
- package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
- package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
- package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
- package/dist/hooks/__tests__/useISVBucketDetection.test.js +45 -45
- package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
- package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
- package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
- package/dist/hooks/bucketConfiguration.d.ts +8 -1
- package/dist/hooks/bucketConfiguration.js +52 -51
- package/dist/hooks/bucketOperations.d.ts +10 -1
- package/dist/hooks/bucketOperations.js +10 -9
- package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
- package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
- package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
- package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
- package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +65 -65
- package/dist/hooks/factories/index.d.ts +4 -4
- package/dist/hooks/factories/index.js +2 -2
- package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
- package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
- package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
- package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
- package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
- package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
- package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
- package/dist/hooks/factories/useCreateS3QueryHook.js +11 -6
- package/dist/hooks/index.d.ts +19 -12
- package/dist/hooks/index.js +16 -9
- package/dist/hooks/loginOperations.d.ts +1 -1
- package/dist/hooks/loginOperations.js +1 -1
- package/dist/hooks/objectOperations.d.ts +2 -2
- package/dist/hooks/objectOperations.js +50 -49
- package/dist/hooks/presignedOperations.d.ts +4 -4
- package/dist/hooks/presignedOperations.js +5 -5
- package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
- package/dist/hooks/useAccessibleBuckets.js +115 -0
- package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
- package/dist/hooks/useBatchObjectLegalHold.js +48 -0
- package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
- package/dist/hooks/useBucketConfigEditor.js +82 -0
- package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
- package/dist/hooks/useDataBrowserNavigate.js +24 -0
- package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
- package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
- package/dist/hooks/useEmptyBucket.js +11 -11
- package/dist/hooks/useFeatures.d.ts +7 -0
- package/dist/hooks/useFeatures.js +8 -0
- package/dist/hooks/useISVBucketDetection.js +6 -6
- package/dist/hooks/useIsBucketEmpty.js +4 -4
- package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
- package/dist/hooks/useLimitedAccessFlow.js +23 -0
- package/dist/hooks/useS3Client.d.ts +6 -0
- package/dist/hooks/useS3Client.js +3 -2
- package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
- package/dist/hooks/useS3ConfigSwitch.js +37 -0
- package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
- package/dist/hooks/useSupportedNotificationEvents.js +8 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +2 -2
- package/dist/schemas/bucketPolicySchema.json +3 -13
- package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
- package/dist/test/msw/handlers/deleteBucket.js +20 -10
- package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
- package/dist/test/msw/handlers/getBucketAcl.js +29 -17
- package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
- package/dist/test/msw/handlers/getBucketLocation.js +29 -15
- package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
- package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
- package/dist/test/msw/handlers/headObject.d.ts +1 -1
- package/dist/test/msw/handlers/headObject.js +31 -13
- package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
- package/dist/test/msw/handlers/listBuckets.js +5 -3
- package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
- package/dist/test/msw/handlers/listObjectVersions.js +38 -26
- package/dist/test/msw/handlers/listObjects.d.ts +1 -1
- package/dist/test/msw/handlers/listObjects.js +35 -23
- package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
- package/dist/test/msw/handlers/objectLegalHold.js +32 -17
- package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
- package/dist/test/msw/handlers/objectRetention.js +31 -17
- package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
- package/dist/test/msw/handlers/putBucketAcl.js +29 -14
- package/dist/test/msw/handlers/putObject.d.ts +1 -1
- package/dist/test/msw/handlers/putObject.js +27 -12
- package/dist/test/msw/handlers.d.ts +3 -3
- package/dist/test/msw/handlers.js +77 -54
- package/dist/test/msw/index.d.ts +2 -2
- package/dist/test/msw/index.js +1 -1
- package/dist/test/msw/server.d.ts +1 -1
- package/dist/test/msw/server.js +1 -1
- package/dist/test/msw/utils.js +2 -2
- package/dist/test/setup.d.ts +1 -1
- package/dist/test/setup.js +13 -30
- package/dist/test/testUtils.d.ts +85 -33
- package/dist/test/testUtils.js +176 -111
- package/dist/test/utils/errorHandling.test.js +119 -119
- package/dist/types/index.d.ts +49 -36
- package/dist/types/monaco.d.ts +13 -0
- package/dist/types/monaco.js +0 -0
- package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
- package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
- package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
- package/dist/utils/__tests__/s3Client.test.js +340 -0
- package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
- package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
- package/dist/utils/constants.d.ts +10 -0
- package/dist/utils/constants.js +19 -9
- package/dist/utils/deletion/index.d.ts +2 -2
- package/dist/utils/deletion/index.js +1 -1
- package/dist/utils/deletion/messages.d.ts +1 -1
- package/dist/utils/deletion/messages.js +4 -4
- package/dist/utils/errorHandling.d.ts +3 -3
- package/dist/utils/errorHandling.js +6 -6
- package/dist/utils/hooks.js +8 -8
- package/dist/utils/index.d.ts +5 -4
- package/dist/utils/index.js +4 -2
- package/dist/utils/proxyMiddleware.d.ts +32 -13
- package/dist/utils/proxyMiddleware.js +90 -36
- package/dist/utils/s3Client.d.ts +14 -4
- package/dist/utils/s3Client.js +5 -26
- package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
- package/dist/utils/s3ConfigIdentifier.js +57 -0
- package/dist/utils/s3RuleUtils.d.ts +5 -5
- package/dist/utils/s3RuleUtils.js +17 -17
- package/package.json +10 -8
- package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
- package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
- package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
- package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
- package/dist/hooks/useLoginMutation.d.ts +0 -21
- package/dist/hooks/useLoginMutation.js +0 -9
- package/dist/utils/useFeatures.d.ts +0 -1
- package/dist/utils/useFeatures.js +0 -7
- /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
|
@@ -1,73 +1,76 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { joiResolver } from "@hookform/resolvers/joi";
|
|
3
3
|
import { Checkbox, Form, FormGroup, FormSection, Stack, useToast } from "@scality/core-ui";
|
|
4
4
|
import { Button, Input } from "@scality/core-ui/dist/next";
|
|
5
5
|
import { convertRemToPixels } from "@scality/core-ui/dist/utils";
|
|
6
6
|
import joi from "joi";
|
|
7
7
|
import { FormProvider, useForm } from "react-hook-form";
|
|
8
|
-
import {
|
|
8
|
+
import { useCreateBucket, useSetBucketEncryption, useSetBucketObjectLockConfiguration, useSetBucketVersioning } from "../../hooks/index.js";
|
|
9
|
+
import { useDataBrowserNavigate } from "../../hooks/useDataBrowserNavigate.js";
|
|
9
10
|
import ObjectLockRetentionSettings from "../objects/ObjectLock/ObjectLockRetentionSettings.js";
|
|
10
11
|
import { objectLockRetentionSettingsValidationRules } from "../objects/ObjectLock/ObjectLockSettings.js";
|
|
11
|
-
import {
|
|
12
|
-
const bucketErrorMessage =
|
|
13
|
-
const bucketNameValidationSchema = joi.string().label(
|
|
14
|
-
name:
|
|
12
|
+
import { useDataBrowserConfig } from "../providers/DataBrowserProvider.js";
|
|
13
|
+
const bucketErrorMessage = 'Bucket names can include only lowercase letters, numbers, dots (.), and hyphens (-)';
|
|
14
|
+
const bucketNameValidationSchema = joi.string().label('Bucket Name').required().min(3).max(63).pattern(/^[a-z0-9]([a-z0-9.-]*[a-z0-9])?$/, {
|
|
15
|
+
name: 'bucketName',
|
|
15
16
|
invert: false
|
|
16
17
|
}).messages({
|
|
17
|
-
|
|
18
|
+
'string.pattern.name': bucketErrorMessage
|
|
18
19
|
}).custom((value, helpers)=>{
|
|
19
|
-
if (value.includes(
|
|
20
|
-
custom:
|
|
20
|
+
if (value.includes('..')) return helpers.message({
|
|
21
|
+
custom: 'Bucket names cannot contain two adjacent periods'
|
|
21
22
|
});
|
|
22
23
|
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(value)) return helpers.message({
|
|
23
|
-
custom:
|
|
24
|
+
custom: 'Bucket names must not be formatted as an IP address'
|
|
24
25
|
});
|
|
25
26
|
const forbiddenPrefixes = [
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
'xn--',
|
|
28
|
+
'sthree-',
|
|
29
|
+
'amzn-s3-demo-'
|
|
29
30
|
];
|
|
30
31
|
if (forbiddenPrefixes.some((prefix)=>value.startsWith(prefix))) return helpers.message({
|
|
31
|
-
custom: `Bucket names must not start with ${forbiddenPrefixes.join(
|
|
32
|
+
custom: `Bucket names must not start with ${forbiddenPrefixes.join(', ')}`
|
|
32
33
|
});
|
|
33
34
|
const forbiddenSuffixes = [
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
'-s3alias',
|
|
36
|
+
'--ol-s3',
|
|
37
|
+
'--x-s3',
|
|
38
|
+
'.mrap'
|
|
38
39
|
];
|
|
39
40
|
if (forbiddenSuffixes.some((suffix)=>value.endsWith(suffix))) return helpers.message({
|
|
40
|
-
custom: `Bucket names must not end with ${forbiddenSuffixes.join(
|
|
41
|
+
custom: `Bucket names must not end with ${forbiddenSuffixes.join(', ')}`
|
|
41
42
|
});
|
|
42
43
|
const existingBuckets = helpers.prefs.context?.existingBuckets;
|
|
43
44
|
if (Array.isArray(existingBuckets)) {
|
|
44
45
|
const isDuplicate = existingBuckets.some((bucketName)=>bucketName.toLowerCase() === value.toLowerCase());
|
|
45
46
|
if (isDuplicate) return helpers.message({
|
|
46
|
-
custom:
|
|
47
|
+
custom: 'A bucket with this name already exists'
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
50
|
return value;
|
|
50
|
-
},
|
|
51
|
+
}, 'AWS S3 bucket naming rules');
|
|
51
52
|
const baseBucketCreateSchema = joi.object({
|
|
52
53
|
name: bucketNameValidationSchema,
|
|
53
54
|
isVersioning: joi.boolean(),
|
|
55
|
+
isEncryptionEnabled: joi.boolean(),
|
|
54
56
|
...objectLockRetentionSettingsValidationRules
|
|
55
57
|
});
|
|
56
58
|
const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultValues: customDefaultValues, children, onSubmit: onSubmitProp, onCancel: onCancelProp })=>{
|
|
57
|
-
const navigate =
|
|
59
|
+
const navigate = useDataBrowserNavigate();
|
|
58
60
|
const { showToast } = useToast();
|
|
59
61
|
const baseDefaultValues = {
|
|
60
|
-
name:
|
|
62
|
+
name: '',
|
|
61
63
|
isVersioning: false,
|
|
64
|
+
isEncryptionEnabled: false,
|
|
62
65
|
isObjectLockEnabled: false,
|
|
63
66
|
isDefaultRetentionEnabled: false,
|
|
64
|
-
retentionMode:
|
|
67
|
+
retentionMode: 'GOVERNANCE',
|
|
65
68
|
retentionPeriod: 1,
|
|
66
|
-
retentionPeriodFrequencyChoice:
|
|
69
|
+
retentionPeriodFrequencyChoice: 'DAYS',
|
|
67
70
|
...customDefaultValues
|
|
68
71
|
};
|
|
69
72
|
const useFormMethods = useForm({
|
|
70
|
-
mode:
|
|
73
|
+
mode: 'all',
|
|
71
74
|
resolver: joiResolver(validationSchema || baseBucketCreateSchema, {
|
|
72
75
|
context: validationContext || {}
|
|
73
76
|
}),
|
|
@@ -76,19 +79,21 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
76
79
|
});
|
|
77
80
|
const { register, handleSubmit, formState, watch } = useFormMethods;
|
|
78
81
|
const { isValid, errors } = formState;
|
|
79
|
-
const isObjectLockEnabled = watch(
|
|
82
|
+
const isObjectLockEnabled = watch('isObjectLockEnabled');
|
|
83
|
+
const { s3Capabilities } = useDataBrowserConfig();
|
|
80
84
|
const { mutate: createBucket, isPending: isCreatingBucket } = useCreateBucket();
|
|
81
85
|
const { mutate: setBucketVersioning } = useSetBucketVersioning();
|
|
82
86
|
const { mutate: setObjectLockConfig } = useSetBucketObjectLockConfiguration();
|
|
87
|
+
const { mutate: setBucketEncryption } = useSetBucketEncryption();
|
|
83
88
|
const handleCancel = ()=>{
|
|
84
89
|
if (onCancelProp) onCancelProp();
|
|
85
|
-
else navigate(
|
|
90
|
+
else navigate('/buckets');
|
|
86
91
|
};
|
|
87
92
|
const handleSuccess = (bucketName)=>{
|
|
88
93
|
showToast({
|
|
89
94
|
open: true,
|
|
90
95
|
message: `Bucket "${bucketName}" created successfully`,
|
|
91
|
-
status:
|
|
96
|
+
status: 'success'
|
|
92
97
|
});
|
|
93
98
|
navigate(`/buckets/${bucketName}`);
|
|
94
99
|
};
|
|
@@ -96,7 +101,7 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
96
101
|
showToast({
|
|
97
102
|
open: true,
|
|
98
103
|
message: error instanceof Error ? error.message : `Failed to ${operation}`,
|
|
99
|
-
status:
|
|
104
|
+
status: 'error'
|
|
100
105
|
});
|
|
101
106
|
};
|
|
102
107
|
const onSubmit = (data)=>{
|
|
@@ -104,6 +109,7 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
104
109
|
const bucketName = data.name;
|
|
105
110
|
const needsExplicitVersioning = data.isVersioning && !data.isObjectLockEnabled;
|
|
106
111
|
const needsRetentionConfig = data.isObjectLockEnabled && data.isDefaultRetentionEnabled;
|
|
112
|
+
const needsEncryption = data.isEncryptionEnabled;
|
|
107
113
|
createBucket({
|
|
108
114
|
Bucket: bucketName,
|
|
109
115
|
ObjectLockEnabledForBucket: data.isObjectLockEnabled || void 0
|
|
@@ -112,41 +118,65 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
112
118
|
if (needsExplicitVersioning) setBucketVersioning({
|
|
113
119
|
Bucket: bucketName,
|
|
114
120
|
VersioningConfiguration: {
|
|
115
|
-
Status:
|
|
121
|
+
Status: 'Enabled'
|
|
116
122
|
}
|
|
117
123
|
}, {
|
|
118
|
-
onSuccess: ()=>
|
|
119
|
-
|
|
124
|
+
onSuccess: ()=>{
|
|
125
|
+
if (needsEncryption) applyEncryption(bucketName);
|
|
126
|
+
else handleSuccess(bucketName);
|
|
127
|
+
},
|
|
128
|
+
onError: (error)=>handleError(error, 'enable versioning')
|
|
120
129
|
});
|
|
121
130
|
else if (needsRetentionConfig) {
|
|
122
131
|
const retentionConfig = {
|
|
123
132
|
Bucket: bucketName,
|
|
124
133
|
ObjectLockConfiguration: {
|
|
125
|
-
ObjectLockEnabled:
|
|
134
|
+
ObjectLockEnabled: 'Enabled',
|
|
126
135
|
Rule: {
|
|
127
136
|
DefaultRetention: {
|
|
128
137
|
Mode: data.retentionMode,
|
|
129
|
-
Days:
|
|
130
|
-
Years:
|
|
138
|
+
Days: 'DAYS' === data.retentionPeriodFrequencyChoice ? data.retentionPeriod : void 0,
|
|
139
|
+
Years: 'YEARS' === data.retentionPeriodFrequencyChoice ? data.retentionPeriod : void 0
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
142
|
}
|
|
134
143
|
};
|
|
135
144
|
setObjectLockConfig(retentionConfig, {
|
|
136
|
-
onSuccess: ()=>
|
|
137
|
-
|
|
145
|
+
onSuccess: ()=>{
|
|
146
|
+
if (needsEncryption) applyEncryption(bucketName);
|
|
147
|
+
else handleSuccess(bucketName);
|
|
148
|
+
},
|
|
149
|
+
onError: (error)=>handleError(error, 'configure object lock retention')
|
|
138
150
|
});
|
|
139
|
-
} else
|
|
151
|
+
} else if (needsEncryption) applyEncryption(bucketName);
|
|
152
|
+
else handleSuccess(bucketName);
|
|
140
153
|
},
|
|
141
|
-
onError: (error)=>handleError(error,
|
|
154
|
+
onError: (error)=>handleError(error, 'create bucket')
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
const applyEncryption = (bucketName)=>{
|
|
158
|
+
setBucketEncryption({
|
|
159
|
+
Bucket: bucketName,
|
|
160
|
+
ServerSideEncryptionConfiguration: {
|
|
161
|
+
Rules: [
|
|
162
|
+
{
|
|
163
|
+
ApplyServerSideEncryptionByDefault: {
|
|
164
|
+
SSEAlgorithm: 'AES256'
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
}, {
|
|
170
|
+
onSuccess: ()=>handleSuccess(bucketName),
|
|
171
|
+
onError: (error)=>handleError(error, 'enable bucket encryption')
|
|
142
172
|
});
|
|
143
173
|
};
|
|
144
174
|
return /*#__PURE__*/ jsx(FormProvider, {
|
|
145
175
|
...useFormMethods,
|
|
146
176
|
children: /*#__PURE__*/ jsxs(Form, {
|
|
147
177
|
layout: {
|
|
148
|
-
kind:
|
|
149
|
-
title:
|
|
178
|
+
kind: 'page',
|
|
179
|
+
title: 'Create a New Bucket',
|
|
150
180
|
subTitle
|
|
151
181
|
},
|
|
152
182
|
requireMode: "partial",
|
|
@@ -174,7 +204,9 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
174
204
|
children: [
|
|
175
205
|
/*#__PURE__*/ jsx(FormSection, {
|
|
176
206
|
forceLabelWidth: convertRemToPixels(17.5),
|
|
177
|
-
children: /*#__PURE__*/ jsxs(
|
|
207
|
+
children: /*#__PURE__*/ jsxs(Stack, {
|
|
208
|
+
direction: "vertical",
|
|
209
|
+
gap: "r16",
|
|
178
210
|
children: [
|
|
179
211
|
/*#__PURE__*/ jsx(FormGroup, {
|
|
180
212
|
id: "name",
|
|
@@ -184,7 +216,7 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
184
216
|
content: /*#__PURE__*/ jsx(Input, {
|
|
185
217
|
id: "name",
|
|
186
218
|
autoFocus: true,
|
|
187
|
-
...register(
|
|
219
|
+
...register('name')
|
|
188
220
|
}),
|
|
189
221
|
labelHelpTooltip: /*#__PURE__*/ jsxs("ul", {
|
|
190
222
|
children: [
|
|
@@ -200,9 +232,19 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
200
232
|
]
|
|
201
233
|
}),
|
|
202
234
|
helpErrorPosition: "bottom",
|
|
203
|
-
error: errors.name ? errors.name?.type ===
|
|
235
|
+
error: errors.name ? errors.name?.type === 'string.pattern.base' ? bucketErrorMessage : errors.name?.message : void 0
|
|
204
236
|
}),
|
|
205
237
|
children,
|
|
238
|
+
s3Capabilities?.bucketEncryption && /*#__PURE__*/ jsx(FormGroup, {
|
|
239
|
+
id: "isEncryptionEnabled",
|
|
240
|
+
label: "Encryption",
|
|
241
|
+
labelHelpTooltip: "Objects stored in this bucket will be automatically encrypted.",
|
|
242
|
+
helpErrorPosition: "bottom",
|
|
243
|
+
content: /*#__PURE__*/ jsx(Checkbox, {
|
|
244
|
+
id: "isEncryptionEnabled",
|
|
245
|
+
...register('isEncryptionEnabled')
|
|
246
|
+
})
|
|
247
|
+
}),
|
|
206
248
|
/*#__PURE__*/ jsx(FormGroup, {
|
|
207
249
|
id: "isVersioning",
|
|
208
250
|
label: "Versioning",
|
|
@@ -217,12 +259,12 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
217
259
|
})
|
|
218
260
|
]
|
|
219
261
|
}),
|
|
220
|
-
help: isObjectLockEnabled ?
|
|
262
|
+
help: isObjectLockEnabled ? 'Automatically activated when Object-lock is Enabled' : void 0,
|
|
221
263
|
helpErrorPosition: "bottom",
|
|
222
264
|
content: /*#__PURE__*/ jsx(Checkbox, {
|
|
223
265
|
id: "isVersioning",
|
|
224
266
|
disabled: isObjectLockEnabled,
|
|
225
|
-
...register(
|
|
267
|
+
...register('isVersioning')
|
|
226
268
|
})
|
|
227
269
|
})
|
|
228
270
|
]
|
|
@@ -1 +1,43 @@
|
|
|
1
|
+
import { useDataBrowserNavigate } from '../../hooks/useDataBrowserNavigate';
|
|
2
|
+
interface BucketDetailsContextValue {
|
|
3
|
+
bucketName: string;
|
|
4
|
+
navigate: ReturnType<typeof useDataBrowserNavigate>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Context for BucketDetails component.
|
|
8
|
+
*
|
|
9
|
+
* **Important**: Always use `useBucketDetailsContext()` hook instead of accessing this context directly.
|
|
10
|
+
* The hook provides proper error handling if the context is not available.
|
|
11
|
+
*
|
|
12
|
+
* This context is exported for testing purposes only.
|
|
13
|
+
*/
|
|
14
|
+
export declare const BucketDetailsContext: import("react").Context<BucketDetailsContextValue | null>;
|
|
15
|
+
export declare function useBucketDetailsContext(): BucketDetailsContextValue;
|
|
16
|
+
declare const OverviewTab: React.FC;
|
|
17
|
+
declare const LifecycleTab: React.FC;
|
|
18
|
+
declare const ReplicationTab: React.FC;
|
|
19
|
+
declare const NotificationTab: React.FC;
|
|
20
|
+
interface CustomTabProps {
|
|
21
|
+
config: {
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
path?: string;
|
|
25
|
+
withoutPadding?: boolean;
|
|
26
|
+
render: () => React.ReactNode;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
declare const CustomTab: React.FC<CustomTabProps>;
|
|
30
|
+
interface BucketDetailsProps {
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
}
|
|
33
|
+
declare const BucketDetailsRoot: React.FC<BucketDetailsProps>;
|
|
1
34
|
export declare function BucketDetails(): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
type BucketDetailsComponent = typeof BucketDetailsRoot & {
|
|
36
|
+
OverviewTab: typeof OverviewTab;
|
|
37
|
+
LifecycleTab: typeof LifecycleTab;
|
|
38
|
+
ReplicationTab: typeof ReplicationTab;
|
|
39
|
+
NotificationTab: typeof NotificationTab;
|
|
40
|
+
CustomTab: typeof CustomTab;
|
|
41
|
+
};
|
|
42
|
+
declare const BucketDetailsCompound: BucketDetailsComponent;
|
|
43
|
+
export { BucketDetailsCompound };
|