@servicetitan/form-state 31.2.0 → 31.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/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js +61 -57
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js.map +1 -1
- package/dist/async-lazy-dropdown-state/index.js +1 -0
- package/dist/async-lazy-dropdown-state/index.js.map +1 -1
- package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js +23 -13
- package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js.map +1 -1
- package/dist/date-range.js +2 -1
- package/dist/date-range.js.map +1 -1
- package/dist/demo/dropdown-state.js +284 -60
- package/dist/demo/dropdown-state.js.map +1 -1
- package/dist/demo/index.js +1 -0
- package/dist/demo/index.js.map +1 -1
- package/dist/dropdown-state.js +168 -222
- package/dist/dropdown-state.js.map +1 -1
- package/dist/form-helpers.js +73 -116
- package/dist/form-helpers.js.map +1 -1
- package/dist/form-validators.js +25 -39
- package/dist/form-validators.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/persistent-form-state/domain-storage.js +22 -16
- package/dist/persistent-form-state/domain-storage.js.map +1 -1
- package/dist/persistent-form-state/in-memory-storage.js +14 -5
- package/dist/persistent-form-state/in-memory-storage.js.map +1 -1
- package/dist/persistent-form-state/index.js +1 -0
- package/dist/persistent-form-state/index.js.map +1 -1
- package/dist/persistent-form-state/persistent-form-state.js +40 -71
- package/dist/persistent-form-state/persistent-form-state.js.map +1 -1
- package/package.json +5 -5
- package/dist/__tests__/form-helpers.test.js +0 -263
- package/dist/__tests__/form-helpers.test.js.map +0 -1
- package/dist/__tests__/form-validators.test.js +0 -48
- package/dist/__tests__/form-validators.test.js.map +0 -1
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js +0 -46
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js.map +0 -1
- package/dist/persistent-form-state/__tests__/domain-storage.test.js +0 -60
- package/dist/persistent-form-state/__tests__/domain-storage.test.js.map +0 -1
package/dist/form-helpers.js
CHANGED
|
@@ -1,127 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
super(...arguments);
|
|
6
|
-
Object.defineProperty(this, "onChangeHandler", {
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
7
5
|
enumerable: true,
|
|
8
6
|
configurable: true,
|
|
9
|
-
writable: true
|
|
10
|
-
value: (_0, checked) => {
|
|
11
|
-
this.onChange(checked);
|
|
12
|
-
}
|
|
7
|
+
writable: true
|
|
13
8
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
import { FieldState, FormState } from 'formstate';
|
|
15
|
+
import { toJS, isObservableMap, runInAction, transaction, computed, comparer } from 'mobx';
|
|
16
|
+
export class CheckboxFieldState extends FieldState {
|
|
17
|
+
constructor(...args){
|
|
18
|
+
super(...args), _define_property(this, "onChangeHandler", (_0, checked)=>{
|
|
19
|
+
this.onChange(checked);
|
|
20
|
+
}), // eslint-disable-next-line @typescript-eslint/naming-convention
|
|
21
|
+
_define_property(this, "DEPRECATED_onChangeHandler", (_0, data)=>{
|
|
22
|
+
this.onChange(!!data.checked);
|
|
22
23
|
});
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
export class InputFieldState extends FieldState {
|
|
26
|
-
constructor()
|
|
27
|
-
super(...
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
writable: true,
|
|
32
|
-
value: (_0, data) => {
|
|
33
|
-
this.onChange(data.value);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
Object.defineProperty(this, "onChangeNativeHandler", {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
configurable: true,
|
|
39
|
-
writable: true,
|
|
40
|
-
value: (event) => {
|
|
41
|
-
this.onChange(event.currentTarget.value);
|
|
42
|
-
}
|
|
27
|
+
constructor(...args){
|
|
28
|
+
super(...args), _define_property(this, "onChangeHandler", (_0, data)=>{
|
|
29
|
+
this.onChange(data.value);
|
|
30
|
+
}), _define_property(this, "onChangeNativeHandler", (event)=>{
|
|
31
|
+
this.onChange(event.currentTarget.value);
|
|
43
32
|
});
|
|
44
33
|
}
|
|
45
34
|
}
|
|
46
35
|
export class TextAreaFieldState extends FieldState {
|
|
47
|
-
constructor()
|
|
48
|
-
super(...
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
Object.defineProperty(this, "onChangeHandler", {
|
|
54
|
-
enumerable: true,
|
|
55
|
-
configurable: true,
|
|
56
|
-
writable: true,
|
|
57
|
-
value: (_0, data) => {
|
|
58
|
-
this.onChange(data.value);
|
|
59
|
-
}
|
|
36
|
+
constructor(...args){
|
|
37
|
+
super(...args), /**
|
|
38
|
+
* react-semantic type for onChange event of TextArea component seems to have a bug with data object type
|
|
39
|
+
* so declaring data as any
|
|
40
|
+
*/ _define_property(this, "onChangeHandler", (_0, data)=>{
|
|
41
|
+
this.onChange(data.value);
|
|
60
42
|
});
|
|
61
43
|
}
|
|
62
44
|
}
|
|
63
45
|
export class DropdownFieldState extends FieldState {
|
|
64
|
-
constructor()
|
|
65
|
-
super(...
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
Object.defineProperty(this, "onChangeHandler", {
|
|
71
|
-
enumerable: true,
|
|
72
|
-
configurable: true,
|
|
73
|
-
writable: true,
|
|
74
|
-
value: (_0, data) => {
|
|
75
|
-
this.onChange(data.value);
|
|
76
|
-
}
|
|
46
|
+
constructor(...args){
|
|
47
|
+
super(...args), /**
|
|
48
|
+
* react-semantic type for onChange event of Dropdown component seems to have a bug with data object type
|
|
49
|
+
* so declaring data as any
|
|
50
|
+
*/ _define_property(this, "onChangeHandler", (_0, data)=>{
|
|
51
|
+
this.onChange(data.value);
|
|
77
52
|
});
|
|
78
53
|
}
|
|
79
54
|
}
|
|
80
55
|
export class DropdownSearchFieldState extends FieldState {
|
|
81
|
-
constructor()
|
|
82
|
-
super(...
|
|
83
|
-
|
|
84
|
-
enumerable: true,
|
|
85
|
-
configurable: true,
|
|
86
|
-
writable: true,
|
|
87
|
-
value: (_0, data) => {
|
|
88
|
-
this.onChange(data.searchQuery);
|
|
89
|
-
}
|
|
56
|
+
constructor(...args){
|
|
57
|
+
super(...args), _define_property(this, "onChangeHandler", (_0, data)=>{
|
|
58
|
+
this.onChange(data.searchQuery);
|
|
90
59
|
});
|
|
91
60
|
}
|
|
92
61
|
}
|
|
93
62
|
export class DatetimeFieldState extends FieldState {
|
|
94
|
-
constructor()
|
|
95
|
-
super(...
|
|
96
|
-
|
|
97
|
-
enumerable: true,
|
|
98
|
-
configurable: true,
|
|
99
|
-
writable: true,
|
|
100
|
-
value: (event) => {
|
|
101
|
-
this.onChange(event.target.value);
|
|
102
|
-
}
|
|
63
|
+
constructor(...args){
|
|
64
|
+
super(...args), _define_property(this, "onChangeHandler", (event)=>{
|
|
65
|
+
this.onChange(event.target.value);
|
|
103
66
|
});
|
|
104
67
|
}
|
|
105
68
|
}
|
|
106
69
|
export function enumToOptions(enumObject, nameProvider) {
|
|
107
|
-
return getEnumKeys(enumObject).map(k
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
70
|
+
return getEnumKeys(enumObject).map((k)=>({
|
|
71
|
+
key: k,
|
|
72
|
+
text: nameProvider ? nameProvider(enumObject[k]) : k,
|
|
73
|
+
value: enumObject[k]
|
|
74
|
+
}));
|
|
112
75
|
}
|
|
113
76
|
export function getEnumKeys(enumObject) {
|
|
114
77
|
let keys = Object.keys(enumObject);
|
|
115
|
-
if (keys.some(k
|
|
116
|
-
keys = keys.filter(k
|
|
78
|
+
if (keys.some((k)=>typeof enumObject[k] === 'number')) {
|
|
79
|
+
keys = keys.filter((k)=>typeof enumObject[k] === 'number');
|
|
117
80
|
}
|
|
118
81
|
return keys;
|
|
119
82
|
}
|
|
120
83
|
export function getEnumValues(enumObject) {
|
|
121
|
-
return getEnumKeys(enumObject).map(k
|
|
84
|
+
return getEnumKeys(enumObject).map((k)=>enumObject[k]);
|
|
122
85
|
}
|
|
123
86
|
export function traverseFormState(recursive, formState, onFormVisit, onFieldVisit) {
|
|
124
|
-
const visitChild = (key, child)
|
|
87
|
+
const visitChild = (key, child)=>{
|
|
125
88
|
if (child instanceof FormState) {
|
|
126
89
|
if (recursive) {
|
|
127
90
|
traverseFormState(recursive, child, onFormVisit, onFieldVisit);
|
|
@@ -129,67 +92,60 @@ export function traverseFormState(recursive, formState, onFormVisit, onFieldVisi
|
|
|
129
92
|
if (onFormVisit) {
|
|
130
93
|
onFormVisit(key, child);
|
|
131
94
|
}
|
|
132
|
-
}
|
|
133
|
-
else if (onFieldVisit) {
|
|
95
|
+
} else if (onFieldVisit) {
|
|
134
96
|
onFieldVisit(key, child);
|
|
135
97
|
}
|
|
136
98
|
};
|
|
137
99
|
if (Array.isArray(formState.$)) {
|
|
138
|
-
formState.$.forEach((child, index)
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
(isObservableMap(formState.$)
|
|
142
|
-
? Array.from(formState.$)
|
|
143
|
-
: Object.entries(formState.$)).forEach(([key, child]) => visitChild(key, child));
|
|
100
|
+
formState.$.forEach((child, index)=>visitChild(index.toString(), child));
|
|
101
|
+
} else {
|
|
102
|
+
(isObservableMap(formState.$) ? Array.from(formState.$) : Object.entries(formState.$)).forEach(([key, child])=>visitChild(key, child));
|
|
144
103
|
}
|
|
145
104
|
}
|
|
146
105
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
147
106
|
export function BAD_formStateToJS(formState) {
|
|
148
107
|
const formValues = {};
|
|
149
|
-
traverseFormState(false, formState, (key, form)
|
|
108
|
+
traverseFormState(false, formState, (key, form)=>formValues[key] = BAD_formStateToJS(form), (key, field)=>formValues[key] = toJS(field.value));
|
|
150
109
|
return formValues;
|
|
151
110
|
}
|
|
152
111
|
export function formStateToJS(formState) {
|
|
153
112
|
const formValues = Array.isArray(formState.$) ? [] : {};
|
|
154
|
-
traverseFormState(false, formState, (key, form)
|
|
113
|
+
traverseFormState(false, formState, (key, form)=>formValues[key] = formStateToJS(form), (key, field)=>formValues[key] = toJS(field.$));
|
|
155
114
|
return formValues;
|
|
156
115
|
}
|
|
157
116
|
export function setFormStateValues(formState, data, triggerValidation = false) {
|
|
158
117
|
if (Array.isArray(formState.$) && data.length !== formState.$.length) {
|
|
159
|
-
throw new Error('Number of elements in data object node is different from number of element in form.' +
|
|
160
|
-
' All array nodes should match in size before values can be applied to form.');
|
|
118
|
+
throw new Error('Number of elements in data object node is different from number of element in form.' + ' All array nodes should match in size before values can be applied to form.');
|
|
161
119
|
}
|
|
162
|
-
transaction(()
|
|
163
|
-
traverseFormState(false, formState, (key, form)
|
|
120
|
+
transaction(()=>{
|
|
121
|
+
traverseFormState(false, formState, (key, form)=>{
|
|
164
122
|
if (data instanceof Map || isObservableMap(data)) {
|
|
165
123
|
if (data.has(key)) {
|
|
166
124
|
setFormStateValues(form, data.get(key));
|
|
167
125
|
}
|
|
168
|
-
}
|
|
169
|
-
else if (Object.hasOwn(data, key)) {
|
|
126
|
+
} else if (Object.hasOwn(data, key)) {
|
|
170
127
|
setFormStateValues(form, data[key]);
|
|
171
128
|
}
|
|
172
|
-
}, (key, field)
|
|
129
|
+
}, (key, field)=>{
|
|
173
130
|
if (data instanceof Map || isObservableMap(data)) {
|
|
174
131
|
if (data.has(key)) {
|
|
175
|
-
runInAction(()
|
|
132
|
+
runInAction(()=>{
|
|
176
133
|
field.value = data.get(key);
|
|
177
134
|
field.$ = data.get(key);
|
|
178
135
|
});
|
|
179
136
|
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
runInAction(() => {
|
|
137
|
+
} else if (Object.hasOwn(data, key)) {
|
|
138
|
+
runInAction(()=>{
|
|
183
139
|
field.value = data[key];
|
|
184
140
|
field.$ = data[key];
|
|
185
141
|
});
|
|
186
142
|
}
|
|
187
143
|
});
|
|
188
144
|
if (triggerValidation) {
|
|
189
|
-
const setValidatedSubFields = (form)
|
|
145
|
+
const setValidatedSubFields = (form)=>{
|
|
190
146
|
form.validatedSubFields = form.getValues();
|
|
191
147
|
};
|
|
192
|
-
traverseFormState(true, formState, (_0, form)
|
|
148
|
+
traverseFormState(true, formState, (_0, form)=>{
|
|
193
149
|
setValidatedSubFields(form);
|
|
194
150
|
});
|
|
195
151
|
setValidatedSubFields(formState);
|
|
@@ -199,7 +155,7 @@ export function setFormStateValues(formState, data, triggerValidation = false) {
|
|
|
199
155
|
return formState;
|
|
200
156
|
}
|
|
201
157
|
export function commitFormState(formState) {
|
|
202
|
-
traverseFormState(true, formState, undefined, (_0, field)
|
|
158
|
+
traverseFormState(true, formState, undefined, (_0, field)=>{
|
|
203
159
|
field.dirty = false;
|
|
204
160
|
field._initValue = field.value;
|
|
205
161
|
});
|
|
@@ -208,8 +164,8 @@ export function camelCaseToTitleCase(value) {
|
|
|
208
164
|
const regexp = /[A-Z](?=[A-Z][a-z])|[^A-Z](?=[A-Z])|[A-Za-z](?=[^A-Za-z])/g;
|
|
209
165
|
return value.replace(regexp, '$& ');
|
|
210
166
|
}
|
|
211
|
-
export const isFieldStateChanged = (fieldState)
|
|
212
|
-
const isValueChanged = ()
|
|
167
|
+
export const isFieldStateChanged = (fieldState)=>{
|
|
168
|
+
const isValueChanged = ()=>{
|
|
213
169
|
if (fieldState instanceof InputFieldState) {
|
|
214
170
|
if (fieldState._initValue === undefined && fieldState.value === '') {
|
|
215
171
|
return false;
|
|
@@ -220,12 +176,13 @@ export const isFieldStateChanged = (fieldState) => {
|
|
|
220
176
|
return !!fieldState.dirty && isValueChanged();
|
|
221
177
|
};
|
|
222
178
|
export function isFormStateChanged(formState) {
|
|
223
|
-
return computed(()
|
|
179
|
+
return computed(()=>{
|
|
224
180
|
let isChanged = false;
|
|
225
|
-
traverseFormState(true, formState, undefined, (_0, field)
|
|
181
|
+
traverseFormState(true, formState, undefined, (_0, field)=>{
|
|
226
182
|
isChanged = isChanged || isFieldStateChanged(field);
|
|
227
183
|
});
|
|
228
184
|
return isChanged;
|
|
229
185
|
});
|
|
230
186
|
}
|
|
187
|
+
|
|
231
188
|
//# sourceMappingURL=form-helpers.js.map
|
package/dist/form-helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-helpers.js","sourceRoot":"","sources":["../src/form-helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/form-helpers.ts"],"sourcesContent":["import { SyntheticEvent, ChangeEvent, Key, ReactNode } from 'react';\nimport { FieldState, FormState, ValidatableMapOrArray, ComposibleValidatable } from 'formstate';\nimport { toJS, isObservableMap, runInAction, transaction, computed, comparer } from 'mobx';\n\nexport class CheckboxFieldState extends FieldState<boolean> {\n onChangeHandler = (_0: any, checked: boolean) => {\n this.onChange(checked);\n };\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DEPRECATED_onChangeHandler = (\n _0: SyntheticEvent<HTMLInputElement>,\n data: { checked?: boolean }\n ) => {\n this.onChange(!!data.checked);\n };\n}\n\nexport class InputFieldState<T> extends FieldState<T> {\n onChangeHandler = (_0: SyntheticEvent<HTMLInputElement>, data: { value: T }) => {\n this.onChange(data.value);\n };\n onChangeNativeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n this.onChange(event.currentTarget.value as unknown as T);\n };\n}\n\nexport class TextAreaFieldState<T> extends FieldState<T> {\n /**\n * react-semantic type for onChange event of TextArea component seems to have a bug with data object type\n * so declaring data as any\n */\n onChangeHandler = (\n _0: SyntheticEvent<HTMLTextAreaElement> | ChangeEvent<HTMLTextAreaElement> | undefined,\n data: any\n ) => {\n this.onChange(data.value);\n };\n}\n\nexport class DropdownFieldState<T> extends FieldState<T> {\n /**\n * react-semantic type for onChange event of Dropdown component seems to have a bug with data object type\n * so declaring data as any\n */\n onChangeHandler = (_0: SyntheticEvent<HTMLElement>, data: any) => {\n this.onChange(data.value);\n };\n}\n\nexport class DropdownSearchFieldState<T> extends FieldState<T> {\n onChangeHandler = (_0: SyntheticEvent<HTMLElement>, data: { searchQuery: T }) => {\n this.onChange(data.searchQuery);\n };\n}\n\nexport class DatetimeFieldState extends FieldState<Date | null> {\n onChangeHandler = (event: { target: { value: Date | null } }) => {\n this.onChange(event.target.value);\n };\n}\n\nexport interface Option<T> {\n key: Key;\n text: ReactNode;\n value: T;\n}\n\nexport function enumToOptions<T extends Record<string, string | number>>(\n enumObject: T,\n nameProvider?: (value: T[keyof T]) => Option<T[keyof T]>['text']\n): Option<T[keyof T]>[] {\n return getEnumKeys(enumObject).map(k => ({\n key: k as string,\n text: nameProvider ? nameProvider(enumObject[k]) : (k as string),\n value: enumObject[k],\n }));\n}\n\nexport function getEnumKeys<T extends Record<string, string | number>>(enumObject: T) {\n let keys = Object.keys(enumObject) as (keyof T)[];\n\n if (keys.some(k => typeof enumObject[k] === 'number')) {\n keys = keys.filter(k => typeof enumObject[k] === 'number');\n }\n\n return keys;\n}\n\nexport function getEnumValues<T extends {}>(enumObject: T) {\n return getEnumKeys(enumObject).map(k => enumObject[k]);\n}\n\nexport type FormValues = string | number | boolean | (string | number | boolean)[];\nexport interface FormStateAsJS {\n [index: string]: FormValues | Map<any, any> | Set<any> | FormStateAsJS;\n}\n\nexport function traverseFormState<T extends ValidatableMapOrArray>(\n recursive: boolean,\n formState: FormState<T>,\n onFormVisit?: (key: string, form: FormState<any>) => void,\n onFieldVisit?: (key: string, field: FieldState<any>) => void\n) {\n const visitChild = (key: string, child: ComposibleValidatable<any>) => {\n if (child instanceof FormState) {\n if (recursive) {\n traverseFormState(recursive, child, onFormVisit, onFieldVisit);\n }\n if (onFormVisit) {\n onFormVisit(key, child);\n }\n } else if (onFieldVisit) {\n onFieldVisit(key, child as FieldState<any>);\n }\n };\n\n if (Array.isArray(formState.$)) {\n formState.$.forEach((child, index) => visitChild(index.toString(), child));\n } else {\n (isObservableMap(formState.$)\n ? Array.from(formState.$ as Map<any, ComposibleValidatable<any>>)\n : Object.entries(formState.$ as Record<string, ComposibleValidatable<any>>)\n ).forEach(([key, child]) => visitChild(key, child));\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function BAD_formStateToJS<T extends ValidatableMapOrArray>(formState: FormState<T>) {\n const formValues = {} as any;\n traverseFormState(\n false,\n formState,\n (key: any, form: FormState<any>) => (formValues[key] = BAD_formStateToJS(form)),\n (key: any, field: FieldState<any>) => (formValues[key] = toJS(field.value))\n );\n return formValues as unknown as FormStateAsJS;\n}\n\nexport type FormStateShape<T> = T extends FormState<infer U>[]\n ? FormStateMapOrObject<U>[]\n : FormStateMapOrObject<T>;\n\ntype FormStateMapOrObject<T> =\n T extends Map<infer K, infer V>\n ? FormStateObject<Record<K & (string | number | symbol), V>>\n : FormStateObject<T>;\n\ntype FormStateObject<T> = {\n [P in keyof T]: T[P] extends FieldState<infer U>\n ? U\n : T[P] extends FormState<infer U>\n ? FormStateShape<U>\n : never;\n};\n\nexport function formStateToJS<T extends ValidatableMapOrArray>(\n formState: FormState<T>\n): FormStateShape<T> {\n const formValues = Array.isArray(formState.$) ? [] : ({} as any);\n traverseFormState(\n false,\n formState,\n (key: any, form: FormState<any>) => (formValues[key] = formStateToJS(form)),\n (key: any, field: FieldState<any>) => (formValues[key] = toJS(field.$))\n );\n return formValues as unknown as FormStateShape<T>;\n}\n\nexport type RecursivePartial<T> = T extends (infer U)[]\n ? RecursivePartialObject<U>[]\n : RecursivePartialObject<T>;\n\ntype RecursivePartialObject<T> = {\n [P in keyof T]?: T[P] extends Record<any, any> ? RecursivePartial<T[P]> : T[P];\n};\n\nexport function setFormStateValues<T extends ValidatableMapOrArray>(\n formState: FormState<T>,\n data: RecursivePartial<FormStateShape<T>>,\n triggerValidation = false\n): FormState<T> {\n if (Array.isArray(formState.$) && (data as any[]).length !== formState.$.length) {\n throw new Error(\n 'Number of elements in data object node is different from number of element in form.' +\n ' All array nodes should match in size before values can be applied to form.'\n );\n }\n transaction(() => {\n traverseFormState(\n false,\n formState,\n (key: string, form: FormState<any>) => {\n if (data instanceof Map || isObservableMap(data)) {\n if (data.has(key)) {\n setFormStateValues(form, data.get(key));\n }\n } else if (Object.hasOwn(data, key)) {\n setFormStateValues(\n form,\n data[key as keyof typeof data] as RecursivePartial<FormStateShape<any>>\n );\n }\n },\n (key: string, field: FieldState<any>) => {\n if (data instanceof Map || isObservableMap(data)) {\n if (data.has(key)) {\n runInAction(() => {\n field.value = data.get(key);\n field.$ = data.get(key);\n });\n }\n } else if (Object.hasOwn(data, key)) {\n runInAction(() => {\n field.value = data[key as keyof typeof data];\n field.$ = data[key as keyof typeof data];\n });\n }\n }\n );\n if (triggerValidation) {\n const setValidatedSubFields = (form: FormState<any>) => {\n form.validatedSubFields = (form as any).getValues();\n };\n traverseFormState(true, formState, (_0: string, form: FormState<any>) => {\n setValidatedSubFields(form);\n });\n setValidatedSubFields(formState);\n formState.validate();\n }\n });\n return formState;\n}\n\nexport function commitFormState<T extends ValidatableMapOrArray>(formState: FormState<T>) {\n traverseFormState(true, formState, undefined, (_0: string, field: FieldState<any>) => {\n field.dirty = false;\n (field as any)._initValue = field.value;\n });\n}\n\nexport function camelCaseToTitleCase(value: string) {\n const regexp = /[A-Z](?=[A-Z][a-z])|[^A-Z](?=[A-Z])|[A-Za-z](?=[^A-Za-z])/g;\n return value.replace(regexp, '$& ');\n}\n\nexport const isFieldStateChanged = <T>(fieldState: FieldState<T>) => {\n const isValueChanged = () => {\n if (fieldState instanceof InputFieldState) {\n if ((fieldState as any)._initValue === undefined && fieldState.value === '') {\n return false;\n }\n }\n return !comparer.structural((fieldState as any)._initValue, fieldState.value);\n };\n return !!fieldState.dirty && isValueChanged();\n};\n\nexport function isFormStateChanged<T extends ValidatableMapOrArray>(formState: FormState<T>) {\n return computed(() => {\n let isChanged = false;\n traverseFormState(true, formState, undefined, (_0: string, field: FieldState<any>) => {\n isChanged = isChanged || isFieldStateChanged(field);\n });\n return isChanged;\n });\n}\n"],"names":["FieldState","FormState","toJS","isObservableMap","runInAction","transaction","computed","comparer","CheckboxFieldState","onChangeHandler","_0","checked","onChange","DEPRECATED_onChangeHandler","data","InputFieldState","value","onChangeNativeHandler","event","currentTarget","TextAreaFieldState","DropdownFieldState","DropdownSearchFieldState","searchQuery","DatetimeFieldState","target","enumToOptions","enumObject","nameProvider","getEnumKeys","map","k","key","text","keys","Object","some","filter","getEnumValues","traverseFormState","recursive","formState","onFormVisit","onFieldVisit","visitChild","child","Array","isArray","$","forEach","index","toString","from","entries","BAD_formStateToJS","formValues","form","field","formStateToJS","setFormStateValues","triggerValidation","length","Error","Map","has","get","hasOwn","setValidatedSubFields","validatedSubFields","getValues","validate","commitFormState","undefined","dirty","_initValue","camelCaseToTitleCase","regexp","replace","isFieldStateChanged","fieldState","isValueChanged","structural","isFormStateChanged","isChanged"],"mappings":"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"}
|
package/dist/form-validators.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isObservableArray } from 'mobx';
|
|
2
|
-
const isDefined = (value)
|
|
2
|
+
const isDefined = (value)=>{
|
|
3
3
|
if (value === undefined) {
|
|
4
4
|
return false;
|
|
5
5
|
}
|
|
@@ -12,48 +12,34 @@ const isDefined = (value) => {
|
|
|
12
12
|
return typeof value === 'string' ? !!value.trim() : !!value;
|
|
13
13
|
};
|
|
14
14
|
export const FormValidators = {
|
|
15
|
-
required: (value)
|
|
16
|
-
requiredWithCustomMessage: (errorMessage)
|
|
17
|
-
hasLowerCase: (str)
|
|
18
|
-
hasUpperCase: (str)
|
|
19
|
-
hasNumber: (str)
|
|
20
|
-
passwordIsValidFormat: (password)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
FormValidators.hasNumber(password),
|
|
24
|
-
emailFormatIsValid: (email) => {
|
|
25
|
-
/* tslint:disable: ter-max-len */
|
|
26
|
-
const regex = /^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
|
|
15
|
+
required: (value)=>FormValidators.requiredWithCustomMessage('Value is required')(value),
|
|
16
|
+
requiredWithCustomMessage: (errorMessage)=>(value)=>!isDefined(value) && errorMessage,
|
|
17
|
+
hasLowerCase: (str)=>/[a-z]/.test(str),
|
|
18
|
+
hasUpperCase: (str)=>/[A-Z]/.test(str),
|
|
19
|
+
hasNumber: (str)=>/\d/.test(str),
|
|
20
|
+
passwordIsValidFormat: (password)=>password.length > 7 && FormValidators.hasLowerCase(password) && FormValidators.hasUpperCase(password) && FormValidators.hasNumber(password),
|
|
21
|
+
emailFormatIsValid: (email)=>{
|
|
22
|
+
/* tslint:disable: ter-max-len */ const regex = /^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
|
|
27
23
|
return email.length !== 0 && regex.test(email);
|
|
28
24
|
},
|
|
29
|
-
website: (errorMessage = 'Enter valid website')
|
|
30
|
-
return (value)
|
|
25
|
+
website: (errorMessage = 'Enter valid website')=>{
|
|
26
|
+
return (value)=>!/^(https?:\/\/)?(www\.)?([a-zA-Z0-9]+(-?[a-zA-Z0-9])*\.)+[\w]{2,}(\/\S*)?$/i.test(value) && errorMessage;
|
|
31
27
|
},
|
|
32
28
|
minDate: new Date(1900, 0, 1),
|
|
33
29
|
maxDate: new Date(2099, 11, 31),
|
|
34
|
-
isDateValid: (date)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const dayInMillseconds = 1000 * 60 * 60 * 24;
|
|
48
|
-
return ((val === null || val === void 0 ? void 0 : val.from) &&
|
|
49
|
-
val.to &&
|
|
50
|
-
(val.to.getTime() - val.from.getTime()) / dayInMillseconds >= maxDays &&
|
|
51
|
-
`Only ${maxDays} days can be displayed at time`);
|
|
52
|
-
},
|
|
53
|
-
isAlphaNumeric: (str) => /^(\w+,?)*$/.test(str),
|
|
54
|
-
isMatchingRegex: (regexp, entity) => (str) => !regexp.test(str) && `Invalid format for ${entity}`,
|
|
55
|
-
minLength: (minLength) => (value) => value && value.length < minLength ? `Value's min length is ${minLength}` : false,
|
|
56
|
-
maxLength: (maxLength) => (value) => value && value.length > maxLength ? `Value's max length is ${maxLength}` : false,
|
|
57
|
-
exactLength: (exactLength) => (value) => value && value.length !== exactLength ? `Value's length must be ${exactLength}` : false,
|
|
30
|
+
isDateValid: (date)=>(!date || date > FormValidators.maxDate || date < FormValidators.minDate) && 'Please provide a valid date',
|
|
31
|
+
isDateRangeValid: (dateRange)=>dateRange.startDate.$ && dateRange.endDate.$ && dateRange.startDate.$ > dateRange.endDate.$ && 'Start Date should not be after End Date',
|
|
32
|
+
dateRangeRequired: (errorMessage = 'Date Range is required')=>(dateRange)=>(!(dateRange === null || dateRange === void 0 ? void 0 : dateRange.from) || !dateRange.to) && errorMessage,
|
|
33
|
+
dateRangeValid: (errorMessage = 'Start cannot be after End')=>(dateRange)=>!!dateRange && !!dateRange.from && !!dateRange.to && dateRange.from > dateRange.to && errorMessage,
|
|
34
|
+
isDateRangeLessThanMaxLength: (maxDays)=>(val)=>{
|
|
35
|
+
const dayInMillseconds = 1000 * 60 * 60 * 24;
|
|
36
|
+
return (val === null || val === void 0 ? void 0 : val.from) && val.to && (val.to.getTime() - val.from.getTime()) / dayInMillseconds >= maxDays && `Only ${maxDays} days can be displayed at time`;
|
|
37
|
+
},
|
|
38
|
+
isAlphaNumeric: (str)=>/^(\w+,?)*$/.test(str),
|
|
39
|
+
isMatchingRegex: (regexp, entity)=>(str)=>!regexp.test(str) && `Invalid format for ${entity}`,
|
|
40
|
+
minLength: (minLength)=>(value)=>value && value.length < minLength ? `Value's min length is ${minLength}` : false,
|
|
41
|
+
maxLength: (maxLength)=>(value)=>value && value.length > maxLength ? `Value's max length is ${maxLength}` : false,
|
|
42
|
+
exactLength: (exactLength)=>(value)=>value && value.length !== exactLength ? `Value's length must be ${exactLength}` : false
|
|
58
43
|
};
|
|
44
|
+
|
|
59
45
|
//# sourceMappingURL=form-validators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/form-validators.ts"],"sourcesContent":["import { DatetimeFieldState, FormValues } from './form-helpers';\nimport { isObservableArray } from 'mobx';\nimport { DateRange } from './date-range';\n\ninterface DateRangeFieldStates {\n startDate: DatetimeFieldState;\n endDate: DatetimeFieldState;\n}\n\nconst isDefined = (value: FormValues | undefined) => {\n if (value === undefined) {\n return false;\n }\n\n if (Array.isArray(value) || isObservableArray(value)) {\n return !!value.length;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return true;\n }\n\n return typeof value === 'string' ? !!value.trim() : !!value;\n};\n\nexport const FormValidators = {\n required: (value?: FormValues) =>\n FormValidators.requiredWithCustomMessage('Value is required')(value),\n\n requiredWithCustomMessage: (errorMessage: string) => (value?: FormValues) =>\n !isDefined(value) && errorMessage,\n\n hasLowerCase: (str: string) => /[a-z]/.test(str),\n\n hasUpperCase: (str: string) => /[A-Z]/.test(str),\n\n hasNumber: (str: string) => /\\d/.test(str),\n\n passwordIsValidFormat: (password: string) =>\n password.length > 7 &&\n FormValidators.hasLowerCase(password) &&\n FormValidators.hasUpperCase(password) &&\n FormValidators.hasNumber(password),\n\n emailFormatIsValid: (email: string) => {\n /* tslint:disable: ter-max-len */\n const regex =\n /^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;\n return email.length !== 0 && regex.test(email);\n },\n\n website: (errorMessage = 'Enter valid website') => {\n return (value: string) =>\n !/^(https?:\\/\\/)?(www\\.)?([a-zA-Z0-9]+(-?[a-zA-Z0-9])*\\.)+[\\w]{2,}(\\/\\S*)?$/i.test(\n value\n ) && errorMessage;\n },\n\n minDate: new Date(1900, 0, 1),\n\n maxDate: new Date(2099, 11, 31),\n\n isDateValid: (date: Date | null) =>\n (!date || date > FormValidators.maxDate || date < FormValidators.minDate) &&\n 'Please provide a valid date',\n\n isDateRangeValid: (dateRange: DateRangeFieldStates) =>\n dateRange.startDate.$ &&\n dateRange.endDate.$ &&\n dateRange.startDate.$ > dateRange.endDate.$ &&\n 'Start Date should not be after End Date',\n\n dateRangeRequired:\n (errorMessage = 'Date Range is required') =>\n (dateRange: DateRange | undefined) =>\n (!dateRange?.from || !dateRange.to) && errorMessage,\n\n dateRangeValid:\n (errorMessage = 'Start cannot be after End') =>\n (dateRange: DateRange | undefined) =>\n !!dateRange &&\n !!dateRange.from &&\n !!dateRange.to &&\n dateRange.from > dateRange.to &&\n errorMessage,\n\n isDateRangeLessThanMaxLength: (maxDays: number) => (val: DateRange | undefined) => {\n const dayInMillseconds = 1000 * 60 * 60 * 24;\n return (\n val?.from &&\n val.to &&\n (val.to.getTime() - val.from.getTime()) / dayInMillseconds >= maxDays &&\n `Only ${maxDays} days can be displayed at time`\n );\n },\n\n isAlphaNumeric: (str: string) => /^(\\w+,?)*$/.test(str),\n\n isMatchingRegex: (regexp: RegExp, entity: string) => (str: string) =>\n !regexp.test(str) && `Invalid format for ${entity}`,\n\n minLength: (minLength: number) => (value: string | any[] | undefined) =>\n value && value.length < minLength ? `Value's min length is ${minLength}` : false,\n\n maxLength: (maxLength: number) => (value: string | any[] | undefined) =>\n value && value.length > maxLength ? `Value's max length is ${maxLength}` : false,\n\n exactLength: (exactLength: number) => (value: string | any[] | undefined) =>\n value && value.length !== exactLength ? `Value's length must be ${exactLength}` : false,\n};\n"],"names":["isObservableArray","isDefined","value","undefined","Array","isArray","length","trim","FormValidators","required","requiredWithCustomMessage","errorMessage","hasLowerCase","str","test","hasUpperCase","hasNumber","passwordIsValidFormat","password","emailFormatIsValid","email","regex","website","minDate","Date","maxDate","isDateValid","date","isDateRangeValid","dateRange","startDate","$","endDate","dateRangeRequired","from","to","dateRangeValid","isDateRangeLessThanMaxLength","maxDays","val","dayInMillseconds","getTime","isAlphaNumeric","isMatchingRegex","regexp","entity","minLength","maxLength","exactLength"],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './date-range';\nexport * from './persistent-form-state';\nexport * from './dropdown-state';\nexport * from './form-helpers';\nexport * from './form-validators';\n"],"names":[],"mappings":"AAAA,cAAc,eAAe;AAC7B,cAAc,0BAA0B;AACxC,cAAc,mBAAmB;AACjC,cAAc,iBAAiB;AAC/B,cAAc,oBAAoB"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(
|
|
4
|
-
|
|
5
|
-
configurable: true,
|
|
6
|
-
writable: true,
|
|
7
|
-
value: void 0
|
|
8
|
-
});
|
|
9
|
-
Object.defineProperty(this, "cacheKey", {
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
10
5
|
enumerable: true,
|
|
11
6
|
configurable: true,
|
|
12
|
-
writable: true
|
|
13
|
-
value: void 0
|
|
7
|
+
writable: true
|
|
14
8
|
});
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
17
11
|
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
export class DomainStorage {
|
|
18
15
|
getItem() {
|
|
19
16
|
try {
|
|
20
17
|
const cachedData = localStorage.getItem(this.cacheKey);
|
|
@@ -25,8 +22,7 @@ export class DomainStorage {
|
|
|
25
22
|
}
|
|
26
23
|
this.removeItem();
|
|
27
24
|
}
|
|
28
|
-
}
|
|
29
|
-
catch (_a) {
|
|
25
|
+
} catch (e) {
|
|
30
26
|
this.removeItem();
|
|
31
27
|
}
|
|
32
28
|
return null;
|
|
@@ -35,8 +31,18 @@ export class DomainStorage {
|
|
|
35
31
|
localStorage.removeItem(this.cacheKey);
|
|
36
32
|
}
|
|
37
33
|
setItem(_, value) {
|
|
38
|
-
const formData = {
|
|
34
|
+
const formData = {
|
|
35
|
+
value,
|
|
36
|
+
version: this.version
|
|
37
|
+
};
|
|
39
38
|
localStorage.setItem(this.cacheKey, JSON.stringify(formData));
|
|
40
39
|
}
|
|
40
|
+
constructor({ cacheKey, version }){
|
|
41
|
+
_define_property(this, "version", void 0);
|
|
42
|
+
_define_property(this, "cacheKey", void 0);
|
|
43
|
+
this.version = version;
|
|
44
|
+
this.cacheKey = cacheKey;
|
|
45
|
+
}
|
|
41
46
|
}
|
|
47
|
+
|
|
42
48
|
//# sourceMappingURL=domain-storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/persistent-form-state/domain-storage.ts"],"sourcesContent":["import { FormStateShape } from '../form-helpers';\nimport { ValidatableMapOrArray } from 'formstate';\n\ninterface FormStateCache<T> {\n version: number;\n value: FormStateShape<T>;\n}\n\nexport class DomainStorage<T extends ValidatableMapOrArray> {\n private readonly version: number;\n private readonly cacheKey: string;\n\n constructor({ cacheKey, version }: { cacheKey: string; version: number }) {\n this.version = version;\n this.cacheKey = cacheKey;\n }\n\n getItem(): FormStateShape<T> | null {\n try {\n const cachedData = localStorage.getItem(this.cacheKey);\n if (cachedData) {\n const formData: FormStateCache<T> = JSON.parse(cachedData);\n if (formData.version === this.version) {\n return formData.value;\n }\n this.removeItem();\n }\n } catch {\n this.removeItem();\n }\n\n return null;\n }\n\n removeItem(): void {\n localStorage.removeItem(this.cacheKey);\n }\n\n setItem(_: string, value: FormStateShape<T>): void {\n const formData = { value, version: this.version };\n localStorage.setItem(this.cacheKey, JSON.stringify(formData));\n }\n}\n"],"names":["DomainStorage","getItem","cachedData","localStorage","cacheKey","formData","JSON","parse","version","value","removeItem","setItem","_","stringify","constructor"],"mappings":";;;;;;;;;;;;;AAQA,OAAO,MAAMA;IASTC,UAAoC;QAChC,IAAI;YACA,MAAMC,aAAaC,aAAaF,OAAO,CAAC,IAAI,CAACG,QAAQ;YACrD,IAAIF,YAAY;gBACZ,MAAMG,WAA8BC,KAAKC,KAAK,CAACL;gBAC/C,IAAIG,SAASG,OAAO,KAAK,IAAI,CAACA,OAAO,EAAE;oBACnC,OAAOH,SAASI,KAAK;gBACzB;gBACA,IAAI,CAACC,UAAU;YACnB;QACJ,EAAE,UAAM;YACJ,IAAI,CAACA,UAAU;QACnB;QAEA,OAAO;IACX;IAEAA,aAAmB;QACfP,aAAaO,UAAU,CAAC,IAAI,CAACN,QAAQ;IACzC;IAEAO,QAAQC,CAAS,EAAEH,KAAwB,EAAQ;QAC/C,MAAMJ,WAAW;YAAEI;YAAOD,SAAS,IAAI,CAACA,OAAO;QAAC;QAChDL,aAAaQ,OAAO,CAAC,IAAI,CAACP,QAAQ,EAAEE,KAAKO,SAAS,CAACR;IACvD;IA7BAS,YAAY,EAAEV,QAAQ,EAAEI,OAAO,EAAyC,CAAE;QAH1E,uBAAiBA,WAAjB,KAAA;QACA,uBAAiBJ,YAAjB,KAAA;QAGI,IAAI,CAACI,OAAO,GAAGA;QACf,IAAI,CAACJ,QAAQ,GAAGA;IACpB;AA2BJ"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
4
5
|
enumerable: true,
|
|
5
6
|
configurable: true,
|
|
6
|
-
writable: true
|
|
7
|
-
value: new Map()
|
|
7
|
+
writable: true
|
|
8
8
|
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
9
11
|
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
export class InMemoryStorage {
|
|
10
15
|
get length() {
|
|
11
16
|
return this.storage.size;
|
|
12
17
|
}
|
|
@@ -25,6 +30,10 @@ export class InMemoryStorage {
|
|
|
25
30
|
setItem(key, value) {
|
|
26
31
|
this.storage.set(key, value);
|
|
27
32
|
}
|
|
33
|
+
constructor(){
|
|
34
|
+
_define_property(this, "storage", new Map());
|
|
35
|
+
}
|
|
28
36
|
}
|
|
29
37
|
export const MemoryStorage = new InMemoryStorage();
|
|
38
|
+
|
|
30
39
|
//# sourceMappingURL=in-memory-storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/persistent-form-state/in-memory-storage.ts"],"sourcesContent":["import { FormStateShape } from '../form-helpers';\nimport { ValidatableMapOrArray } from 'formstate';\n\nexport class InMemoryStorage<T extends ValidatableMapOrArray> {\n private storage = new Map<string, FormStateShape<T>>();\n\n get length() {\n return this.storage.size;\n }\n\n clear(): void {\n this.storage.clear();\n }\n\n getItem(key: string): FormStateShape<T> | null {\n return this.storage.get(key) !== undefined ? this.storage.get(key)! : null;\n }\n\n key(index: number): string | null {\n return this.length < index ? null : Array.from(this.storage.keys())[index];\n }\n\n removeItem(key: string): void {\n this.storage.delete(key);\n }\n\n setItem(key: string, value: FormStateShape<T>): void {\n this.storage.set(key, value);\n }\n}\n\nexport const MemoryStorage = new InMemoryStorage<any>();\n"],"names":["InMemoryStorage","length","storage","size","clear","getItem","key","get","undefined","index","Array","from","keys","removeItem","delete","setItem","value","set","Map","MemoryStorage"],"mappings":";;;;;;;;;;;;;AAGA,OAAO,MAAMA;IAGT,IAAIC,SAAS;QACT,OAAO,IAAI,CAACC,OAAO,CAACC,IAAI;IAC5B;IAEAC,QAAc;QACV,IAAI,CAACF,OAAO,CAACE,KAAK;IACtB;IAEAC,QAAQC,GAAW,EAA4B;QAC3C,OAAO,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACD,SAASE,YAAY,IAAI,CAACN,OAAO,CAACK,GAAG,CAACD,OAAQ;IAC1E;IAEAA,IAAIG,KAAa,EAAiB;QAC9B,OAAO,IAAI,CAACR,MAAM,GAAGQ,QAAQ,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACT,OAAO,CAACU,IAAI,GAAG,CAACH,MAAM;IAC9E;IAEAI,WAAWP,GAAW,EAAQ;QAC1B,IAAI,CAACJ,OAAO,CAACY,MAAM,CAACR;IACxB;IAEAS,QAAQT,GAAW,EAAEU,KAAwB,EAAQ;QACjD,IAAI,CAACd,OAAO,CAACe,GAAG,CAACX,KAAKU;IAC1B;;QAxBA,uBAAQd,WAAU,IAAIgB;;AAyB1B;AAEA,OAAO,MAAMC,gBAAgB,IAAInB,kBAAuB"}
|