@k-int/stripes-kint-components 5.8.2 → 5.9.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 +19 -0
- package/es/lib/ActionList/ActionListFieldArray.js +6 -6
- package/es/lib/CustomProperties/Config/CustomPropertiesSettings.js +3 -0
- package/es/lib/CustomProperties/Edit/CustomPropertyField.js +1 -1
- package/es/lib/EditableRefdataList/EditableRefdataList.js +2 -0
- package/es/lib/NumberField/NumberField.js +12 -5
- package/es/lib/NumberField/NumberField.test.js +192 -0
- package/es/lib/hooks/index.js +11 -4
- package/es/lib/hooks/useMutateCustomProperties.js +13 -35
- package/es/lib/hooks/useMutateGeneric.js +91 -0
- package/es/lib/hooks/useMutateRefdataCategory.js +38 -29
- package/es/lib/hooks/useMutateRefdataValue.js +54 -37
- package/package.json +1 -1
- package/src/lib/ActionList/ActionListFieldArray.js +5 -6
- package/src/lib/CustomProperties/Config/CustomPropertiesSettings.js +2 -0
- package/src/lib/CustomProperties/Edit/CustomPropertyField.js +1 -1
- package/src/lib/EditableRefdataList/EditableRefdataList.js +2 -0
- package/src/lib/NumberField/NumberField.js +14 -7
- package/src/lib/NumberField/NumberField.test.js +248 -0
- package/src/lib/QueryTypedown/README.md +72 -0
- package/src/lib/Typedown/EXAMPLE.md +115 -0
- package/src/lib/Typedown/README.md +43 -113
- package/src/lib/hooks/README.md +48 -13
- package/src/lib/hooks/index.js +6 -4
- package/src/lib/hooks/useMutateCustomProperties.js +12 -58
- package/src/lib/hooks/useMutateGeneric.js +103 -0
- package/src/lib/hooks/useMutateRefdataCategory.js +38 -49
- package/src/lib/hooks/useMutateRefdataValue.js +70 -65
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# [5.9.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.8.3...v5.9.0) (2025-01-31)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Ensure first field always gets focus ([144624e](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/144624e290e5f11db558e6345a979979ee84af34))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* useMutateGeneric ([7e9a1e6](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/7e9a1e6ceaef4157adf5ffe08da03269006d86f9))
|
|
12
|
+
|
|
13
|
+
## [5.8.3](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.8.2...v5.8.3) (2024-10-23)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* ERM-3391--NumberField doesnt update display value from form state changes ([cb44d06](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/cb44d063aed221cb544204b8b5d9df6dc313e9c2))
|
|
19
|
+
|
|
1
20
|
## [5.8.2](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.8.1...v5.8.2) (2024-09-11)
|
|
2
21
|
|
|
3
22
|
|
|
@@ -327,13 +327,14 @@ const ActionListFieldArray = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) =>
|
|
|
327
327
|
formatter,
|
|
328
328
|
...restOfMclProps
|
|
329
329
|
} = mclProps; // Destructure formatter part of mclProps
|
|
330
|
+
|
|
330
331
|
const fieldAwareFormatter = () => {
|
|
331
332
|
const returnObj = {};
|
|
332
333
|
// For each visible field, if it's being edited then ignore passed formatters, else use them
|
|
333
334
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
335
|
+
visibleFields.forEach((key, index) => {
|
|
336
|
+
// Work out now whether or not to autofocus, so that gets cemented into the returnObj function
|
|
337
|
+
const shouldAutoFocus = index === 0;
|
|
337
338
|
returnObj[key] = cd => {
|
|
338
339
|
// Row is being edited if it has no id, or its id is in the editing string
|
|
339
340
|
const editingRow = cd.id === editing || !cd.id;
|
|
@@ -368,15 +369,14 @@ const ActionListFieldArray = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) =>
|
|
|
368
369
|
returnValue = fieldComponents[key] ? fieldComponents[key](passedObject) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFinalForm.Field, {
|
|
369
370
|
ariaLabel: key // TODO at the moment the only way to override this is passing in an entire fieldComponent.
|
|
370
371
|
,
|
|
371
|
-
autoFocus:
|
|
372
|
+
autoFocus: shouldAutoFocus // TODO at the moment this will always be the first field, even if it's not editable
|
|
373
|
+
,
|
|
372
374
|
component: _components.TextField,
|
|
373
375
|
marginBottom0: true,
|
|
374
376
|
name: `${cd.fieldName}.${key}`,
|
|
375
377
|
parse: v => v,
|
|
376
378
|
validate: validateFunction
|
|
377
379
|
});
|
|
378
|
-
// After first field, every other field should not autofocus
|
|
379
|
-
autoFocus = false;
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
382
|
return returnValue;
|
|
@@ -72,6 +72,9 @@ const CustomPropertiesSettings = _ref => {
|
|
|
72
72
|
})
|
|
73
73
|
}];
|
|
74
74
|
}
|
|
75
|
+
|
|
76
|
+
// TODO consider moving some of the invalidations etc into the useMutateCustomProperties hook?
|
|
77
|
+
// Also all around patterns for defaulting afterQueryCalls etc are not ideal
|
|
75
78
|
const {
|
|
76
79
|
post: createCustprop,
|
|
77
80
|
put: editCustProp,
|
|
@@ -162,7 +162,7 @@ const CustomPropertyField = _ref => {
|
|
|
162
162
|
component: _components.MultiSelection,
|
|
163
163
|
// The "not set" value is not relevant for a multi select
|
|
164
164
|
dataOptions: (0, _orderBy.default)(customProperty.options?.filter(opt => !!opt?.value), 'label'),
|
|
165
|
-
renderToOverlay: true
|
|
165
|
+
renderToOverlay: true // FIXME Switch to usePortal for stripes v10
|
|
166
166
|
};
|
|
167
167
|
// MultiSelection passes the changed array as a value not an event
|
|
168
168
|
handleChange = refdataArray => {
|
|
@@ -92,6 +92,7 @@ const EditableRefdataList = _ref => {
|
|
|
92
92
|
}, [isRefdataLoading, refdata]);
|
|
93
93
|
|
|
94
94
|
// Edit and Create will use the same PUT mutation
|
|
95
|
+
// TODO I believe after the changes to refactor to useMutateGeneric, we can now use POST separately to get differing callouts etc
|
|
95
96
|
const {
|
|
96
97
|
delete: deleteRefdataValue,
|
|
97
98
|
put: editRefdataValue
|
|
@@ -115,6 +116,7 @@ const EditableRefdataList = _ref => {
|
|
|
115
116
|
// or one provided in labelOverrides, which is passed the error message and refdata in question
|
|
116
117
|
delete: async err => {
|
|
117
118
|
const errorResp = await (0, _utils.parseErrorResponse)(err.response);
|
|
119
|
+
console.log("ERRORRESP: %o", errorResp);
|
|
118
120
|
callout.sendCallout({
|
|
119
121
|
message: kintIntl.formatKintMessage({
|
|
120
122
|
id: 'refdata.deleteRefdataValue.errorMessage',
|
|
@@ -31,13 +31,18 @@ const NumberField = props => {
|
|
|
31
31
|
|
|
32
32
|
// Allow direct control of field
|
|
33
33
|
(0, _react.useEffect)(() => {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const valueToUse = value ?? input.value;
|
|
35
|
+
if (!valueToUse && numValue) {
|
|
36
|
+
// Make sure to empty out if it's cleared. Treating '' as empty instead of undefined
|
|
37
|
+
setNumValue('');
|
|
38
|
+
}
|
|
39
|
+
if (valueToUse && numValue !== valueToUse) {
|
|
40
|
+
setNumValue(valueToUse);
|
|
36
41
|
}
|
|
37
|
-
if (
|
|
42
|
+
if (forceControl !== numValue) {
|
|
38
43
|
setForceControl(numValue);
|
|
39
44
|
}
|
|
40
|
-
}, [forceControl, numValue, value]);
|
|
45
|
+
}, [forceControl, numValue, value, input]);
|
|
41
46
|
const handleChange = e => {
|
|
42
47
|
// Actually set the value in the form
|
|
43
48
|
if (input?.onChange) {
|
|
@@ -55,7 +60,7 @@ const NumberField = props => {
|
|
|
55
60
|
const handleUserChange = e => {
|
|
56
61
|
const parsedValue = parseFloat(e.target.value);
|
|
57
62
|
|
|
58
|
-
// ReturnValue needed for
|
|
63
|
+
// ReturnValue needed for controlled components
|
|
59
64
|
if (parsedValue || parsedValue === 0) {
|
|
60
65
|
setNumValue(parsedValue);
|
|
61
66
|
changeField(parsedValue);
|
|
@@ -83,6 +88,7 @@ const NumberField = props => {
|
|
|
83
88
|
ref: inputRef,
|
|
84
89
|
...input,
|
|
85
90
|
hidden: true,
|
|
91
|
+
id: input?.name,
|
|
86
92
|
onChange: handleChange,
|
|
87
93
|
type: "number",
|
|
88
94
|
value: numValue
|
|
@@ -93,6 +99,7 @@ NumberField.propTypes = {
|
|
|
93
99
|
onBlur: _propTypes.default.func,
|
|
94
100
|
onChange: _propTypes.default.func,
|
|
95
101
|
input: _propTypes.default.shape({
|
|
102
|
+
name: _propTypes.default.string.isRequired,
|
|
96
103
|
onChange: _propTypes.default.func.isRequired,
|
|
97
104
|
onBlur: _propTypes.default.func,
|
|
98
105
|
value: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = require("react");
|
|
4
|
+
var _reactFinalForm = require("react-final-form");
|
|
5
|
+
var _userEvent = _interopRequireDefault(require("@folio/jest-config-stripes/testing-library/user-event"));
|
|
6
|
+
var _react2 = require("@folio/jest-config-stripes/testing-library/react");
|
|
7
|
+
var _stripesErmTesting = require("@folio/stripes-erm-testing");
|
|
8
|
+
var _components = require("@folio/stripes/components");
|
|
9
|
+
var _NumberField = _interopRequireDefault(require("./NumberField"));
|
|
10
|
+
var _helpers = require("../../../test/jest/helpers");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
const onSubmit = jest.fn();
|
|
14
|
+
const NUMBER_FIELD_LABEL = 'TEST NUMBER FIELD';
|
|
15
|
+
const NUMBER_FIELD_ID = 'number-field-test';
|
|
16
|
+
const NUMBER_FIELD_INPUT_ID = 'input-id-test';
|
|
17
|
+
const RESET_BUTTON_LABEL = 'RESET NUMBER FIELD';
|
|
18
|
+
|
|
19
|
+
// We need to use jest selectors instead of interactors as the TextField interactor
|
|
20
|
+
// can't handle the double-text-field nature of NumberField
|
|
21
|
+
const getTextField = () => {
|
|
22
|
+
// Spinbutton because it's a "number" type textField...
|
|
23
|
+
return _react2.screen.getByRole('spinbutton', {
|
|
24
|
+
name: NUMBER_FIELD_LABEL
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const testSubmitValues = expectedValues => {
|
|
28
|
+
describe('submitting the form', () => {
|
|
29
|
+
beforeEach(async () => {
|
|
30
|
+
await (0, _react2.waitFor)(async () => {
|
|
31
|
+
await (0, _stripesErmTesting.Button)('Submit').click();
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
it('submits with expected values', async () => {
|
|
35
|
+
await (0, _react2.waitFor)(() => {
|
|
36
|
+
expect(onSubmit.mock.calls?.[0]?.[0]).toEqual(expectedValues);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const SpecialResetButton = () => {
|
|
42
|
+
const {
|
|
43
|
+
change
|
|
44
|
+
} = (0, _reactFinalForm.useForm)();
|
|
45
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
|
|
46
|
+
onClick: () => change(NUMBER_FIELD_INPUT_ID, undefined),
|
|
47
|
+
children: RESET_BUTTON_LABEL
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const NonControlledComponent = () => {
|
|
51
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
52
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(SpecialResetButton, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFinalForm.Field, {
|
|
53
|
+
component: _NumberField.default,
|
|
54
|
+
id: NUMBER_FIELD_ID,
|
|
55
|
+
label: NUMBER_FIELD_LABEL,
|
|
56
|
+
name: NUMBER_FIELD_INPUT_ID
|
|
57
|
+
})]
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const ControlledComponent = () => {
|
|
61
|
+
const [value, setValue] = (0, _react.useState)();
|
|
62
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
63
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(SpecialResetButton, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFinalForm.Field, {
|
|
64
|
+
component: _NumberField.default,
|
|
65
|
+
id: NUMBER_FIELD_ID,
|
|
66
|
+
label: NUMBER_FIELD_LABEL,
|
|
67
|
+
name: NUMBER_FIELD_INPUT_ID,
|
|
68
|
+
onChange: e => setValue(e.target.value),
|
|
69
|
+
value: value
|
|
70
|
+
})]
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// EXAMPLE nesting repeated tests with describe.each or test.each might speed up some of our test writing
|
|
75
|
+
describe.each([['Non-Controlled', /*#__PURE__*/(0, _jsxRuntime.jsx)(NonControlledComponent, {})], ['Controlled', /*#__PURE__*/(0, _jsxRuntime.jsx)(ControlledComponent, {})]])('NumberField', (controlType, component) => {
|
|
76
|
+
let _renderComponent;
|
|
77
|
+
let textField;
|
|
78
|
+
describe(`Regular usage (${controlType})`, () => {
|
|
79
|
+
beforeEach(async () => {
|
|
80
|
+
onSubmit.mockClear();
|
|
81
|
+
_renderComponent = (0, _helpers.renderWithKintHarness)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_stripesErmTesting.TestForm, {
|
|
82
|
+
initialValues: {},
|
|
83
|
+
onSubmit: onSubmit,
|
|
84
|
+
children: component
|
|
85
|
+
}));
|
|
86
|
+
textField = getTextField();
|
|
87
|
+
});
|
|
88
|
+
it('renders text field as expected', () => {
|
|
89
|
+
expect(textField).toBeInTheDocument();
|
|
90
|
+
});
|
|
91
|
+
describe.each([['non-numeric characters', 'sdhukjasklfs', '', {}], ['numeric characters', '12345', '12345', {
|
|
92
|
+
[NUMBER_FIELD_INPUT_ID]: '12345'
|
|
93
|
+
}], ['scientific notation', '1e5', '100000', {
|
|
94
|
+
[NUMBER_FIELD_INPUT_ID]: '100000'
|
|
95
|
+
}], ['negative numbers', '-100', '-100', {
|
|
96
|
+
[NUMBER_FIELD_INPUT_ID]: '-100'
|
|
97
|
+
}]])('Typing', (characterType, typedChars, expectedDisplay, expectedSubmit) => {
|
|
98
|
+
describe(`typing ${characterType}`, () => {
|
|
99
|
+
beforeEach(async () => {
|
|
100
|
+
await (0, _react2.waitFor)(async () => {
|
|
101
|
+
await _userEvent.default.type(textField, typedChars);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
it('does not render typed characters', async () => {
|
|
105
|
+
expect(textField).toHaveDisplayValue(expectedDisplay);
|
|
106
|
+
});
|
|
107
|
+
testSubmitValues(expectedSubmit);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe.each([['numeric initialvalues', {
|
|
112
|
+
[NUMBER_FIELD_INPUT_ID]: '7654321'
|
|
113
|
+
}, '7654321', {
|
|
114
|
+
[NUMBER_FIELD_INPUT_ID]: '7654321'
|
|
115
|
+
}], ['regular scientific initialvalue NOTE: scientific value parsing does NOT work from initialValues', {
|
|
116
|
+
[NUMBER_FIELD_INPUT_ID]: '3e7'
|
|
117
|
+
}, '3e7', {
|
|
118
|
+
[NUMBER_FIELD_INPUT_ID]: '3e7'
|
|
119
|
+
}], ['negative initialvalue', {
|
|
120
|
+
[NUMBER_FIELD_INPUT_ID]: '-100'
|
|
121
|
+
}, '-100', {
|
|
122
|
+
[NUMBER_FIELD_INPUT_ID]: '-100'
|
|
123
|
+
}]])(`Initial values (${controlType})`, (describeTitle, initialValues, displayValue, expectedSubmit) => {
|
|
124
|
+
describe(describeTitle, () => {
|
|
125
|
+
beforeEach(async () => {
|
|
126
|
+
onSubmit.mockClear();
|
|
127
|
+
_renderComponent = (0, _helpers.renderWithKintHarness)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_stripesErmTesting.TestForm, {
|
|
128
|
+
initialValues: initialValues,
|
|
129
|
+
onSubmit: onSubmit,
|
|
130
|
+
children: component
|
|
131
|
+
}));
|
|
132
|
+
textField = getTextField();
|
|
133
|
+
});
|
|
134
|
+
it('renders initial value', async () => {
|
|
135
|
+
expect(textField).toHaveDisplayValue(displayValue);
|
|
136
|
+
});
|
|
137
|
+
testSubmitValues(expectedSubmit);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe.each([['Clear after typing', async () => {
|
|
141
|
+
onSubmit.mockClear();
|
|
142
|
+
_renderComponent = (0, _helpers.renderWithKintHarness)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_stripesErmTesting.TestForm, {
|
|
143
|
+
initialValues: {},
|
|
144
|
+
onSubmit: onSubmit,
|
|
145
|
+
children: component
|
|
146
|
+
}));
|
|
147
|
+
textField = getTextField();
|
|
148
|
+
await (0, _react2.waitFor)(async () => {
|
|
149
|
+
await _userEvent.default.type(textField, '32786843');
|
|
150
|
+
});
|
|
151
|
+
}], ['Clear from initialValues', async () => {
|
|
152
|
+
onSubmit.mockClear();
|
|
153
|
+
_renderComponent = (0, _helpers.renderWithKintHarness)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_stripesErmTesting.TestForm, {
|
|
154
|
+
initialValues: {
|
|
155
|
+
[NUMBER_FIELD_INPUT_ID]: '32786843'
|
|
156
|
+
},
|
|
157
|
+
onSubmit: onSubmit,
|
|
158
|
+
children: component
|
|
159
|
+
}));
|
|
160
|
+
textField = getTextField();
|
|
161
|
+
}]])(`ERM-3391: state change underneath component (${controlType})`, (clearType, beforeEachFunc) => {
|
|
162
|
+
describe(clearType, () => {
|
|
163
|
+
beforeEach(beforeEachFunc);
|
|
164
|
+
it('renders text field', () => {
|
|
165
|
+
expect(textField).toBeInTheDocument();
|
|
166
|
+
});
|
|
167
|
+
it('renders special reset button', async () => {
|
|
168
|
+
await (0, _stripesErmTesting.Button)(RESET_BUTTON_LABEL).exists();
|
|
169
|
+
});
|
|
170
|
+
describe.each([['Control', false, '32786843', {
|
|
171
|
+
[NUMBER_FIELD_INPUT_ID]: '32786843'
|
|
172
|
+
}], ['After reset', true, '', {}]])('Test reset', (describeTitle, clearField, expectedValue, expectedSubmit) => {
|
|
173
|
+
describe(describeTitle, () => {
|
|
174
|
+
beforeEach(async () => {
|
|
175
|
+
onSubmit.mockClear();
|
|
176
|
+
if (clearField) {
|
|
177
|
+
await (0, _react2.waitFor)(async () => {
|
|
178
|
+
await (0, _stripesErmTesting.Button)(RESET_BUTTON_LABEL).click();
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
it(`renders text field with display value: ${expectedValue}`, async () => {
|
|
183
|
+
await (0, _react2.waitFor)(() => {
|
|
184
|
+
expect(textField).toHaveDisplayValue(expectedValue);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
testSubmitValues(expectedSubmit);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
});
|
package/es/lib/hooks/index.js
CHANGED
|
@@ -81,6 +81,12 @@ Object.defineProperty(exports, "useMutateCustomProperties", {
|
|
|
81
81
|
return _useMutateCustomProperties.default;
|
|
82
82
|
}
|
|
83
83
|
});
|
|
84
|
+
Object.defineProperty(exports, "useMutateGeneric", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return _useMutateGeneric.default;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
84
90
|
Object.defineProperty(exports, "useMutateModConfigEntry", {
|
|
85
91
|
enumerable: true,
|
|
86
92
|
get: function () {
|
|
@@ -125,7 +131,6 @@ Object.defineProperty(exports, "useTemplates", {
|
|
|
125
131
|
});
|
|
126
132
|
var _useRefdata = _interopRequireDefault(require("./useRefdata"));
|
|
127
133
|
var _useTemplates = _interopRequireDefault(require("./useTemplates"));
|
|
128
|
-
var _useMutateRefdataValue = _interopRequireDefault(require("./useMutateRefdataValue"));
|
|
129
134
|
var _useActiveElement = _interopRequireDefault(require("./useActiveElement"));
|
|
130
135
|
var _useKiwtSASQuery = _interopRequireDefault(require("./useKiwtSASQuery"));
|
|
131
136
|
var _useHelperApp = _interopRequireDefault(require("./useHelperApp"));
|
|
@@ -133,14 +138,16 @@ var _useLocalStorageState = _interopRequireDefault(require("./useLocalStorageSta
|
|
|
133
138
|
var _useQIndex = _interopRequireDefault(require("./useQIndex"));
|
|
134
139
|
var _useKiwtFieldArray = _interopRequireDefault(require("./useKiwtFieldArray"));
|
|
135
140
|
var _useCustomProperties = _interopRequireDefault(require("./useCustomProperties"));
|
|
136
|
-
var _useMutateCustomProperties = _interopRequireDefault(require("./useMutateCustomProperties"));
|
|
137
141
|
var _useInvalidateRefdata = _interopRequireDefault(require("./useInvalidateRefdata"));
|
|
138
|
-
var _useMutateRefdataCategory = _interopRequireDefault(require("./useMutateRefdataCategory"));
|
|
139
142
|
var _useKintIntl = _interopRequireDefault(require("./useKintIntl"));
|
|
140
143
|
var _useIntlKeyStore = _interopRequireDefault(require("./useIntlKeyStore"));
|
|
141
144
|
var _useIntlKey = _interopRequireDefault(require("./useIntlKey"));
|
|
142
145
|
var _useSASQQueryMeta = _interopRequireDefault(require("./useSASQQueryMeta"));
|
|
143
146
|
var _useModConfigEntries = _interopRequireDefault(require("./useModConfigEntries"));
|
|
144
|
-
var _useMutateModConfigEntry = _interopRequireDefault(require("./useMutateModConfigEntry"));
|
|
145
147
|
var _useActionListRef = _interopRequireDefault(require("./useActionListRef"));
|
|
148
|
+
var _useMutateGeneric = _interopRequireDefault(require("./useMutateGeneric"));
|
|
149
|
+
var _useMutateRefdataValue = _interopRequireDefault(require("./useMutateRefdataValue"));
|
|
150
|
+
var _useMutateRefdataCategory = _interopRequireDefault(require("./useMutateRefdataCategory"));
|
|
151
|
+
var _useMutateCustomProperties = _interopRequireDefault(require("./useMutateCustomProperties"));
|
|
152
|
+
var _useMutateModConfigEntry = _interopRequireDefault(require("./useMutateModConfigEntry"));
|
|
146
153
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -4,45 +4,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var
|
|
8
|
-
|
|
7
|
+
var _useMutateGeneric = _interopRequireDefault(require("./useMutateGeneric"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
9
|
const useMutateCustomProperties = _ref => {
|
|
10
10
|
let {
|
|
11
|
-
afterQueryCalls,
|
|
12
|
-
catchQueryCalls,
|
|
13
11
|
endpoint,
|
|
14
12
|
id,
|
|
15
|
-
|
|
16
|
-
returnQueryObject = {
|
|
17
|
-
post: false,
|
|
18
|
-
put: false,
|
|
19
|
-
delete: false
|
|
20
|
-
}
|
|
13
|
+
...mutateGenericProps
|
|
21
14
|
} = _ref;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
returnObj.delete = deleteQueryObject;
|
|
33
|
-
} else {
|
|
34
|
-
returnObj.delete = deleteQueryObject.mutateAsync;
|
|
35
|
-
}
|
|
36
|
-
if (returnQueryObject?.put) {
|
|
37
|
-
returnObj.put = putQueryObject;
|
|
38
|
-
} else {
|
|
39
|
-
returnObj.put = putQueryObject.mutateAsync;
|
|
40
|
-
}
|
|
41
|
-
if (returnQueryObject?.post) {
|
|
42
|
-
returnObj.post = postQueryObject;
|
|
43
|
-
} else {
|
|
44
|
-
returnObj.post = postQueryObject.mutateAsync;
|
|
45
|
-
}
|
|
46
|
-
return returnObj;
|
|
15
|
+
return (0, _useMutateGeneric.default)({
|
|
16
|
+
endpoint,
|
|
17
|
+
endpointMutators: {
|
|
18
|
+
delete: () => `${endpoint}/${id}`,
|
|
19
|
+
put: () => `${endpoint}/${id}`
|
|
20
|
+
},
|
|
21
|
+
id,
|
|
22
|
+
queryKey: ['stripes-kint-components', 'useMutateCustomProperties', id],
|
|
23
|
+
...mutateGenericProps
|
|
24
|
+
});
|
|
47
25
|
};
|
|
48
26
|
var _default = exports.default = useMutateCustomProperties;
|
|
@@ -0,0 +1,91 @@
|
|
|
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 _noop = _interopRequireDefault(require("lodash/noop"));
|
|
9
|
+
var _core = require("@folio/stripes/core");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
// DEFAULT ASSUMES PUT/POST goes to ENDPOINT/id and that POST goes to ENDPOINT
|
|
12
|
+
// A utility function to provide this all-in-one functionality used in various places
|
|
13
|
+
|
|
14
|
+
const useMutateGeneric = function () {
|
|
15
|
+
let {
|
|
16
|
+
afterQueryCalls: {
|
|
17
|
+
delete: afterQueryDelete = _noop.default,
|
|
18
|
+
post: afterQueryPost = _noop.default,
|
|
19
|
+
put: afterQueryPut = _noop.default
|
|
20
|
+
} = {},
|
|
21
|
+
catchQueryCalls: {
|
|
22
|
+
delete: catchQueryDelete = _noop.default,
|
|
23
|
+
post: catchQueryPost = _noop.default,
|
|
24
|
+
put: catchQueryPut = _noop.default
|
|
25
|
+
} = {},
|
|
26
|
+
endpoint,
|
|
27
|
+
endpointMutators: {
|
|
28
|
+
delete: endpointMutatorDelete = id => `${endpoint}/${id}`,
|
|
29
|
+
post: endpointMutatorPost = () => endpoint,
|
|
30
|
+
put: endpointMutatorPut = data => `${endpoint}/${data.id}`
|
|
31
|
+
} = {},
|
|
32
|
+
payloadMutators: {
|
|
33
|
+
post: payloadMutatorPost = data => ({
|
|
34
|
+
json: data
|
|
35
|
+
}),
|
|
36
|
+
put: payloadMutatorPut = data => ({
|
|
37
|
+
json: data
|
|
38
|
+
})
|
|
39
|
+
} = {},
|
|
40
|
+
promiseReturns: {
|
|
41
|
+
delete: promiseReturnDelete = (id, ky) => ky.delete(endpointMutatorDelete(id)).json(),
|
|
42
|
+
post: promiseReturnPost = (data, ky) => ky.post(endpointMutatorPost(data), payloadMutatorPost(data)).json(),
|
|
43
|
+
put: promiseReturnPut = (data, ky) => ky.put(endpointMutatorPut(data), payloadMutatorPut(data)).json()
|
|
44
|
+
} = {},
|
|
45
|
+
queryKey = [],
|
|
46
|
+
// Must be type: array
|
|
47
|
+
queryKeyMutators: {
|
|
48
|
+
delete: queryKeyMutatorDelete = () => [...queryKey, 'delete'],
|
|
49
|
+
post: queryKeyMutatorPost = () => [...queryKey, 'create'],
|
|
50
|
+
put: queryKeyMutatorPut = () => [...queryKey, 'edit']
|
|
51
|
+
} = {},
|
|
52
|
+
queryParams: {
|
|
53
|
+
delete: queryParamsDelete = {},
|
|
54
|
+
post: queryParamsPost = {},
|
|
55
|
+
put: queryParamsPut = {}
|
|
56
|
+
} = {},
|
|
57
|
+
returnQueryObject: {
|
|
58
|
+
delete: returnQueryObjectDelete = false,
|
|
59
|
+
post: returnQueryObjectPost = false,
|
|
60
|
+
put: returnQueryObjectPut = false
|
|
61
|
+
} = {}
|
|
62
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
63
|
+
const ky = (0, _core.useOkapiKy)();
|
|
64
|
+
|
|
65
|
+
// DELETE Object
|
|
66
|
+
const deleteQueryObject = (0, _reactQuery.useMutation)(queryKeyMutatorDelete(), async id => promiseReturnDelete(id, ky).then(res => afterQueryDelete(res)).catch(catchQueryDelete), queryParamsDelete);
|
|
67
|
+
|
|
68
|
+
// Edit Object
|
|
69
|
+
const putQueryObject = (0, _reactQuery.useMutation)(queryKeyMutatorPut(), async data => promiseReturnPut(data, ky).then(afterQueryPut).catch(catchQueryPut), queryParamsPut);
|
|
70
|
+
|
|
71
|
+
// Create Object
|
|
72
|
+
const postQueryObject = (0, _reactQuery.useMutation)(queryKeyMutatorPost(), async data => promiseReturnPost(data, ky).then(afterQueryPost).catch(catchQueryPost), queryParamsPost);
|
|
73
|
+
const returnObj = {};
|
|
74
|
+
if (returnQueryObjectDelete) {
|
|
75
|
+
returnObj.delete = deleteQueryObject;
|
|
76
|
+
} else {
|
|
77
|
+
returnObj.delete = deleteQueryObject.mutateAsync;
|
|
78
|
+
}
|
|
79
|
+
if (returnQueryObjectPut) {
|
|
80
|
+
returnObj.put = putQueryObject;
|
|
81
|
+
} else {
|
|
82
|
+
returnObj.put = putQueryObject.mutateAsync;
|
|
83
|
+
}
|
|
84
|
+
if (returnQueryObjectPost) {
|
|
85
|
+
returnObj.post = postQueryObject;
|
|
86
|
+
} else {
|
|
87
|
+
returnObj.post = postQueryObject.mutateAsync;
|
|
88
|
+
}
|
|
89
|
+
return returnObj;
|
|
90
|
+
};
|
|
91
|
+
var _default = exports.default = useMutateGeneric;
|
|
@@ -4,41 +4,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var
|
|
8
|
-
var _core = require("@folio/stripes/core");
|
|
7
|
+
var _noop = _interopRequireDefault(require("lodash/noop"));
|
|
9
8
|
var _useInvalidateRefdata = _interopRequireDefault(require("./useInvalidateRefdata"));
|
|
9
|
+
var _useMutateGeneric = _interopRequireDefault(require("./useMutateGeneric"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
const useMutateRefdataCategory = _ref => {
|
|
12
12
|
let {
|
|
13
|
-
afterQueryCalls
|
|
14
|
-
|
|
13
|
+
afterQueryCalls: {
|
|
14
|
+
delete: afterQueryDelete = _noop.default,
|
|
15
|
+
post: afterQueryPost = _noop.default,
|
|
16
|
+
put: afterQueryPut = _noop.default
|
|
17
|
+
} = {},
|
|
15
18
|
endpoint,
|
|
16
|
-
|
|
17
|
-
returnQueryObject = {
|
|
18
|
-
post: false,
|
|
19
|
-
delete: false
|
|
20
|
-
}
|
|
19
|
+
...mutateGenericProps
|
|
21
20
|
} = _ref;
|
|
22
|
-
const returnObj = {};
|
|
23
|
-
const ky = (0, _core.useOkapiKy)();
|
|
24
21
|
const invalidateRefdata = (0, _useInvalidateRefdata.default)();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
22
|
+
return (0, _useMutateGeneric.default)({
|
|
23
|
+
afterQueryCalls: {
|
|
24
|
+
delete: res => {
|
|
25
|
+
invalidateRefdata().then(() => {
|
|
26
|
+
afterQueryDelete(res);
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
post: res => {
|
|
30
|
+
invalidateRefdata().then(() => {
|
|
31
|
+
afterQueryPost(res);
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
put: res => {
|
|
35
|
+
invalidateRefdata().then(() => {
|
|
36
|
+
afterQueryPut(res);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
endpoint,
|
|
41
|
+
payloadMutators: {
|
|
42
|
+
post: data => ({
|
|
43
|
+
json: {
|
|
44
|
+
...data,
|
|
45
|
+
values: []
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
},
|
|
49
|
+
queryKey: ['stripes-kint-components', 'useMutateRefdataCategory'],
|
|
50
|
+
...mutateGenericProps
|
|
51
|
+
});
|
|
43
52
|
};
|
|
44
53
|
var _default = exports.default = useMutateRefdataCategory;
|