@wix/patterns-cms 1.38.0 → 1.40.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/dist/cjs/adapter/fieldSettings/CmsFieldSettings.js +56 -185
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettings.js.map +1 -1
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettings.spec.js +70 -0
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettings.spec.js.map +1 -0
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettingsState.js +35 -44
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettingsState.js.map +1 -1
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettingsState.spec.js +94 -0
- package/dist/cjs/adapter/fieldSettings/CmsFieldSettingsState.spec.js.map +1 -0
- package/dist/esm/adapter/fieldSettings/CmsFieldSettings.js +28 -20
- package/dist/esm/adapter/fieldSettings/CmsFieldSettings.js.map +1 -1
- package/dist/esm/adapter/fieldSettings/CmsFieldSettings.spec.js +58 -0
- package/dist/esm/adapter/fieldSettings/CmsFieldSettings.spec.js.map +1 -0
- package/dist/esm/adapter/fieldSettings/CmsFieldSettingsState.js +32 -45
- package/dist/esm/adapter/fieldSettings/CmsFieldSettingsState.js.map +1 -1
- package/dist/esm/adapter/fieldSettings/CmsFieldSettingsState.spec.js +64 -0
- package/dist/esm/adapter/fieldSettings/CmsFieldSettingsState.spec.js.map +1 -0
- package/dist/types/adapter/fieldSettings/CmsFieldSettings.d.ts +0 -1
- package/dist/types/adapter/fieldSettings/CmsFieldSettings.d.ts.map +1 -1
- package/dist/types/adapter/fieldSettings/CmsFieldSettings.spec.d.ts +2 -0
- package/dist/types/adapter/fieldSettings/CmsFieldSettings.spec.d.ts.map +1 -0
- package/dist/types/adapter/fieldSettings/CmsFieldSettingsState.d.ts +6 -12
- package/dist/types/adapter/fieldSettings/CmsFieldSettingsState.d.ts.map +1 -1
- package/dist/types/adapter/fieldSettings/CmsFieldSettingsState.spec.d.ts +2 -0
- package/dist/types/adapter/fieldSettings/CmsFieldSettingsState.spec.d.ts.map +1 -0
- package/package.json +6 -5
|
@@ -2,21 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
exports.__esModule = true;
|
|
5
|
-
exports.showsValueRange = exports.showsRequired = exports.showsCharactersLimit = exports.
|
|
5
|
+
exports.showsValueRange = exports.showsRequired = exports.showsCharactersLimit = exports.getCmsFieldValidationRules = exports.CmsFieldSettingsState = void 0;
|
|
6
6
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
7
|
var _mobx = require("mobx");
|
|
8
|
+
var _patternsFields = require("@wix/patterns-fields");
|
|
8
9
|
/**
|
|
9
10
|
* What the CMS settings section hands back to `createCmsFieldActions`. Cairo
|
|
10
11
|
* carries it as an opaque value, so this shape is ours alone.
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
|
-
/** @wix/data rejects a character limit above this. */
|
|
14
|
-
const CHARACTERS_CEILING = exports.CHARACTERS_CEILING = 256_000;
|
|
15
|
-
const MAX_CHARACTERS_FLOOR = exports.MAX_CHARACTERS_FLOOR = 1;
|
|
16
|
-
const MIN_CHARACTERS_FLOOR = 0;
|
|
17
|
-
/** A required field has to hold at least one character. */
|
|
18
|
-
const MIN_CHARACTERS_FLOOR_WHEN_REQUIRED = 1;
|
|
19
|
-
|
|
20
14
|
/** Only text fields carry a character limit — the only type `@wix/data` stores a
|
|
21
15
|
* `stringLengthRange` for. */
|
|
22
16
|
const CHARACTERS_LIMIT_TYPES = ['SHORT_TEXT'];
|
|
@@ -29,11 +23,21 @@ const showsCharactersLimit = fieldType => CHARACTERS_LIMIT_TYPES.some(type => ty
|
|
|
29
23
|
exports.showsCharactersLimit = showsCharactersLimit;
|
|
30
24
|
const showsValueRange = fieldType => VALUE_RANGE_TYPES.some(type => type === fieldType);
|
|
31
25
|
exports.showsValueRange = showsValueRange;
|
|
32
|
-
const
|
|
26
|
+
const getCmsFieldValidationRules = fieldType => {
|
|
27
|
+
const rules = [];
|
|
28
|
+
if (showsRequired(fieldType)) {
|
|
29
|
+
rules.push('required');
|
|
30
|
+
}
|
|
31
|
+
if (showsCharactersLimit(fieldType)) {
|
|
32
|
+
rules.push('charactersLimit');
|
|
33
|
+
}
|
|
34
|
+
return rules;
|
|
35
|
+
};
|
|
36
|
+
exports.getCmsFieldValidationRules = getCmsFieldValidationRules;
|
|
33
37
|
const maxBelowMin = (min, max) => min == null || max == null || min <= max ? undefined : 'Max has to be higher than min.';
|
|
34
38
|
class CmsFieldSettingsState {
|
|
35
39
|
constructor() {
|
|
36
|
-
(0, _defineProperty2.default)(this, "required",
|
|
40
|
+
(0, _defineProperty2.default)(this, "required", undefined);
|
|
37
41
|
(0, _defineProperty2.default)(this, "charactersLimit", false);
|
|
38
42
|
(0, _defineProperty2.default)(this, "minCharacters", undefined);
|
|
39
43
|
(0, _defineProperty2.default)(this, "maxCharacters", undefined);
|
|
@@ -50,43 +54,36 @@ class CmsFieldSettingsState {
|
|
|
50
54
|
minValue: _mobx.observable.ref,
|
|
51
55
|
maxValue: _mobx.observable.ref,
|
|
52
56
|
helpText: _mobx.observable.ref,
|
|
53
|
-
|
|
54
|
-
rangeError: _mobx.computed,
|
|
57
|
+
validationSettings: _mobx.computed,
|
|
55
58
|
valueRangeError: _mobx.computed,
|
|
56
|
-
|
|
57
|
-
setCharactersLimit: _mobx.action.bound,
|
|
58
|
-
setMinCharacters: _mobx.action.bound,
|
|
59
|
-
setMaxCharacters: _mobx.action.bound,
|
|
59
|
+
setValidationSettings: _mobx.action.bound,
|
|
60
60
|
setValueRange: _mobx.action.bound,
|
|
61
61
|
setMinValue: _mobx.action.bound,
|
|
62
62
|
setMaxValue: _mobx.action.bound,
|
|
63
63
|
setHelpText: _mobx.action.bound,
|
|
64
|
-
normalizeMinCharacters: _mobx.action.bound,
|
|
65
|
-
normalizeMaxCharacters: _mobx.action.bound,
|
|
66
64
|
setValues: _mobx.action.bound
|
|
67
65
|
});
|
|
68
66
|
}
|
|
69
|
-
get
|
|
70
|
-
return
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
get validationSettings() {
|
|
68
|
+
return {
|
|
69
|
+
required: this.required,
|
|
70
|
+
...(this.charactersLimit && {
|
|
71
|
+
charactersLimit: {
|
|
72
|
+
min: this.minCharacters,
|
|
73
|
+
max: this.maxCharacters
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
};
|
|
74
77
|
}
|
|
75
78
|
get valueRangeError() {
|
|
76
79
|
return maxBelowMin(this.minValue, this.maxValue);
|
|
77
80
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
this.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
this.
|
|
84
|
-
}
|
|
85
|
-
setMinCharacters(value) {
|
|
86
|
-
this.minCharacters = value;
|
|
87
|
-
}
|
|
88
|
-
setMaxCharacters(value) {
|
|
89
|
-
this.maxCharacters = value;
|
|
81
|
+
setValidationSettings(value) {
|
|
82
|
+
var _value$charactersLimi, _value$charactersLimi2;
|
|
83
|
+
this.required = value.required;
|
|
84
|
+
this.charactersLimit = value.charactersLimit !== undefined;
|
|
85
|
+
this.minCharacters = (_value$charactersLimi = value.charactersLimit) == null ? void 0 : _value$charactersLimi.min;
|
|
86
|
+
this.maxCharacters = (_value$charactersLimi2 = value.charactersLimit) == null ? void 0 : _value$charactersLimi2.max;
|
|
90
87
|
}
|
|
91
88
|
setValueRange(value) {
|
|
92
89
|
this.valueRange = value;
|
|
@@ -100,14 +97,8 @@ class CmsFieldSettingsState {
|
|
|
100
97
|
setHelpText(value) {
|
|
101
98
|
this.helpText = value;
|
|
102
99
|
}
|
|
103
|
-
normalizeMinCharacters() {
|
|
104
|
-
this.minCharacters = clamp(this.minCharacters, this.minCharactersFloor, CHARACTERS_CEILING);
|
|
105
|
-
}
|
|
106
|
-
normalizeMaxCharacters() {
|
|
107
|
-
this.maxCharacters = clamp(this.maxCharacters, MAX_CHARACTERS_FLOOR, CHARACTERS_CEILING);
|
|
108
|
-
}
|
|
109
100
|
hasError(fieldType) {
|
|
110
|
-
return showsCharactersLimit(fieldType) && this.
|
|
101
|
+
return showsCharactersLimit(fieldType) && (0, _patternsFields.hasFieldValidationSettingsError)(this.validationSettings, getCmsFieldValidationRules(fieldType)) || showsValueRange(fieldType) && this.valueRange && Boolean(this.valueRangeError);
|
|
111
102
|
}
|
|
112
103
|
getValues(fieldType) {
|
|
113
104
|
// A toggle can be on with both inputs empty — that's still no limit.
|
|
@@ -115,7 +106,7 @@ class CmsFieldSettingsState {
|
|
|
115
106
|
const range = showsValueRange(fieldType) && this.valueRange && (this.minValue !== undefined || this.maxValue !== undefined);
|
|
116
107
|
return {
|
|
117
108
|
helpText: this.helpText,
|
|
118
|
-
required: showsRequired(fieldType) ? this.required : false,
|
|
109
|
+
required: showsRequired(fieldType) ? this.required ?? false : false,
|
|
119
110
|
characters: limit ? {
|
|
120
111
|
minLength: this.minCharacters,
|
|
121
112
|
maxLength: this.maxCharacters
|
|
@@ -131,7 +122,7 @@ class CmsFieldSettingsState {
|
|
|
131
122
|
const characters = field == null || (_field$validation = field.validation) == null ? void 0 : _field$validation.stringLengthRange;
|
|
132
123
|
const values = field == null || (_field$validation2 = field.validation) == null ? void 0 : _field$validation2.numberRange;
|
|
133
124
|
this.helpText = (field == null ? void 0 : field.helpText) ?? '';
|
|
134
|
-
this.required =
|
|
125
|
+
this.required = field == null || (_field$validation3 = field.validation) == null ? void 0 : _field$validation3.required;
|
|
135
126
|
this.minCharacters = characters == null ? void 0 : characters.minLength;
|
|
136
127
|
this.maxCharacters = characters == null ? void 0 : characters.maxLength;
|
|
137
128
|
this.charactersLimit = (characters == null ? void 0 : characters.minLength) != null || (characters == null ? void 0 : characters.maxLength) != null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","CHARACTERS_CEILING","exports","MAX_CHARACTERS_FLOOR","MIN_CHARACTERS_FLOOR","MIN_CHARACTERS_FLOOR_WHEN_REQUIRED","CHARACTERS_LIMIT_TYPES","VALUE_RANGE_TYPES","showsRequired","fieldType","Boolean","showsCharactersLimit","some","type","showsValueRange","clamp","value","min","max","undefined","Math","maxBelowMin","CmsFieldSettingsState","constructor","_defineProperty2","default","makeObservable","required","observable","ref","charactersLimit","minCharacters","maxCharacters","valueRange","minValue","maxValue","helpText","minCharactersFloor","computed","rangeError","valueRangeError","setRequired","action","bound","setCharactersLimit","setMinCharacters","setMaxCharacters","setValueRange","setMinValue","setMaxValue","setHelpText","normalizeMinCharacters","normalizeMaxCharacters","setValues","hasError","getValues","limit","range","characters","minLength","maxLength","values","field","_field$validation","_field$validation2","_field$validation3","validation","stringLengthRange","numberRange"],"sources":["../../../../src/adapter/fieldSettings/CmsFieldSettingsState.ts"],"sourcesContent":["import { action, computed, makeObservable, observable } from 'mobx';\nimport type { Field, PatternsFieldType } from '@wix/patterns';\n\n/**\n * What the CMS settings section hands back to `createCmsFieldActions`. Cairo\n * carries it as an opaque value, so this shape is ours alone.\n */\nexport interface CmsFieldSettings {\n helpText: string;\n required: boolean;\n /** Absent ⇒ no character limit, or a type that can't have one. */\n characters?: { minLength?: number; maxLength?: number };\n /** Absent ⇒ no value range, or a type that can't have one. */\n values?: { min?: number; max?: number };\n}\n\n/** @wix/data rejects a character limit above this. */\nexport const CHARACTERS_CEILING = 256_000;\nexport const MAX_CHARACTERS_FLOOR = 1;\nconst MIN_CHARACTERS_FLOOR = 0;\n/** A required field has to hold at least one character. */\nconst MIN_CHARACTERS_FLOOR_WHEN_REQUIRED = 1;\n\n/** Only text fields carry a character limit — the only type `@wix/data` stores a\n * `stringLengthRange` for. */\nconst CHARACTERS_LIMIT_TYPES: PatternsFieldType[] = ['SHORT_TEXT'];\n\n/** Only number fields carry a value range — `@wix/data`'s `numberRange`. */\nconst VALUE_RANGE_TYPES: PatternsFieldType[] = ['NUMBER'];\n\nexport const showsRequired = (fieldType?: string) => Boolean(fieldType);\n\nexport const showsCharactersLimit = (fieldType?: string) =>\n CHARACTERS_LIMIT_TYPES.some((type) => type === fieldType);\n\nexport const showsValueRange = (fieldType?: string) =>\n VALUE_RANGE_TYPES.some((type) => type === fieldType);\n\nconst clamp = (value: number | undefined, min: number, max: number) =>\n value == null ? undefined : Math.min(Math.max(value, min), max);\n\nconst maxBelowMin = (min?: number, max?: number) =>\n min == null || max == null || min <= max\n ? undefined\n : 'Max has to be higher than min.';\n\nexport class CmsFieldSettingsState {\n required = false;\n charactersLimit = false;\n minCharacters: number | undefined = undefined;\n maxCharacters: number | undefined = undefined;\n valueRange = false;\n minValue: number | undefined = undefined;\n maxValue: number | undefined = undefined;\n helpText = '';\n\n constructor() {\n makeObservable(this, {\n required: observable.ref,\n charactersLimit: observable.ref,\n minCharacters: observable.ref,\n maxCharacters: observable.ref,\n valueRange: observable.ref,\n minValue: observable.ref,\n maxValue: observable.ref,\n helpText: observable.ref,\n minCharactersFloor: computed,\n rangeError: computed,\n valueRangeError: computed,\n setRequired: action.bound,\n setCharactersLimit: action.bound,\n setMinCharacters: action.bound,\n setMaxCharacters: action.bound,\n setValueRange: action.bound,\n setMinValue: action.bound,\n setMaxValue: action.bound,\n setHelpText: action.bound,\n normalizeMinCharacters: action.bound,\n normalizeMaxCharacters: action.bound,\n setValues: action.bound,\n });\n }\n\n get minCharactersFloor() {\n return this.required\n ? MIN_CHARACTERS_FLOOR_WHEN_REQUIRED\n : MIN_CHARACTERS_FLOOR;\n }\n\n get rangeError() {\n return maxBelowMin(this.minCharacters, this.maxCharacters);\n }\n\n get valueRangeError() {\n return maxBelowMin(this.minValue, this.maxValue);\n }\n\n setRequired(value: boolean) {\n this.required = value;\n this.normalizeMinCharacters();\n }\n\n setCharactersLimit(value: boolean) {\n this.charactersLimit = value;\n }\n\n setMinCharacters(value: number | undefined) {\n this.minCharacters = value;\n }\n\n setMaxCharacters(value: number | undefined) {\n this.maxCharacters = value;\n }\n\n setValueRange(value: boolean) {\n this.valueRange = value;\n }\n\n setMinValue(value: number | undefined) {\n this.minValue = value;\n }\n\n setMaxValue(value: number | undefined) {\n this.maxValue = value;\n }\n\n setHelpText(value: string) {\n this.helpText = value;\n }\n\n normalizeMinCharacters() {\n this.minCharacters = clamp(\n this.minCharacters,\n this.minCharactersFloor,\n CHARACTERS_CEILING,\n );\n }\n\n normalizeMaxCharacters() {\n this.maxCharacters = clamp(\n this.maxCharacters,\n MAX_CHARACTERS_FLOOR,\n CHARACTERS_CEILING,\n );\n }\n\n hasError(fieldType?: string) {\n return (\n (showsCharactersLimit(fieldType) &&\n this.charactersLimit &&\n Boolean(this.rangeError)) ||\n (showsValueRange(fieldType) &&\n this.valueRange &&\n Boolean(this.valueRangeError))\n );\n }\n\n getValues(fieldType?: string): CmsFieldSettings {\n // A toggle can be on with both inputs empty — that's still no limit.\n const limit =\n showsCharactersLimit(fieldType) &&\n this.charactersLimit &&\n (this.minCharacters !== undefined || this.maxCharacters !== undefined);\n const range =\n showsValueRange(fieldType) &&\n this.valueRange &&\n (this.minValue !== undefined || this.maxValue !== undefined);\n return {\n helpText: this.helpText,\n required: showsRequired(fieldType) ? this.required : false,\n characters: limit\n ? { minLength: this.minCharacters, maxLength: this.maxCharacters }\n : undefined,\n values: range ? { min: this.minValue, max: this.maxValue } : undefined,\n };\n }\n\n setValues(field?: Field) {\n const characters = field?.validation?.stringLengthRange;\n const values = field?.validation?.numberRange;\n this.helpText = field?.helpText ?? '';\n this.required = field?.validation?.required ?? false;\n this.minCharacters = characters?.minLength;\n this.maxCharacters = characters?.maxLength;\n this.charactersLimit =\n characters?.minLength != null || characters?.maxLength != null;\n this.minValue = values?.min;\n this.maxValue = values?.max;\n this.valueRange = values?.min != null || values?.max != null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_mobx","require","_patternsFields","CHARACTERS_LIMIT_TYPES","VALUE_RANGE_TYPES","showsRequired","fieldType","Boolean","exports","showsCharactersLimit","some","type","showsValueRange","getCmsFieldValidationRules","rules","push","maxBelowMin","min","max","undefined","CmsFieldSettingsState","constructor","_defineProperty2","default","makeObservable","required","observable","ref","charactersLimit","minCharacters","maxCharacters","valueRange","minValue","maxValue","helpText","validationSettings","computed","valueRangeError","setValidationSettings","action","bound","setValueRange","setMinValue","setMaxValue","setHelpText","setValues","value","_value$charactersLimi","_value$charactersLimi2","hasError","hasFieldValidationSettingsError","getValues","limit","range","characters","minLength","maxLength","values","field","_field$validation","_field$validation2","_field$validation3","validation","stringLengthRange","numberRange"],"sources":["../../../../src/adapter/fieldSettings/CmsFieldSettingsState.ts"],"sourcesContent":["import { action, computed, makeObservable, observable } from 'mobx';\nimport type { Field, PatternsFieldType } from '@wix/patterns';\nimport {\n hasFieldValidationSettingsError,\n type FieldValidationRule,\n type FieldValidationSettingsValue,\n} from '@wix/patterns-fields';\n\n/**\n * What the CMS settings section hands back to `createCmsFieldActions`. Cairo\n * carries it as an opaque value, so this shape is ours alone.\n */\nexport interface CmsFieldSettings {\n helpText: string;\n required: boolean;\n /** Absent ⇒ no character limit, or a type that can't have one. */\n characters?: { minLength?: number; maxLength?: number };\n /** Absent ⇒ no value range, or a type that can't have one. */\n values?: { min?: number; max?: number };\n}\n\n/** Only text fields carry a character limit — the only type `@wix/data` stores a\n * `stringLengthRange` for. */\nconst CHARACTERS_LIMIT_TYPES: PatternsFieldType[] = ['SHORT_TEXT'];\n\n/** Only number fields carry a value range — `@wix/data`'s `numberRange`. */\nconst VALUE_RANGE_TYPES: PatternsFieldType[] = ['NUMBER'];\n\nexport const showsRequired = (fieldType?: string) => Boolean(fieldType);\n\nexport const showsCharactersLimit = (fieldType?: string) =>\n CHARACTERS_LIMIT_TYPES.some((type) => type === fieldType);\n\nexport const showsValueRange = (fieldType?: string) =>\n VALUE_RANGE_TYPES.some((type) => type === fieldType);\n\nexport type CmsFieldValidationRule = Extract<\n FieldValidationRule,\n 'required' | 'charactersLimit'\n>;\n\nexport const getCmsFieldValidationRules = (\n fieldType?: string,\n): CmsFieldValidationRule[] => {\n const rules: CmsFieldValidationRule[] = [];\n\n if (showsRequired(fieldType)) {\n rules.push('required');\n }\n if (showsCharactersLimit(fieldType)) {\n rules.push('charactersLimit');\n }\n\n return rules;\n};\n\nconst maxBelowMin = (min?: number, max?: number) =>\n min == null || max == null || min <= max\n ? undefined\n : 'Max has to be higher than min.';\n\nexport class CmsFieldSettingsState {\n required: boolean | undefined = undefined;\n charactersLimit = false;\n minCharacters: number | undefined = undefined;\n maxCharacters: number | undefined = undefined;\n valueRange = false;\n minValue: number | undefined = undefined;\n maxValue: number | undefined = undefined;\n helpText = '';\n\n constructor() {\n makeObservable(this, {\n required: observable.ref,\n charactersLimit: observable.ref,\n minCharacters: observable.ref,\n maxCharacters: observable.ref,\n valueRange: observable.ref,\n minValue: observable.ref,\n maxValue: observable.ref,\n helpText: observable.ref,\n validationSettings: computed,\n valueRangeError: computed,\n setValidationSettings: action.bound,\n setValueRange: action.bound,\n setMinValue: action.bound,\n setMaxValue: action.bound,\n setHelpText: action.bound,\n setValues: action.bound,\n });\n }\n\n get validationSettings(): FieldValidationSettingsValue {\n return {\n required: this.required,\n ...(this.charactersLimit && {\n charactersLimit: {\n min: this.minCharacters,\n max: this.maxCharacters,\n },\n }),\n };\n }\n\n get valueRangeError() {\n return maxBelowMin(this.minValue, this.maxValue);\n }\n\n setValidationSettings(value: FieldValidationSettingsValue) {\n this.required = value.required;\n this.charactersLimit = value.charactersLimit !== undefined;\n this.minCharacters = value.charactersLimit?.min;\n this.maxCharacters = value.charactersLimit?.max;\n }\n\n setValueRange(value: boolean) {\n this.valueRange = value;\n }\n\n setMinValue(value: number | undefined) {\n this.minValue = value;\n }\n\n setMaxValue(value: number | undefined) {\n this.maxValue = value;\n }\n\n setHelpText(value: string) {\n this.helpText = value;\n }\n\n hasError(fieldType?: string) {\n return (\n (showsCharactersLimit(fieldType) &&\n hasFieldValidationSettingsError(\n this.validationSettings,\n getCmsFieldValidationRules(fieldType),\n )) ||\n (showsValueRange(fieldType) &&\n this.valueRange &&\n Boolean(this.valueRangeError))\n );\n }\n\n getValues(fieldType?: string): CmsFieldSettings {\n // A toggle can be on with both inputs empty — that's still no limit.\n const limit =\n showsCharactersLimit(fieldType) &&\n this.charactersLimit &&\n (this.minCharacters !== undefined || this.maxCharacters !== undefined);\n const range =\n showsValueRange(fieldType) &&\n this.valueRange &&\n (this.minValue !== undefined || this.maxValue !== undefined);\n return {\n helpText: this.helpText,\n required: showsRequired(fieldType) ? this.required ?? false : false,\n characters: limit\n ? { minLength: this.minCharacters, maxLength: this.maxCharacters }\n : undefined,\n values: range ? { min: this.minValue, max: this.maxValue } : undefined,\n };\n }\n\n setValues(field?: Field) {\n const characters = field?.validation?.stringLengthRange;\n const values = field?.validation?.numberRange;\n this.helpText = field?.helpText ?? '';\n this.required = field?.validation?.required;\n this.minCharacters = characters?.minLength;\n this.maxCharacters = characters?.maxLength;\n this.charactersLimit =\n characters?.minLength != null || characters?.maxLength != null;\n this.minValue = values?.min;\n this.maxValue = values?.max;\n this.valueRange = values?.min != null || values?.max != null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _CmsFieldSettingsState = require("./CmsFieldSettingsState");
|
|
4
|
+
describe('CmsFieldSettingsState validation settings', () => {
|
|
5
|
+
it('defines required before character limits for short text', () => {
|
|
6
|
+
expect((0, _CmsFieldSettingsState.getCmsFieldValidationRules)('SHORT_TEXT')).toEqual(['required', 'charactersLimit']);
|
|
7
|
+
expect((0, _CmsFieldSettingsState.getCmsFieldValidationRules)('NUMBER')).toEqual(['required']);
|
|
8
|
+
expect((0, _CmsFieldSettingsState.getCmsFieldValidationRules)()).toEqual([]);
|
|
9
|
+
});
|
|
10
|
+
it('round trips required and character limits through the controlled value', () => {
|
|
11
|
+
const state = new _CmsFieldSettingsState.CmsFieldSettingsState();
|
|
12
|
+
state.setValidationSettings({
|
|
13
|
+
required: true,
|
|
14
|
+
charactersLimit: {
|
|
15
|
+
min: 2,
|
|
16
|
+
max: 20
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
expect(state.validationSettings).toEqual({
|
|
20
|
+
required: true,
|
|
21
|
+
charactersLimit: {
|
|
22
|
+
min: 2,
|
|
23
|
+
max: 20
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
expect(state.getValues('SHORT_TEXT')).toEqual({
|
|
27
|
+
helpText: '',
|
|
28
|
+
required: true,
|
|
29
|
+
characters: {
|
|
30
|
+
minLength: 2,
|
|
31
|
+
maxLength: 20
|
|
32
|
+
},
|
|
33
|
+
values: undefined
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('preserves absent required while editing character limits', () => {
|
|
37
|
+
const state = new _CmsFieldSettingsState.CmsFieldSettingsState();
|
|
38
|
+
state.setValidationSettings({
|
|
39
|
+
charactersLimit: {
|
|
40
|
+
min: 2,
|
|
41
|
+
max: 20
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
expect(state.validationSettings).toEqual({
|
|
45
|
+
required: undefined,
|
|
46
|
+
charactersLimit: {
|
|
47
|
+
min: 2,
|
|
48
|
+
max: 20
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
expect(state.getValues('SHORT_TEXT').required).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
it('reports character violations before the section renders', () => {
|
|
54
|
+
const state = new _CmsFieldSettingsState.CmsFieldSettingsState();
|
|
55
|
+
state.setValidationSettings({
|
|
56
|
+
charactersLimit: {
|
|
57
|
+
min: 20,
|
|
58
|
+
max: 2
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
expect(state.hasError('SHORT_TEXT')).toBe(true);
|
|
62
|
+
expect(state.hasError('NUMBER')).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('preserves invalid character drafts instead of normalizing them', () => {
|
|
65
|
+
const state = new _CmsFieldSettingsState.CmsFieldSettingsState();
|
|
66
|
+
state.setValidationSettings({
|
|
67
|
+
required: true,
|
|
68
|
+
charactersLimit: {
|
|
69
|
+
min: 0,
|
|
70
|
+
max: 256_001
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
expect(state.validationSettings).toEqual({
|
|
74
|
+
required: true,
|
|
75
|
+
charactersLimit: {
|
|
76
|
+
min: 0,
|
|
77
|
+
max: 256_001
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
expect(state.hasError('SHORT_TEXT')).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
it('keeps the number-only value range separate', () => {
|
|
83
|
+
const state = new _CmsFieldSettingsState.CmsFieldSettingsState();
|
|
84
|
+
state.setValueRange(true);
|
|
85
|
+
state.setMinValue(10);
|
|
86
|
+
state.setMaxValue(5);
|
|
87
|
+
expect(state.hasError('NUMBER')).toBe(true);
|
|
88
|
+
expect(state.getValues('NUMBER').values).toEqual({
|
|
89
|
+
min: 10,
|
|
90
|
+
max: 5
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=CmsFieldSettingsState.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_CmsFieldSettingsState","require","describe","it","expect","getCmsFieldValidationRules","toEqual","state","CmsFieldSettingsState","setValidationSettings","required","charactersLimit","min","max","validationSettings","getValues","helpText","characters","minLength","maxLength","values","undefined","toBe","hasError","setValueRange","setMinValue","setMaxValue"],"sources":["../../../../src/adapter/fieldSettings/CmsFieldSettingsState.spec.ts"],"sourcesContent":["import {\n CmsFieldSettingsState,\n getCmsFieldValidationRules,\n} from './CmsFieldSettingsState';\n\ndescribe('CmsFieldSettingsState validation settings', () => {\n it('defines required before character limits for short text', () => {\n expect(getCmsFieldValidationRules('SHORT_TEXT')).toEqual([\n 'required',\n 'charactersLimit',\n ]);\n expect(getCmsFieldValidationRules('NUMBER')).toEqual(['required']);\n expect(getCmsFieldValidationRules()).toEqual([]);\n });\n\n it('round trips required and character limits through the controlled value', () => {\n const state = new CmsFieldSettingsState();\n\n state.setValidationSettings({\n required: true,\n charactersLimit: { min: 2, max: 20 },\n });\n\n expect(state.validationSettings).toEqual({\n required: true,\n charactersLimit: { min: 2, max: 20 },\n });\n expect(state.getValues('SHORT_TEXT')).toEqual({\n helpText: '',\n required: true,\n characters: { minLength: 2, maxLength: 20 },\n values: undefined,\n });\n });\n\n it('preserves absent required while editing character limits', () => {\n const state = new CmsFieldSettingsState();\n\n state.setValidationSettings({ charactersLimit: { min: 2, max: 20 } });\n\n expect(state.validationSettings).toEqual({\n required: undefined,\n charactersLimit: { min: 2, max: 20 },\n });\n expect(state.getValues('SHORT_TEXT').required).toBe(false);\n });\n\n it('reports character violations before the section renders', () => {\n const state = new CmsFieldSettingsState();\n state.setValidationSettings({ charactersLimit: { min: 20, max: 2 } });\n\n expect(state.hasError('SHORT_TEXT')).toBe(true);\n expect(state.hasError('NUMBER')).toBe(false);\n });\n\n it('preserves invalid character drafts instead of normalizing them', () => {\n const state = new CmsFieldSettingsState();\n state.setValidationSettings({\n required: true,\n charactersLimit: { min: 0, max: 256_001 },\n });\n\n expect(state.validationSettings).toEqual({\n required: true,\n charactersLimit: { min: 0, max: 256_001 },\n });\n expect(state.hasError('SHORT_TEXT')).toBe(true);\n });\n\n it('keeps the number-only value range separate', () => {\n const state = new CmsFieldSettingsState();\n state.setValueRange(true);\n state.setMinValue(10);\n state.setMaxValue(5);\n\n expect(state.hasError('NUMBER')).toBe(true);\n expect(state.getValues('NUMBER').values).toEqual({ min: 10, max: 5 });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,33 +1,41 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { observer } from 'mobx-react-lite';
|
|
3
3
|
import { Box, FormField, InfoIcon, Input, NumberInput, Text, ToggleSwitch, } from '@wix/design-system';
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { FieldValidationSettingsInput, } from '@wix/patterns-fields';
|
|
5
|
+
import { useWixPatternsContainer } from '@wix/patterns';
|
|
6
|
+
import { getCmsFieldValidationRules, showsValueRange, } from './CmsFieldSettingsState';
|
|
6
7
|
export const _CmsFieldSettings = (props) => {
|
|
7
8
|
const { state, fieldType } = props;
|
|
8
|
-
const {
|
|
9
|
+
const { translate } = useWixPatternsContainer();
|
|
10
|
+
const { valueRangeError } = state;
|
|
11
|
+
const validationRules = getCmsFieldValidationRules(fieldType).map((rule) => {
|
|
12
|
+
switch (rule) {
|
|
13
|
+
case 'required':
|
|
14
|
+
return {
|
|
15
|
+
type: rule,
|
|
16
|
+
label: translate('cairo.fieldValidation.required.label'),
|
|
17
|
+
tooltip: translate('cairo.fieldValidation.required.tooltip'),
|
|
18
|
+
};
|
|
19
|
+
case 'charactersLimit':
|
|
20
|
+
return {
|
|
21
|
+
type: rule,
|
|
22
|
+
label: translate('cairo.fieldValidation.charactersLimit.label'),
|
|
23
|
+
tooltip: translate('cairo.fieldValidation.charactersLimit.tooltip'),
|
|
24
|
+
minLabel: translate('cairo.fieldValidation.charactersLimit.minimum.label'),
|
|
25
|
+
maxLabel: translate('cairo.fieldValidation.charactersLimit.maximum.label'),
|
|
26
|
+
separator: translate('cairo.fieldValidation.charactersLimit.separator'),
|
|
27
|
+
outOfBoundsError: (min, max) => translate('cairo.fieldValidation.charactersLimit.outOfBounds.error', { min, max }),
|
|
28
|
+
maxBelowMinError: translate('cairo.fieldValidation.charactersLimit.maxBelowMin.error'),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return rule;
|
|
32
|
+
});
|
|
9
33
|
return (React.createElement(Box, { direction: "vertical", gap: "SP4" },
|
|
10
34
|
React.createElement(FormField, { dataHook: "cms-field-settings-help-text", label: "Help text", infoContent: "Shown under the field when someone adds content to this collection." },
|
|
11
35
|
React.createElement(Input, { dataHook: "cms-field-settings-help-text-input", value: state.helpText, maxLength: 200, placeholder: "Add a short explanation", onChange: (e) => state.setHelpText(e.target.value) })),
|
|
12
36
|
React.createElement(Box, { direction: "vertical", gap: "SP2" },
|
|
13
37
|
React.createElement(Text, { size: "small", secondary: true }, "Validation"),
|
|
14
|
-
|
|
15
|
-
React.createElement(ToggleSwitch, { dataHook: "cms-field-settings-required-toggle", size: "medium", checked: state.required, onChange: (e) => state.setRequired(e.target.checked) }),
|
|
16
|
-
React.createElement(Box, { verticalAlign: "middle", gap: "3px" },
|
|
17
|
-
React.createElement(Text, { size: "small" }, "Make this a required field"),
|
|
18
|
-
React.createElement(InfoIcon, { size: "small", content: "Make this a required field when adding content to this collection." })))),
|
|
19
|
-
showsCharactersLimit(fieldType) && (React.createElement(Box, { direction: "vertical", gap: "SP2" },
|
|
20
|
-
React.createElement(Box, { dataHook: "cms-field-settings-characters-limit", verticalAlign: "middle", gap: "9px" },
|
|
21
|
-
React.createElement(ToggleSwitch, { dataHook: "cms-field-settings-characters-limit-toggle", size: "medium", checked: state.charactersLimit, onChange: (e) => state.setCharactersLimit(e.target.checked) }),
|
|
22
|
-
React.createElement(Box, { verticalAlign: "middle", gap: "3px" },
|
|
23
|
-
React.createElement(Text, { size: "small" }, "Limit character count"),
|
|
24
|
-
React.createElement(InfoIcon, { size: "small", content: "Limit the number of characters in this field for any newly added items." }))),
|
|
25
|
-
state.charactersLimit && (React.createElement(Box, { verticalAlign: "middle", gap: "SP2" },
|
|
26
|
-
React.createElement(Box, { width: "112px" },
|
|
27
|
-
React.createElement(NumberInput, { dataHook: "cms-field-settings-min-characters", size: "small", placeholder: "min", min: state.minCharactersFloor, max: CHARACTERS_CEILING, value: state.minCharacters, onChange: (value) => state.setMinCharacters(value ?? undefined), onBlur: state.normalizeMinCharacters })),
|
|
28
|
-
React.createElement(Text, { size: "small", secondary: true }, "and"),
|
|
29
|
-
React.createElement(Box, { width: "112px" },
|
|
30
|
-
React.createElement(NumberInput, { dataHook: "cms-field-settings-max-characters", size: "small", placeholder: "max", min: MAX_CHARACTERS_FLOOR, max: CHARACTERS_CEILING, value: state.maxCharacters, status: rangeError ? 'error' : undefined, statusMessage: rangeError, onChange: (value) => state.setMaxCharacters(value ?? undefined), onBlur: state.normalizeMaxCharacters })))))),
|
|
38
|
+
React.createElement(FieldValidationSettingsInput, { dataHook: "cms-field-settings-validation", data: state.validationSettings, rules: validationRules, invalid: state.hasError(fieldType), onChange: state.setValidationSettings }),
|
|
31
39
|
showsValueRange(fieldType) && (React.createElement(Box, { direction: "vertical", gap: "SP2" },
|
|
32
40
|
React.createElement(Box, { dataHook: "cms-field-settings-value-range", verticalAlign: "middle", gap: "9px" },
|
|
33
41
|
React.createElement(ToggleSwitch, { dataHook: "cms-field-settings-value-range-toggle", size: "medium", checked: state.valueRange, onChange: (e) => state.setValueRange(e.target.checked) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsFieldSettings.js","sourceRoot":"","sources":["../../../../src/adapter/fieldSettings/CmsFieldSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,GAAG,EACH,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,IAAI,EACJ,YAAY,GACb,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"CmsFieldSettings.js","sourceRoot":"","sources":["../../../../src/adapter/fieldSettings/CmsFieldSettings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { _CmsFieldSettings, } from './CmsFieldSettings';
|
|
3
|
+
import { CmsFieldSettingsState } from './CmsFieldSettingsState';
|
|
4
|
+
const mockFieldValidationSettingsInput = jest.fn(() => null);
|
|
5
|
+
jest.mock('@wix/patterns-fields', () => ({
|
|
6
|
+
...jest.requireActual('@wix/patterns-fields'),
|
|
7
|
+
FieldValidationSettingsInput: (props) => mockFieldValidationSettingsInput(props),
|
|
8
|
+
}));
|
|
9
|
+
jest.mock('@wix/patterns', () => ({
|
|
10
|
+
useWixPatternsContainer: () => ({
|
|
11
|
+
translate: (key, params) => params ? `${key}:${params.min}-${params.max}` : key,
|
|
12
|
+
}),
|
|
13
|
+
}), { virtual: true });
|
|
14
|
+
const findValidationSettingsInput = (node) => {
|
|
15
|
+
if (!React.isValidElement(node)) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
if (node.props.dataHook === 'cms-field-settings-validation') {
|
|
19
|
+
return node;
|
|
20
|
+
}
|
|
21
|
+
return React.Children.toArray(node.props.children)
|
|
22
|
+
.map(findValidationSettingsInput)
|
|
23
|
+
.find(Boolean);
|
|
24
|
+
};
|
|
25
|
+
describe('CmsFieldSettings', () => {
|
|
26
|
+
it('passes ordered translated rules and controlled validation state', () => {
|
|
27
|
+
const state = new CmsFieldSettingsState();
|
|
28
|
+
state.setValidationSettings({
|
|
29
|
+
required: true,
|
|
30
|
+
charactersLimit: { min: 20, max: 2 },
|
|
31
|
+
});
|
|
32
|
+
const tree = _CmsFieldSettings({
|
|
33
|
+
state,
|
|
34
|
+
fieldType: 'SHORT_TEXT',
|
|
35
|
+
});
|
|
36
|
+
const input = findValidationSettingsInput(tree);
|
|
37
|
+
if (!input) {
|
|
38
|
+
throw new Error('FieldValidationSettingsInput was not rendered');
|
|
39
|
+
}
|
|
40
|
+
const props = input.props;
|
|
41
|
+
expect(props.rules.map(({ type }) => type)).toEqual([
|
|
42
|
+
'required',
|
|
43
|
+
'charactersLimit',
|
|
44
|
+
]);
|
|
45
|
+
expect(props.rules[1]).toMatchObject({
|
|
46
|
+
label: 'cairo.fieldValidation.charactersLimit.label',
|
|
47
|
+
maxBelowMinError: 'cairo.fieldValidation.charactersLimit.maxBelowMin.error',
|
|
48
|
+
});
|
|
49
|
+
expect(props.data).toEqual({
|
|
50
|
+
required: true,
|
|
51
|
+
charactersLimit: { min: 20, max: 2 },
|
|
52
|
+
});
|
|
53
|
+
expect(props.invalid).toBe(true);
|
|
54
|
+
props.onChange({ required: false });
|
|
55
|
+
expect(state.validationSettings).toEqual({ required: false });
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=CmsFieldSettings.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmsFieldSettings.spec.js","sourceRoot":"","sources":["../../../../src/adapter/fieldSettings/CmsFieldSettings.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { action, computed, makeObservable, observable } from 'mobx';
|
|
2
|
-
|
|
3
|
-
export const CHARACTERS_CEILING = 256_000;
|
|
4
|
-
export const MAX_CHARACTERS_FLOOR = 1;
|
|
5
|
-
const MIN_CHARACTERS_FLOOR = 0;
|
|
6
|
-
/** A required field has to hold at least one character. */
|
|
7
|
-
const MIN_CHARACTERS_FLOOR_WHEN_REQUIRED = 1;
|
|
2
|
+
import { hasFieldValidationSettingsError, } from '@wix/patterns-fields';
|
|
8
3
|
/** Only text fields carry a character limit — the only type `@wix/data` stores a
|
|
9
4
|
* `stringLengthRange` for. */
|
|
10
5
|
const CHARACTERS_LIMIT_TYPES = ['SHORT_TEXT'];
|
|
@@ -13,13 +8,22 @@ const VALUE_RANGE_TYPES = ['NUMBER'];
|
|
|
13
8
|
export const showsRequired = (fieldType) => Boolean(fieldType);
|
|
14
9
|
export const showsCharactersLimit = (fieldType) => CHARACTERS_LIMIT_TYPES.some((type) => type === fieldType);
|
|
15
10
|
export const showsValueRange = (fieldType) => VALUE_RANGE_TYPES.some((type) => type === fieldType);
|
|
16
|
-
const
|
|
11
|
+
export const getCmsFieldValidationRules = (fieldType) => {
|
|
12
|
+
const rules = [];
|
|
13
|
+
if (showsRequired(fieldType)) {
|
|
14
|
+
rules.push('required');
|
|
15
|
+
}
|
|
16
|
+
if (showsCharactersLimit(fieldType)) {
|
|
17
|
+
rules.push('charactersLimit');
|
|
18
|
+
}
|
|
19
|
+
return rules;
|
|
20
|
+
};
|
|
17
21
|
const maxBelowMin = (min, max) => min == null || max == null || min <= max
|
|
18
22
|
? undefined
|
|
19
23
|
: 'Max has to be higher than min.';
|
|
20
24
|
export class CmsFieldSettingsState {
|
|
21
25
|
constructor() {
|
|
22
|
-
this.required =
|
|
26
|
+
this.required = undefined;
|
|
23
27
|
this.charactersLimit = false;
|
|
24
28
|
this.minCharacters = undefined;
|
|
25
29
|
this.maxCharacters = undefined;
|
|
@@ -36,45 +40,35 @@ export class CmsFieldSettingsState {
|
|
|
36
40
|
minValue: observable.ref,
|
|
37
41
|
maxValue: observable.ref,
|
|
38
42
|
helpText: observable.ref,
|
|
39
|
-
|
|
40
|
-
rangeError: computed,
|
|
43
|
+
validationSettings: computed,
|
|
41
44
|
valueRangeError: computed,
|
|
42
|
-
|
|
43
|
-
setCharactersLimit: action.bound,
|
|
44
|
-
setMinCharacters: action.bound,
|
|
45
|
-
setMaxCharacters: action.bound,
|
|
45
|
+
setValidationSettings: action.bound,
|
|
46
46
|
setValueRange: action.bound,
|
|
47
47
|
setMinValue: action.bound,
|
|
48
48
|
setMaxValue: action.bound,
|
|
49
49
|
setHelpText: action.bound,
|
|
50
|
-
normalizeMinCharacters: action.bound,
|
|
51
|
-
normalizeMaxCharacters: action.bound,
|
|
52
50
|
setValues: action.bound,
|
|
53
51
|
});
|
|
54
52
|
}
|
|
55
|
-
get
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
get validationSettings() {
|
|
54
|
+
return {
|
|
55
|
+
required: this.required,
|
|
56
|
+
...(this.charactersLimit && {
|
|
57
|
+
charactersLimit: {
|
|
58
|
+
min: this.minCharacters,
|
|
59
|
+
max: this.maxCharacters,
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
62
63
|
}
|
|
63
64
|
get valueRangeError() {
|
|
64
65
|
return maxBelowMin(this.minValue, this.maxValue);
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
this.required = value;
|
|
68
|
-
this.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.charactersLimit = value;
|
|
72
|
-
}
|
|
73
|
-
setMinCharacters(value) {
|
|
74
|
-
this.minCharacters = value;
|
|
75
|
-
}
|
|
76
|
-
setMaxCharacters(value) {
|
|
77
|
-
this.maxCharacters = value;
|
|
67
|
+
setValidationSettings(value) {
|
|
68
|
+
this.required = value.required;
|
|
69
|
+
this.charactersLimit = value.charactersLimit !== undefined;
|
|
70
|
+
this.minCharacters = value.charactersLimit?.min;
|
|
71
|
+
this.maxCharacters = value.charactersLimit?.max;
|
|
78
72
|
}
|
|
79
73
|
setValueRange(value) {
|
|
80
74
|
this.valueRange = value;
|
|
@@ -88,16 +82,9 @@ export class CmsFieldSettingsState {
|
|
|
88
82
|
setHelpText(value) {
|
|
89
83
|
this.helpText = value;
|
|
90
84
|
}
|
|
91
|
-
normalizeMinCharacters() {
|
|
92
|
-
this.minCharacters = clamp(this.minCharacters, this.minCharactersFloor, CHARACTERS_CEILING);
|
|
93
|
-
}
|
|
94
|
-
normalizeMaxCharacters() {
|
|
95
|
-
this.maxCharacters = clamp(this.maxCharacters, MAX_CHARACTERS_FLOOR, CHARACTERS_CEILING);
|
|
96
|
-
}
|
|
97
85
|
hasError(fieldType) {
|
|
98
86
|
return ((showsCharactersLimit(fieldType) &&
|
|
99
|
-
this.
|
|
100
|
-
Boolean(this.rangeError)) ||
|
|
87
|
+
hasFieldValidationSettingsError(this.validationSettings, getCmsFieldValidationRules(fieldType))) ||
|
|
101
88
|
(showsValueRange(fieldType) &&
|
|
102
89
|
this.valueRange &&
|
|
103
90
|
Boolean(this.valueRangeError)));
|
|
@@ -112,7 +99,7 @@ export class CmsFieldSettingsState {
|
|
|
112
99
|
(this.minValue !== undefined || this.maxValue !== undefined);
|
|
113
100
|
return {
|
|
114
101
|
helpText: this.helpText,
|
|
115
|
-
required: showsRequired(fieldType) ? this.required : false,
|
|
102
|
+
required: showsRequired(fieldType) ? this.required ?? false : false,
|
|
116
103
|
characters: limit
|
|
117
104
|
? { minLength: this.minCharacters, maxLength: this.maxCharacters }
|
|
118
105
|
: undefined,
|
|
@@ -123,7 +110,7 @@ export class CmsFieldSettingsState {
|
|
|
123
110
|
const characters = field?.validation?.stringLengthRange;
|
|
124
111
|
const values = field?.validation?.numberRange;
|
|
125
112
|
this.helpText = field?.helpText ?? '';
|
|
126
|
-
this.required = field?.validation?.required
|
|
113
|
+
this.required = field?.validation?.required;
|
|
127
114
|
this.minCharacters = characters?.minLength;
|
|
128
115
|
this.maxCharacters = characters?.maxLength;
|
|
129
116
|
this.charactersLimit =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsFieldSettingsState.js","sourceRoot":"","sources":["../../../../src/adapter/fieldSettings/CmsFieldSettingsState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"CmsFieldSettingsState.js","sourceRoot":"","sources":["../../../../src/adapter/fieldSettings/CmsFieldSettingsState.ts"],"names":[],"mappings":"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"}
|