@scality/data-browser-library 1.0.0-preview.15 → 1.0.0-preview.17
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 +4 -19
- package/dist/components/__tests__/BucketDetails.test.js +4 -4
- package/dist/components/__tests__/BucketList.test.js +2 -2
- package/dist/components/__tests__/BucketOverview.test.js +4 -4
- package/dist/components/__tests__/ObjectList.test.js +4 -4
- package/dist/components/buckets/BucketOverview.js +2 -3
- package/dist/components/buckets/BucketPage.js +3 -3
- package/dist/components/buckets/notifications/EventsSection.js +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +3 -2
- package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +3 -3
- package/dist/components/objects/ObjectList.js +1 -1
- package/dist/components/objects/UploadButton.js +3 -3
- package/dist/components/providers/DataBrowserProvider.d.ts +9 -9
- package/dist/components/providers/DataBrowserProvider.js +41 -41
- package/dist/components/providers/QueryProvider.d.ts +9 -0
- package/dist/components/providers/QueryProvider.js +22 -0
- 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 +6 -65
- package/dist/config/factory.js +18 -82
- package/dist/config/types.d.ts +85 -41
- package/dist/hooks/__tests__/useISVBucketDetection.test.js +2 -2
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/useDataBrowserNavigate.d.ts +16 -2
- package/dist/hooks/useFeatures.d.ts +7 -0
- package/dist/hooks/useFeatures.js +8 -0
- package/dist/hooks/useISVBucketDetection.js +2 -2
- package/dist/hooks/useS3Client.d.ts +2 -1
- package/dist/hooks/useS3Client.js +2 -2
- package/dist/{utils → hooks}/useSupportedNotificationEvents.d.ts +1 -1
- package/dist/{utils → hooks}/useSupportedNotificationEvents.js +2 -1
- package/dist/test/setup.js +0 -17
- package/dist/test/testUtils.d.ts +0 -23
- package/dist/test/testUtils.js +3 -48
- package/dist/types/index.d.ts +2 -6
- 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/proxyMiddleware.d.ts +32 -13
- package/dist/utils/proxyMiddleware.js +84 -25
- package/dist/utils/s3Client.d.ts +12 -2
- package/dist/utils/s3Client.js +5 -26
- package/package.json +5 -5
- package/dist/utils/useFeatures.d.ts +0 -1
- package/dist/utils/useFeatures.js +0 -7
|
@@ -2,26 +2,11 @@ import React from 'react';
|
|
|
2
2
|
import type { DataBrowserUIProps } from '../config/types';
|
|
3
3
|
/**
|
|
4
4
|
* DataBrowserUI component - Main UI component for data browser.
|
|
5
|
-
* Must be wrapped with DataBrowserProvider for S3
|
|
5
|
+
* Must be wrapped with DataBrowserProvider for S3 configuration context,
|
|
6
6
|
* and a BrowserRouter for routing.
|
|
7
7
|
*
|
|
8
|
-
* Uses relative routing for route definitions
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```tsx
|
|
13
|
-
* <BrowserRouter>
|
|
14
|
-
* <DataBrowserProvider
|
|
15
|
-
* getS3Config={getS3Config}
|
|
16
|
-
* theme={theme}
|
|
17
|
-
* >
|
|
18
|
-
* <Routes>
|
|
19
|
-
* <Route path="/accounts/:accountName/buckets/*" element={
|
|
20
|
-
* <DataBrowserUI basePath="/accounts/my-account" />
|
|
21
|
-
* } />
|
|
22
|
-
* </Routes>
|
|
23
|
-
* </DataBrowserProvider>
|
|
24
|
-
* </BrowserRouter>
|
|
25
|
-
* ```
|
|
8
|
+
* Uses relative routing for route definitions. The `basePath` prop is used internally
|
|
9
|
+
* by `useDataBrowserNavigate()` to prefix all navigation paths, allowing the UI to be
|
|
10
|
+
* mounted at any route within your application.
|
|
26
11
|
*/
|
|
27
12
|
export declare const DataBrowserUI: React.FC<DataBrowserUIProps>;
|
|
@@ -5,11 +5,11 @@ import { BucketDetails } from "../buckets/BucketDetails.js";
|
|
|
5
5
|
import { applyBucketMocks, createTestWrapper } from "../../test/testUtils.js";
|
|
6
6
|
import { useGetBucketAcl, useGetBucketCors, useGetBucketLifecycle, useGetBucketLocation, useGetBucketObjectLockConfiguration, useGetBucketPolicy, useGetBucketReplication, useGetBucketTagging, useGetBucketVersioning } from "../../hooks/index.js";
|
|
7
7
|
import { useISVBucketStatus } from "../../hooks/useISVBucketDetection.js";
|
|
8
|
-
import { useFeatures } from "../../
|
|
9
|
-
import * as
|
|
8
|
+
import { useFeatures } from "../../hooks/useFeatures.js";
|
|
9
|
+
import * as __rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c from "../../contexts/DataBrowserUICustomizationContext.js";
|
|
10
10
|
jest.mock('../../hooks');
|
|
11
11
|
jest.mock('../../hooks/useISVBucketDetection');
|
|
12
|
-
jest.mock('../../
|
|
12
|
+
jest.mock('../../hooks/useFeatures');
|
|
13
13
|
const mockUseParams = jest.fn();
|
|
14
14
|
const mockUseNavigate = jest.fn();
|
|
15
15
|
jest.mock('react-router', ()=>({
|
|
@@ -29,7 +29,7 @@ const mockUseGetBucketTagging = jest.mocked(useGetBucketTagging);
|
|
|
29
29
|
const mockUseISVBucketStatus = jest.mocked(useISVBucketStatus);
|
|
30
30
|
const mockUseFeatures = jest.mocked(useFeatures);
|
|
31
31
|
const mockUseDataBrowserUICustomization = (config = {})=>{
|
|
32
|
-
jest.spyOn(
|
|
32
|
+
jest.spyOn(__rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c, 'useDataBrowserUICustomization').mockReturnValue(config);
|
|
33
33
|
};
|
|
34
34
|
const renderBucketDetails = ()=>{
|
|
35
35
|
const Wrapper = createTestWrapper();
|
|
@@ -3,9 +3,9 @@ import { fireEvent, render, screen } from "@testing-library/react";
|
|
|
3
3
|
import { MemoryRouter } from "react-router";
|
|
4
4
|
import { createTestWrapper, mockOffsetSize } from "../../test/testUtils.js";
|
|
5
5
|
import { BucketList } from "../buckets/BucketList.js";
|
|
6
|
-
import * as
|
|
6
|
+
import * as __rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c from "../../contexts/DataBrowserUICustomizationContext.js";
|
|
7
7
|
const mockUseDataBrowserUICustomization = (config = {})=>{
|
|
8
|
-
jest.spyOn(
|
|
8
|
+
jest.spyOn(__rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c, 'useDataBrowserUICustomization').mockReturnValue(config);
|
|
9
9
|
};
|
|
10
10
|
const renderBucketList = (props = {})=>{
|
|
11
11
|
const Wrapper = createTestWrapper();
|
|
@@ -5,10 +5,10 @@ import { MemoryRouter } from "react-router";
|
|
|
5
5
|
import { useGetBucketAcl, useGetBucketCors, useGetBucketLocation, useGetBucketObjectLockConfiguration, useGetBucketPolicy, useGetBucketTagging, useGetBucketVersioning, useISVBucketStatus } from "../../hooks/index.js";
|
|
6
6
|
import { applyBucketMocks, createTestWrapper } from "../../test/testUtils.js";
|
|
7
7
|
import { BucketOverview, useBucketOverviewContext } from "../buckets/BucketOverview.js";
|
|
8
|
-
import { useFeatures } from "../../
|
|
9
|
-
import * as
|
|
8
|
+
import { useFeatures } from "../../hooks/useFeatures.js";
|
|
9
|
+
import * as __rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c from "../../contexts/DataBrowserUICustomizationContext.js";
|
|
10
10
|
jest.mock('../../hooks');
|
|
11
|
-
jest.mock('../../
|
|
11
|
+
jest.mock('../../hooks/useFeatures');
|
|
12
12
|
const mockUseGetBucketVersioning = jest.mocked(useGetBucketVersioning);
|
|
13
13
|
const mockUseGetBucketAcl = jest.mocked(useGetBucketAcl);
|
|
14
14
|
const mockUseGetBucketLocation = jest.mocked(useGetBucketLocation);
|
|
@@ -19,7 +19,7 @@ const mockUseGetBucketTagging = jest.mocked(useGetBucketTagging);
|
|
|
19
19
|
const mockUseISVBucketStatus = jest.mocked(useISVBucketStatus);
|
|
20
20
|
const mockUseFeatures = jest.mocked(useFeatures);
|
|
21
21
|
const mockUseDataBrowserUICustomization = (config = {})=>{
|
|
22
|
-
jest.spyOn(
|
|
22
|
+
jest.spyOn(__rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c, 'useDataBrowserUICustomization').mockReturnValue(config);
|
|
23
23
|
};
|
|
24
24
|
const renderBucketOverview = (props = {})=>{
|
|
25
25
|
const { bucketName = 'test-bucket', onEmptyBucket, onDeleteBucket, onEditPolicy, renderEmptyButton, renderDeleteButton, isEmptyBucketDisabled, isDeleteBucketDisabled } = props;
|
|
@@ -5,7 +5,7 @@ import { createTestWrapper, mockOffsetSize, setupMswServer } from "../../test/te
|
|
|
5
5
|
import { useListObjectVersions, useListObjects } from "../../hooks/index.js";
|
|
6
6
|
import { ObjectList } from "../objects/ObjectList.js";
|
|
7
7
|
import { DataBrowserUICustomizationProvider } from "../../contexts/DataBrowserUICustomizationContext.js";
|
|
8
|
-
import * as
|
|
8
|
+
import * as __rspack_external__hooks_useFeatures_js_a6a84786 from "../../hooks/useFeatures.js";
|
|
9
9
|
setupMswServer();
|
|
10
10
|
const renderObjectList = (props = {}, customization)=>{
|
|
11
11
|
const Wrapper = createTestWrapper();
|
|
@@ -32,7 +32,7 @@ describe('ObjectList', ()=>{
|
|
|
32
32
|
beforeEach(()=>{
|
|
33
33
|
jest.clearAllMocks();
|
|
34
34
|
mockOffsetSize(800, 600);
|
|
35
|
-
jest.spyOn(
|
|
35
|
+
jest.spyOn(__rspack_external__hooks_useFeatures_js_a6a84786, 'useFeatures').mockReturnValue(false);
|
|
36
36
|
});
|
|
37
37
|
afterEach(()=>{
|
|
38
38
|
jest.restoreAllMocks();
|
|
@@ -284,7 +284,7 @@ describe('ObjectList', ()=>{
|
|
|
284
284
|
});
|
|
285
285
|
describe('Search Features', ()=>{
|
|
286
286
|
it('renders table search when metadata-search feature is disabled', async ()=>{
|
|
287
|
-
jest.spyOn(
|
|
287
|
+
jest.spyOn(__rspack_external__hooks_useFeatures_js_a6a84786, 'useFeatures').mockReturnValue(false);
|
|
288
288
|
renderObjectList();
|
|
289
289
|
await waitFor(()=>{
|
|
290
290
|
expect(screen.getByRole('grid')).toBeInTheDocument();
|
|
@@ -292,7 +292,7 @@ describe('ObjectList', ()=>{
|
|
|
292
292
|
expect(screen.queryByPlaceholderText(/Metadata Search/i)).not.toBeInTheDocument();
|
|
293
293
|
});
|
|
294
294
|
it('renders MetadataSearch component when metadata-search feature is enabled', async ()=>{
|
|
295
|
-
jest.spyOn(
|
|
295
|
+
jest.spyOn(__rspack_external__hooks_useFeatures_js_a6a84786, 'useFeatures').mockReturnValue(true);
|
|
296
296
|
renderObjectList();
|
|
297
297
|
await waitFor(()=>{
|
|
298
298
|
expect(screen.getByRole('grid')).toBeInTheDocument();
|
|
@@ -6,7 +6,7 @@ import { useDataBrowserUICustomization } from "../../contexts/DataBrowserUICusto
|
|
|
6
6
|
import { useGetBucketAcl, useGetBucketCors, useGetBucketObjectLockConfiguration, useGetBucketPolicy, useGetBucketVersioning } from "../../hooks/index.js";
|
|
7
7
|
import { isNotFoundError } from "../../utils/errorHandling.js";
|
|
8
8
|
import { EditRetentionButton } from "../objects/ObjectLock/EditRetentionButton.js";
|
|
9
|
-
import {
|
|
9
|
+
import { useDataBrowserConfig } from "../providers/DataBrowserProvider.js";
|
|
10
10
|
import { Body, Group, GroupContent, GroupName, GroupValues, Key, Row, Table, TableContainer, Value } from "../ui/Table.elements.js";
|
|
11
11
|
import { BucketLocation } from "./BucketLocation.js";
|
|
12
12
|
import { BucketPolicyButton } from "./BucketPolicyButton.js";
|
|
@@ -401,8 +401,7 @@ DataProtectionSection.displayName = 'BucketOverview.DataProtectionSection';
|
|
|
401
401
|
const PermissionsSection = /*#__PURE__*/ memo(({ onEditPolicy, ownerField, aclField, corsField, publicField, bucketPolicyField, renderOwner, renderAcl, renderCors, renderPublic, renderBucketPolicy })=>{
|
|
402
402
|
const { bucketName } = useBucketOverviewContext();
|
|
403
403
|
const { extraBucketOverviewPermissions } = useDataBrowserUICustomization();
|
|
404
|
-
const
|
|
405
|
-
const config = getS3Config();
|
|
404
|
+
const config = useDataBrowserConfig();
|
|
406
405
|
const { data: aclData, status: aclStatus } = useGetBucketAcl({
|
|
407
406
|
Bucket: bucketName
|
|
408
407
|
});
|
|
@@ -7,7 +7,7 @@ import { BucketDetails } from "./BucketDetails.js";
|
|
|
7
7
|
import { BucketList } from "./BucketList.js";
|
|
8
8
|
import { useDataBrowserNavigate } from "../../hooks/useDataBrowserNavigate.js";
|
|
9
9
|
import { useEffect } from "react";
|
|
10
|
-
const
|
|
10
|
+
const BucketPage = ()=>{
|
|
11
11
|
const { data, status } = useBuckets();
|
|
12
12
|
const { bucketName } = useParams();
|
|
13
13
|
const navigate = useDataBrowserNavigate();
|
|
@@ -47,5 +47,5 @@ const BucketPage_BucketPage = ()=>{
|
|
|
47
47
|
rightPanel: /*#__PURE__*/ jsx(BucketDetails, {})
|
|
48
48
|
});
|
|
49
49
|
};
|
|
50
|
-
const
|
|
51
|
-
export {
|
|
50
|
+
const buckets_BucketPage = BucketPage;
|
|
51
|
+
export { BucketPage, buckets_BucketPage as default };
|
|
@@ -4,7 +4,7 @@ import { useCallback, useMemo } from "react";
|
|
|
4
4
|
import { Controller, useFormContext } from "react-hook-form";
|
|
5
5
|
import { getFilteredEventGroups } from "./events.js";
|
|
6
6
|
import { Box } from "@scality/core-ui/dist/next";
|
|
7
|
-
import { useSupportedNotificationEvents } from "../../../
|
|
7
|
+
import { useSupportedNotificationEvents } from "../../../hooks/useSupportedNotificationEvents.js";
|
|
8
8
|
function EventsSection() {
|
|
9
9
|
const { control, formState: { errors } } = useFormContext();
|
|
10
10
|
const supportedEvents = useSupportedNotificationEvents();
|
|
@@ -18,6 +18,7 @@ export { ObjectLockSettings } from './objects/ObjectLock/ObjectLockSettings';
|
|
|
18
18
|
export { EditRetentionButton } from './objects/ObjectLock/EditRetentionButton';
|
|
19
19
|
export { MetadataSearch } from './search/MetadataSearch';
|
|
20
20
|
export { ArrayFieldActions } from './ui/ArrayFieldActions';
|
|
21
|
-
export { DataBrowserProvider, useDataBrowserContext,
|
|
21
|
+
export { DataBrowserProvider, useDataBrowserContext, useDataBrowserConfig, useInvalidateQueries, } from './providers/DataBrowserProvider';
|
|
22
|
+
export { QueryProvider } from './providers/QueryProvider';
|
|
22
23
|
export { useDataBrowserNavigate } from '../hooks/useDataBrowserNavigate';
|
|
23
24
|
export { DataBrowserUI } from './DataBrowserUI';
|
package/dist/components/index.js
CHANGED
|
@@ -18,7 +18,8 @@ import { ObjectLockSettings } from "./objects/ObjectLock/ObjectLockSettings.js";
|
|
|
18
18
|
import { EditRetentionButton } from "./objects/ObjectLock/EditRetentionButton.js";
|
|
19
19
|
import { MetadataSearch } from "./search/MetadataSearch.js";
|
|
20
20
|
import { ArrayFieldActions } from "./ui/ArrayFieldActions.js";
|
|
21
|
-
import { DataBrowserProvider, useDataBrowserContext,
|
|
21
|
+
import { DataBrowserProvider, useDataBrowserConfig, useDataBrowserContext, useInvalidateQueries } from "./providers/DataBrowserProvider.js";
|
|
22
|
+
import { QueryProvider } from "./providers/QueryProvider.js";
|
|
22
23
|
import { useDataBrowserNavigate } from "../hooks/useDataBrowserNavigate.js";
|
|
23
24
|
import { DataBrowserUI } from "./DataBrowserUI.js";
|
|
24
|
-
export { ArrayFieldActions, BucketCreate, BucketLifecycleFormPage, BucketList, BucketNotificationCreatePage, BucketOverview, BucketOverviewField, BucketOverviewSection, BucketPage, BucketPolicyPage, BucketReplicationFormPage, BucketVersioning, CreateFolderButton, DataBrowserProvider, DataBrowserUI, DeleteBucketButton, EditRetentionButton, EmptyBucketButton, MetadataSearch, ObjectDetails, ObjectList, ObjectLockSettings, ObjectPage, UploadButton, baseBucketCreateSchema, bucketErrorMessage, bucketNameValidationSchema, useBucketOverviewContext, useDataBrowserContext, useDataBrowserNavigate,
|
|
25
|
+
export { ArrayFieldActions, BucketCreate, BucketLifecycleFormPage, BucketList, BucketNotificationCreatePage, BucketOverview, BucketOverviewField, BucketOverviewSection, BucketPage, BucketPolicyPage, BucketReplicationFormPage, BucketVersioning, CreateFolderButton, DataBrowserProvider, DataBrowserUI, DeleteBucketButton, EditRetentionButton, EmptyBucketButton, MetadataSearch, ObjectDetails, ObjectList, ObjectLockSettings, ObjectPage, QueryProvider, UploadButton, baseBucketCreateSchema, bucketErrorMessage, bucketNameValidationSchema, useBucketOverviewContext, useDataBrowserConfig, useDataBrowserContext, useDataBrowserNavigate, useInvalidateQueries };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as __rspack_external__index_js_95fdb65a from "../index.js";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { cleanup, render, screen } from "@testing-library/react";
|
|
4
4
|
import { MemoryRouter, Route, Routes } from "react-router";
|
|
5
5
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
6
6
|
import { DataBrowserUICustomizationProvider } from "../../../../contexts/DataBrowserUICustomizationContext.js";
|
|
7
7
|
var __webpack_modules__ = {
|
|
8
|
-
".."
|
|
9
|
-
module.exports =
|
|
8
|
+
".." (module) {
|
|
9
|
+
module.exports = __rspack_external__index_js_95fdb65a;
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
var __webpack_module_cache__ = {};
|
|
@@ -8,7 +8,7 @@ import { useSearchObjects, useSearchObjectsVersions } from "../../hooks/index.js
|
|
|
8
8
|
import { useGetPresignedDownload } from "../../hooks/presignedOperations.js";
|
|
9
9
|
import { useBatchObjectLegalHold } from "../../hooks/useBatchObjectLegalHold.js";
|
|
10
10
|
import { useQueryParams } from "../../utils/hooks.js";
|
|
11
|
-
import { useFeatures } from "../../
|
|
11
|
+
import { useFeatures } from "../../hooks/useFeatures.js";
|
|
12
12
|
import CreateFolderButton from "./CreateFolderButton.js";
|
|
13
13
|
import MetadataSearch from "../search/MetadataSearch.js";
|
|
14
14
|
import UploadButton from "./UploadButton.js";
|
|
@@ -111,7 +111,7 @@ const NoFile = ({ open })=>/*#__PURE__*/ jsxs(EmptyFile, {
|
|
|
111
111
|
})
|
|
112
112
|
]
|
|
113
113
|
});
|
|
114
|
-
const
|
|
114
|
+
const UploadButton = ({ bucket, prefix = '', uploadOptions = {}, onUploadSuccess, onUploadError })=>{
|
|
115
115
|
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
116
116
|
const [acceptedFiles, setAcceptedFiles] = useState([]);
|
|
117
117
|
const uploadMutation = useUploadObjects();
|
|
@@ -225,5 +225,5 @@ const UploadButton_UploadButton = ({ bucket, prefix = '', uploadOptions = {}, on
|
|
|
225
225
|
]
|
|
226
226
|
});
|
|
227
227
|
};
|
|
228
|
-
const
|
|
229
|
-
export {
|
|
228
|
+
const objects_UploadButton = UploadButton;
|
|
229
|
+
export { UploadButton, objects_UploadButton as default };
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { QueryClient, InvalidateQueryFilters, QueryKey } from '@tanstack/react-query';
|
|
3
3
|
import { GetConfigFunction } from '../../types';
|
|
4
|
-
import { CoreUITheme } from '@scality/core-ui/dist/
|
|
4
|
+
import { CoreUITheme } from '@scality/core-ui/dist/next';
|
|
5
5
|
export interface DataBrowserContextValue {
|
|
6
|
-
getS3Config: GetConfigFunction;
|
|
7
|
-
theme: CoreUITheme;
|
|
6
|
+
getS3Config: GetConfigFunction | null;
|
|
8
7
|
s3ConfigIdentifier: string;
|
|
9
8
|
}
|
|
10
|
-
export declare const DataBrowserContext: React.Context<DataBrowserContextValue
|
|
9
|
+
export declare const DataBrowserContext: React.Context<DataBrowserContextValue>;
|
|
11
10
|
export declare const useDataBrowserContext: () => DataBrowserContextValue;
|
|
12
|
-
export
|
|
13
|
-
interface DataBrowserProviderProps {
|
|
11
|
+
export interface DataBrowserProviderProps {
|
|
14
12
|
children: React.ReactNode;
|
|
15
|
-
queryClient?: QueryClient;
|
|
16
|
-
enableDevtools?: boolean;
|
|
17
13
|
getS3Config?: GetConfigFunction;
|
|
14
|
+
queryClient?: QueryClient;
|
|
18
15
|
theme?: CoreUITheme;
|
|
16
|
+
enableDevtools?: boolean;
|
|
19
17
|
}
|
|
20
18
|
export declare const DataBrowserProvider: React.FC<DataBrowserProviderProps>;
|
|
19
|
+
export declare const useDataBrowserConfig: () => import("../../types").S3BrowserConfig & {
|
|
20
|
+
credentials: import("../../types").S3Credentials;
|
|
21
|
+
};
|
|
21
22
|
/**
|
|
22
23
|
* Hook to invalidate queries with automatic S3 config identifier prefixing.
|
|
23
24
|
*
|
|
@@ -28,4 +29,3 @@ export declare const DataBrowserProvider: React.FC<DataBrowserProviderProps>;
|
|
|
28
29
|
export declare const useInvalidateQueries: () => (filters: Omit<InvalidateQueryFilters, "queryKey"> & {
|
|
29
30
|
queryKey: QueryKey;
|
|
30
31
|
}) => Promise<void>;
|
|
31
|
-
export {};
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { jsx
|
|
2
|
-
import { createContext, useCallback, useContext } from "react";
|
|
3
|
-
import {
|
|
4
|
-
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useMemo } from "react";
|
|
3
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
5
4
|
import { ANONYMOUS_S3_CONFIG_IDENTIFIER, computeS3ConfigIdentifier } from "../../utils/s3ConfigIdentifier.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
import { QueryProvider } from "./QueryProvider.js";
|
|
6
|
+
import { CoreUiThemeProvider } from "@scality/core-ui/dist/next";
|
|
7
|
+
import { coreUIAvailableThemes } from "@scality/core-ui/dist/style/theme";
|
|
8
|
+
const DEFAULT_CONTEXT_VALUE = {
|
|
9
|
+
getS3Config: null,
|
|
10
|
+
s3ConfigIdentifier: ANONYMOUS_S3_CONFIG_IDENTIFIER
|
|
11
11
|
};
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const content = /*#__PURE__*/ jsxs(QueryClientProvider, {
|
|
28
|
-
client: queryClient,
|
|
29
|
-
children: [
|
|
30
|
-
children,
|
|
31
|
-
enableDevtools && /*#__PURE__*/ jsx(ReactQueryDevtools, {
|
|
32
|
-
initialIsOpen: false
|
|
33
|
-
})
|
|
34
|
-
]
|
|
35
|
-
});
|
|
36
|
-
if (!getS3Config || !theme) return content;
|
|
37
|
-
const contextValue = {
|
|
12
|
+
const DataBrowserContext = /*#__PURE__*/ createContext(DEFAULT_CONTEXT_VALUE);
|
|
13
|
+
const useDataBrowserContext = ()=>useContext(DataBrowserContext);
|
|
14
|
+
const DataBrowserProvider = ({ children, queryClient, theme, enableDevtools, getS3Config })=>{
|
|
15
|
+
const currentConfig = getS3Config?.();
|
|
16
|
+
const s3ConfigIdentifier = useMemo(()=>currentConfig ? computeS3ConfigIdentifier(currentConfig) : ANONYMOUS_S3_CONFIG_IDENTIFIER, [
|
|
17
|
+
currentConfig?.credentials?.accessKeyId,
|
|
18
|
+
currentConfig?.credentials?.roleArn,
|
|
19
|
+
currentConfig?.credentials?.sessionToken,
|
|
20
|
+
currentConfig?.region,
|
|
21
|
+
currentConfig?.endpoint
|
|
22
|
+
]);
|
|
23
|
+
const contextValue = useMemo(()=>({
|
|
24
|
+
getS3Config: getS3Config ?? null,
|
|
25
|
+
s3ConfigIdentifier
|
|
26
|
+
}), [
|
|
38
27
|
getS3Config,
|
|
39
|
-
theme,
|
|
40
28
|
s3ConfigIdentifier
|
|
41
|
-
|
|
42
|
-
return /*#__PURE__*/ jsx(
|
|
43
|
-
|
|
44
|
-
children:
|
|
29
|
+
]);
|
|
30
|
+
return /*#__PURE__*/ jsx(CoreUiThemeProvider, {
|
|
31
|
+
theme: theme ?? coreUIAvailableThemes.darkRebrand,
|
|
32
|
+
children: /*#__PURE__*/ jsx(QueryProvider, {
|
|
33
|
+
queryClient: queryClient,
|
|
34
|
+
enableDevtools: enableDevtools,
|
|
35
|
+
children: /*#__PURE__*/ jsx(DataBrowserContext.Provider, {
|
|
36
|
+
value: contextValue,
|
|
37
|
+
children: children
|
|
38
|
+
})
|
|
39
|
+
})
|
|
45
40
|
});
|
|
46
41
|
};
|
|
42
|
+
const useDataBrowserConfig = ()=>{
|
|
43
|
+
const { getS3Config } = useDataBrowserContext();
|
|
44
|
+
if (!getS3Config) throw new Error("useDataBrowserConfig: S3 config not available. Ensure DataBrowserProvider has getS3Config prop set.");
|
|
45
|
+
return getS3Config();
|
|
46
|
+
};
|
|
47
47
|
const useInvalidateQueries = ()=>{
|
|
48
48
|
const { s3ConfigIdentifier } = useDataBrowserContext();
|
|
49
49
|
const queryClient = useQueryClient();
|
|
@@ -61,4 +61,4 @@ const useInvalidateQueries = ()=>{
|
|
|
61
61
|
s3ConfigIdentifier
|
|
62
62
|
]);
|
|
63
63
|
};
|
|
64
|
-
export { DataBrowserContext, DataBrowserProvider,
|
|
64
|
+
export { DataBrowserContext, DataBrowserProvider, useDataBrowserConfig, useDataBrowserContext, useInvalidateQueries };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
3
|
+
export interface QueryProviderProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
queryClient?: QueryClient;
|
|
6
|
+
enableDevtools?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const defaultQueryClient: QueryClient;
|
|
9
|
+
export declare const QueryProvider: React.FC<QueryProviderProps>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
4
|
+
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
|
|
5
|
+
const defaultQueryClient = new QueryClient({
|
|
6
|
+
defaultOptions: {
|
|
7
|
+
queries: {
|
|
8
|
+
staleTime: 300000,
|
|
9
|
+
retry: 2
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
const QueryProvider = ({ children, queryClient = defaultQueryClient, enableDevtools = 'development' === process.env.NODE_ENV })=>/*#__PURE__*/ jsxs(QueryClientProvider, {
|
|
14
|
+
client: queryClient,
|
|
15
|
+
children: [
|
|
16
|
+
children,
|
|
17
|
+
enableDevtools && /*#__PURE__*/ jsx(ReactQueryDevtools, {
|
|
18
|
+
initialIsOpen: false
|
|
19
|
+
})
|
|
20
|
+
]
|
|
21
|
+
});
|
|
22
|
+
export { QueryProvider, defaultQueryClient };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|