@databiosphere/findable-ui 16.0.0 → 17.0.0
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/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +18 -0
- package/lib/components/Export/components/DownloadCurlCommand/downloadCurlCommand.d.ts +3 -2
- package/lib/components/Export/components/DownloadCurlCommand/downloadCurlCommand.js +6 -4
- package/lib/components/Export/components/ExportForm/components/ExportManifestDownloadFormatForm/exportManifestDownloadFormatForm.d.ts +3 -2
- package/lib/components/Export/components/ExportForm/components/ExportManifestDownloadFormatForm/exportManifestDownloadFormatForm.js +2 -12
- package/lib/components/Export/components/ExportToTerra/components/ExportToTerraForm/exportToTerraForm.d.ts +5 -2
- package/lib/components/Export/components/ExportToTerra/components/ExportToTerraForm/exportToTerraForm.js +2 -2
- package/lib/components/Export/components/ExportToTerra/components/ExportToTerraNotStarted/exportToTerraNotStarted.d.ts +3 -1
- package/lib/components/Export/components/ExportToTerra/components/ExportToTerraNotStarted/exportToTerraNotStarted.js +2 -2
- package/lib/components/Export/components/ExportToTerra/exportToTerra.d.ts +1 -1
- package/lib/components/Export/components/ExportToTerra/exportToTerra.js +9 -6
- package/lib/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/manifestDownloadEntity.d.ts +3 -1
- package/lib/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/manifestDownloadEntity.js +3 -4
- package/lib/components/Export/components/ManifestDownload/manifestDownload.d.ts +3 -2
- package/lib/components/Export/components/ManifestDownload/manifestDownload.js +6 -4
- package/lib/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.js +4 -3
- package/lib/hooks/types.d.ts +4 -0
- package/lib/hooks/types.js +5 -0
- package/lib/hooks/useFileManifest/common/entities.d.ts +0 -5
- package/lib/hooks/useFileManifest/common/entities.js +0 -6
- package/lib/hooks/useFileManifest/useFileManifest.d.ts +8 -5
- package/lib/hooks/useFileManifest/useFileManifest.js +29 -8
- package/lib/hooks/useFileManifest/useFileManifestDownload.js +10 -9
- package/lib/hooks/useFileManifest/useFileManifestFormat.d.ts +12 -0
- package/lib/hooks/useFileManifest/useFileManifestFormat.js +10 -0
- package/lib/hooks/useRequestFileLocation.d.ts +1 -4
- package/lib/hooks/useRequestFileLocation.js +1 -5
- package/lib/hooks/useRequestManifest/constants.d.ts +2 -0
- package/lib/hooks/useRequestManifest/constants.js +4 -0
- package/lib/hooks/useRequestManifest/types.d.ts +6 -0
- package/lib/hooks/useRequestManifest/types.js +1 -0
- package/lib/hooks/useRequestManifest/useRequestManifest.d.ts +10 -0
- package/lib/hooks/useRequestManifest/useRequestManifest.js +30 -0
- package/lib/hooks/useRequestManifest/utils.d.ts +65 -0
- package/lib/hooks/useRequestManifest/utils.js +118 -0
- package/lib/mocks/useRequestFileManifest.mocks.d.ts +11 -0
- package/lib/mocks/useRequestFileManifest.mocks.js +100 -0
- package/lib/providers/fileManifestState/constants.d.ts +0 -2
- package/lib/providers/fileManifestState/constants.js +0 -11
- package/lib/providers/fileManifestState.d.ts +3 -25
- package/lib/providers/fileManifestState.js +3 -36
- package/lib/views/ExportView/exportView.js +2 -2
- package/package.json +1 -1
- package/src/components/Export/components/DownloadCurlCommand/downloadCurlCommand.tsx +17 -10
- package/src/components/Export/components/ExportForm/components/ExportManifestDownloadFormatForm/exportManifestDownloadFormatForm.tsx +7 -16
- package/src/components/Export/components/ExportToTerra/components/ExportToTerraForm/exportToTerraForm.tsx +8 -4
- package/src/components/Export/components/ExportToTerra/components/ExportToTerraNotStarted/exportToTerraNotStarted.tsx +4 -1
- package/src/components/Export/components/ExportToTerra/exportToTerra.tsx +13 -9
- package/src/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/manifestDownloadEntity.tsx +4 -9
- package/src/components/Export/components/ManifestDownload/manifestDownload.tsx +17 -11
- package/src/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.tsx +6 -3
- package/src/hooks/types.ts +4 -0
- package/src/hooks/useFileManifest/common/entities.ts +0 -6
- package/src/hooks/useFileManifest/useFileManifest.ts +34 -13
- package/src/hooks/useFileManifest/useFileManifestDownload.ts +21 -16
- package/src/hooks/useFileManifest/useFileManifestFormat.ts +23 -0
- package/src/hooks/useRequestFileLocation.ts +1 -5
- package/src/hooks/useRequestManifest/constants.ts +6 -0
- package/src/hooks/useRequestManifest/types.ts +7 -0
- package/src/hooks/useRequestManifest/useRequestManifest.ts +49 -0
- package/src/hooks/useRequestManifest/utils.ts +153 -0
- package/src/mocks/useRequestFileManifest.mocks.ts +121 -0
- package/src/providers/fileManifestState/constants.ts +0 -15
- package/src/providers/fileManifestState.tsx +5 -77
- package/src/views/ExportView/exportView.tsx +2 -2
- package/tests/buildRequestFilters.test.ts +68 -0
- package/tests/buildRequestManifest.test.ts +103 -0
- package/tests/useRequestManifest.test.ts +193 -0
- package/lib/hooks/useFileManifest/common/buildFileManifestRequestURL.d.ts +0 -15
- package/lib/hooks/useFileManifest/common/buildFileManifestRequestURL.js +0 -28
- package/lib/hooks/useFileManifest/useFileManifestURL.d.ts +0 -5
- package/lib/hooks/useFileManifest/useFileManifestURL.js +0 -11
- package/lib/hooks/useFileManifest/useRequestFileManifest.d.ts +0 -11
- package/lib/hooks/useFileManifest/useRequestFileManifest.js +0 -40
- package/lib/providers/fileManifestState/actions.d.ts +0 -9
- package/lib/providers/fileManifestState/actions.js +0 -19
- package/lib/providers/fileManifestState/utils.d.ts +0 -34
- package/lib/providers/fileManifestState/utils.js +0 -80
- package/src/hooks/useFileManifest/common/buildFileManifestRequestURL.ts +0 -44
- package/src/hooks/useFileManifest/useFileManifestURL.ts +0 -12
- package/src/hooks/useFileManifest/useRequestFileManifest.ts +0 -51
- package/src/providers/fileManifestState/actions.ts +0 -34
- package/src/providers/fileManifestState/utils.ts +0 -108
- package/tests/fileManifestRequestFilters.test.ts +0 -160
- package/tests/updateFilesFacetsStatus.test.ts +0 -84
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { jest } from "@jest/globals";
|
|
2
|
+
import { renderHook } from "@testing-library/react";
|
|
3
|
+
import { MANIFEST_DOWNLOAD_FORMAT } from "../src/apis/azul/common/entities";
|
|
4
|
+
import { FormFacet } from "../src/components/Export/common/entities";
|
|
5
|
+
import { METHOD } from "../src/hooks/types";
|
|
6
|
+
import {
|
|
7
|
+
CATALOG,
|
|
8
|
+
CONFIG,
|
|
9
|
+
FILE_MANIFEST_STATE,
|
|
10
|
+
FORM_FACET,
|
|
11
|
+
} from "../src/mocks/useRequestFileManifest.mocks";
|
|
12
|
+
|
|
13
|
+
jest.unstable_mockModule("../src/hooks/useConfig", () => ({
|
|
14
|
+
useConfig: jest.fn(),
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
jest.unstable_mockModule("../src/hooks/useCatalog", () => ({
|
|
18
|
+
useCatalog: jest.fn(),
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
jest.unstable_mockModule("../src/hooks/useFileManifestState", () => ({
|
|
22
|
+
useFileManifestState: jest.fn(),
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
const { useConfig } = await import("../src/hooks/useConfig");
|
|
26
|
+
const { useCatalog } = await import("../src/hooks/useCatalog");
|
|
27
|
+
const { useFileManifestState } = await import(
|
|
28
|
+
"../src/hooks/useFileManifestState"
|
|
29
|
+
);
|
|
30
|
+
const { useRequestManifest } = await import(
|
|
31
|
+
"../src/hooks/useRequestManifest/useRequestManifest"
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const MOCK_USE_CATALOG = useCatalog as jest.MockedFunction<typeof useCatalog>;
|
|
35
|
+
const MOCK_USE_CONFIG = useConfig as jest.MockedFunction<
|
|
36
|
+
() => Partial<ReturnType<typeof useConfig>>
|
|
37
|
+
>;
|
|
38
|
+
const MOCK_USE_FILE_MANIFEST_STATE =
|
|
39
|
+
useFileManifestState as jest.MockedFunction<
|
|
40
|
+
() => Partial<ReturnType<typeof useFileManifestState>>
|
|
41
|
+
>;
|
|
42
|
+
|
|
43
|
+
describe("useRequestManifest", () => {
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
MOCK_USE_CATALOG.mockReset();
|
|
46
|
+
MOCK_USE_CONFIG.mockReset();
|
|
47
|
+
MOCK_USE_FILE_MANIFEST_STATE.mockReset();
|
|
48
|
+
MOCK_USE_CATALOG.mockReturnValue(CATALOG);
|
|
49
|
+
MOCK_USE_CONFIG.mockReturnValue(CONFIG);
|
|
50
|
+
MOCK_USE_FILE_MANIFEST_STATE.mockReturnValue({
|
|
51
|
+
fileManifestDispatch: jest.fn(),
|
|
52
|
+
fileManifestState: FILE_MANIFEST_STATE,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
describe("useRequestManifest - always returns request method", () => {
|
|
57
|
+
test("requestMethod is always METHOD.PUT regardless of conditions", () => {
|
|
58
|
+
MOCK_USE_CATALOG.mockReturnValue(undefined);
|
|
59
|
+
const { result } = renderHook(() =>
|
|
60
|
+
useRequestManifest(undefined, FORM_FACET.INITIAL_SET)
|
|
61
|
+
);
|
|
62
|
+
expect(result.current.requestMethod).toEqual(METHOD.PUT);
|
|
63
|
+
expect(result.current.requestParams).toBeUndefined();
|
|
64
|
+
expect(result.current.requestUrl).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe("useRequestManifest - returns undefined for params and URL when", () => {
|
|
69
|
+
test("catalog is not defined", () => {
|
|
70
|
+
MOCK_USE_CATALOG.mockReturnValue(undefined);
|
|
71
|
+
testRequestManifest({
|
|
72
|
+
fileManifestFormat: MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe("fileManifestFormat is not ready", () => {
|
|
77
|
+
test("when fileManifestFormat is not defined", () => {
|
|
78
|
+
testRequestManifest({
|
|
79
|
+
fileManifestFormat: undefined,
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("when fileManifestFormat is invalid", () => {
|
|
84
|
+
testRequestManifest({
|
|
85
|
+
fileManifestFormat: "INVALID_FORMAT" as MANIFEST_DOWNLOAD_FORMAT,
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe("fileManifestState is not ready", () => {
|
|
91
|
+
test("when fileManifestState is not enabled", () => {
|
|
92
|
+
MOCK_USE_FILE_MANIFEST_STATE.mockReturnValue({
|
|
93
|
+
fileManifestDispatch: jest.fn(),
|
|
94
|
+
fileManifestState: { ...FILE_MANIFEST_STATE, isEnabled: false },
|
|
95
|
+
});
|
|
96
|
+
testRequestManifest({
|
|
97
|
+
fileManifestFormat: MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("when fileManifestState is loading", () => {
|
|
102
|
+
MOCK_USE_FILE_MANIFEST_STATE.mockReturnValue({
|
|
103
|
+
fileManifestDispatch: jest.fn(),
|
|
104
|
+
fileManifestState: { ...FILE_MANIFEST_STATE, isLoading: true },
|
|
105
|
+
});
|
|
106
|
+
testRequestManifest({
|
|
107
|
+
fileManifestFormat: MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
describe("form selection is not ready", () => {
|
|
113
|
+
test("when a form facet is undefined", () => {
|
|
114
|
+
testRequestManifest({
|
|
115
|
+
fileManifestFormat: MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
116
|
+
formFacet: {},
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
test("when a form facet `fileSummaryFacet` and `speciesFacet` are not defined", () => {
|
|
121
|
+
testRequestManifest({
|
|
122
|
+
fileManifestFormat: MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
123
|
+
formFacet: FORM_FACET.INITIAL_SET,
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("when a form facet is not selected", () => {
|
|
128
|
+
testRequestManifest({
|
|
129
|
+
fileManifestFormat: MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
130
|
+
formFacet: FORM_FACET.INCOMPLETE_SET,
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe("useRequestManifest - returns the request manifest object when all conditions are met", () => {
|
|
137
|
+
test("and at least one form facet has an unselected term", () => {
|
|
138
|
+
const { result } = renderHook(() =>
|
|
139
|
+
useRequestManifest(
|
|
140
|
+
MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
141
|
+
FORM_FACET.SUBSET
|
|
142
|
+
)
|
|
143
|
+
);
|
|
144
|
+
expect(result.current.requestMethod).toEqual(METHOD.PUT);
|
|
145
|
+
expect(result.current.requestParams).toBeDefined();
|
|
146
|
+
expect(result.current.requestUrl).toBeDefined();
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test("and all form facets have all their terms selected", () => {
|
|
150
|
+
const { result } = renderHook(() =>
|
|
151
|
+
useRequestManifest(
|
|
152
|
+
MANIFEST_DOWNLOAD_FORMAT.VERBATIM_PFB,
|
|
153
|
+
FORM_FACET.COMPLETE_SET
|
|
154
|
+
)
|
|
155
|
+
);
|
|
156
|
+
expect(result.current.requestMethod).toEqual(METHOD.PUT);
|
|
157
|
+
expect(result.current.requestParams).toBeDefined();
|
|
158
|
+
expect(result.current.requestUrl).toBeDefined();
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Utility function to test the behavior of the `useRequestManifest` hook.
|
|
165
|
+
* This function renders the `useRequestManifest` hook with the provided arguments
|
|
166
|
+
* and asserts the expected values for `requestMethod`, `requestParams`, and `requestUrl`.
|
|
167
|
+
* @param testObject - Object containing the expected values for `requestMethod`, `requestParams`, and `requestUrl`.
|
|
168
|
+
* @param testObject.expectedMethod - The expected request method.
|
|
169
|
+
* @param testObject.expectedParams - The expected request parameters.
|
|
170
|
+
* @param testObject.expectedUrl - The expected request URL.
|
|
171
|
+
* @param testObject.fileManifestFormat - The file manifest format.
|
|
172
|
+
* @param testObject.formFacet - Form facet.
|
|
173
|
+
*/
|
|
174
|
+
function testRequestManifest({
|
|
175
|
+
expectedParams = undefined,
|
|
176
|
+
expectedUrl = undefined,
|
|
177
|
+
expectedMethod = METHOD.PUT,
|
|
178
|
+
fileManifestFormat,
|
|
179
|
+
formFacet = FORM_FACET.COMPLETE_SET,
|
|
180
|
+
}: {
|
|
181
|
+
expectedMethod?: METHOD;
|
|
182
|
+
expectedParams?: URLSearchParams;
|
|
183
|
+
expectedUrl?: string;
|
|
184
|
+
fileManifestFormat?: MANIFEST_DOWNLOAD_FORMAT;
|
|
185
|
+
formFacet?: FormFacet;
|
|
186
|
+
}): void {
|
|
187
|
+
const { result } = renderHook(() =>
|
|
188
|
+
useRequestManifest(fileManifestFormat, formFacet)
|
|
189
|
+
);
|
|
190
|
+
expect(result.current.requestMethod).toEqual(expectedMethod);
|
|
191
|
+
expect(result.current.requestParams).toEqual(expectedParams);
|
|
192
|
+
expect(result.current.requestUrl).toEqual(expectedUrl);
|
|
193
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ManifestDownloadFormat } from "../../../apis/azul/common/entities";
|
|
2
|
-
import { Filters } from "../../../common/entities";
|
|
3
|
-
export interface FileManifestRequestURL {
|
|
4
|
-
requestParams: URLSearchParams;
|
|
5
|
-
requestURL: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Build up file manifest request params and URL query string for the given search results, catalog and format.
|
|
9
|
-
* @param url - Data URL.
|
|
10
|
-
* @param filters - Selected filters.
|
|
11
|
-
* @param catalog - Configured catalog.
|
|
12
|
-
* @param manifestFormat - Manifest format.
|
|
13
|
-
* @returns file manifest request params and URL query string.
|
|
14
|
-
*/
|
|
15
|
-
export declare const buildFileManifestRequestURL: (url: string, filters: Filters | undefined, catalog: string, manifestFormat: ManifestDownloadFormat | undefined) => FileManifestRequestURL | undefined;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { AZUL_PARAM, } from "../../../apis/azul/common/entities";
|
|
2
|
-
import { transformFilters } from "../../../apis/azul/common/filterTransformer";
|
|
3
|
-
/**
|
|
4
|
-
* Build up file manifest request params and URL query string for the given search results, catalog and format.
|
|
5
|
-
* @param url - Data URL.
|
|
6
|
-
* @param filters - Selected filters.
|
|
7
|
-
* @param catalog - Configured catalog.
|
|
8
|
-
* @param manifestFormat - Manifest format.
|
|
9
|
-
* @returns file manifest request params and URL query string.
|
|
10
|
-
*/
|
|
11
|
-
export const buildFileManifestRequestURL = (url, filters, catalog, manifestFormat) => {
|
|
12
|
-
if (!manifestFormat)
|
|
13
|
-
return;
|
|
14
|
-
if (!filters)
|
|
15
|
-
return;
|
|
16
|
-
// Build request params.
|
|
17
|
-
const requestParams = new URLSearchParams({
|
|
18
|
-
[AZUL_PARAM.CATALOG]: catalog,
|
|
19
|
-
[AZUL_PARAM.FILTERS]: transformFilters(filters),
|
|
20
|
-
format: manifestFormat,
|
|
21
|
-
});
|
|
22
|
-
// Build file manifest URL
|
|
23
|
-
const requestURL = `${url}fetch/manifest/files?${requestParams.toString()}`;
|
|
24
|
-
return {
|
|
25
|
-
requestParams,
|
|
26
|
-
requestURL,
|
|
27
|
-
};
|
|
28
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { useConfig } from "../useConfig";
|
|
2
|
-
/**
|
|
3
|
-
* Returns data URL for the integrations end point.
|
|
4
|
-
* @returns data URL for the integrations end point.
|
|
5
|
-
*/
|
|
6
|
-
export const useFileManifestURL = () => {
|
|
7
|
-
const { config } = useConfig();
|
|
8
|
-
const { dataSource } = config;
|
|
9
|
-
const { url } = dataSource;
|
|
10
|
-
return url;
|
|
11
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ManifestDownloadFormat } from "../../apis/azul/common/entities";
|
|
2
|
-
import { Filters } from "../../common/entities";
|
|
3
|
-
import { FileManifestType } from "./common/entities";
|
|
4
|
-
/**
|
|
5
|
-
* Initializes and fetches file manifest comprising file facets and summary for the given file manifest format.
|
|
6
|
-
* @param fileManifestType - File manifest type.
|
|
7
|
-
* @param fileManifestFormat - File manifest format.
|
|
8
|
-
* @param initialFilters - Filters to initialize file manifest request.
|
|
9
|
-
* @param fileSummaryFacetName - File summary facet name.
|
|
10
|
-
*/
|
|
11
|
-
export declare const useRequestFileManifest: (fileManifestType: FileManifestType | undefined, fileManifestFormat: ManifestDownloadFormat | undefined, initialFilters?: Filters | undefined, fileSummaryFacetName?: string) => void;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
import { FileManifestActionKind } from "../../providers/fileManifestState";
|
|
3
|
-
import { useFileManifestState } from "../useFileManifestState";
|
|
4
|
-
/**
|
|
5
|
-
* Initializes and fetches file manifest comprising file facets and summary for the given file manifest format.
|
|
6
|
-
* @param fileManifestType - File manifest type.
|
|
7
|
-
* @param fileManifestFormat - File manifest format.
|
|
8
|
-
* @param initialFilters - Filters to initialize file manifest request.
|
|
9
|
-
* @param fileSummaryFacetName - File summary facet name.
|
|
10
|
-
*/
|
|
11
|
-
export const useRequestFileManifest = (fileManifestType, fileManifestFormat, initialFilters = [], fileSummaryFacetName) => {
|
|
12
|
-
// Initial file manifest filter.
|
|
13
|
-
const [initFilters] = useState(() => initialFilters);
|
|
14
|
-
// File manifest state.
|
|
15
|
-
const { fileManifestDispatch } = useFileManifestState();
|
|
16
|
-
// Fetches file manifest with the given file manifest filters, format.
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
fileManifestDispatch({
|
|
19
|
-
payload: {
|
|
20
|
-
fileManifestFormat,
|
|
21
|
-
fileManifestType,
|
|
22
|
-
fileSummaryFacetName,
|
|
23
|
-
filters: initFilters,
|
|
24
|
-
},
|
|
25
|
-
type: FileManifestActionKind.FetchFileManifest,
|
|
26
|
-
});
|
|
27
|
-
return () => {
|
|
28
|
-
fileManifestDispatch({
|
|
29
|
-
payload: undefined,
|
|
30
|
-
type: FileManifestActionKind.ClearFileManifest,
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
}, [
|
|
34
|
-
fileManifestDispatch,
|
|
35
|
-
fileManifestFormat,
|
|
36
|
-
fileManifestType,
|
|
37
|
-
fileSummaryFacetName,
|
|
38
|
-
initFilters,
|
|
39
|
-
]);
|
|
40
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { FileManifestContext, FileManifestState, UpdateFileManifestPayload } from "../fileManifestState";
|
|
2
|
-
/**
|
|
3
|
-
* Update file manifest action.
|
|
4
|
-
* @param state - State.
|
|
5
|
-
* @param payload - Payload.
|
|
6
|
-
* @param context - Context.
|
|
7
|
-
* @returns state.
|
|
8
|
-
*/
|
|
9
|
-
export declare function updateFileManifestAction(state: FileManifestState, payload: UpdateFileManifestPayload, context: FileManifestContext): FileManifestState;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { buildFileManifestRequestURL } from "../../hooks/useFileManifest/common/buildFileManifestRequestURL";
|
|
2
|
-
import { getRequestFilters, updateFilesFacetsStatus } from "./utils";
|
|
3
|
-
/**
|
|
4
|
-
* Update file manifest action.
|
|
5
|
-
* @param state - State.
|
|
6
|
-
* @param payload - Payload.
|
|
7
|
-
* @param context - Context.
|
|
8
|
-
* @returns state.
|
|
9
|
-
*/
|
|
10
|
-
export function updateFileManifestAction(state, payload, context) {
|
|
11
|
-
const { catalog, URL } = context;
|
|
12
|
-
const filesFacetsStatus = updateFilesFacetsStatus(state, payload);
|
|
13
|
-
const nextState = { ...state, ...payload, filesFacetsStatus };
|
|
14
|
-
const fileManifestRequest = buildFileManifestRequestURL(URL, getRequestFilters(nextState), catalog, nextState.fileManifestFormat);
|
|
15
|
-
return {
|
|
16
|
-
...nextState,
|
|
17
|
-
...fileManifestRequest,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Filters } from "../../common/entities";
|
|
2
|
-
import { FILES_FACETS_STATUS } from "../../hooks/useFileManifest/common/entities";
|
|
3
|
-
import { FileManifestState, UpdateFileManifestPayload } from "../fileManifestState";
|
|
4
|
-
/**
|
|
5
|
-
* Generates the filters for a request URL based on the file manifest state.
|
|
6
|
-
* If all terms in a facet are selected, the corresponding facet is excluded.
|
|
7
|
-
* @param state - File manifest state.
|
|
8
|
-
* @returns filters for the request URL.
|
|
9
|
-
*/
|
|
10
|
-
export declare function getRequestFilters(state: FileManifestState): Filters | undefined;
|
|
11
|
-
/**
|
|
12
|
-
* Returns true if the filters are user-selected, when:
|
|
13
|
-
* - The file manifest type is not set.
|
|
14
|
-
* - The file manifest type is an entity list related type.
|
|
15
|
-
* - Filter values for each selected facet are partially selected.
|
|
16
|
-
* @param state - File manifest state.
|
|
17
|
-
* @returns true if the filters are user-selected.
|
|
18
|
-
*/
|
|
19
|
-
export declare function isFiltersUserSelected(state: FileManifestState): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Transitions the files facets' status.
|
|
22
|
-
* @param shouldTransition - True if transitioning, false otherwise.
|
|
23
|
-
* @param nextStatus - Next files facets' status.
|
|
24
|
-
* @param currentStatus - Current files facets' status.
|
|
25
|
-
* @returns files facets' status.
|
|
26
|
-
*/
|
|
27
|
-
export declare function transitionFilesFacetsStatus(shouldTransition: boolean, nextStatus: FILES_FACETS_STATUS, currentStatus: FILES_FACETS_STATUS): FILES_FACETS_STATUS;
|
|
28
|
-
/**
|
|
29
|
-
* Returns the updated files facets' status.
|
|
30
|
-
* @param state - File manifest state.
|
|
31
|
-
* @param payload - Update file manifest payload.
|
|
32
|
-
* @returns files facets' status.
|
|
33
|
-
*/
|
|
34
|
-
export declare function updateFilesFacetsStatus(state: FileManifestState, payload: UpdateFileManifestPayload): FILES_FACETS_STATUS;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { FILES_FACETS_STATUS, } from "../../hooks/useFileManifest/common/entities";
|
|
2
|
-
import { findFacet } from "../../hooks/useFileManifest/common/utils";
|
|
3
|
-
import { ENTITIES_FILE_MANIFEST_TYPES } from "./constants";
|
|
4
|
-
/**
|
|
5
|
-
* Generates the filters for a request URL based on the file manifest state.
|
|
6
|
-
* If all terms in a facet are selected, the corresponding facet is excluded.
|
|
7
|
-
* @param state - File manifest state.
|
|
8
|
-
* @returns filters for the request URL.
|
|
9
|
-
*/
|
|
10
|
-
export function getRequestFilters(state) {
|
|
11
|
-
if (state.filesFacetsStatus !== FILES_FACETS_STATUS.COMPLETED)
|
|
12
|
-
return;
|
|
13
|
-
// Determine if the filters are user-selected.
|
|
14
|
-
if (isFiltersUserSelected(state)) {
|
|
15
|
-
return state.filters;
|
|
16
|
-
}
|
|
17
|
-
for (const filter of state.filters) {
|
|
18
|
-
const facet = findFacet(state.filesFacets, filter.categoryKey);
|
|
19
|
-
if (!facet)
|
|
20
|
-
return [filter]; // The entity identifier related filter will not have a corresponding term facet.
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Returns true if filter values for each selected facet are partially selected.
|
|
25
|
-
* @param filters - Selected filters.
|
|
26
|
-
* @param filesFacets - Files facets.
|
|
27
|
-
* @returns true if the filters are partially selected.
|
|
28
|
-
*/
|
|
29
|
-
function isFiltersPartiallySelected(filters, filesFacets) {
|
|
30
|
-
for (const { categoryKey, value } of filters) {
|
|
31
|
-
const facet = findFacet(filesFacets, categoryKey);
|
|
32
|
-
if (!facet)
|
|
33
|
-
continue; // Continue; the entity identifier related filter will not have a corresponding term facet.
|
|
34
|
-
if (value.length < facet.termCount)
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Returns true if the filters are user-selected, when:
|
|
41
|
-
* - The file manifest type is not set.
|
|
42
|
-
* - The file manifest type is an entity list related type.
|
|
43
|
-
* - Filter values for each selected facet are partially selected.
|
|
44
|
-
* @param state - File manifest state.
|
|
45
|
-
* @returns true if the filters are user-selected.
|
|
46
|
-
*/
|
|
47
|
-
export function isFiltersUserSelected(state) {
|
|
48
|
-
if (!state.fileManifestType)
|
|
49
|
-
return true;
|
|
50
|
-
if (ENTITIES_FILE_MANIFEST_TYPES.includes(state.fileManifestType))
|
|
51
|
-
return true;
|
|
52
|
-
return isFiltersPartiallySelected(state.filters, state.filesFacets);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Transitions the files facets' status.
|
|
56
|
-
* @param shouldTransition - True if transitioning, false otherwise.
|
|
57
|
-
* @param nextStatus - Next files facets' status.
|
|
58
|
-
* @param currentStatus - Current files facets' status.
|
|
59
|
-
* @returns files facets' status.
|
|
60
|
-
*/
|
|
61
|
-
export function transitionFilesFacetsStatus(shouldTransition, nextStatus, currentStatus) {
|
|
62
|
-
return shouldTransition ? nextStatus : currentStatus;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Returns the updated files facets' status.
|
|
66
|
-
* @param state - File manifest state.
|
|
67
|
-
* @param payload - Update file manifest payload.
|
|
68
|
-
* @returns files facets' status.
|
|
69
|
-
*/
|
|
70
|
-
export function updateFilesFacetsStatus(state, payload) {
|
|
71
|
-
if (state.filesFacetsStatus === FILES_FACETS_STATUS.NOT_STARTED) {
|
|
72
|
-
// If the current status is NOT_STARTED, transition to IN_PROGRESS if facets are loading.
|
|
73
|
-
return transitionFilesFacetsStatus(payload.isFacetsLoading, FILES_FACETS_STATUS.IN_PROGRESS, FILES_FACETS_STATUS.NOT_STARTED);
|
|
74
|
-
}
|
|
75
|
-
if (state.filesFacetsStatus === FILES_FACETS_STATUS.IN_PROGRESS) {
|
|
76
|
-
// If the current status is IN_PROGRESS, transition to COMPLETED if facets are successfully loaded.
|
|
77
|
-
return transitionFilesFacetsStatus(payload.isFacetsSuccess, FILES_FACETS_STATUS.COMPLETED, FILES_FACETS_STATUS.IN_PROGRESS);
|
|
78
|
-
}
|
|
79
|
-
return FILES_FACETS_STATUS.COMPLETED;
|
|
80
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AZUL_PARAM,
|
|
3
|
-
ManifestDownloadFormat,
|
|
4
|
-
} from "../../../apis/azul/common/entities";
|
|
5
|
-
import { transformFilters } from "../../../apis/azul/common/filterTransformer";
|
|
6
|
-
import { Filters } from "../../../common/entities";
|
|
7
|
-
|
|
8
|
-
export interface FileManifestRequestURL {
|
|
9
|
-
requestParams: URLSearchParams;
|
|
10
|
-
requestURL: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Build up file manifest request params and URL query string for the given search results, catalog and format.
|
|
15
|
-
* @param url - Data URL.
|
|
16
|
-
* @param filters - Selected filters.
|
|
17
|
-
* @param catalog - Configured catalog.
|
|
18
|
-
* @param manifestFormat - Manifest format.
|
|
19
|
-
* @returns file manifest request params and URL query string.
|
|
20
|
-
*/
|
|
21
|
-
export const buildFileManifestRequestURL = (
|
|
22
|
-
url: string,
|
|
23
|
-
filters: Filters | undefined,
|
|
24
|
-
catalog: string,
|
|
25
|
-
manifestFormat: ManifestDownloadFormat | undefined
|
|
26
|
-
): FileManifestRequestURL | undefined => {
|
|
27
|
-
if (!manifestFormat) return;
|
|
28
|
-
if (!filters) return;
|
|
29
|
-
|
|
30
|
-
// Build request params.
|
|
31
|
-
const requestParams = new URLSearchParams({
|
|
32
|
-
[AZUL_PARAM.CATALOG]: catalog,
|
|
33
|
-
[AZUL_PARAM.FILTERS]: transformFilters(filters),
|
|
34
|
-
format: manifestFormat,
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// Build file manifest URL
|
|
38
|
-
const requestURL = `${url}fetch/manifest/files?${requestParams.toString()}`;
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
requestParams,
|
|
42
|
-
requestURL,
|
|
43
|
-
};
|
|
44
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useConfig } from "../useConfig";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Returns data URL for the integrations end point.
|
|
5
|
-
* @returns data URL for the integrations end point.
|
|
6
|
-
*/
|
|
7
|
-
export const useFileManifestURL = (): string => {
|
|
8
|
-
const { config } = useConfig();
|
|
9
|
-
const { dataSource } = config;
|
|
10
|
-
const { url } = dataSource;
|
|
11
|
-
return url;
|
|
12
|
-
};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
import { ManifestDownloadFormat } from "../../apis/azul/common/entities";
|
|
3
|
-
import { Filters } from "../../common/entities";
|
|
4
|
-
import { FileManifestActionKind } from "../../providers/fileManifestState";
|
|
5
|
-
import { useFileManifestState } from "../useFileManifestState";
|
|
6
|
-
import { FileManifestType } from "./common/entities";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Initializes and fetches file manifest comprising file facets and summary for the given file manifest format.
|
|
10
|
-
* @param fileManifestType - File manifest type.
|
|
11
|
-
* @param fileManifestFormat - File manifest format.
|
|
12
|
-
* @param initialFilters - Filters to initialize file manifest request.
|
|
13
|
-
* @param fileSummaryFacetName - File summary facet name.
|
|
14
|
-
*/
|
|
15
|
-
export const useRequestFileManifest = (
|
|
16
|
-
fileManifestType: FileManifestType | undefined,
|
|
17
|
-
fileManifestFormat: ManifestDownloadFormat | undefined,
|
|
18
|
-
initialFilters: Filters | undefined = [],
|
|
19
|
-
fileSummaryFacetName?: string
|
|
20
|
-
): void => {
|
|
21
|
-
// Initial file manifest filter.
|
|
22
|
-
const [initFilters] = useState(() => initialFilters);
|
|
23
|
-
|
|
24
|
-
// File manifest state.
|
|
25
|
-
const { fileManifestDispatch } = useFileManifestState();
|
|
26
|
-
|
|
27
|
-
// Fetches file manifest with the given file manifest filters, format.
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
fileManifestDispatch({
|
|
30
|
-
payload: {
|
|
31
|
-
fileManifestFormat,
|
|
32
|
-
fileManifestType,
|
|
33
|
-
fileSummaryFacetName,
|
|
34
|
-
filters: initFilters,
|
|
35
|
-
},
|
|
36
|
-
type: FileManifestActionKind.FetchFileManifest,
|
|
37
|
-
});
|
|
38
|
-
return (): void => {
|
|
39
|
-
fileManifestDispatch({
|
|
40
|
-
payload: undefined,
|
|
41
|
-
type: FileManifestActionKind.ClearFileManifest,
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
}, [
|
|
45
|
-
fileManifestDispatch,
|
|
46
|
-
fileManifestFormat,
|
|
47
|
-
fileManifestType,
|
|
48
|
-
fileSummaryFacetName,
|
|
49
|
-
initFilters,
|
|
50
|
-
]);
|
|
51
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { buildFileManifestRequestURL } from "../../hooks/useFileManifest/common/buildFileManifestRequestURL";
|
|
2
|
-
import {
|
|
3
|
-
FileManifestContext,
|
|
4
|
-
FileManifestState,
|
|
5
|
-
UpdateFileManifestPayload,
|
|
6
|
-
} from "../fileManifestState";
|
|
7
|
-
import { getRequestFilters, updateFilesFacetsStatus } from "./utils";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Update file manifest action.
|
|
11
|
-
* @param state - State.
|
|
12
|
-
* @param payload - Payload.
|
|
13
|
-
* @param context - Context.
|
|
14
|
-
* @returns state.
|
|
15
|
-
*/
|
|
16
|
-
export function updateFileManifestAction(
|
|
17
|
-
state: FileManifestState,
|
|
18
|
-
payload: UpdateFileManifestPayload,
|
|
19
|
-
context: FileManifestContext
|
|
20
|
-
): FileManifestState {
|
|
21
|
-
const { catalog, URL } = context;
|
|
22
|
-
const filesFacetsStatus = updateFilesFacetsStatus(state, payload);
|
|
23
|
-
const nextState = { ...state, ...payload, filesFacetsStatus };
|
|
24
|
-
const fileManifestRequest = buildFileManifestRequestURL(
|
|
25
|
-
URL,
|
|
26
|
-
getRequestFilters(nextState),
|
|
27
|
-
catalog,
|
|
28
|
-
nextState.fileManifestFormat
|
|
29
|
-
);
|
|
30
|
-
return {
|
|
31
|
-
...nextState,
|
|
32
|
-
...fileManifestRequest,
|
|
33
|
-
};
|
|
34
|
-
}
|