@scality/data-browser-library 1.0.0-preview.2

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 (176) hide show
  1. package/dist/components/Editor.d.ts +12 -0
  2. package/dist/components/Editor.js +28 -0
  3. package/dist/components/__tests__/BucketList.test.d.ts +1 -0
  4. package/dist/components/__tests__/BucketList.test.js +225 -0
  5. package/dist/components/__tests__/BucketOverview.test.d.ts +1 -0
  6. package/dist/components/__tests__/BucketOverview.test.js +479 -0
  7. package/dist/components/__tests__/BucketPolicyPage.test.d.ts +1 -0
  8. package/dist/components/__tests__/BucketPolicyPage.test.js +213 -0
  9. package/dist/components/__tests__/CreateFolderButton.test.d.ts +1 -0
  10. package/dist/components/__tests__/CreateFolderButton.test.js +147 -0
  11. package/dist/components/__tests__/DeleteBucketButton.test.d.ts +1 -0
  12. package/dist/components/__tests__/DeleteBucketButton.test.js +272 -0
  13. package/dist/components/__tests__/DeleteObjectButton.test.d.ts +1 -0
  14. package/dist/components/__tests__/DeleteObjectButton.test.js +302 -0
  15. package/dist/components/__tests__/MetadataSearch.test.d.ts +1 -0
  16. package/dist/components/__tests__/MetadataSearch.test.js +201 -0
  17. package/dist/components/__tests__/ObjectList.test.d.ts +1 -0
  18. package/dist/components/__tests__/ObjectList.test.js +283 -0
  19. package/dist/components/__tests__/UploadButton.test.d.ts +1 -0
  20. package/dist/components/__tests__/UploadButton.test.js +144 -0
  21. package/dist/components/buckets/BucketDetails.d.ts +1 -0
  22. package/dist/components/buckets/BucketDetails.js +51 -0
  23. package/dist/components/buckets/BucketList.d.ts +12 -0
  24. package/dist/components/buckets/BucketList.js +136 -0
  25. package/dist/components/buckets/BucketLocation.d.ts +3 -0
  26. package/dist/components/buckets/BucketLocation.js +16 -0
  27. package/dist/components/buckets/BucketOverview.d.ts +14 -0
  28. package/dist/components/buckets/BucketOverview.js +209 -0
  29. package/dist/components/buckets/BucketPage.d.ts +2 -0
  30. package/dist/components/buckets/BucketPage.js +47 -0
  31. package/dist/components/buckets/BucketPolicyButton.d.ts +7 -0
  32. package/dist/components/buckets/BucketPolicyButton.js +18 -0
  33. package/dist/components/buckets/BucketPolicyPage.d.ts +1 -0
  34. package/dist/components/buckets/BucketPolicyPage.js +205 -0
  35. package/dist/components/buckets/DeleteBucketButton.d.ts +8 -0
  36. package/dist/components/buckets/DeleteBucketButton.js +78 -0
  37. package/dist/components/index.d.ts +12 -0
  38. package/dist/components/index.js +13 -0
  39. package/dist/components/layouts/BrowserPageLayout.d.ts +9 -0
  40. package/dist/components/layouts/BrowserPageLayout.js +46 -0
  41. package/dist/components/objects/CreateFolderButton.d.ts +29 -0
  42. package/dist/components/objects/CreateFolderButton.js +118 -0
  43. package/dist/components/objects/DeleteObjectButton.d.ts +8 -0
  44. package/dist/components/objects/DeleteObjectButton.js +191 -0
  45. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -0
  46. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +323 -0
  47. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +3 -0
  48. package/dist/components/objects/ObjectDetails/ObjectSummary.js +193 -0
  49. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +3 -0
  50. package/dist/components/objects/ObjectDetails/ObjectTags.js +300 -0
  51. package/dist/components/objects/ObjectDetails/index.d.ts +9 -0
  52. package/dist/components/objects/ObjectDetails/index.js +49 -0
  53. package/dist/components/objects/ObjectList.d.ts +40 -0
  54. package/dist/components/objects/ObjectList.js +407 -0
  55. package/dist/components/objects/ObjectPage.d.ts +1 -0
  56. package/dist/components/objects/ObjectPage.js +43 -0
  57. package/dist/components/objects/UploadButton.d.ts +34 -0
  58. package/dist/components/objects/UploadButton.js +229 -0
  59. package/dist/components/providers/DataBrowserProvider.d.ts +20 -0
  60. package/dist/components/providers/DataBrowserProvider.js +42 -0
  61. package/dist/components/search/MetadataSearch.d.ts +5 -0
  62. package/dist/components/search/MetadataSearch.js +162 -0
  63. package/dist/components/search/SearchHints.d.ts +8 -0
  64. package/dist/components/search/SearchHints.js +21 -0
  65. package/dist/components/ui/DeleteObjectModalContent.d.ts +5 -0
  66. package/dist/components/ui/DeleteObjectModalContent.js +71 -0
  67. package/dist/components/ui/Search.elements.d.ts +17 -0
  68. package/dist/components/ui/Search.elements.js +59 -0
  69. package/dist/components/ui/Table.elements.d.ts +36 -0
  70. package/dist/components/ui/Table.elements.js +87 -0
  71. package/dist/config/factory.d.ts +52 -0
  72. package/dist/config/factory.js +70 -0
  73. package/dist/config/types.d.ts +46 -0
  74. package/dist/config/types.js +0 -0
  75. package/dist/hooks/__tests__/useIsBucketEmpty.test.d.ts +1 -0
  76. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +122 -0
  77. package/dist/hooks/bucketConfiguration.d.ts +147 -0
  78. package/dist/hooks/bucketConfiguration.js +59 -0
  79. package/dist/hooks/bucketOperations.d.ts +36 -0
  80. package/dist/hooks/bucketOperations.js +12 -0
  81. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.d.ts +1 -0
  82. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +276 -0
  83. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.d.ts +1 -0
  84. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +259 -0
  85. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.d.ts +1 -0
  86. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +166 -0
  87. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.d.ts +1 -0
  88. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +200 -0
  89. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.d.ts +1 -0
  90. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +136 -0
  91. package/dist/hooks/factories/index.d.ts +18 -0
  92. package/dist/hooks/factories/index.js +5 -0
  93. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +13 -0
  94. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +76 -0
  95. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +8 -0
  96. package/dist/hooks/factories/useCreateS3LoginHook.js +22 -0
  97. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +5 -0
  98. package/dist/hooks/factories/useCreateS3MutationHook.js +50 -0
  99. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +3 -0
  100. package/dist/hooks/factories/useCreateS3QueryHook.js +30 -0
  101. package/dist/hooks/index.d.ts +8 -0
  102. package/dist/hooks/index.js +8 -0
  103. package/dist/hooks/loginOperations.d.ts +21 -0
  104. package/dist/hooks/loginOperations.js +9 -0
  105. package/dist/hooks/objectOperations.d.ts +190 -0
  106. package/dist/hooks/objectOperations.js +66 -0
  107. package/dist/hooks/presignedOperations.d.ts +73 -0
  108. package/dist/hooks/presignedOperations.js +72 -0
  109. package/dist/hooks/useIsBucketEmpty.d.ts +7 -0
  110. package/dist/hooks/useIsBucketEmpty.js +36 -0
  111. package/dist/hooks/useLoginMutation.d.ts +21 -0
  112. package/dist/hooks/useLoginMutation.js +9 -0
  113. package/dist/hooks/useS3Client.d.ts +1 -0
  114. package/dist/hooks/useS3Client.js +13 -0
  115. package/dist/index.d.ts +6 -0
  116. package/dist/index.js +6 -0
  117. package/dist/schemas/bucketPolicySchema.json +321 -0
  118. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -0
  119. package/dist/test/msw/handlers/deleteBucket.js +14 -0
  120. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -0
  121. package/dist/test/msw/handlers/getBucketAcl.js +96 -0
  122. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -0
  123. package/dist/test/msw/handlers/getBucketLocation.js +23 -0
  124. package/dist/test/msw/handlers/getBucketPolicy.d.ts +11 -0
  125. package/dist/test/msw/handlers/getBucketPolicy.js +72 -0
  126. package/dist/test/msw/handlers/headObject.d.ts +1 -0
  127. package/dist/test/msw/handlers/headObject.js +17 -0
  128. package/dist/test/msw/handlers/listBuckets.d.ts +1 -0
  129. package/dist/test/msw/handlers/listBuckets.js +24 -0
  130. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -0
  131. package/dist/test/msw/handlers/listObjectVersions.js +83 -0
  132. package/dist/test/msw/handlers/listObjects.d.ts +1 -0
  133. package/dist/test/msw/handlers/listObjects.js +66 -0
  134. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -0
  135. package/dist/test/msw/handlers/objectLegalHold.js +24 -0
  136. package/dist/test/msw/handlers/objectRetention.d.ts +1 -0
  137. package/dist/test/msw/handlers/objectRetention.js +27 -0
  138. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -0
  139. package/dist/test/msw/handlers/putBucketAcl.js +18 -0
  140. package/dist/test/msw/handlers/putObject.d.ts +1 -0
  141. package/dist/test/msw/handlers/putObject.js +16 -0
  142. package/dist/test/msw/handlers.d.ts +4 -0
  143. package/dist/test/msw/handlers.js +109 -0
  144. package/dist/test/msw/index.d.ts +2 -0
  145. package/dist/test/msw/index.js +3 -0
  146. package/dist/test/msw/server.d.ts +4 -0
  147. package/dist/test/msw/server.js +20 -0
  148. package/dist/test/msw/utils.d.ts +2 -0
  149. package/dist/test/msw/utils.js +13 -0
  150. package/dist/test/setup.d.ts +1 -0
  151. package/dist/test/setup.js +82 -0
  152. package/dist/test/testUtils.d.ts +82 -0
  153. package/dist/test/testUtils.js +236 -0
  154. package/dist/test/utils/errorHandling.test.d.ts +1 -0
  155. package/dist/test/utils/errorHandling.test.js +385 -0
  156. package/dist/types/index.d.ts +48 -0
  157. package/dist/types/index.js +0 -0
  158. package/dist/utils/deletion/index.d.ts +2 -0
  159. package/dist/utils/deletion/index.js +2 -0
  160. package/dist/utils/deletion/messages.d.ts +5 -0
  161. package/dist/utils/deletion/messages.js +29 -0
  162. package/dist/utils/deletion/types.d.ts +11 -0
  163. package/dist/utils/deletion/types.js +0 -0
  164. package/dist/utils/errorHandling.d.ts +54 -0
  165. package/dist/utils/errorHandling.js +79 -0
  166. package/dist/utils/hooks.d.ts +2 -0
  167. package/dist/utils/hooks.js +26 -0
  168. package/dist/utils/index.d.ts +2 -0
  169. package/dist/utils/index.js +2 -0
  170. package/dist/utils/proxyMiddleware.d.ts +18 -0
  171. package/dist/utils/proxyMiddleware.js +56 -0
  172. package/dist/utils/s3Client.d.ts +5 -0
  173. package/dist/utils/s3Client.js +35 -0
  174. package/dist/utils/useFeatures.d.ts +1 -0
  175. package/dist/utils/useFeatures.js +7 -0
  176. package/package.json +79 -0
@@ -0,0 +1,12 @@
1
+ import { EditorProps, BeforeMount } from "@monaco-editor/react";
2
+ interface EditorComponentProps {
3
+ value: string;
4
+ onChange: (value: string | undefined) => void;
5
+ readOnly?: boolean;
6
+ language?: string;
7
+ height?: string;
8
+ width?: string;
9
+ beforeMount?: BeforeMount;
10
+ }
11
+ export declare const Editor: React.FC<EditorComponentProps & EditorProps>;
12
+ export {};
@@ -0,0 +1,28 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import react from "@monaco-editor/react";
3
+ const Editor = ({ value, onChange, readOnly = false, language = "json", height = "400px", width = "100%", beforeMount, ...rest })=>{
4
+ const editorTheme = "vs-dark";
5
+ return /*#__PURE__*/ jsx(react, {
6
+ height: height,
7
+ width: width,
8
+ language: language,
9
+ value: value,
10
+ theme: editorTheme,
11
+ onChange: onChange,
12
+ options: {
13
+ readOnly,
14
+ scrollBeyondLastLine: false,
15
+ minimap: {
16
+ enabled: false
17
+ },
18
+ fontSize: 12,
19
+ lineNumbers: "on",
20
+ automaticLayout: true,
21
+ formatOnPaste: true,
22
+ formatOnType: true
23
+ },
24
+ beforeMount: beforeMount,
25
+ ...rest
26
+ });
27
+ };
28
+ export { Editor };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,225 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { fireEvent, render, screen } from "@testing-library/react";
3
+ import { MemoryRouter } from "react-router";
4
+ import { createTestWrapper, mockOffsetSize } from "../../test/testUtils.js";
5
+ import { BucketList } from "../buckets/BucketList.js";
6
+ const renderBucketList = (props = {})=>{
7
+ const Wrapper = createTestWrapper();
8
+ return render(/*#__PURE__*/ jsx(MemoryRouter, {
9
+ children: /*#__PURE__*/ jsx(Wrapper, {
10
+ children: /*#__PURE__*/ jsx(BucketList, {
11
+ buckets: [],
12
+ ...props
13
+ })
14
+ })
15
+ }));
16
+ };
17
+ const mockBuckets = [
18
+ {
19
+ Name: "test-bucket-1",
20
+ CreationDate: new Date("2024-01-15T10:30:00Z")
21
+ },
22
+ {
23
+ Name: "test-bucket-2",
24
+ CreationDate: new Date("2024-01-16T14:45:00Z")
25
+ },
26
+ {
27
+ Name: "test-bucket-3",
28
+ CreationDate: new Date("2024-01-17T09:15:00Z")
29
+ }
30
+ ];
31
+ describe("BucketList", ()=>{
32
+ beforeEach(()=>{
33
+ jest.clearAllMocks();
34
+ mockOffsetSize(800, 600);
35
+ });
36
+ it("shows a table with proper headers", ()=>{
37
+ renderBucketList({
38
+ buckets: mockBuckets
39
+ });
40
+ expect(screen.getByRole("grid")).toBeInTheDocument();
41
+ expect(screen.getByText("Bucket Name")).toBeInTheDocument();
42
+ expect(screen.getByText("Storage Location")).toBeInTheDocument();
43
+ expect(screen.getByText("Created on")).toBeInTheDocument();
44
+ });
45
+ it("displays buckets with their names as clickable links", ()=>{
46
+ const onNavigateToBucket = jest.fn();
47
+ renderBucketList({
48
+ buckets: mockBuckets,
49
+ onNavigateToBucket
50
+ });
51
+ expect(screen.getByText("test-bucket-1")).toBeInTheDocument();
52
+ expect(screen.getByText("test-bucket-2")).toBeInTheDocument();
53
+ expect(screen.getByText("test-bucket-3")).toBeInTheDocument();
54
+ fireEvent.click(screen.getByText("test-bucket-1"));
55
+ expect(onNavigateToBucket).toHaveBeenCalledWith("test-bucket-1");
56
+ });
57
+ it("displays creation dates in formatted format", ()=>{
58
+ renderBucketList({
59
+ buckets: mockBuckets
60
+ });
61
+ const gridElement = screen.getByRole("grid");
62
+ expect(gridElement).toHaveTextContent("2024");
63
+ const dateElements = screen.getAllByText(/2024/);
64
+ expect(dateElements.length).toBeGreaterThanOrEqual(3);
65
+ });
66
+ it("shows storage location when renderBucketLocation is provided", ()=>{
67
+ const renderBucketLocation = jest.fn((bucketName)=>/*#__PURE__*/ jsxs("span", {
68
+ children: [
69
+ "Location for ",
70
+ bucketName
71
+ ]
72
+ }));
73
+ renderBucketList({
74
+ buckets: mockBuckets,
75
+ renderBucketLocation
76
+ });
77
+ expect(renderBucketLocation).toHaveBeenCalledWith("test-bucket-1");
78
+ expect(renderBucketLocation).toHaveBeenCalledWith("test-bucket-2");
79
+ expect(renderBucketLocation).toHaveBeenCalledWith("test-bucket-3");
80
+ });
81
+ it("shows dash for storage location when renderBucketLocation is not provided", ()=>{
82
+ renderBucketList({
83
+ buckets: mockBuckets
84
+ });
85
+ const dashes = screen.getAllByText("-");
86
+ expect(dashes.length).toBeGreaterThan(0);
87
+ });
88
+ it("handles bucket selection when onBucketSelect is provided", ()=>{
89
+ const onBucketSelect = jest.fn();
90
+ renderBucketList({
91
+ buckets: mockBuckets,
92
+ onBucketSelect
93
+ });
94
+ const rows = screen.getAllByRole("row");
95
+ fireEvent.click(rows[1]);
96
+ expect(onBucketSelect).toHaveBeenCalledWith("test-bucket-3");
97
+ });
98
+ it("shows selected bucket when selectedBucketName is provided", ()=>{
99
+ renderBucketList({
100
+ buckets: mockBuckets,
101
+ selectedBucketName: "test-bucket-2"
102
+ });
103
+ const selectedRow = screen.getByRole("row", {
104
+ name: /test-bucket-2/
105
+ });
106
+ expect(selectedRow).toHaveAttribute("aria-selected", "true");
107
+ });
108
+ it("handles create bucket button click", ()=>{
109
+ const onCreateBucket = jest.fn();
110
+ renderBucketList({
111
+ buckets: mockBuckets,
112
+ onCreateBucket
113
+ });
114
+ const createButton = screen.getByRole("button", {
115
+ name: /create bucket/i
116
+ });
117
+ expect(createButton).toBeInTheDocument();
118
+ fireEvent.click(createButton);
119
+ expect(onCreateBucket).toHaveBeenCalled();
120
+ });
121
+ it("shows search functionality", ()=>{
122
+ renderBucketList({
123
+ buckets: mockBuckets
124
+ });
125
+ const searchInput = screen.getByRole("searchbox");
126
+ expect(searchInput).toBeInTheDocument();
127
+ expect(searchInput).toHaveAttribute("placeholder", "Example: Search");
128
+ });
129
+ it("handles empty buckets list", ()=>{
130
+ renderBucketList({
131
+ buckets: []
132
+ });
133
+ expect(screen.getByRole("grid")).toBeInTheDocument();
134
+ expect(screen.getByText("Bucket Name")).toBeInTheDocument();
135
+ });
136
+ it("handles buckets without names gracefully", ()=>{
137
+ const bucketsWithMissingNames = [
138
+ {
139
+ Name: void 0,
140
+ CreationDate: new Date()
141
+ },
142
+ {
143
+ Name: "",
144
+ CreationDate: new Date()
145
+ },
146
+ {
147
+ Name: "valid-bucket",
148
+ CreationDate: new Date()
149
+ }
150
+ ];
151
+ renderBucketList({
152
+ buckets: bucketsWithMissingNames
153
+ });
154
+ expect(screen.getByText("valid-bucket")).toBeInTheDocument();
155
+ const dashes = screen.getAllByText("-");
156
+ expect(dashes.length).toBeGreaterThan(0);
157
+ });
158
+ it("handles buckets without creation dates", ()=>{
159
+ const bucketsWithoutDates = [
160
+ {
161
+ Name: "bucket-1",
162
+ CreationDate: void 0
163
+ },
164
+ {
165
+ Name: "bucket-2"
166
+ }
167
+ ];
168
+ renderBucketList({
169
+ buckets: bucketsWithoutDates
170
+ });
171
+ expect(screen.getByText("bucket-1")).toBeInTheDocument();
172
+ expect(screen.getByText("bucket-2")).toBeInTheDocument();
173
+ });
174
+ it("works when no callbacks are provided", ()=>{
175
+ renderBucketList({
176
+ buckets: mockBuckets
177
+ });
178
+ expect(()=>{
179
+ fireEvent.click(screen.getByText("test-bucket-1"));
180
+ const createButton = screen.getByRole("button", {
181
+ name: /create bucket/i
182
+ });
183
+ fireEvent.click(createButton);
184
+ }).not.toThrow();
185
+ });
186
+ it("handles different bucket statuses", ()=>{
187
+ expect(()=>{
188
+ renderBucketList({
189
+ buckets: mockBuckets,
190
+ bucketStatus: "loading"
191
+ });
192
+ renderBucketList({
193
+ buckets: mockBuckets,
194
+ bucketStatus: "error"
195
+ });
196
+ renderBucketList({
197
+ buckets: mockBuckets,
198
+ bucketStatus: "success"
199
+ });
200
+ }).not.toThrow();
201
+ });
202
+ it("prevents event propagation when clicking bucket name link", ()=>{
203
+ const onNavigateToBucket = jest.fn();
204
+ const onBucketSelect = jest.fn();
205
+ renderBucketList({
206
+ buckets: mockBuckets,
207
+ onNavigateToBucket,
208
+ onBucketSelect
209
+ });
210
+ fireEvent.click(screen.getByText("test-bucket-1"));
211
+ expect(onNavigateToBucket).toHaveBeenCalledWith("test-bucket-1");
212
+ expect(onBucketSelect).not.toHaveBeenCalled();
213
+ });
214
+ it("does not select already selected bucket", ()=>{
215
+ const onBucketSelect = jest.fn();
216
+ renderBucketList({
217
+ buckets: mockBuckets,
218
+ selectedBucketName: "test-bucket-1",
219
+ onBucketSelect
220
+ });
221
+ const bucketName = screen.getByText("test-bucket-1");
222
+ fireEvent.click(bucketName.closest('[role="row"]') || bucketName);
223
+ expect(onBucketSelect).not.toHaveBeenCalled();
224
+ });
225
+ });
@@ -0,0 +1 @@
1
+ export {};