@scality/data-browser-library 1.0.0-preview.7 → 1.0.0-preview.9

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 (90) hide show
  1. package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
  2. package/dist/components/__tests__/BucketCreate.test.js +408 -0
  3. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +1 -0
  4. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
  5. package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
  6. package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
  7. package/dist/components/__tests__/BucketList.test.js +190 -0
  8. package/dist/components/__tests__/BucketOverview.test.js +298 -8
  9. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +1 -0
  10. package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
  11. package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
  12. package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
  13. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
  14. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
  15. package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
  16. package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
  17. package/dist/components/buckets/BucketCreate.d.ts +49 -0
  18. package/dist/components/buckets/BucketCreate.js +237 -0
  19. package/dist/components/buckets/BucketDetails.js +62 -10
  20. package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
  21. package/dist/components/buckets/BucketLifecycleFormPage.js +1070 -0
  22. package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
  23. package/dist/components/buckets/BucketLifecycleList.js +270 -0
  24. package/dist/components/buckets/BucketList.d.ts +5 -2
  25. package/dist/components/buckets/BucketList.js +38 -28
  26. package/dist/components/buckets/BucketOverview.d.ts +65 -4
  27. package/dist/components/buckets/BucketOverview.js +261 -179
  28. package/dist/components/buckets/BucketPage.js +1 -1
  29. package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
  30. package/dist/components/buckets/BucketReplicationFormPage.js +834 -0
  31. package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
  32. package/dist/components/buckets/BucketReplicationList.js +189 -0
  33. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
  34. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
  35. package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
  36. package/dist/components/buckets/EmptyBucketButton.js +232 -0
  37. package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
  38. package/dist/components/buckets/EmptyBucketSummary.js +60 -0
  39. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
  40. package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
  41. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +8 -8
  42. package/dist/components/index.d.ts +8 -1
  43. package/dist/components/index.js +9 -2
  44. package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
  45. package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
  46. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
  47. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
  48. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
  49. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +158 -0
  50. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
  51. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
  52. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
  53. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
  54. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
  55. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
  56. package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
  57. package/dist/components/ui/ArrayFieldActions.js +38 -0
  58. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
  59. package/dist/components/ui/ConfirmDeleteRuleModal.js +43 -0
  60. package/dist/components/ui/FilterFormSection.d.ts +44 -0
  61. package/dist/components/ui/FilterFormSection.js +159 -0
  62. package/dist/config/factory.d.ts +13 -2
  63. package/dist/config/factory.js +9 -6
  64. package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
  65. package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
  66. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +44 -1
  67. package/dist/hooks/factories/useCreateS3QueryHook.js +22 -1
  68. package/dist/hooks/index.d.ts +4 -0
  69. package/dist/hooks/index.js +5 -1
  70. package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
  71. package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
  72. package/dist/hooks/useEmptyBucket.d.ts +27 -0
  73. package/dist/hooks/useEmptyBucket.js +116 -0
  74. package/dist/hooks/useISVBucketDetection.d.ts +15 -0
  75. package/dist/hooks/useISVBucketDetection.js +27 -0
  76. package/dist/hooks/useTableRowSelection.d.ts +9 -0
  77. package/dist/hooks/useTableRowSelection.js +45 -0
  78. package/dist/test/setup.js +8 -0
  79. package/dist/test/testUtils.d.ts +99 -17
  80. package/dist/test/testUtils.js +64 -16
  81. package/dist/test/utils/errorHandling.test.js +39 -1
  82. package/dist/utils/constants.d.ts +12 -0
  83. package/dist/utils/constants.js +9 -0
  84. package/dist/utils/errorHandling.d.ts +9 -0
  85. package/dist/utils/errorHandling.js +6 -1
  86. package/dist/utils/index.d.ts +2 -0
  87. package/dist/utils/index.js +2 -0
  88. package/dist/utils/s3RuleUtils.d.ts +53 -0
  89. package/dist/utils/s3RuleUtils.js +101 -0
  90. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ import type { LifecycleRule } from "@aws-sdk/client-s3";
2
+ interface BucketLifecycleListProps {
3
+ bucketName: string;
4
+ lifecycleRules: LifecycleRule[];
5
+ lifecycleStatus?: "idle" | "loading" | "error" | "success";
6
+ onCreateRule?: () => void;
7
+ onEditRule?: (ruleId: string) => void;
8
+ }
9
+ export declare function BucketLifecycleList({ bucketName, lifecycleRules, lifecycleStatus, onCreateRule, onEditRule, }: BucketLifecycleListProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,270 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { ConstrainedText, FormattedDateTime, Icon, Stack, Tooltip, Wrap, spacing } from "@scality/core-ui";
3
+ import { Box, Button, Table } from "@scality/core-ui/dist/next";
4
+ import { useMemo } from "react";
5
+ import { useDeleteBucketLifecycle, useSetBucketLifecycle } from "../../hooks/bucketConfiguration.js";
6
+ import { DeleteBucketConfigRuleButton } from "./DeleteBucketConfigRuleButton.js";
7
+ import { useTableRowSelection } from "../../hooks/useTableRowSelection.js";
8
+ const pluralizeDays = (days)=>1 === days ? `${days} day` : `${days} days`;
9
+ const formatActions = (rule)=>{
10
+ const actions = [];
11
+ if (rule.Expiration) {
12
+ if (rule.Expiration.Days) actions.push({
13
+ text: `Expire current (${pluralizeDays(rule.Expiration.Days)})`,
14
+ description: `Expire current versions of objects after ${pluralizeDays(rule.Expiration.Days)}`
15
+ });
16
+ else if (rule.Expiration.Date) actions.push({
17
+ text: "Expire current",
18
+ description: "Expire current versions of objects on date",
19
+ date: rule.Expiration.Date
20
+ });
21
+ else if (rule.Expiration.ExpiredObjectDeleteMarker) actions.push({
22
+ text: "Delete expired markers",
23
+ description: "Delete expired object delete markers"
24
+ });
25
+ }
26
+ if (rule.NoncurrentVersionExpiration?.NoncurrentDays) {
27
+ const keepText = rule.NoncurrentVersionExpiration.NewerNoncurrentVersions ? `, keep ${rule.NoncurrentVersionExpiration.NewerNoncurrentVersions}` : "";
28
+ const keepDescription = rule.NoncurrentVersionExpiration.NewerNoncurrentVersions ? `, keep ${rule.NoncurrentVersionExpiration.NewerNoncurrentVersions} newest versions` : "";
29
+ actions.push({
30
+ text: `Expire noncurrent (${pluralizeDays(rule.NoncurrentVersionExpiration.NoncurrentDays)}${keepText})`,
31
+ description: `Permanently delete noncurrent versions of objects after ${pluralizeDays(rule.NoncurrentVersionExpiration.NoncurrentDays)}${keepDescription}`
32
+ });
33
+ }
34
+ if (rule.Transitions && rule.Transitions.length > 0) rule.Transitions.forEach((transition)=>{
35
+ if (transition.Days) actions.push({
36
+ text: `Transition current (${pluralizeDays(transition.Days)})`,
37
+ description: `Transition current versions of objects after ${pluralizeDays(transition.Days)}`
38
+ });
39
+ else if (transition.Date) actions.push({
40
+ text: "Transition current",
41
+ description: "Transition current versions of objects on date",
42
+ date: transition.Date
43
+ });
44
+ });
45
+ if (rule.NoncurrentVersionTransitions && rule.NoncurrentVersionTransitions.length > 0) rule.NoncurrentVersionTransitions.forEach((transition)=>{
46
+ if (transition.NoncurrentDays) {
47
+ const keepText = transition.NewerNoncurrentVersions ? `, keep ${transition.NewerNoncurrentVersions}` : "";
48
+ const keepDescription = transition.NewerNoncurrentVersions ? `, keep ${transition.NewerNoncurrentVersions} newest versions` : "";
49
+ actions.push({
50
+ text: `Transition noncurrent (${pluralizeDays(transition.NoncurrentDays)}${keepText})`,
51
+ description: `Transition noncurrent versions of objects after ${pluralizeDays(transition.NoncurrentDays)}${keepDescription}`
52
+ });
53
+ }
54
+ });
55
+ if (rule.AbortIncompleteMultipartUpload?.DaysAfterInitiation) actions.push({
56
+ text: `Abort Incomplete MPU (${pluralizeDays(rule.AbortIncompleteMultipartUpload.DaysAfterInitiation)})`,
57
+ description: `Abort incomplete multipart uploads after ${pluralizeDays(rule.AbortIncompleteMultipartUpload.DaysAfterInitiation)}`
58
+ });
59
+ return actions.length > 0 ? actions : [
60
+ {
61
+ text: "-",
62
+ description: "-"
63
+ }
64
+ ];
65
+ };
66
+ function BucketLifecycleList({ bucketName, lifecycleRules, lifecycleStatus, onCreateRule, onEditRule }) {
67
+ const updateLifecycleMutation = useSetBucketLifecycle();
68
+ const deleteLifecycleMutation = useDeleteBucketLifecycle();
69
+ const columns = useMemo(()=>[
70
+ {
71
+ Header: "Rule ID",
72
+ accessor: "ID",
73
+ id: "id",
74
+ Cell: ({ value })=>/*#__PURE__*/ jsx(ConstrainedText, {
75
+ text: value || "-",
76
+ lineClamp: 2
77
+ }),
78
+ cellStyle: {
79
+ flex: "1",
80
+ width: "unset"
81
+ }
82
+ },
83
+ {
84
+ Header: "Status",
85
+ accessor: "Status",
86
+ id: "status",
87
+ Cell: ({ value })=>{
88
+ const statusText = "Enabled" === value ? "Active" : "Disabled" === value ? "Inactive" : value;
89
+ return /*#__PURE__*/ jsx("span", {
90
+ children: statusText || "-"
91
+ });
92
+ },
93
+ cellStyle: {
94
+ width: "unset",
95
+ flex: "0.5"
96
+ }
97
+ },
98
+ {
99
+ Header: "Actions",
100
+ accessor: "Actions",
101
+ id: "actions",
102
+ Cell: ({ value })=>{
103
+ if (!value || 0 === value.length || 1 === value.length && "-" === value[0].text) return /*#__PURE__*/ jsx("span", {
104
+ children: "-"
105
+ });
106
+ const firstAction = value[0];
107
+ const remainingCount = value.length - 1;
108
+ const renderWithDate = (text, date)=>{
109
+ if (date) return /*#__PURE__*/ jsxs(Fragment, {
110
+ children: [
111
+ text,
112
+ " (",
113
+ /*#__PURE__*/ jsx(FormattedDateTime, {
114
+ format: "date",
115
+ value: "string" == typeof date ? new Date(date) : date
116
+ }),
117
+ ")"
118
+ ]
119
+ });
120
+ return text;
121
+ };
122
+ const renderAction = (action)=>renderWithDate(action.text, action.date);
123
+ const renderDescription = (action)=>renderWithDate(action.description, action.date);
124
+ const multiActionTooltip = /*#__PURE__*/ jsx("ul", {
125
+ style: {
126
+ margin: 0,
127
+ paddingLeft: "1.5rem"
128
+ },
129
+ children: value.map((action, index)=>/*#__PURE__*/ jsx("li", {
130
+ children: renderDescription(action)
131
+ }, index))
132
+ });
133
+ if (value.length > 1) return /*#__PURE__*/ jsxs(Stack, {
134
+ gap: "r4",
135
+ direction: "horizontal",
136
+ children: [
137
+ /*#__PURE__*/ jsxs("span", {
138
+ children: [
139
+ renderAction(firstAction),
140
+ ", +",
141
+ remainingCount
142
+ ]
143
+ }),
144
+ /*#__PURE__*/ jsx(Tooltip, {
145
+ overlay: multiActionTooltip,
146
+ placement: "top",
147
+ overlayStyle: {
148
+ maxWidth: "30rem"
149
+ },
150
+ children: /*#__PURE__*/ jsx("span", {
151
+ style: {
152
+ cursor: "help"
153
+ },
154
+ children: /*#__PURE__*/ jsx(Icon, {
155
+ name: "Info",
156
+ size: "sm"
157
+ })
158
+ })
159
+ })
160
+ ]
161
+ });
162
+ return /*#__PURE__*/ jsx("span", {
163
+ children: renderAction(firstAction)
164
+ });
165
+ },
166
+ cellStyle: {
167
+ width: "unset",
168
+ flex: "1.5"
169
+ }
170
+ },
171
+ {
172
+ Header: "",
173
+ accessor: "ID",
174
+ id: "operations",
175
+ cellStyle: {
176
+ flex: "0.5",
177
+ textAlign: "right",
178
+ paddingRight: spacing.r16,
179
+ width: "unset"
180
+ },
181
+ Cell: ({ value })=>/*#__PURE__*/ jsxs(Box, {
182
+ display: "flex",
183
+ gap: spacing.r8,
184
+ justifyContent: "flex-end",
185
+ children: [
186
+ /*#__PURE__*/ jsx(Button, {
187
+ icon: /*#__PURE__*/ jsx(Icon, {
188
+ name: "Edit"
189
+ }),
190
+ variant: "secondary",
191
+ type: "button",
192
+ onClick: (e)=>{
193
+ e.stopPropagation();
194
+ onEditRule?.(value);
195
+ },
196
+ "aria-label": "Edit rule",
197
+ tooltip: {
198
+ overlay: "Edit rule"
199
+ }
200
+ }),
201
+ /*#__PURE__*/ jsx(DeleteBucketConfigRuleButton, {
202
+ bucketName: bucketName,
203
+ ruleId: value,
204
+ rules: lifecycleRules,
205
+ ruleType: "lifecycle",
206
+ updateMutation: updateLifecycleMutation,
207
+ deleteMutation: deleteLifecycleMutation,
208
+ buildUpdateInput: (remainingRules)=>({
209
+ LifecycleConfiguration: {
210
+ Rules: remainingRules
211
+ }
212
+ }),
213
+ successMessage: "Lifecycle rule deleted successfully",
214
+ errorMessage: "Failed to delete lifecycle rule"
215
+ })
216
+ ]
217
+ })
218
+ }
219
+ ], [
220
+ bucketName,
221
+ lifecycleRules,
222
+ onEditRule
223
+ ]);
224
+ const tableData = useMemo(()=>lifecycleRules.map((rule)=>({
225
+ ID: rule.ID || "-",
226
+ Status: rule.Status || "Disabled",
227
+ Actions: formatActions(rule),
228
+ rule
229
+ })), [
230
+ lifecycleRules
231
+ ]);
232
+ const { selectedId, onRowSelected } = useTableRowSelection(tableData);
233
+ return /*#__PURE__*/ jsxs(Table, {
234
+ columns: columns,
235
+ data: tableData,
236
+ status: lifecycleStatus,
237
+ defaultSortingKey: "id",
238
+ entityName: {
239
+ en: {
240
+ singular: "lifecycle rule",
241
+ plural: "lifecycle rules"
242
+ }
243
+ },
244
+ children: [
245
+ /*#__PURE__*/ jsx(Wrap, {
246
+ padding: spacing.r16,
247
+ children: /*#__PURE__*/ jsx(Box, {
248
+ display: "flex",
249
+ justifyContent: "flex-end",
250
+ children: /*#__PURE__*/ jsx(Button, {
251
+ icon: /*#__PURE__*/ jsx(Icon, {
252
+ name: "Create-add"
253
+ }),
254
+ label: "Create Rule",
255
+ variant: "primary",
256
+ onClick: onCreateRule,
257
+ type: "button"
258
+ })
259
+ })
260
+ }),
261
+ /*#__PURE__*/ jsx(Table.SingleSelectableContent, {
262
+ rowHeight: "h48",
263
+ separationLineVariant: "backgroundLevel1",
264
+ selectedId: selectedId?.toString(),
265
+ onRowSelected: onRowSelected
266
+ })
267
+ ]
268
+ });
269
+ }
270
+ export { BucketLifecycleList };
@@ -1,5 +1,6 @@
1
1
  import type { Bucket } from "@aws-sdk/client-s3";
2
- interface BucketListProps {
2
+ import type { Column } from "@scality/core-ui/dist/components/tablev2/Tablev2.component";
3
+ interface BucketListProps<TData extends Bucket & Record<string, unknown> = Bucket & Record<string, unknown>> {
3
4
  buckets: Bucket[];
4
5
  bucketStatus?: "idle" | "loading" | "error" | "success";
5
6
  selectedBucketName?: string | null;
@@ -7,6 +8,8 @@ interface BucketListProps {
7
8
  onCreateBucket?: () => void;
8
9
  onNavigateToBucket?: (bucketName: string) => void;
9
10
  renderBucketLocation?: (bucketName: string) => React.ReactNode;
11
+ additionalColumns?: Column<TData>[];
12
+ transformBucketData?: (bucket: Bucket) => TData;
10
13
  }
11
- export declare function BucketList({ buckets, bucketStatus, selectedBucketName, onBucketSelect, onCreateBucket, onNavigateToBucket, renderBucketLocation, }: BucketListProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function BucketList<TData extends Bucket & Record<string, unknown> = Bucket & Record<string, unknown>>({ buckets, bucketStatus, selectedBucketName, onBucketSelect, onCreateBucket, onNavigateToBucket, renderBucketLocation, additionalColumns, transformBucketData, }: BucketListProps<TData>): import("react/jsx-runtime").JSX.Element;
12
15
  export {};
@@ -3,8 +3,9 @@ import { ConstrainedText, FormattedDateTime, Icon, Link, Wrap, spacing } from "@
3
3
  import { Box, Button, Table } from "@scality/core-ui/dist/next";
4
4
  import { useMemo } from "react";
5
5
  const SEARCH_QUERY_PARAM = "search";
6
- function BucketList({ buckets, bucketStatus, selectedBucketName, onBucketSelect, onCreateBucket, onNavigateToBucket, renderBucketLocation }) {
7
- const columns = useMemo(()=>[
6
+ function BucketList({ buckets, bucketStatus, selectedBucketName, onBucketSelect, onCreateBucket, onNavigateToBucket, renderBucketLocation, additionalColumns, transformBucketData }) {
7
+ const columns = useMemo(()=>{
8
+ const baseColumns = [
8
9
  {
9
10
  Header: "Bucket Name",
10
11
  accessor: "Name",
@@ -43,38 +44,47 @@ function BucketList({ buckets, bucketStatus, selectedBucketName, onBucketSelect,
43
44
  width: "unset",
44
45
  flex: "1.2"
45
46
  }
47
+ }
48
+ ];
49
+ if (additionalColumns) baseColumns.push(...additionalColumns);
50
+ baseColumns.push({
51
+ Header: "Created on",
52
+ accessor: "CreationDate",
53
+ id: "date",
54
+ cellStyle: {
55
+ flex: "1",
56
+ textAlign: "right",
57
+ paddingRight: spacing.r16,
58
+ width: "unset"
46
59
  },
47
- {
48
- Header: "Created on",
49
- accessor: "CreationDate",
50
- id: "date",
51
- cellStyle: {
52
- flex: "1",
53
- textAlign: "right",
54
- paddingRight: spacing.r16,
55
- width: "unset"
56
- },
57
- Cell: ({ value, row })=>{
58
- const date = value || row.original?.CreationDate;
59
- if (!date) return /*#__PURE__*/ jsx("span", {
60
- children: "-"
61
- });
62
- return /*#__PURE__*/ jsx(FormattedDateTime, {
63
- format: "date-time-second",
64
- value: new Date(date)
65
- });
66
- }
60
+ Cell: ({ value, row })=>{
61
+ const date = value || row.original?.CreationDate;
62
+ if (!date) return /*#__PURE__*/ jsx("span", {
63
+ children: "-"
64
+ });
65
+ return /*#__PURE__*/ jsx(FormattedDateTime, {
66
+ format: "date-time-second",
67
+ value: new Date(date)
68
+ });
67
69
  }
68
- ], [
70
+ });
71
+ return baseColumns;
72
+ }, [
69
73
  onNavigateToBucket,
70
- renderBucketLocation
74
+ renderBucketLocation,
75
+ additionalColumns
71
76
  ]);
72
- const tableData = useMemo(()=>buckets.map(({ Name, CreationDate, ...bucket })=>({
77
+ const tableData = useMemo(()=>buckets.map((bucket)=>{
78
+ if (transformBucketData) return transformBucketData(bucket);
79
+ const { Name, CreationDate, ...rest } = bucket;
80
+ return {
73
81
  Name,
74
82
  CreationDate,
75
- ...bucket
76
- })), [
77
- buckets
83
+ ...rest
84
+ };
85
+ }), [
86
+ buckets,
87
+ transformBucketData
78
88
  ]);
79
89
  const selectedId = useMemo(()=>{
80
90
  if (buckets && selectedBucketName) return buckets.findIndex((bucket)=>bucket.Name === selectedBucketName);
@@ -1,14 +1,75 @@
1
1
  import React from "react";
2
2
  interface BucketOverviewProps {
3
3
  bucketName: string;
4
+ children: React.ReactNode;
5
+ }
6
+ interface ActionsProps {
4
7
  onEmptyBucket?: () => void;
5
8
  onDeleteBucket?: () => void;
6
- onEditPolicy?: (bucketName: string) => void;
7
- renderBucketLocation?: (bucketName: string) => React.ReactNode;
8
- renderDeleteButton?: (bucketName: string) => React.ReactNode;
9
9
  renderEmptyButton?: (bucketName: string) => React.ReactNode;
10
+ renderDeleteButton?: (bucketName: string) => React.ReactNode;
10
11
  isEmptyBucketDisabled?: boolean;
11
12
  isDeleteBucketDisabled?: boolean;
12
13
  }
13
- declare const BucketOverview: React.FC<BucketOverviewProps>;
14
+ declare const Actions: React.FC<ActionsProps>;
15
+ interface SectionProps {
16
+ title: string;
17
+ children: React.ReactNode;
18
+ }
19
+ declare const Section: React.FC<SectionProps>;
20
+ interface FieldProps {
21
+ label: string;
22
+ value?: React.ReactNode;
23
+ loading?: boolean;
24
+ error?: boolean;
25
+ errorMessage?: string;
26
+ children?: React.ReactNode;
27
+ actions?: React.ReactNode;
28
+ }
29
+ declare const Field: React.FC<FieldProps>;
30
+ interface SectionsProps {
31
+ children: React.ReactNode;
32
+ }
33
+ declare const Sections: React.FC<SectionsProps>;
34
+ interface GeneralSectionProps {
35
+ nameField?: React.ReactNode;
36
+ versioningField?: React.ReactNode;
37
+ locationField?: React.ReactNode;
38
+ renderName?: (bucketName: string) => React.ReactNode;
39
+ renderVersioning?: (bucketName: string) => React.ReactNode;
40
+ renderLocation?: (bucketName: string) => React.ReactNode;
41
+ }
42
+ declare const GeneralSection: React.FC<GeneralSectionProps>;
43
+ interface DataProtectionSectionProps {
44
+ objectLockField?: React.ReactNode;
45
+ defaultRetentionField?: React.ReactNode;
46
+ renderObjectLock?: (bucketName: string) => React.ReactNode;
47
+ renderDefaultRetention?: (bucketName: string) => React.ReactNode;
48
+ }
49
+ declare const DataProtectionSection: React.FC<DataProtectionSectionProps>;
50
+ interface PermissionsSectionProps {
51
+ onEditPolicy?: (bucketName: string) => void;
52
+ ownerField?: React.ReactNode;
53
+ aclField?: React.ReactNode;
54
+ corsField?: React.ReactNode;
55
+ publicField?: React.ReactNode;
56
+ bucketPolicyField?: React.ReactNode;
57
+ renderOwner?: (bucketName: string) => React.ReactNode;
58
+ renderAcl?: (bucketName: string) => React.ReactNode;
59
+ renderCors?: (bucketName: string) => React.ReactNode;
60
+ renderPublic?: (bucketName: string) => React.ReactNode;
61
+ renderBucketPolicy?: (bucketName: string, onEditPolicy?: (name: string) => void) => React.ReactNode;
62
+ }
63
+ declare const PermissionsSection: React.FC<PermissionsSectionProps>;
64
+ type BucketOverviewComponent = React.FC<BucketOverviewProps> & {
65
+ Actions: typeof Actions;
66
+ Sections: typeof Sections;
67
+ Section: typeof Section;
68
+ Field: typeof Field;
69
+ GeneralSection: typeof GeneralSection;
70
+ DataProtectionSection: typeof DataProtectionSection;
71
+ PermissionsSection: typeof PermissionsSection;
72
+ };
73
+ declare const BucketOverview: BucketOverviewComponent;
14
74
  export { BucketOverview };
75
+ export { Section as BucketOverviewSection, Field as BucketOverviewField };