@k-int/stripes-kint-components 5.10.0 → 5.12.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.
Files changed (33) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/es/index.js +12 -0
  3. package/es/lib/EditableRefdataList/EditableRefdataList.js +1 -1
  4. package/es/lib/SASQLookupComponent/SASQLookupComponent.js +38 -30
  5. package/es/lib/Tags/Tags.js +143 -0
  6. package/es/lib/Tags/Tags.test.js +80 -0
  7. package/es/lib/Tags/hooks/index.js +28 -0
  8. package/es/lib/Tags/hooks/useTags.js +15 -0
  9. package/es/lib/Tags/hooks/useTagsEnabled.js +25 -0
  10. package/es/lib/Tags/index.js +40 -0
  11. package/es/lib/Tags/tagsConfig.js +10 -0
  12. package/es/lib/constants/pagination.js +15 -0
  13. package/es/lib/hooks/index.js +7 -0
  14. package/es/lib/hooks/useHelperApp.js +18 -15
  15. package/es/lib/hooks/useLocalPageStore.js +25 -0
  16. package/es/lib/hooks/usePrevNextPagination.js +168 -0
  17. package/package.json +11 -10
  18. package/src/index.js +2 -0
  19. package/src/lib/EditableRefdataList/EditableRefdataList.js +5 -5
  20. package/src/lib/SASQLookupComponent/SASQLookupComponent.js +60 -49
  21. package/src/lib/Tags/Tags.js +145 -0
  22. package/src/lib/Tags/Tags.test.js +77 -0
  23. package/src/lib/Tags/hooks/index.js +2 -0
  24. package/src/lib/Tags/hooks/useTags.js +16 -0
  25. package/src/lib/Tags/hooks/useTagsEnabled.js +19 -0
  26. package/src/lib/Tags/index.js +4 -0
  27. package/src/lib/Tags/tagsConfig.js +16 -0
  28. package/src/lib/constants/pagination.js +10 -0
  29. package/src/lib/hooks/index.js +2 -0
  30. package/src/lib/hooks/useHelperApp.js +21 -13
  31. package/src/lib/hooks/useLocalPageStore.js +18 -0
  32. package/src/lib/hooks/usePrevNextPagination.js +203 -0
  33. package/test/helpers/test-implementor-translations.json +4 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [5.12.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.11.0...v5.12.0) (2025-02-13)
2
+
3
+
4
+ ### Features
5
+
6
+ * **deps:** Stripes v10 dependency updates ([be3892f](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/be3892f9a3f61bf7e52cf1c1287082aed412161b))
7
+ * Paginated display as default for SASQRoute (refs UISER-185) ([9f379c9](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/9f379c91ef284dad9408cccb8d80cc314c969d8d))
8
+
9
+ # [5.11.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.10.0...v5.11.0) (2025-02-07)
10
+
11
+
12
+ ### Features
13
+
14
+ * Added Tags helper app and hooks to stripes-kint-components (Moving out of erm-components longer term) ([e881639](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/e881639b49036d6016dc65d83bcf67e596652acc))
15
+
1
16
  # [5.10.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.9.0...v5.10.0) (2025-02-04)
2
17
 
3
18
 
package/es/index.js CHANGED
@@ -400,6 +400,18 @@ var _ResponsiveButtonGroup = _interopRequireDefault(require("./lib/ResponsiveBut
400
400
  var _SettingsFormContainer = _interopRequireDefault(require("./lib/SettingsFormContainer"));
401
401
  var _ComboButton = _interopRequireDefault(require("./lib/ComboButton"));
402
402
  var _NumberField = _interopRequireDefault(require("./lib/NumberField"));
403
+ var _Tags = require("./lib/Tags");
404
+ Object.keys(_Tags).forEach(function (key) {
405
+ if (key === "default" || key === "__esModule") return;
406
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
407
+ if (key in exports && exports[key] === _Tags[key]) return;
408
+ Object.defineProperty(exports, key, {
409
+ enumerable: true,
410
+ get: function () {
411
+ return _Tags[key];
412
+ }
413
+ });
414
+ });
403
415
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
404
416
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
405
417
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -116,7 +116,7 @@ const EditableRefdataList = _ref => {
116
116
  // or one provided in labelOverrides, which is passed the error message and refdata in question
117
117
  delete: async err => {
118
118
  const errorResp = await (0, _utils.parseErrorResponse)(err.response);
119
- console.log("ERRORRESP: %o", errorResp);
119
+ // console.log('ERRORRESP: %o', errorResp);
120
120
  callout.sendCallout({
121
121
  message: kintIntl.formatKintMessage({
122
122
  id: 'refdata.deleteRefdataValue.errorMessage',
@@ -28,6 +28,7 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
28
28
  intlNS: passedIntlNS,
29
29
  labelOverrides = {},
30
30
  mainPaneProps,
31
+ mclProps = {},
31
32
  noSearchField,
32
33
  persistedPanesetProps = {},
33
34
  RenderBody,
@@ -38,6 +39,15 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
38
39
  searchFieldProps
39
40
  } = props;
40
41
  const kintIntl = (0, _hooks.useKintIntl)(passedIntlKey, passedIntlNS);
42
+ const [count, setCount] = (0, _react.useState)(0);
43
+ const {
44
+ currentPage,
45
+ paginationMCLProps,
46
+ paginationSASQProps
47
+ } = (0, _hooks.usePrevNextPagination)({
48
+ count,
49
+ pageSize: fetchParameters.SASQ_MAP?.perPage
50
+ });
41
51
  const {
42
52
  query,
43
53
  queryGetter,
@@ -48,14 +58,10 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
48
58
  } = (0, _core.useNamespace)();
49
59
  const ky = (0, _core.useOkapiKy)();
50
60
  const filterPaneVisibileKey = `${namespace}-${id}-filterPaneVisibility`;
51
- const fetchPageData = _ref => {
52
- let {
53
- pageParam = 0
54
- } = _ref;
55
- const queryMap = fetchParameters.SASQ_MAP;
56
- queryMap.offset = pageParam;
57
- return ky(`${fetchParameters.endpoint}${(0, _utils.generateKiwtQuery)(queryMap, query)}`).json();
58
- };
61
+ const queryParams = (0, _react.useMemo)(() => (0, _utils.generateKiwtQuery)({
62
+ ...fetchParameters.SASQ_MAP,
63
+ page: currentPage
64
+ }, query ?? {}), [currentPage, fetchParameters.SASQ_MAP, query]);
59
65
  const [filterPaneVisible, setFilterPaneVisible] = (0, _hooks.useLocalStorageState)(filterPaneVisibileKey, true);
60
66
  const toggleFilterPane = () => setFilterPaneVisible(!filterPaneVisible);
61
67
  const queryNamespace = [namespace, 'SASQ'];
@@ -64,30 +70,27 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
64
70
  }
65
71
  queryNamespace.push('viewAll');
66
72
  queryNamespace.push(query);
73
+ queryNamespace.push(currentPage);
67
74
  const {
68
- data: totalData = {},
69
- ...restOfInfiniteQueryProps
70
- } = (0, _reactQuery.useInfiniteQuery)(queryNamespace, fetchPageData);
75
+ data = {},
76
+ ...restOfQueryProps
77
+ } = (0, _reactQuery.useQuery)(queryNamespace, () => {
78
+ return ky.get(`${fetchParameters.endpoint}${queryParams}`).json();
79
+ }, {
80
+ enabled: !!currentPage
81
+ });
82
+ (0, _react.useEffect)(() => {
83
+ if (count !== data?.totalRecords) {
84
+ setCount(data?.totalRecords);
85
+ }
86
+ }, [count, data.totalRecords]);
71
87
  (0, _react.useImperativeHandle)(ref, () => ({
72
88
  lookupQueryProps: {
73
- data: totalData,
74
- ...restOfInfiniteQueryProps
75
- }
89
+ data,
90
+ ...restOfQueryProps
91
+ },
92
+ queryParams
76
93
  }));
77
- const data = totalData.pages?.reduce((acc, curr) => {
78
- const newAcc = {
79
- ...acc
80
- };
81
- for (const [key, value] of Object.entries(curr)) {
82
- if (key !== 'page' && key !== 'result' && acc[key] !== value) {
83
- newAcc[key] = value;
84
- }
85
- }
86
- const newResults = [...(acc.results ?? [])];
87
- newResults.push(...(curr.results ?? []));
88
- newAcc.results = newResults;
89
- return newAcc;
90
- }, {}) ?? {};
91
94
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_smartComponents.SearchAndSortQuery, {
92
95
  initialSearchState: {
93
96
  query: ''
@@ -95,6 +98,7 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
95
98
  queryGetter: queryGetter,
96
99
  querySetter: querySetter,
97
100
  ...sasqProps,
101
+ ...paginationSASQProps,
98
102
  children: sasqRenderProps => {
99
103
  const {
100
104
  activeFilters,
@@ -222,10 +226,14 @@ const SASQLookupComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
222
226
  query: query,
223
227
  rowNavigation: rowNavigation,
224
228
  toggleFilterPane: toggleFilterPane,
225
- ...restOfInfiniteQueryProps,
229
+ ...restOfQueryProps,
226
230
  ...sasqRenderProps,
227
231
  ...sasqProps,
228
- ...props
232
+ ...props,
233
+ mclProps: {
234
+ ...paginationMCLProps,
235
+ ...mclProps
236
+ }
229
237
  })
230
238
  }), children]
231
239
  });
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactQuery = require("react-query");
10
+ var _core = require("@folio/stripes/core");
11
+ var _lodash = require("lodash");
12
+ var _components = require("@folio/stripes/components");
13
+ var _smartComponents = require("@folio/stripes/smart-components");
14
+ var _tagsConfig = require("./tagsConfig");
15
+ var _hooks = require("./hooks");
16
+ var _hooks2 = require("../hooks");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ const Tags = _ref => {
20
+ let {
21
+ invalidateLinks = [],
22
+ // If there are other queries that need invalidating, pass those here
23
+ labelOverrides = {},
24
+ link,
25
+ onToggle,
26
+ intlKey: passedIntlKey,
27
+ intlNS: passedIntlNS
28
+ } = _ref;
29
+ const kintIntl = (0, _hooks2.useKintIntl)(passedIntlKey, passedIntlNS);
30
+ const ky = (0, _core.useOkapiKy)();
31
+ const callout = (0, _react.useContext)(_core.CalloutContext);
32
+ const queryClient = (0, _reactQuery.useQueryClient)();
33
+
34
+ // TAG GET/POST
35
+ const {
36
+ data: {
37
+ tags = []
38
+ } = {}
39
+ } = (0, _hooks.useTags)([..._tagsConfig.tagNamespaceArray, link]);
40
+
41
+ // istanbul ignore next
42
+ const {
43
+ mutateAsync: postTags
44
+ } = (0, _reactQuery.useMutation)(['tags', 'stripes-erm-components', 'Tags', 'postTags'], data => ky.post('tags', {
45
+ json: data
46
+ }).then(() => {
47
+ queryClient.invalidateQueries('tags');
48
+ }));
49
+
50
+ // ENTITY GET/PUT
51
+ const {
52
+ data: entity
53
+ } = (0, _reactQuery.useQuery)([link, 'stripes-erm-components', 'Tags'], () => ky.get(link).json());
54
+
55
+ // istanbul ignore next
56
+ const {
57
+ mutateAsync: putEntity
58
+ } = (0, _reactQuery.useMutation)([link, 'stripes-erm-components', 'Tags', 'putEntity'], data => ky.put(link, {
59
+ json: data
60
+ }).then(() => {
61
+ queryClient.invalidateQueries(link);
62
+ if (invalidateLinks?.length) {
63
+ invalidateLinks.forEach(il => queryClient.invalidateQueries(il));
64
+ }
65
+ }));
66
+
67
+ // add tags to global list of tags
68
+ // istanbul ignore next
69
+ const saveTags = tagsToSave => {
70
+ const newTag = (0, _lodash.difference)(tagsToSave.map(t => t.value || t), tags.map(t => t.label.toLowerCase()));
71
+ if (!newTag || !newTag.length) return;
72
+ postTags({
73
+ label: newTag[0],
74
+ description: newTag[0]
75
+ });
76
+ callout.sendCallout({
77
+ message: kintIntl.formatKintMessage({
78
+ id: 'newTagCreated',
79
+ overrideValue: labelOverrides.newTagCreated
80
+ })
81
+ });
82
+ };
83
+
84
+ // add tag to the list of entity tags
85
+ // istanbul ignore next
86
+ const saveEntityTags = tagsToSave => {
87
+ const tagListMap = (entity?.tags ?? []).map(tag => ({
88
+ 'value': tag.value
89
+ }));
90
+ const tagsMap = tagsToSave.map(tag => ({
91
+ 'value': tag.value || tag
92
+ }));
93
+ const newTags = (0, _lodash.sortBy)((0, _lodash.uniqBy)([...tagListMap, ...tagsMap], 'value'));
94
+ putEntity({
95
+ tags: newTags
96
+ });
97
+ };
98
+ const onAdd = addTags => {
99
+ saveEntityTags(addTags);
100
+ saveTags(addTags);
101
+ };
102
+ const onRemove = tag => {
103
+ const tagToDelete = (entity?.tags ?? []).filter(t => t.value.toLowerCase() === tag.toLowerCase());
104
+ putEntity({
105
+ tags: [{
106
+ id: tagToDelete[0].id,
107
+ _delete: true
108
+ }]
109
+ });
110
+ };
111
+ const entityTags = (entity?.tags ?? []).map(tag => tag.value.toLowerCase());
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Pane, {
113
+ defaultWidth: "20%",
114
+ dismissible: true,
115
+ id: "tags-helper-pane",
116
+ onClose: onToggle,
117
+ paneSub: kintIntl.formatKintMessage({
118
+ id: 'numberOfTags',
119
+ overrideValue: labelOverrides.numberOfTags
120
+ }, {
121
+ count: entity?.tags?.length ?? 0
122
+ }),
123
+ paneTitle: kintIntl.formatKintMessage({
124
+ id: 'tags',
125
+ overrideValue: labelOverrides.tags
126
+ }),
127
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_smartComponents.TagsForm, {
128
+ entityTags: entityTags,
129
+ onAdd: onAdd,
130
+ onRemove: onRemove,
131
+ tags: tags
132
+ })
133
+ });
134
+ };
135
+ Tags.propTypes = {
136
+ intlKey: _propTypes.default.string,
137
+ intlNS: _propTypes.default.string,
138
+ invalidateLinks: _propTypes.default.arrayOf(_propTypes.default.string),
139
+ labelOverrides: _propTypes.default.object,
140
+ link: _propTypes.default.string,
141
+ onToggle: _propTypes.default.func
142
+ };
143
+ var _default = exports.default = Tags;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _reactRouterDom = require("react-router-dom");
5
+ var _stripesErmTesting = require("@folio/stripes-erm-testing");
6
+ var _Tags = _interopRequireDefault(require("./Tags"));
7
+ var _jest = require("../../../test/jest");
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const onToggle = jest.fn();
11
+ const onAdd = jest.fn();
12
+ const link = 'erm/sas/14c16fc4-f986-4e60-aa59-4e627fcf160b';
13
+ describe('Tags', () => {
14
+ let renderComponent;
15
+ beforeEach(() => {
16
+ renderComponent = (0, _jest.renderWithKintHarness)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.MemoryRouter, {
17
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tags.default, {
18
+ invalidateLinks: [],
19
+ link: link,
20
+ onAdd: onAdd,
21
+ onToggle: onToggle
22
+ })
23
+ }));
24
+ });
25
+ test('renders the expected label', () => {
26
+ const {
27
+ getByText
28
+ } = renderComponent;
29
+ expect(getByText('0 Tags')).toBeInTheDocument();
30
+ });
31
+ test('renders expected pane dismiss button ', async () => {
32
+ await (0, _stripesErmTesting.IconButton)('Close Tags').exists();
33
+ });
34
+ test('renders expected open menu button ', () => {
35
+ const {
36
+ getByRole
37
+ } = renderComponent;
38
+ expect(getByRole('button', {
39
+ name: 'stripes-components.multiSelection.dropdownTriggerLabel'
40
+ })).toBeInTheDocument();
41
+ });
42
+ test('renders tags heading ', () => {
43
+ const {
44
+ getByRole
45
+ } = renderComponent;
46
+ expect(getByRole('heading', {
47
+ name: 'Tags'
48
+ })).toBeInTheDocument();
49
+ });
50
+ test('renders expected region with zero tags', () => {
51
+ const {
52
+ getByRole
53
+ } = renderComponent;
54
+ expect(getByRole('region', {
55
+ name: 'Tags 0 Tags'
56
+ })).toBeInTheDocument();
57
+ });
58
+ test('renders the expected multiSelectDescription', () => {
59
+ const {
60
+ getByText
61
+ } = renderComponent;
62
+ expect(getByText('Contains a list of any selected values, followed by an autocomplete textfield for selecting additional values.')).toBeInTheDocument();
63
+ });
64
+ test('renders the expected label', () => {
65
+ const {
66
+ getByText
67
+ } = renderComponent;
68
+ expect(getByText('0 items selected')).toBeInTheDocument();
69
+ });
70
+ test('displays the tags pane', async () => {
71
+ await (0, _stripesErmTesting.Pane)('Tags').is({
72
+ visible: true
73
+ });
74
+ });
75
+ test('displays the tags pane header', async () => {
76
+ await (0, _stripesErmTesting.PaneHeader)('Tags').is({
77
+ visible: true
78
+ });
79
+ });
80
+ });
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "tagsEnabledQueryKey", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTagsEnabled.tagsEnabledQueryKey;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "useTags", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _useTags.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "useTagsEnabled", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _useTagsEnabled.default;
22
+ }
23
+ });
24
+ var _useTagsEnabled = _interopRequireWildcard(require("./useTagsEnabled"));
25
+ var _useTags = _interopRequireDefault(require("./useTags"));
26
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
28
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactQuery = require("react-query");
8
+ var _core = require("@folio/stripes/core");
9
+ var _tagsConfig = require("../tagsConfig");
10
+ const useTags = (namespaceArray, options) => {
11
+ const ky = (0, _core.useOkapiKy)();
12
+ const nsArray = namespaceArray ?? _tagsConfig.tagNamespaceArray;
13
+ return (0, _reactQuery.useQuery)(nsArray, () => ky.get(_tagsConfig.defaultTagQuery).json(), options);
14
+ };
15
+ var _default = exports.default = useTags;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.tagsEnabledQueryKey = exports.default = void 0;
7
+ var _core = require("@folio/stripes/core");
8
+ var _reactQuery = require("react-query");
9
+ var _endpoints = require("../../constants/endpoints");
10
+ const tagsEnabledQueryKey = exports.tagsEnabledQueryKey = [_endpoints.MOD_SETTINGS_ENDPOINT, 'query=(module==TAGS and configName==tags_enabled)', 'stripes-kint-components', 'useTagsEnabled'];
11
+ const useTagsEnabled = () => {
12
+ const ky = (0, _core.useOkapiKy)();
13
+ const queryObject = (0, _reactQuery.useQuery)(tagsEnabledQueryKey, () => ky.get(`${_endpoints.MOD_SETTINGS_ENDPOINT}?query=(module==TAGS and configName==tags_enabled)`).json());
14
+ const {
15
+ data: {
16
+ configs: {
17
+ 0: {
18
+ value
19
+ } = {}
20
+ } = []
21
+ } = {}
22
+ } = queryObject;
23
+ return !value || value === 'true';
24
+ };
25
+ var _default = exports.default = useTagsEnabled;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ Tags: true
8
+ };
9
+ Object.defineProperty(exports, "Tags", {
10
+ enumerable: true,
11
+ get: function () {
12
+ return _Tags.default;
13
+ }
14
+ });
15
+ var _Tags = _interopRequireDefault(require("./Tags"));
16
+ var _tagsConfig = require("./tagsConfig");
17
+ Object.keys(_tagsConfig).forEach(function (key) {
18
+ if (key === "default" || key === "__esModule") return;
19
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
20
+ if (key in exports && exports[key] === _tagsConfig[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _tagsConfig[key];
25
+ }
26
+ });
27
+ });
28
+ var _hooks = require("./hooks");
29
+ Object.keys(_hooks).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
32
+ if (key in exports && exports[key] === _hooks[key]) return;
33
+ Object.defineProperty(exports, key, {
34
+ enumerable: true,
35
+ get: function () {
36
+ return _hooks[key];
37
+ }
38
+ });
39
+ });
40
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.tagsPath = exports.tagNamespaceArray = exports.defaultTagsParams = exports.defaultTagQuery = void 0;
7
+ const tagNamespaceArray = exports.tagNamespaceArray = ['tags', 'stripes-kint-components', 'Tags'];
8
+ const tagsPath = exports.tagsPath = 'tags';
9
+ const defaultTagsParams = exports.defaultTagsParams = ['limit=1000', 'query=cql.allRecords%3D1%20sortby%20label'];
10
+ const defaultTagQuery = exports.defaultTagQuery = `${tagsPath}?${defaultTagsParams?.join('&')}`;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PREV = exports.NEXT = exports.MCL_NEED_MORE_DATA_PREV_NEXT_ARG_INDEX = exports.DEFAULT_PAGINATION_SIZE = exports.DEFAULT_PAGE_KEY = void 0;
7
+ const NEXT = exports.NEXT = 'next';
8
+ const PREV = exports.PREV = 'prev';
9
+
10
+ // THIS SHOULD BE SET BY CALLING CODE, ONLY DEFAULTED TO AVOID DIVISION BY UNDEFINED
11
+ const DEFAULT_PAGINATION_SIZE = exports.DEFAULT_PAGINATION_SIZE = 25;
12
+ // Only here because we need argument 3 from onNeedMoreData
13
+ // and want to avoid "magic number" sonarlint
14
+ const MCL_NEED_MORE_DATA_PREV_NEXT_ARG_INDEX = exports.MCL_NEED_MORE_DATA_PREV_NEXT_ARG_INDEX = 3;
15
+ const DEFAULT_PAGE_KEY = exports.DEFAULT_PAGE_KEY = 'defaultPageKey';
@@ -105,6 +105,12 @@ Object.defineProperty(exports, "useMutateRefdataValue", {
105
105
  return _useMutateRefdataValue.default;
106
106
  }
107
107
  });
108
+ Object.defineProperty(exports, "usePrevNextPagination", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _usePrevNextPagination.default;
112
+ }
113
+ });
108
114
  Object.defineProperty(exports, "useQIndex", {
109
115
  enumerable: true,
110
116
  get: function () {
@@ -150,4 +156,5 @@ var _useMutateRefdataValue = _interopRequireDefault(require("./useMutateRefdataV
150
156
  var _useMutateRefdataCategory = _interopRequireDefault(require("./useMutateRefdataCategory"));
151
157
  var _useMutateCustomProperties = _interopRequireDefault(require("./useMutateCustomProperties"));
152
158
  var _useMutateModConfigEntry = _interopRequireDefault(require("./useMutateModConfigEntry"));
159
+ var _usePrevNextPagination = _interopRequireDefault(require("./usePrevNextPagination"));
153
160
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -4,18 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _reactRouterDom = require("react-router-dom");
9
9
  var _queryString = _interopRequireDefault(require("query-string"));
10
10
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
11
11
  var _jsxRuntime = require("react/jsx-runtime");
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
- let helperObject = {};
16
13
  const useHelperApp = helpers => {
17
14
  const history = (0, _reactRouterDom.useHistory)();
18
15
  const location = (0, _reactRouterDom.useLocation)();
16
+ const [helperObject, setHelperObject] = (0, _react.useState)({});
17
+ const [helperToggleFunctions, setHelperToggleFunctions] = (0, _react.useState)({});
19
18
  const query = _queryString.default.parse(location.search);
20
19
  const [currentHelper, setCurrentHelper] = (0, _react.useState)(query?.helper);
21
20
  const handleToggleHelper = (0, _react.useCallback)(helper => {
@@ -25,9 +24,16 @@ const useHelperApp = helpers => {
25
24
  return currentHelper === hlp;
26
25
  };
27
26
  (0, _react.useEffect)(() => {
28
- // Keep object outside of hook to avoid redraw, oncly change when keys change
29
27
  if (!(0, _isEqual.default)(Object.keys(helperObject), Object.keys(helpers))) {
30
- helperObject = helpers;
28
+ setHelperObject(helpers);
29
+ }
30
+ const newHelperToggleFunctions = {};
31
+ Object.keys(helperObject).forEach(h => {
32
+ newHelperToggleFunctions[h] = () => handleToggleHelper(h);
33
+ });
34
+ if (!(0, _isEqual.default)(Object.keys(helperToggleFunctions), Object.keys(newHelperToggleFunctions))) {
35
+ // This makes sure adding/removing helpers changes the functions
36
+ setHelperToggleFunctions(newHelperToggleFunctions);
31
37
  }
32
38
  if (currentHelper !== query?.helper) {
33
39
  const newQuery = {
@@ -38,11 +44,14 @@ const useHelperApp = helpers => {
38
44
  pathname: location.pathname,
39
45
  search: `?${_queryString.default.stringify(newQuery)}`
40
46
  });
47
+
48
+ // When helper changes, reset helperToggleFunctions
49
+ setHelperToggleFunctions(newHelperToggleFunctions);
41
50
  }
42
- }, [currentHelper, helpers, history, location, query]);
51
+ }, [currentHelper, handleToggleHelper, helperObject, helperToggleFunctions, helpers, history, location, query]);
43
52
 
44
53
  // Set the HelperComponent
45
- const HelperComponent = (0, _react.useMemo)(() => props => {
54
+ const HelperComponent = (0, _react.useCallback)(props => {
46
55
  if (!query?.helper) return null;
47
56
  let Component = null;
48
57
  Component = helperObject[query?.helper];
@@ -51,13 +60,7 @@ const useHelperApp = helpers => {
51
60
  onToggle: () => handleToggleHelper(query?.helper),
52
61
  ...props
53
62
  });
54
- }, [handleToggleHelper, query.helper]);
55
-
56
- // Set up the helperToggleFunctions
57
- const helperToggleFunctions = {};
58
- Object.keys(helperObject).forEach(h => {
59
- helperToggleFunctions[h] = () => handleToggleHelper(h);
60
- });
63
+ }, [handleToggleHelper, helperObject, query?.helper]);
61
64
  return {
62
65
  currentHelper,
63
66
  HelperComponent,
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _zustand = require("zustand");
8
+ var _pagination = require("../constants/pagination");
9
+ // Any time that usePrevNextPagination is NOT synced to location,
10
+ // store a keyed currentPage here instead
11
+ const useLocalPageStore = (0, _zustand.create)(set => ({
12
+ pageStore: {},
13
+ setPage: (id, page) => set(state => {
14
+ // Any non-id keyed pages will go into a single storage slot
15
+ const key = id ?? _pagination.DEFAULT_PAGE_KEY;
16
+ return {
17
+ ...state,
18
+ pageStore: {
19
+ ...state.pageStore,
20
+ [key]: page
21
+ }
22
+ };
23
+ })
24
+ }));
25
+ var _default = exports.default = useLocalPageStore;