@k-int/stripes-kint-components 5.15.0 → 5.16.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/CHANGELOG.md +9 -0
- package/es/lib/NoResultsMessage/NoResultsMessage.js +12 -11
- package/es/lib/SASQLookupComponent/SASQLookupComponent.js +24 -7
- package/es/lib/SASQRoute/SASQRoute.js +12 -4
- package/package.json +2 -2
- package/src/lib/NoResultsMessage/NoResultsMessage.js +10 -10
- package/src/lib/SASQLookupComponent/SASQLookupComponent.js +26 -5
- package/src/lib/SASQRoute/SASQRoute.js +19 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
# [5.16.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.15.0...v5.16.0) (2025-03-14)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Added ability for SASQLookupComponent to accept sasqProps.syncToLocation/query(Getter/Setter) and have that impact on results ([351b503](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/351b50313e0a320191b24fa1df6227103021f106))
|
|
7
|
+
* SASQRoute allow tweaking of SASQLookupComponent and SASQViewComponent component directly in SASQRoute ([6c812b2](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/6c812b2c4c10a049b8a9e56e624cc3dceee3a8fe))
|
|
8
|
+
* SASQRoute override paths for lookup/view ([994b976](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/994b976cbec3af6382066bc6bf6dd945d4a3e239))
|
|
9
|
+
|
|
1
10
|
# [5.15.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.14.0...v5.15.0) (2025-02-21)
|
|
2
11
|
|
|
3
12
|
|
|
@@ -34,25 +34,26 @@ const NoResultsMessage = _ref => {
|
|
|
34
34
|
searchTerm
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
if (!isLoading && !searchTerm) {
|
|
38
|
+
// No search term and not loading
|
|
39
|
+
icon = filterPaneIsVisible ? 'arrow-left' : null;
|
|
40
|
+
label = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
|
|
41
|
+
id: "stripes-smart-components.sas.noResults.noTerms"
|
|
42
|
+
});
|
|
43
|
+
} else if (!isLoading) {
|
|
44
|
+
// Search term but not loading
|
|
40
45
|
icon = 'search';
|
|
41
46
|
label = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
|
|
42
47
|
id: "stripes-smart-components.sas.noResults.noResults"
|
|
43
48
|
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Loading results
|
|
47
|
-
if (isLoading) {
|
|
49
|
+
} else if (isLoading) {
|
|
50
|
+
// Loading
|
|
48
51
|
icon = 'spinner-ellipsis';
|
|
49
52
|
label = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
|
|
50
53
|
id: "stripes-smart-components.sas.noResults.loading"
|
|
51
54
|
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Request failure
|
|
55
|
-
if (isError) {
|
|
55
|
+
} else if (isError) {
|
|
56
|
+
// Request failure
|
|
56
57
|
icon = 'exclamation-circle';
|
|
57
58
|
label = error?.message;
|
|
58
59
|
}
|
|
@@ -27,10 +27,12 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
|
|
|
27
27
|
intlKey: passedIntlKey,
|
|
28
28
|
intlNS: passedIntlNS,
|
|
29
29
|
labelOverrides = {},
|
|
30
|
-
mainPaneProps,
|
|
30
|
+
mainPaneProps = {},
|
|
31
31
|
mclProps = {},
|
|
32
32
|
noSearchField,
|
|
33
33
|
persistedPanesetProps = {},
|
|
34
|
+
queryParameterGenerator = _utils.generateKiwtQuery,
|
|
35
|
+
// Expects a function which accepts SASQ_MAP and nsValues
|
|
34
36
|
RenderBody,
|
|
35
37
|
rowNavigation = true,
|
|
36
38
|
// Default navigation onRowClick
|
|
@@ -40,28 +42,41 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
|
|
|
40
42
|
} = props;
|
|
41
43
|
const kintIntl = (0, _hooks.useKintIntl)(passedIntlKey, passedIntlNS);
|
|
42
44
|
const [count, setCount] = (0, _react.useState)(0);
|
|
45
|
+
|
|
46
|
+
// Grab things we might need from sasqProps if passed
|
|
47
|
+
const {
|
|
48
|
+
query: sasqPropsQuery,
|
|
49
|
+
// If these are overriden we need to make use of them
|
|
50
|
+
queryGetter: sasqPropsQueryGetter,
|
|
51
|
+
querySetter: sasqPropsQuerySetter,
|
|
52
|
+
syncToLocation = true
|
|
53
|
+
} = sasqProps ?? {};
|
|
43
54
|
const {
|
|
44
55
|
currentPage,
|
|
45
56
|
paginationMCLProps,
|
|
46
57
|
paginationSASQProps
|
|
47
58
|
} = (0, _hooks.usePrevNextPagination)({
|
|
48
59
|
count,
|
|
49
|
-
pageSize: fetchParameters.SASQ_MAP?.perPage
|
|
60
|
+
pageSize: fetchParameters.SASQ_MAP?.perPage,
|
|
61
|
+
syncToLocation
|
|
50
62
|
});
|
|
51
63
|
const {
|
|
52
|
-
query,
|
|
53
|
-
queryGetter,
|
|
54
|
-
querySetter
|
|
64
|
+
query: kintSASQQuery,
|
|
65
|
+
queryGetter: kintSASQQueryGetter,
|
|
66
|
+
querySetter: kintSASQQuerySetter
|
|
55
67
|
} = (0, _hooks.useKiwtSASQuery)();
|
|
68
|
+
const query = (0, _react.useMemo)(() => sasqPropsQuery ?? kintSASQQuery, [sasqPropsQuery, kintSASQQuery]);
|
|
69
|
+
const queryGetter = (0, _react.useMemo)(() => sasqPropsQueryGetter ?? kintSASQQueryGetter, [sasqPropsQueryGetter, kintSASQQueryGetter]);
|
|
70
|
+
const querySetter = (0, _react.useMemo)(() => sasqPropsQuerySetter ?? kintSASQQuerySetter, [sasqPropsQuerySetter, kintSASQQuerySetter]);
|
|
56
71
|
const {
|
|
57
72
|
0: namespace
|
|
58
73
|
} = (0, _core.useNamespace)();
|
|
59
74
|
const ky = (0, _core.useOkapiKy)();
|
|
60
75
|
const filterPaneVisibileKey = `${namespace}-${id}-filterPaneVisibility`;
|
|
61
|
-
const queryParams = (0, _react.useMemo)(() => (
|
|
76
|
+
const queryParams = (0, _react.useMemo)(() => queryParameterGenerator({
|
|
62
77
|
...fetchParameters.SASQ_MAP,
|
|
63
78
|
page: currentPage
|
|
64
|
-
}, query ?? {}), [currentPage, fetchParameters.SASQ_MAP, query]);
|
|
79
|
+
}, query ?? {}), [currentPage, fetchParameters.SASQ_MAP, query, queryParameterGenerator]);
|
|
65
80
|
const [filterPaneVisible, setFilterPaneVisible] = (0, _hooks.useLocalStorageState)(filterPaneVisibileKey, true);
|
|
66
81
|
const toggleFilterPane = () => setFilterPaneVisible(!filterPaneVisible);
|
|
67
82
|
const queryNamespace = [namespace, 'SASQ'];
|
|
@@ -97,6 +112,7 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
|
|
|
97
112
|
},
|
|
98
113
|
queryGetter: queryGetter,
|
|
99
114
|
querySetter: querySetter,
|
|
115
|
+
syncToLocation: syncToLocation,
|
|
100
116
|
...sasqProps,
|
|
101
117
|
...paginationSASQProps,
|
|
102
118
|
children: sasqRenderProps => {
|
|
@@ -246,6 +262,7 @@ SASQLookupComponent.propTypes = {
|
|
|
246
262
|
filterPaneProps: _propTypes.default.object,
|
|
247
263
|
FilterComponent: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),
|
|
248
264
|
FilterPaneHeaderComponent: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),
|
|
265
|
+
queryParameterGenerator: _propTypes.default.func,
|
|
249
266
|
history: _propTypes.default.object,
|
|
250
267
|
id: _propTypes.default.string.isRequired,
|
|
251
268
|
intlKey: _propTypes.default.string,
|
|
@@ -15,7 +15,11 @@ const SASQRoute = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
15
15
|
let {
|
|
16
16
|
children,
|
|
17
17
|
fetchParameters,
|
|
18
|
+
getPathLookup = path => `${path}/:id?`,
|
|
19
|
+
getPathView = path => `${path}/:id`,
|
|
20
|
+
SASQLookupComponent: RouteLookupComponent = _SASQLookupComponent.SASQLookupComponent,
|
|
18
21
|
path,
|
|
22
|
+
SASQViewComponent: RouteViewComponent = _SASQViewComponent.default,
|
|
19
23
|
...props
|
|
20
24
|
} = _ref;
|
|
21
25
|
// Grab the SASQ_MAP and tweak it
|
|
@@ -36,9 +40,9 @@ const SASQRoute = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
36
40
|
// Reinsert the SASQ_MAP
|
|
37
41
|
fetchParameters.SASQ_MAP = SASQ_MAP;
|
|
38
42
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
|
|
39
|
-
path:
|
|
43
|
+
path: getPathLookup(path),
|
|
40
44
|
render: routeProps => {
|
|
41
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
45
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteLookupComponent, {
|
|
42
46
|
ref: lookupRef,
|
|
43
47
|
...routeProps,
|
|
44
48
|
fetchParameters: fetchParameters,
|
|
@@ -46,8 +50,8 @@ const SASQRoute = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
46
50
|
...props,
|
|
47
51
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactRouterDom.Switch, {
|
|
48
52
|
children: [children, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
|
|
49
|
-
path:
|
|
50
|
-
render: innerProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
53
|
+
path: getPathView(path),
|
|
54
|
+
render: innerProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteViewComponent, {
|
|
51
55
|
ref: viewRef,
|
|
52
56
|
...innerProps,
|
|
53
57
|
fetchParameters: fetchParameters,
|
|
@@ -64,7 +68,11 @@ const SASQRoute = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
64
68
|
SASQRoute.propTypes = {
|
|
65
69
|
children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.element, _propTypes.default.func]),
|
|
66
70
|
fetchParameters: _propTypes.default.object,
|
|
71
|
+
getPathLookup: _propTypes.default.func,
|
|
72
|
+
getPathView: _propTypes.default.func,
|
|
67
73
|
path: _propTypes.default.string,
|
|
74
|
+
SASQLookupComponent: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),
|
|
75
|
+
SASQViewComponent: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),
|
|
68
76
|
ViewComponent: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node])
|
|
69
77
|
};
|
|
70
78
|
var _default = exports.default = SASQRoute;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@k-int/stripes-kint-components",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.16.0",
|
|
4
4
|
"description": "Stripes Component library for K-Int specific applications",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.css"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@folio/jest-config-stripes": "^2.0.0 || ^3.0.0",
|
|
45
45
|
"@folio/stripes": "^9.0.0 || ^10.0.0",
|
|
46
46
|
"@folio/stripes-cli": "^3.0.0 || ^4.0.0",
|
|
47
|
-
"@folio/stripes-erm-testing": "^2.0.0",
|
|
47
|
+
"@folio/stripes-erm-testing": "^2.0.0 || ^3.0.0",
|
|
48
48
|
"@formatjs/cli": "^6.6.0",
|
|
49
49
|
"@semantic-release/changelog": "^6.0.3",
|
|
50
50
|
"@semantic-release/git": "^10.0.1",
|
|
@@ -23,20 +23,20 @@ const NoResultsMessage = ({
|
|
|
23
23
|
let icon = 'search';
|
|
24
24
|
let label = <FormattedMessage id="stripes-smart-components.sas.noResults.default" values={{ searchTerm }} />;
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
if (!isLoading && !searchTerm) {
|
|
27
|
+
// No search term and not loading
|
|
28
|
+
icon = filterPaneIsVisible ? 'arrow-left' : null;
|
|
29
|
+
label = <FormattedMessage id="stripes-smart-components.sas.noResults.noTerms" />;
|
|
30
|
+
} else if (!isLoading) {
|
|
31
|
+
// Search term but not loading
|
|
28
32
|
icon = 'search';
|
|
29
33
|
label = <FormattedMessage id="stripes-smart-components.sas.noResults.noResults" />;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Loading results
|
|
33
|
-
if (isLoading) {
|
|
34
|
+
} else if (isLoading) {
|
|
35
|
+
// Loading
|
|
34
36
|
icon = 'spinner-ellipsis';
|
|
35
37
|
label = <FormattedMessage id="stripes-smart-components.sas.noResults.loading" />;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Request failure
|
|
39
|
-
if (isError) {
|
|
38
|
+
} else if (isError) {
|
|
39
|
+
// Request failure
|
|
40
40
|
icon = 'exclamation-circle';
|
|
41
41
|
label = error?.message;
|
|
42
42
|
}
|
|
@@ -40,10 +40,11 @@ const SASQLookupComponent = forwardRef((props, ref) => {
|
|
|
40
40
|
intlKey: passedIntlKey,
|
|
41
41
|
intlNS: passedIntlNS,
|
|
42
42
|
labelOverrides = {},
|
|
43
|
-
mainPaneProps,
|
|
43
|
+
mainPaneProps = {},
|
|
44
44
|
mclProps = {},
|
|
45
45
|
noSearchField,
|
|
46
46
|
persistedPanesetProps = {},
|
|
47
|
+
queryParameterGenerator = generateKiwtQuery, // Expects a function which accepts SASQ_MAP and nsValues
|
|
47
48
|
RenderBody,
|
|
48
49
|
rowNavigation = true, // Default navigation onRowClick
|
|
49
50
|
sasqProps,
|
|
@@ -53,25 +54,43 @@ const SASQLookupComponent = forwardRef((props, ref) => {
|
|
|
53
54
|
const kintIntl = useKintIntl(passedIntlKey, passedIntlNS);
|
|
54
55
|
const [count, setCount] = useState(0);
|
|
55
56
|
|
|
57
|
+
// Grab things we might need from sasqProps if passed
|
|
58
|
+
const {
|
|
59
|
+
query: sasqPropsQuery, // If these are overriden we need to make use of them
|
|
60
|
+
queryGetter: sasqPropsQueryGetter,
|
|
61
|
+
querySetter: sasqPropsQuerySetter,
|
|
62
|
+
syncToLocation = true
|
|
63
|
+
} = sasqProps ?? {};
|
|
64
|
+
|
|
56
65
|
const { currentPage, paginationMCLProps, paginationSASQProps } = usePrevNextPagination({
|
|
57
66
|
count,
|
|
58
|
-
pageSize: fetchParameters.SASQ_MAP?.perPage
|
|
67
|
+
pageSize: fetchParameters.SASQ_MAP?.perPage,
|
|
68
|
+
syncToLocation
|
|
59
69
|
});
|
|
60
70
|
|
|
61
|
-
const {
|
|
71
|
+
const {
|
|
72
|
+
query: kintSASQQuery,
|
|
73
|
+
queryGetter: kintSASQQueryGetter,
|
|
74
|
+
querySetter: kintSASQQuerySetter
|
|
75
|
+
} = useKiwtSASQuery();
|
|
76
|
+
|
|
77
|
+
const query = useMemo(() => sasqPropsQuery ?? kintSASQQuery, [sasqPropsQuery, kintSASQQuery]);
|
|
78
|
+
const queryGetter = useMemo(() => sasqPropsQueryGetter ?? kintSASQQueryGetter, [sasqPropsQueryGetter, kintSASQQueryGetter]);
|
|
79
|
+
const querySetter = useMemo(() => sasqPropsQuerySetter ?? kintSASQQuerySetter, [sasqPropsQuerySetter, kintSASQQuerySetter]);
|
|
80
|
+
|
|
62
81
|
const { 0: namespace } = useNamespace();
|
|
63
82
|
const ky = useOkapiKy();
|
|
64
83
|
|
|
65
84
|
const filterPaneVisibileKey = `${namespace}-${id}-filterPaneVisibility`;
|
|
66
85
|
|
|
67
86
|
const queryParams = useMemo(() => (
|
|
68
|
-
|
|
87
|
+
queryParameterGenerator(
|
|
69
88
|
{
|
|
70
89
|
...fetchParameters.SASQ_MAP,
|
|
71
90
|
page: currentPage,
|
|
72
91
|
}, (query ?? {})
|
|
73
92
|
)
|
|
74
|
-
), [currentPage, fetchParameters.SASQ_MAP, query]);
|
|
93
|
+
), [currentPage, fetchParameters.SASQ_MAP, query, queryParameterGenerator]);
|
|
75
94
|
|
|
76
95
|
const [filterPaneVisible, setFilterPaneVisible] = useLocalStorageState(filterPaneVisibileKey, true);
|
|
77
96
|
const toggleFilterPane = () => setFilterPaneVisible(!filterPaneVisible);
|
|
@@ -118,6 +137,7 @@ const SASQLookupComponent = forwardRef((props, ref) => {
|
|
|
118
137
|
initialSearchState={{ query: '' }}
|
|
119
138
|
queryGetter={queryGetter}
|
|
120
139
|
querySetter={querySetter}
|
|
140
|
+
syncToLocation={syncToLocation}
|
|
121
141
|
{...sasqProps}
|
|
122
142
|
{...paginationSASQProps}
|
|
123
143
|
>
|
|
@@ -315,6 +335,7 @@ SASQLookupComponent.propTypes = {
|
|
|
315
335
|
PropTypes.func,
|
|
316
336
|
PropTypes.node
|
|
317
337
|
]),
|
|
338
|
+
queryParameterGenerator: PropTypes.func,
|
|
318
339
|
history: PropTypes.object,
|
|
319
340
|
id: PropTypes.string.isRequired,
|
|
320
341
|
intlKey: PropTypes.string,
|
|
@@ -12,7 +12,11 @@ import SASQViewComponent from '../SASQViewComponent';
|
|
|
12
12
|
const SASQRoute = forwardRef(({
|
|
13
13
|
children,
|
|
14
14
|
fetchParameters,
|
|
15
|
+
getPathLookup = (path) => `${path}/:id?`,
|
|
16
|
+
getPathView = (path) => `${path}/:id`,
|
|
17
|
+
SASQLookupComponent: RouteLookupComponent = SASQLookupComponent,
|
|
15
18
|
path,
|
|
19
|
+
SASQViewComponent: RouteViewComponent = SASQViewComponent,
|
|
16
20
|
...props
|
|
17
21
|
}, ref) => {
|
|
18
22
|
// Grab the SASQ_MAP and tweak it
|
|
@@ -37,10 +41,10 @@ const SASQRoute = forwardRef(({
|
|
|
37
41
|
|
|
38
42
|
return (
|
|
39
43
|
<Route
|
|
40
|
-
path={
|
|
44
|
+
path={getPathLookup(path)}
|
|
41
45
|
render={routeProps => {
|
|
42
46
|
return (
|
|
43
|
-
<
|
|
47
|
+
<RouteLookupComponent
|
|
44
48
|
ref={lookupRef}
|
|
45
49
|
{...routeProps}
|
|
46
50
|
fetchParameters={fetchParameters}
|
|
@@ -50,9 +54,9 @@ const SASQRoute = forwardRef(({
|
|
|
50
54
|
<Switch>
|
|
51
55
|
{children}
|
|
52
56
|
<Route
|
|
53
|
-
path={
|
|
57
|
+
path={getPathView(path)}
|
|
54
58
|
render={innerProps => (
|
|
55
|
-
<
|
|
59
|
+
<RouteViewComponent
|
|
56
60
|
ref={viewRef}
|
|
57
61
|
{...innerProps}
|
|
58
62
|
fetchParameters={fetchParameters}
|
|
@@ -63,7 +67,7 @@ const SASQRoute = forwardRef(({
|
|
|
63
67
|
)}
|
|
64
68
|
/>
|
|
65
69
|
</Switch>
|
|
66
|
-
</
|
|
70
|
+
</RouteLookupComponent>
|
|
67
71
|
);
|
|
68
72
|
}}
|
|
69
73
|
/>
|
|
@@ -77,7 +81,17 @@ SASQRoute.propTypes = {
|
|
|
77
81
|
PropTypes.func
|
|
78
82
|
]),
|
|
79
83
|
fetchParameters: PropTypes.object,
|
|
84
|
+
getPathLookup: PropTypes.func,
|
|
85
|
+
getPathView: PropTypes.func,
|
|
80
86
|
path: PropTypes.string,
|
|
87
|
+
SASQLookupComponent: PropTypes.oneOfType([
|
|
88
|
+
PropTypes.func,
|
|
89
|
+
PropTypes.node
|
|
90
|
+
]),
|
|
91
|
+
SASQViewComponent: PropTypes.oneOfType([
|
|
92
|
+
PropTypes.func,
|
|
93
|
+
PropTypes.node
|
|
94
|
+
]),
|
|
81
95
|
ViewComponent: PropTypes.oneOfType([
|
|
82
96
|
PropTypes.func,
|
|
83
97
|
PropTypes.node
|