@c-rex/components 0.1.37 → 0.1.39
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/README.md +73 -73
- package/package.json +250 -235
- package/src/article/article-action-bar.tsx +110 -110
- package/src/article/article-content.tsx +18 -46
- package/src/autocomplete.tsx +201 -201
- package/src/breadcrumb.tsx +124 -124
- package/src/carousel/carousel.tsx +353 -352
- package/src/check-article-lang.tsx +47 -43
- package/src/directoryNodes/directory-tree-context.tsx +388 -0
- package/src/directoryNodes/tree-of-content.tsx +68 -67
- package/src/documents/result-list.tsx +124 -127
- package/src/favorites/bookmark-button.tsx +97 -79
- package/src/favorites/favorite-button.tsx +137 -74
- package/src/footer/footer-shell.tsx +52 -0
- package/src/footer/footer.tsx +7 -0
- package/src/footer/legal-links-block.tsx +25 -0
- package/src/footer/organization-contact-block.tsx +94 -0
- package/src/footer/social-links-block.tsx +38 -0
- package/src/footer/types.ts +10 -0
- package/src/footer/vcard-footer.tsx +72 -0
- package/src/generated/client-components.tsx +1366 -1350
- package/src/generated/create-client-request.tsx +116 -113
- package/src/generated/create-server-request.tsx +70 -61
- package/src/generated/create-suggestions-request.tsx +55 -55
- package/src/generated/server-components.tsx +1056 -1056
- package/src/generated/suggestions.tsx +302 -299
- package/src/icons/file-icon.tsx +8 -8
- package/src/icons/flag-icon.tsx +15 -15
- package/src/icons/loading.tsx +11 -11
- package/src/icons/social-icon.tsx +24 -0
- package/src/info/info-card.tsx +43 -0
- package/src/info/{info-table.tsx → information-unit-metadata-grid.tsx} +157 -146
- package/src/info/shared.tsx +49 -25
- package/src/navbar/language-switcher/content-language-switch.tsx +92 -92
- package/src/navbar/language-switcher/shared.tsx +33 -33
- package/src/navbar/language-switcher/ui-language-switch.tsx +37 -38
- package/src/navbar/navbar.tsx +157 -148
- package/src/navbar/settings.tsx +62 -62
- package/src/navbar/sign-in-out-btns.tsx +35 -35
- package/src/navbar/user-menu.tsx +60 -60
- package/src/page-wrapper.tsx +54 -31
- package/src/render-article.module.css +155 -0
- package/src/render-article.tsx +75 -68
- package/src/renditions/file-download.tsx +83 -83
- package/src/renditions/html.tsx +64 -64
- package/src/renditions/image/container.tsx +54 -54
- package/src/renditions/image/rendition.tsx +55 -55
- package/src/restriction-menu/restriction-menu-container.tsx +117 -53
- package/src/restriction-menu/restriction-menu-item.tsx +155 -147
- package/src/restriction-menu/restriction-menu.tsx +341 -157
- package/src/results/dialog-filter.tsx +166 -166
- package/src/results/empty.tsx +15 -15
- package/src/results/filter-navbar.tsx +294 -261
- package/src/results/filter-sidebar/__tests__/utils.test.ts +129 -0
- package/src/results/filter-sidebar/index.tsx +270 -126
- package/src/results/filter-sidebar/utils.ts +196 -164
- package/src/results/generic/table-result-list.tsx +97 -99
- package/src/results/{table-with-images.tsx → information-unit-search-results-card-list.tsx} +125 -127
- package/src/results/{cards.tsx → information-unit-search-results-cards.tsx} +99 -99
- package/src/results/{table.tsx → information-unit-search-results-table.tsx} +104 -104
- package/src/results/pagination.tsx +81 -81
- package/src/results/summary.ts +30 -0
- package/src/results/utils.ts +54 -47
- package/src/search-input.tsx +70 -70
- package/src/share-button.tsx +49 -49
- package/src/stores/favorites-store.ts +88 -88
- package/src/stores/highlight-store.ts +15 -15
- package/src/stores/language-store.ts +14 -43
- package/src/stores/restriction-store.ts +11 -11
- package/src/stores/search-settings-store.ts +68 -64
- package/src/article/article-action-bar.analysis.md +0 -15
- package/src/article/article-action-bar.stories.tsx +0 -15
- package/src/article/article-content.analysis.md +0 -15
- package/src/article/article-content.stories.tsx +0 -21
- package/src/autocomplete.analysis.md +0 -17
- package/src/breadcrumb.analysis.md +0 -15
- package/src/carousel/carousel.analysis.md +0 -17
- package/src/check-article-lang.analysis.md +0 -15
- package/src/directoryNodes/tree-of-content.analysis.md +0 -14
- package/src/directoryNodes/tree-of-content.stories.tsx +0 -22
- package/src/documents/result-list.analysis.md +0 -14
- package/src/documents/result-list.stories.tsx +0 -19
- package/src/favorites/bookmark-button.analysis.md +0 -17
- package/src/favorites/bookmark-button.stories.tsx +0 -19
- package/src/favorites/favorite-button.analysis.md +0 -18
- package/src/favorites/favorite-button.stories.tsx +0 -22
- package/src/icons/file-icon.analysis.md +0 -14
- package/src/icons/file-icon.stories.tsx +0 -19
- package/src/icons/flag-icon.analysis.md +0 -14
- package/src/icons/flag-icon.stories.tsx +0 -25
- package/src/icons/loading.analysis.md +0 -14
- package/src/icons/loading.stories.tsx +0 -21
- package/src/info/info-table.analysis.md +0 -15
- package/src/info/shared.analysis.md +0 -14
- package/src/info/stories/info-table.stories.tsx +0 -31
- package/src/info/stories/shared.stories.tsx +0 -24
- package/src/navbar/language-switcher/content-language-switch.analysis.md +0 -15
- package/src/navbar/language-switcher/shared.analysis.md +0 -14
- package/src/navbar/language-switcher/ui-language-switch.analysis.md +0 -15
- package/src/navbar/navbar.analysis.md +0 -14
- package/src/navbar/settings.analysis.md +0 -14
- package/src/navbar/sign-in-out-btns.analysis.md +0 -14
- package/src/navbar/stories/navbar.stories.tsx +0 -31
- package/src/navbar/stories/settings.stories.tsx +0 -15
- package/src/navbar/stories/sign-in-out-btns.stories.tsx +0 -15
- package/src/navbar/stories/user-menu.stories.tsx +0 -20
- package/src/navbar/user-menu.analysis.md +0 -14
- package/src/page-wrapper.analysis.md +0 -14
- package/src/render-article.analysis.md +0 -15
- package/src/renditions/file-download.analysis.md +0 -14
- package/src/renditions/file-download.stories.tsx +0 -19
- package/src/renditions/html.analysis.md +0 -17
- package/src/renditions/html.stories.tsx +0 -19
- package/src/renditions/image/container.analysis.md +0 -15
- package/src/renditions/image/container.stories.tsx +0 -19
- package/src/renditions/image/rendition.analysis.md +0 -14
- package/src/renditions/image/rendition.stories.tsx +0 -19
- package/src/restriction-menu/restriction-menu-container.analysis.md +0 -14
- package/src/restriction-menu/restriction-menu-item.analysis.md +0 -14
- package/src/restriction-menu/restriction-menu.analysis.md +0 -17
- package/src/results/analysis/cards.analysis.md +0 -14
- package/src/results/analysis/dialog-filter.analysis.md +0 -17
- package/src/results/analysis/empty.analysis.md +0 -14
- package/src/results/analysis/filter-navbar.analysis.md +0 -16
- package/src/results/analysis/pagination.analysis.md +0 -14
- package/src/results/analysis/table-with-images.analysis.md +0 -15
- package/src/results/analysis/table.analysis.md +0 -15
- package/src/results/filter-sidebar/index.analysis.md +0 -14
- package/src/results/generic/table-result-list.analysis.md +0 -15
- package/src/results/generic/table-result-list.stories.tsx +0 -21
- package/src/results/stories/cards.stories.tsx +0 -66
- package/src/results/stories/dialog-filter.stories.tsx +0 -20
- package/src/results/stories/empty.stories.tsx +0 -25
- package/src/results/stories/filter-navbar.stories.tsx +0 -19
- package/src/results/stories/filter-sidebar.stories.tsx +0 -20
- package/src/results/stories/pagination.stories.tsx +0 -24
- package/src/results/stories/table-with-images.stories.tsx +0 -19
- package/src/results/stories/table.stories.tsx +0 -78
- package/src/search-input.analysis.md +0 -15
- package/src/share-button.analysis.md +0 -19
- package/src/stories/autocomplete.stories.tsx +0 -20
- package/src/stories/breadcrumb.stories.tsx +0 -93
- package/src/stories/check-article-lang.stories.tsx +0 -22
- package/src/stories/render-article.stories.tsx +0 -19
- package/src/stories/search-input.stories.tsx +0 -21
- package/src/stories/share-button.stories.tsx +0 -15
|
@@ -1,113 +1,116 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-generated from OpenAPI spec (Client-Side)
|
|
3
|
-
* Source: https://staging.c-rex.net/ids/api/swagger/v1/swagger.json
|
|
4
|
-
* Generated: 2025-12-11T16:23:03.635Z
|
|
5
|
-
* Do not edit manually
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
"use client";
|
|
9
|
-
|
|
10
|
-
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
11
|
-
import { replacePathParams, call } from "@c-rex/utils"
|
|
12
|
-
|
|
13
|
-
type SerializedError = {
|
|
14
|
-
message: string;
|
|
15
|
-
name: string;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export type DataRequestRenderProps<T> = {
|
|
19
|
-
data: T | null;
|
|
20
|
-
error: SerializedError | null;
|
|
21
|
-
isLoading: boolean;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export type FetchState<T> = {
|
|
25
|
-
data: T | null;
|
|
26
|
-
error: Error | null;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export function createClientDataRequest<T, PathParams, QueryParams>(
|
|
30
|
-
endpointTemplate: string
|
|
31
|
-
) {
|
|
32
|
-
return function DataRequest(
|
|
33
|
-
pathParams?: PathParams,
|
|
34
|
-
queryParams?: QueryParams,
|
|
35
|
-
) {
|
|
36
|
-
|
|
37
|
-
const [state, setState] = useState<DataRequestRenderProps<T>>({
|
|
38
|
-
data: null,
|
|
39
|
-
error: null,
|
|
40
|
-
isLoading: true,
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const pathParamsKey = useMemo(
|
|
44
|
-
() => JSON.stringify(pathParams ?? {}),
|
|
45
|
-
[pathParams]
|
|
46
|
-
);
|
|
47
|
-
const queryParamsKey = useMemo(
|
|
48
|
-
() => JSON.stringify(queryParams ?? {}),
|
|
49
|
-
[queryParams]
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
const fetchData = useCallback(async () => {
|
|
53
|
-
setState((prev) => ({
|
|
54
|
-
...prev,
|
|
55
|
-
error: null,
|
|
56
|
-
isLoading: true,
|
|
57
|
-
}));
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
const url = replacePathParams(endpointTemplate, pathParams as Record<string, string>);
|
|
61
|
-
const data = await call<T>("CrexApi.execute", {
|
|
62
|
-
url,
|
|
63
|
-
method: "get",
|
|
64
|
-
params: queryParams as Record<string, string | number | boolean | (string | number | boolean)[] | undefined>,
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
setState({
|
|
68
|
-
data,
|
|
69
|
-
error: null,
|
|
70
|
-
isLoading: false,
|
|
71
|
-
});
|
|
72
|
-
} catch (error) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated from OpenAPI spec (Client-Side)
|
|
3
|
+
* Source: https://staging.c-rex.net/ids/api/swagger/v1/swagger.json
|
|
4
|
+
* Generated: 2025-12-11T16:23:03.635Z
|
|
5
|
+
* Do not edit manually
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
"use client";
|
|
9
|
+
|
|
10
|
+
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
11
|
+
import { replacePathParams, call } from "@c-rex/utils"
|
|
12
|
+
|
|
13
|
+
type SerializedError = {
|
|
14
|
+
message: string;
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type DataRequestRenderProps<T> = {
|
|
19
|
+
data: T | null;
|
|
20
|
+
error: SerializedError | null;
|
|
21
|
+
isLoading: boolean;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type FetchState<T> = {
|
|
25
|
+
data: T | null;
|
|
26
|
+
error: Error | null;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export function createClientDataRequest<T, PathParams, QueryParams>(
|
|
30
|
+
endpointTemplate: string
|
|
31
|
+
) {
|
|
32
|
+
return function DataRequest(
|
|
33
|
+
pathParams?: PathParams,
|
|
34
|
+
queryParams?: QueryParams,
|
|
35
|
+
) {
|
|
36
|
+
|
|
37
|
+
const [state, setState] = useState<DataRequestRenderProps<T>>({
|
|
38
|
+
data: null,
|
|
39
|
+
error: null,
|
|
40
|
+
isLoading: true,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const pathParamsKey = useMemo(
|
|
44
|
+
() => JSON.stringify(pathParams ?? {}),
|
|
45
|
+
[pathParams]
|
|
46
|
+
);
|
|
47
|
+
const queryParamsKey = useMemo(
|
|
48
|
+
() => JSON.stringify(queryParams ?? {}),
|
|
49
|
+
[queryParams]
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const fetchData = useCallback(async () => {
|
|
53
|
+
setState((prev) => ({
|
|
54
|
+
...prev,
|
|
55
|
+
error: null,
|
|
56
|
+
isLoading: true,
|
|
57
|
+
}));
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const url = replacePathParams(endpointTemplate, pathParams as Record<string, string>);
|
|
61
|
+
const data = await call<T>("CrexApi.execute", {
|
|
62
|
+
url,
|
|
63
|
+
method: "get",
|
|
64
|
+
params: queryParams as Record<string, string | number | boolean | (string | number | boolean)[] | undefined>,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
setState({
|
|
68
|
+
data,
|
|
69
|
+
error: null,
|
|
70
|
+
isLoading: false,
|
|
71
|
+
});
|
|
72
|
+
} catch (error) {
|
|
73
|
+
const serializedError = error instanceof Error ? error : new Error('Unknown error');
|
|
74
|
+
const resolvedEndpoint = replacePathParams(endpointTemplate, pathParams as Record<string, string>);
|
|
75
|
+
console.error(`[ClientDataRequest] Failed endpoint "${resolvedEndpoint}": ${serializedError.message}`);
|
|
76
|
+
setState({
|
|
77
|
+
data: null,
|
|
78
|
+
error: serializedError,
|
|
79
|
+
isLoading: false,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}, [endpointTemplate, pathParamsKey, queryParamsKey]);
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
// Initial fetch
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
fetchData();
|
|
88
|
+
}, [fetchData]);
|
|
89
|
+
|
|
90
|
+
return state;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export type ClientDataRequestProps<T, PathParams, QueryParams> = {
|
|
95
|
+
pathParams?: PathParams;
|
|
96
|
+
queryParams?: QueryParams;
|
|
97
|
+
children: (result: DataRequestRenderProps<T>) => React.ReactNode;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Create a render-prop component for client-side data fetching
|
|
102
|
+
*/
|
|
103
|
+
export function createClientDataRequestComponent<T, PathParams, QueryParams>(
|
|
104
|
+
endpointTemplate: string
|
|
105
|
+
) {
|
|
106
|
+
const useDataRequest = createClientDataRequest<T, PathParams, QueryParams>(endpointTemplate);
|
|
107
|
+
|
|
108
|
+
return function ClientDataRequest({
|
|
109
|
+
pathParams,
|
|
110
|
+
queryParams,
|
|
111
|
+
children,
|
|
112
|
+
}: ClientDataRequestProps<T, PathParams, QueryParams>) {
|
|
113
|
+
const result = useDataRequest(pathParams, queryParams);
|
|
114
|
+
return <>{children(result)}</>;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
@@ -1,61 +1,70 @@
|
|
|
1
|
-
import { CrexApi } from '@c-rex/core/requests';
|
|
2
|
-
import { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from '@c-rex/constants';
|
|
3
|
-
|
|
4
|
-
type SerializedError = {
|
|
5
|
-
message: string;
|
|
6
|
-
name: string;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export type DataRequestRenderProps<T> = {
|
|
10
|
-
data: T;
|
|
11
|
-
error?: SerializedError;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
type DataRequestProps<T, PathParams, QueryParams> = {
|
|
15
|
-
pathParams?: PathParams;
|
|
16
|
-
queryParams?: QueryParams;
|
|
17
|
-
render: (data: T, error?: SerializedError) => any; // any because it can return JSX, async functions, etc.
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export function createDataRequestWithParams<T, PathParams, QueryParams>(
|
|
22
|
-
endpointTemplate: string
|
|
23
|
-
) {
|
|
24
|
-
return async function DataRequest({
|
|
25
|
-
pathParams,
|
|
26
|
-
queryParams
|
|
27
|
-
render,
|
|
28
|
-
}: DataRequestProps<T, PathParams, QueryParams>): Promise<any> {
|
|
29
|
-
let endpoint = endpointTemplate;
|
|
30
|
-
if (pathParams) {
|
|
31
|
-
endpoint = Object.entries(pathParams as Record<string, string>).reduce(
|
|
32
|
-
(url, [key, value]) => url.replace(`{${key}}`, encodeURIComponent(value)),
|
|
33
|
-
endpointTemplate
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
1
|
+
import { CrexApi } from '@c-rex/core/requests';
|
|
2
|
+
import { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from '@c-rex/constants';
|
|
3
|
+
|
|
4
|
+
type SerializedError = {
|
|
5
|
+
message: string;
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type DataRequestRenderProps<T> = {
|
|
10
|
+
data: T;
|
|
11
|
+
error?: SerializedError;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
type DataRequestProps<T, PathParams, QueryParams> = {
|
|
15
|
+
pathParams?: PathParams;
|
|
16
|
+
queryParams?: QueryParams;
|
|
17
|
+
render: (data: T, error?: SerializedError) => any; // any because it can return JSX, async functions, etc.
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
export function createDataRequestWithParams<T, PathParams, QueryParams>(
|
|
22
|
+
endpointTemplate: string
|
|
23
|
+
) {
|
|
24
|
+
return async function DataRequest({
|
|
25
|
+
pathParams,
|
|
26
|
+
queryParams,
|
|
27
|
+
render,
|
|
28
|
+
}: DataRequestProps<T, PathParams, QueryParams>): Promise<any> {
|
|
29
|
+
let endpoint = endpointTemplate;
|
|
30
|
+
if (pathParams) {
|
|
31
|
+
endpoint = Object.entries(pathParams as Record<string, string>).reduce(
|
|
32
|
+
(url, [key, value]) => url.replace(`{${key}}`, encodeURIComponent(value)),
|
|
33
|
+
endpointTemplate
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const isGetByIdEndpoint = endpointTemplate.includes("{id}");
|
|
38
|
+
const hasQueryParams = queryParams !== undefined;
|
|
39
|
+
const normalizedQueryParams =
|
|
40
|
+
queryParams as unknown as Record<string, string | number | boolean | (string | number | boolean)[] | undefined>;
|
|
41
|
+
|
|
42
|
+
const params = isGetByIdEndpoint
|
|
43
|
+
? (hasQueryParams ? normalizedQueryParams : undefined)
|
|
44
|
+
: ({
|
|
45
|
+
PageNumber: 1,
|
|
46
|
+
PageSize: 12,
|
|
47
|
+
Wildcard: WILD_CARD_OPTIONS.BOTH,
|
|
48
|
+
QueryOperator: OPERATOR_OPTIONS.OR,
|
|
49
|
+
...normalizedQueryParams,
|
|
50
|
+
} as Record<string, string | number | boolean | (string | number | boolean)[] | undefined>);
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
const api = new CrexApi();
|
|
54
|
+
const data = await api.execute<T>({
|
|
55
|
+
url: endpoint,
|
|
56
|
+
method: 'GET',
|
|
57
|
+
params,
|
|
58
|
+
});
|
|
59
|
+
return render(data);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
62
|
+
console.error(`[ServerDataRequest] Failed endpoint "${endpoint}": ${errorMessage}`);
|
|
63
|
+
const serializedError: SerializedError = {
|
|
64
|
+
message: errorMessage,
|
|
65
|
+
name: error instanceof Error ? error.name : 'Error',
|
|
66
|
+
};
|
|
67
|
+
return render({} as T, serializedError);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { AutocompleteSuggestion, SuggestionQueryParams } from '@c-rex/interfaces';
|
|
4
|
-
import { call } from '@c-rex/utils';
|
|
5
|
-
|
|
6
|
-
type SerializedError = {
|
|
7
|
-
message: string;
|
|
8
|
-
name: string;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
type SuggestionRequestProps = {
|
|
12
|
-
prefix: string;
|
|
13
|
-
queryParams?: SuggestionQueryParams;
|
|
14
|
-
endpoint: string;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export const suggestionRequest = async ({
|
|
18
|
-
endpoint,
|
|
19
|
-
prefix,
|
|
20
|
-
queryParams = {}
|
|
21
|
-
}: SuggestionRequestProps): Promise<{ data: string[], error?: SerializedError }> => {
|
|
22
|
-
try {
|
|
23
|
-
const data = await call<AutocompleteSuggestion>("CrexApi.execute", {
|
|
24
|
-
url: endpoint,
|
|
25
|
-
method: "get",
|
|
26
|
-
params: {
|
|
27
|
-
Prefix: prefix,
|
|
28
|
-
...queryParams
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const suggestions: string[] = [];
|
|
33
|
-
const comparableList: string[] = [];
|
|
34
|
-
|
|
35
|
-
if (data.suggestions) {
|
|
36
|
-
data.suggestions.forEach((item) => {
|
|
37
|
-
suggestions.push(item.value);
|
|
38
|
-
comparableList.push(item.value.toLowerCase());
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Add query to beginning if not already in suggestions
|
|
43
|
-
if (!comparableList.includes(prefix.toLowerCase())) {
|
|
44
|
-
return { data: [prefix, ...suggestions] };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return { data: suggestions };
|
|
48
|
-
|
|
49
|
-
} catch (error) {
|
|
50
|
-
const serializedError: SerializedError = {
|
|
51
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
52
|
-
name: error instanceof Error ? error.name : 'Error',
|
|
53
|
-
};
|
|
54
|
-
return { data: [], error: serializedError };
|
|
55
|
-
}
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { AutocompleteSuggestion, SuggestionQueryParams } from '@c-rex/interfaces';
|
|
4
|
+
import { call } from '@c-rex/utils';
|
|
5
|
+
|
|
6
|
+
type SerializedError = {
|
|
7
|
+
message: string;
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type SuggestionRequestProps = {
|
|
12
|
+
prefix: string;
|
|
13
|
+
queryParams?: SuggestionQueryParams;
|
|
14
|
+
endpoint: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const suggestionRequest = async ({
|
|
18
|
+
endpoint,
|
|
19
|
+
prefix,
|
|
20
|
+
queryParams = {}
|
|
21
|
+
}: SuggestionRequestProps): Promise<{ data: string[], error?: SerializedError }> => {
|
|
22
|
+
try {
|
|
23
|
+
const data = await call<AutocompleteSuggestion>("CrexApi.execute", {
|
|
24
|
+
url: endpoint,
|
|
25
|
+
method: "get",
|
|
26
|
+
params: {
|
|
27
|
+
Prefix: prefix,
|
|
28
|
+
...queryParams
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const suggestions: string[] = [];
|
|
33
|
+
const comparableList: string[] = [];
|
|
34
|
+
|
|
35
|
+
if (data.suggestions) {
|
|
36
|
+
data.suggestions.forEach((item) => {
|
|
37
|
+
suggestions.push(item.value);
|
|
38
|
+
comparableList.push(item.value.toLowerCase());
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Add query to beginning if not already in suggestions
|
|
43
|
+
if (!comparableList.includes(prefix.toLowerCase())) {
|
|
44
|
+
return { data: [prefix, ...suggestions] };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return { data: suggestions };
|
|
48
|
+
|
|
49
|
+
} catch (error) {
|
|
50
|
+
const serializedError: SerializedError = {
|
|
51
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
52
|
+
name: error instanceof Error ? error.name : 'Error',
|
|
53
|
+
};
|
|
54
|
+
return { data: [], error: serializedError };
|
|
55
|
+
}
|
|
56
56
|
};
|