@scality/data-browser-library 1.0.0-preview.9 → 1.0.3
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 +93 -47
- package/dist/components/buckets/BucketDetails.d.ts +42 -0
- package/dist/components/buckets/BucketDetails.js +249 -85
- package/dist/components/buckets/BucketLifecycleFormPage.js +225 -191
- package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
- package/dist/components/buckets/BucketLifecycleList.js +59 -61
- 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 +48 -45
- 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 +289 -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 +103 -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/formUtils.d.ts +15 -0
- package/dist/components/objects/ObjectDetails/formUtils.js +7 -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 +50 -37
- 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,23 @@ 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 isEncryptionEnabled = watch('isEncryptionEnabled');
|
|
84
|
+
const isVersioning = watch('isVersioning');
|
|
85
|
+
const { s3Capabilities } = useDataBrowserConfig();
|
|
80
86
|
const { mutate: createBucket, isPending: isCreatingBucket } = useCreateBucket();
|
|
81
87
|
const { mutate: setBucketVersioning } = useSetBucketVersioning();
|
|
82
88
|
const { mutate: setObjectLockConfig } = useSetBucketObjectLockConfiguration();
|
|
89
|
+
const { mutate: setBucketEncryption } = useSetBucketEncryption();
|
|
83
90
|
const handleCancel = ()=>{
|
|
84
91
|
if (onCancelProp) onCancelProp();
|
|
85
|
-
else navigate(
|
|
92
|
+
else navigate('/buckets');
|
|
86
93
|
};
|
|
87
94
|
const handleSuccess = (bucketName)=>{
|
|
88
95
|
showToast({
|
|
89
96
|
open: true,
|
|
90
97
|
message: `Bucket "${bucketName}" created successfully`,
|
|
91
|
-
status:
|
|
98
|
+
status: 'success'
|
|
92
99
|
});
|
|
93
100
|
navigate(`/buckets/${bucketName}`);
|
|
94
101
|
};
|
|
@@ -96,7 +103,7 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
96
103
|
showToast({
|
|
97
104
|
open: true,
|
|
98
105
|
message: error instanceof Error ? error.message : `Failed to ${operation}`,
|
|
99
|
-
status:
|
|
106
|
+
status: 'error'
|
|
100
107
|
});
|
|
101
108
|
};
|
|
102
109
|
const onSubmit = (data)=>{
|
|
@@ -104,6 +111,7 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
104
111
|
const bucketName = data.name;
|
|
105
112
|
const needsExplicitVersioning = data.isVersioning && !data.isObjectLockEnabled;
|
|
106
113
|
const needsRetentionConfig = data.isObjectLockEnabled && data.isDefaultRetentionEnabled;
|
|
114
|
+
const needsEncryption = data.isEncryptionEnabled;
|
|
107
115
|
createBucket({
|
|
108
116
|
Bucket: bucketName,
|
|
109
117
|
ObjectLockEnabledForBucket: data.isObjectLockEnabled || void 0
|
|
@@ -112,41 +120,65 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
112
120
|
if (needsExplicitVersioning) setBucketVersioning({
|
|
113
121
|
Bucket: bucketName,
|
|
114
122
|
VersioningConfiguration: {
|
|
115
|
-
Status:
|
|
123
|
+
Status: 'Enabled'
|
|
116
124
|
}
|
|
117
125
|
}, {
|
|
118
|
-
onSuccess: ()=>
|
|
119
|
-
|
|
126
|
+
onSuccess: ()=>{
|
|
127
|
+
if (needsEncryption) applyEncryption(bucketName);
|
|
128
|
+
else handleSuccess(bucketName);
|
|
129
|
+
},
|
|
130
|
+
onError: (error)=>handleError(error, 'enable versioning')
|
|
120
131
|
});
|
|
121
132
|
else if (needsRetentionConfig) {
|
|
122
133
|
const retentionConfig = {
|
|
123
134
|
Bucket: bucketName,
|
|
124
135
|
ObjectLockConfiguration: {
|
|
125
|
-
ObjectLockEnabled:
|
|
136
|
+
ObjectLockEnabled: 'Enabled',
|
|
126
137
|
Rule: {
|
|
127
138
|
DefaultRetention: {
|
|
128
139
|
Mode: data.retentionMode,
|
|
129
|
-
Days:
|
|
130
|
-
Years:
|
|
140
|
+
Days: 'DAYS' === data.retentionPeriodFrequencyChoice ? data.retentionPeriod : void 0,
|
|
141
|
+
Years: 'YEARS' === data.retentionPeriodFrequencyChoice ? data.retentionPeriod : void 0
|
|
131
142
|
}
|
|
132
143
|
}
|
|
133
144
|
}
|
|
134
145
|
};
|
|
135
146
|
setObjectLockConfig(retentionConfig, {
|
|
136
|
-
onSuccess: ()=>
|
|
137
|
-
|
|
147
|
+
onSuccess: ()=>{
|
|
148
|
+
if (needsEncryption) applyEncryption(bucketName);
|
|
149
|
+
else handleSuccess(bucketName);
|
|
150
|
+
},
|
|
151
|
+
onError: (error)=>handleError(error, 'configure object lock retention')
|
|
138
152
|
});
|
|
139
|
-
} else
|
|
153
|
+
} else if (needsEncryption) applyEncryption(bucketName);
|
|
154
|
+
else handleSuccess(bucketName);
|
|
140
155
|
},
|
|
141
|
-
onError: (error)=>handleError(error,
|
|
156
|
+
onError: (error)=>handleError(error, 'create bucket')
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
const applyEncryption = (bucketName)=>{
|
|
160
|
+
setBucketEncryption({
|
|
161
|
+
Bucket: bucketName,
|
|
162
|
+
ServerSideEncryptionConfiguration: {
|
|
163
|
+
Rules: [
|
|
164
|
+
{
|
|
165
|
+
ApplyServerSideEncryptionByDefault: {
|
|
166
|
+
SSEAlgorithm: 'AES256'
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
}, {
|
|
172
|
+
onSuccess: ()=>handleSuccess(bucketName),
|
|
173
|
+
onError: (error)=>handleError(error, 'enable bucket encryption')
|
|
142
174
|
});
|
|
143
175
|
};
|
|
144
176
|
return /*#__PURE__*/ jsx(FormProvider, {
|
|
145
177
|
...useFormMethods,
|
|
146
178
|
children: /*#__PURE__*/ jsxs(Form, {
|
|
147
179
|
layout: {
|
|
148
|
-
kind:
|
|
149
|
-
title:
|
|
180
|
+
kind: 'page',
|
|
181
|
+
title: 'Create a New Bucket',
|
|
150
182
|
subTitle
|
|
151
183
|
},
|
|
152
184
|
requireMode: "partial",
|
|
@@ -174,7 +206,9 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
174
206
|
children: [
|
|
175
207
|
/*#__PURE__*/ jsx(FormSection, {
|
|
176
208
|
forceLabelWidth: convertRemToPixels(17.5),
|
|
177
|
-
children: /*#__PURE__*/ jsxs(
|
|
209
|
+
children: /*#__PURE__*/ jsxs(Stack, {
|
|
210
|
+
direction: "vertical",
|
|
211
|
+
gap: "r16",
|
|
178
212
|
children: [
|
|
179
213
|
/*#__PURE__*/ jsx(FormGroup, {
|
|
180
214
|
id: "name",
|
|
@@ -184,7 +218,7 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
184
218
|
content: /*#__PURE__*/ jsx(Input, {
|
|
185
219
|
id: "name",
|
|
186
220
|
autoFocus: true,
|
|
187
|
-
...register(
|
|
221
|
+
...register('name')
|
|
188
222
|
}),
|
|
189
223
|
labelHelpTooltip: /*#__PURE__*/ jsxs("ul", {
|
|
190
224
|
children: [
|
|
@@ -200,9 +234,20 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
200
234
|
]
|
|
201
235
|
}),
|
|
202
236
|
helpErrorPosition: "bottom",
|
|
203
|
-
error: errors.name ? errors.name?.type ===
|
|
237
|
+
error: errors.name ? errors.name?.type === 'string.pattern.base' ? bucketErrorMessage : errors.name?.message : void 0
|
|
204
238
|
}),
|
|
205
239
|
children,
|
|
240
|
+
s3Capabilities?.bucketEncryption && /*#__PURE__*/ jsx(FormGroup, {
|
|
241
|
+
id: "isEncryptionEnabled",
|
|
242
|
+
label: "Encryption",
|
|
243
|
+
labelHelpTooltip: "Objects stored in this bucket will be automatically encrypted.",
|
|
244
|
+
helpErrorPosition: "bottom",
|
|
245
|
+
content: /*#__PURE__*/ jsx(Checkbox, {
|
|
246
|
+
id: "isEncryptionEnabled",
|
|
247
|
+
label: isEncryptionEnabled ? 'Enabled' : 'Disabled',
|
|
248
|
+
...register('isEncryptionEnabled')
|
|
249
|
+
})
|
|
250
|
+
}),
|
|
206
251
|
/*#__PURE__*/ jsx(FormGroup, {
|
|
207
252
|
id: "isVersioning",
|
|
208
253
|
label: "Versioning",
|
|
@@ -217,12 +262,13 @@ const BucketCreate = ({ subTitle, validationSchema, validationContext, defaultVa
|
|
|
217
262
|
})
|
|
218
263
|
]
|
|
219
264
|
}),
|
|
220
|
-
help: isObjectLockEnabled ?
|
|
265
|
+
help: isObjectLockEnabled ? 'Automatically activated when Object-lock is Enabled' : void 0,
|
|
221
266
|
helpErrorPosition: "bottom",
|
|
222
267
|
content: /*#__PURE__*/ jsx(Checkbox, {
|
|
223
268
|
id: "isVersioning",
|
|
269
|
+
label: isVersioning ? 'Enabled' : 'Disabled',
|
|
224
270
|
disabled: isObjectLockEnabled,
|
|
225
|
-
...register(
|
|
271
|
+
...register('isVersioning')
|
|
226
272
|
})
|
|
227
273
|
})
|
|
228
274
|
]
|
|
@@ -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 };
|