@spscommerce/ds-react 6.2.0 → 6.3.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/lib/form/SpsForm.examples.d.ts +9 -0
- package/lib/index.cjs.js +147 -85
- package/lib/index.es.js +93 -17
- package/package.json +11 -11
package/lib/index.es.js
CHANGED
|
@@ -1215,8 +1215,9 @@ function useSpsForm(value, validatorMap) {
|
|
|
1215
1215
|
return controlSet;
|
|
1216
1216
|
}, []);
|
|
1217
1217
|
const scheduledDispatch = useRef();
|
|
1218
|
-
|
|
1218
|
+
const validatorMapRef = useRef(validatorMap);
|
|
1219
1219
|
const reducer2 = useCallback$1((currentState, action) => {
|
|
1220
|
+
var _a, _b, _c;
|
|
1220
1221
|
let newValue;
|
|
1221
1222
|
scheduledDispatch.current = null;
|
|
1222
1223
|
if (action) {
|
|
@@ -1228,12 +1229,12 @@ function useSpsForm(value, validatorMap) {
|
|
|
1228
1229
|
control.revealAllErrors = true;
|
|
1229
1230
|
}
|
|
1230
1231
|
} else if (action.newValidators) {
|
|
1231
|
-
if (
|
|
1232
|
+
if (validatorMapRef.current) {
|
|
1232
1233
|
const controlPath = action.path.join(".");
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
updateValidators(currentState.formValue, currentState.formMeta,
|
|
1234
|
+
validatorMapRef.current = __spreadProps(__spreadValues({}, validatorMapRef.current), {
|
|
1235
|
+
[controlPath]: action.newValidators
|
|
1236
|
+
});
|
|
1237
|
+
updateValidators(currentState.formValue, currentState.formMeta, validatorMapRef.current, true);
|
|
1237
1238
|
}
|
|
1238
1239
|
} else {
|
|
1239
1240
|
newValue = cloneFormValue(currentState.formValue, action.path);
|
|
@@ -1243,6 +1244,10 @@ function useSpsForm(value, validatorMap) {
|
|
|
1243
1244
|
newValue = action.value;
|
|
1244
1245
|
}
|
|
1245
1246
|
}
|
|
1247
|
+
if ((_a = action.updateFormOptions) == null ? void 0 : _a.validators) {
|
|
1248
|
+
validatorMapRef.current = __spreadValues(__spreadValues({}, validatorMapRef.current), action.updateFormOptions.validators);
|
|
1249
|
+
updateValidators(currentState.formValue, currentState.formMeta, validatorMapRef.current, (_c = (_b = action.updateFormOptions) == null ? void 0 : _b.runValidators) != null ? _c : true);
|
|
1250
|
+
}
|
|
1246
1251
|
if (newValue) {
|
|
1247
1252
|
deepFreeze(newValue);
|
|
1248
1253
|
const valueDiff = diff(currentState.formValue, newValue);
|
|
@@ -1279,8 +1284,8 @@ function useSpsForm(value, validatorMap) {
|
|
|
1279
1284
|
}
|
|
1280
1285
|
}
|
|
1281
1286
|
}
|
|
1282
|
-
if (
|
|
1283
|
-
updateValidators(newValue, currentState.formMeta,
|
|
1287
|
+
if (validatorMapRef.current) {
|
|
1288
|
+
updateValidators(newValue, currentState.formMeta, validatorMapRef.current);
|
|
1284
1289
|
const alreadyValidated = new Set();
|
|
1285
1290
|
validatorMapForEach(currentState.formMeta, validatorMap, (control, validators) => {
|
|
1286
1291
|
if (typeof validators === "function") {
|
|
@@ -1340,12 +1345,12 @@ function useSpsForm(value, validatorMap) {
|
|
|
1340
1345
|
updateForm();
|
|
1341
1346
|
}
|
|
1342
1347
|
}
|
|
1343
|
-
function updateForm(newValue) {
|
|
1344
|
-
if (newValue) {
|
|
1348
|
+
function updateForm(newValue, options) {
|
|
1349
|
+
if (newValue || options) {
|
|
1345
1350
|
if (scheduledDispatch.current) {
|
|
1346
1351
|
window.clearTimeout(scheduledDispatch.current);
|
|
1347
1352
|
}
|
|
1348
|
-
const sd = window.setTimeout(dispatch, 0, { value: newValue });
|
|
1353
|
+
const sd = window.setTimeout(dispatch, 0, { value: newValue, updateFormOptions: options });
|
|
1349
1354
|
scheduledDispatch.current = sd;
|
|
1350
1355
|
} else if (!scheduledDispatch.current) {
|
|
1351
1356
|
const sd = window.setTimeout(dispatch, 0, {});
|
|
@@ -16725,7 +16730,7 @@ const SpsDateRangePickerExamples = {
|
|
|
16725
16730
|
<div className="sfg-row">
|
|
16726
16731
|
<div className="sfg-col-3">
|
|
16727
16732
|
<SpsLabel for={formMeta.fields.dateRange}>Date</SpsLabel>
|
|
16728
|
-
<
|
|
16733
|
+
<SpsDateRangePicker
|
|
16729
16734
|
value={formValue.dateRange}
|
|
16730
16735
|
formMeta={formMeta.fields.dateRange}
|
|
16731
16736
|
/>
|
|
@@ -16757,7 +16762,7 @@ const SpsDateRangePickerExamples = {
|
|
|
16757
16762
|
<div className="sfg-row">
|
|
16758
16763
|
<div className="sfg-col-3">
|
|
16759
16764
|
<SpsLabel for={formMeta.fields.dateRange}>Date</SpsLabel>
|
|
16760
|
-
<
|
|
16765
|
+
<SpsDateRangePicker
|
|
16761
16766
|
value={formValue.dateRange}
|
|
16762
16767
|
formMeta={formMeta.fields.dateRange}
|
|
16763
16768
|
{...constraints.current}
|
|
@@ -16789,7 +16794,7 @@ const SpsDateRangePickerExamples = {
|
|
|
16789
16794
|
<div className="sfg-row">
|
|
16790
16795
|
<div className="sfg-col-3">
|
|
16791
16796
|
<SpsLabel for={formMeta.fields.dateRange}>Date</SpsLabel>
|
|
16792
|
-
<
|
|
16797
|
+
<SpsDateRangePicker
|
|
16793
16798
|
value={formValue.dateRange}
|
|
16794
16799
|
formMeta={formMeta.fields.dateRange}
|
|
16795
16800
|
disabled
|
|
@@ -16837,7 +16842,7 @@ const SpsDateRangePickerExamples = {
|
|
|
16837
16842
|
<div className="sfg-row">
|
|
16838
16843
|
<div className="sfg-col-3">
|
|
16839
16844
|
<SpsLabel for={formMeta.fields.dateRange}>Date</SpsLabel>
|
|
16840
|
-
<
|
|
16845
|
+
<SpsDateRangePicker
|
|
16841
16846
|
presets={presets.current}
|
|
16842
16847
|
value={formValue.dateRange}
|
|
16843
16848
|
formMeta={formMeta.fields.dateRange}
|
|
@@ -23826,7 +23831,7 @@ const SpsFormExamples = {
|
|
|
23826
23831
|
},
|
|
23827
23832
|
custom_errors: {
|
|
23828
23833
|
label: "Custom errors",
|
|
23829
|
-
description: () => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", null, "When using custom validators you can specify when to show the errors - on Change, on Blur or on Submit.", /* @__PURE__ */ React.createElement("br", null), "On Blur is the default behavior. If you want to change that behavior you can use ", /* @__PURE__ */ React.createElement("b", null, "useCustomValidator hook"), ". It takes validation function as first argument, validator configuration (object containing errorKey as key and ValidationMode as value) as second argument and dependencies as third argument. useCustomValidator returns a React callback of the validation function with the given dependencies."), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement("b", null, "!Note:"), " useCustomValidator hook will make changes to the global scope and once you set a custom error key you can't change it.")),
|
|
23834
|
+
description: () => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", null, "When using custom validators you can specify when to show the errors - on Change, on Blur or on Submit.", /* @__PURE__ */ React.createElement("br", null), "On Blur is the default behavior. If you want to change that behavior you can use", " ", /* @__PURE__ */ React.createElement("b", null, "useCustomValidator hook"), ". It takes validation function as first argument, validator configuration (object containing errorKey as key and ValidationMode as value) as second argument and dependencies as third argument. useCustomValidator returns a React callback of the validation function with the given dependencies."), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement("b", null, "!Note:"), " useCustomValidator hook will make changes to the global scope and once you set a custom error key you can't change it.")),
|
|
23830
23835
|
examples: {
|
|
23831
23836
|
basic: {
|
|
23832
23837
|
react: code`
|
|
@@ -23885,6 +23890,77 @@ const SpsFormExamples = {
|
|
|
23885
23890
|
`
|
|
23886
23891
|
}
|
|
23887
23892
|
}
|
|
23893
|
+
},
|
|
23894
|
+
updating_validators: {
|
|
23895
|
+
label: "Updating validators",
|
|
23896
|
+
description: () => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", null, "The updateForm function supports a seconds argument (options) that allows modifying multiple field validators at once.")),
|
|
23897
|
+
examples: {
|
|
23898
|
+
basic: {
|
|
23899
|
+
react: code`
|
|
23900
|
+
function DemoComponent() {
|
|
23901
|
+
const initValue = {
|
|
23902
|
+
fieldA: "",
|
|
23903
|
+
fieldB: "",
|
|
23904
|
+
};
|
|
23905
|
+
|
|
23906
|
+
const { formValue, formMeta, updateForm } = useSpsForm(initValue, {
|
|
23907
|
+
"fieldA": [SpsValidators.required],
|
|
23908
|
+
});
|
|
23909
|
+
|
|
23910
|
+
function handleSubmit() {
|
|
23911
|
+
console.log("submit", formValue);
|
|
23912
|
+
}
|
|
23913
|
+
|
|
23914
|
+
function reset() {
|
|
23915
|
+
updateForm(initValue, { validators: { fieldA: [SpsValidators.required], fieldB: [] }});
|
|
23916
|
+
formMeta.markAsPristine();
|
|
23917
|
+
}
|
|
23918
|
+
|
|
23919
|
+
// This will make field A non required and field B required in a single operation
|
|
23920
|
+
function updateValidators() {
|
|
23921
|
+
updateForm(undefined, { validators: { fieldA: [], fieldB: [SpsValidators.required] }});
|
|
23922
|
+
}
|
|
23923
|
+
|
|
23924
|
+
return <>
|
|
23925
|
+
<SpsForm formMeta={formMeta} onSubmit={handleSubmit}>
|
|
23926
|
+
<div className="sfg-row">
|
|
23927
|
+
<div className="sfg-col-8">
|
|
23928
|
+
<SpsLabel
|
|
23929
|
+
for={formMeta.fields.fieldA}
|
|
23930
|
+
>
|
|
23931
|
+
Field A
|
|
23932
|
+
</SpsLabel>
|
|
23933
|
+
<SpsTextInput
|
|
23934
|
+
value={formValue.fieldA}
|
|
23935
|
+
formMeta={formMeta.fields.fieldA}
|
|
23936
|
+
/>
|
|
23937
|
+
</div>
|
|
23938
|
+
<div className="sfg-col-8">
|
|
23939
|
+
<SpsLabel
|
|
23940
|
+
for={formMeta.fields.fieldB}
|
|
23941
|
+
>
|
|
23942
|
+
Field B
|
|
23943
|
+
</SpsLabel>
|
|
23944
|
+
<SpsTextInput
|
|
23945
|
+
value={formValue.fieldB}
|
|
23946
|
+
formMeta={formMeta.fields.fieldB}
|
|
23947
|
+
/>
|
|
23948
|
+
</div>
|
|
23949
|
+
</div>
|
|
23950
|
+
|
|
23951
|
+
<div className="sfg-row">
|
|
23952
|
+
<div className="sfg-col-12">
|
|
23953
|
+
<SpsButton className="mr-1" onClick={reset}>Reset</SpsButton>
|
|
23954
|
+
<SpsButton className="mr-1" onClick={updateValidators}>Update Validators</SpsButton>
|
|
23955
|
+
<SpsButton type={ButtonType.SUBMIT} kind={ButtonKind.CONFIRM}>Submit</SpsButton>
|
|
23956
|
+
</div>
|
|
23957
|
+
</div>
|
|
23958
|
+
</SpsForm>
|
|
23959
|
+
</>;
|
|
23960
|
+
}
|
|
23961
|
+
`
|
|
23962
|
+
}
|
|
23963
|
+
}
|
|
23888
23964
|
}
|
|
23889
23965
|
};
|
|
23890
23966
|
const SpsAddRemoveFormRowExamples = {
|
|
@@ -25610,7 +25686,7 @@ function SpsListActionBar(props2) {
|
|
|
25610
25686
|
clearSelected();
|
|
25611
25687
|
}
|
|
25612
25688
|
};
|
|
25613
|
-
const classes = clsx(unsafelyReplaceClassName || "sps-list-action-bar-container", "z-stratum-
|
|
25689
|
+
const classes = clsx(unsafelyReplaceClassName || "sps-list-action-bar-container", "z-stratum-actionbar", className);
|
|
25614
25690
|
return !!itemsSelected && /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({
|
|
25615
25691
|
className: classes
|
|
25616
25692
|
}, rest), {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spscommerce/ds-react",
|
|
3
3
|
"description": "SPS Design System React components",
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.3.0",
|
|
5
5
|
"author": "SPS Commerce",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"repository": "https://github.com/spscommerce/design-system/tree/main/packages/@spscommerce/ds-react",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"@react-stately/collections": "^3.3.3",
|
|
31
|
-
"@spscommerce/ds-colors": "6.
|
|
32
|
-
"@spscommerce/ds-illustrations": "6.
|
|
33
|
-
"@spscommerce/ds-shared": "6.
|
|
34
|
-
"@spscommerce/positioning": "6.
|
|
35
|
-
"@spscommerce/utils": "6.
|
|
31
|
+
"@spscommerce/ds-colors": "6.3.0",
|
|
32
|
+
"@spscommerce/ds-illustrations": "6.3.0",
|
|
33
|
+
"@spscommerce/ds-shared": "6.3.0",
|
|
34
|
+
"@spscommerce/positioning": "6.3.0",
|
|
35
|
+
"@spscommerce/utils": "6.3.0",
|
|
36
36
|
"moment": "^2.25.3",
|
|
37
37
|
"moment-timezone": "^0.5.28",
|
|
38
38
|
"react": "^16.9.0",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@react-stately/collections": "^3.3.3",
|
|
43
|
-
"@spscommerce/ds-colors": "6.
|
|
44
|
-
"@spscommerce/ds-illustrations": "6.
|
|
45
|
-
"@spscommerce/ds-shared": "6.
|
|
46
|
-
"@spscommerce/positioning": "6.
|
|
47
|
-
"@spscommerce/utils": "6.
|
|
43
|
+
"@spscommerce/ds-colors": "6.3.0",
|
|
44
|
+
"@spscommerce/ds-illustrations": "6.3.0",
|
|
45
|
+
"@spscommerce/ds-shared": "6.3.0",
|
|
46
|
+
"@spscommerce/positioning": "6.3.0",
|
|
47
|
+
"@spscommerce/utils": "6.3.0",
|
|
48
48
|
"@testing-library/react": "^9.3.2",
|
|
49
49
|
"@types/prop-types": "^15.7.1",
|
|
50
50
|
"@types/react": "^16.9.0",
|