@servicetitan/form-state 31.1.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.
Files changed (37) hide show
  1. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js +61 -57
  2. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js.map +1 -1
  3. package/dist/async-lazy-dropdown-state/index.js +1 -0
  4. package/dist/async-lazy-dropdown-state/index.js.map +1 -1
  5. package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js +23 -13
  6. package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js.map +1 -1
  7. package/dist/date-range.js +2 -1
  8. package/dist/date-range.js.map +1 -1
  9. package/dist/demo/dropdown-state.js +284 -60
  10. package/dist/demo/dropdown-state.js.map +1 -1
  11. package/dist/demo/index.js +1 -0
  12. package/dist/demo/index.js.map +1 -1
  13. package/dist/dropdown-state.js +168 -222
  14. package/dist/dropdown-state.js.map +1 -1
  15. package/dist/form-helpers.js +73 -116
  16. package/dist/form-helpers.js.map +1 -1
  17. package/dist/form-validators.js +25 -39
  18. package/dist/form-validators.js.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/persistent-form-state/domain-storage.js +22 -16
  22. package/dist/persistent-form-state/domain-storage.js.map +1 -1
  23. package/dist/persistent-form-state/in-memory-storage.js +14 -5
  24. package/dist/persistent-form-state/in-memory-storage.js.map +1 -1
  25. package/dist/persistent-form-state/index.js +1 -0
  26. package/dist/persistent-form-state/index.js.map +1 -1
  27. package/dist/persistent-form-state/persistent-form-state.js +40 -71
  28. package/dist/persistent-form-state/persistent-form-state.js.map +1 -1
  29. package/package.json +5 -5
  30. package/dist/__tests__/form-helpers.test.js +0 -263
  31. package/dist/__tests__/form-helpers.test.js.map +0 -1
  32. package/dist/__tests__/form-validators.test.js +0 -48
  33. package/dist/__tests__/form-validators.test.js.map +0 -1
  34. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js +0 -46
  35. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js.map +0 -1
  36. package/dist/persistent-form-state/__tests__/domain-storage.test.js +0 -60
  37. package/dist/persistent-form-state/__tests__/domain-storage.test.js.map +0 -1
@@ -1,127 +1,90 @@
1
- import { FieldState, FormState } from 'formstate';
2
- import { toJS, isObservableMap, runInAction, transaction, computed, comparer } from 'mobx';
3
- export class CheckboxFieldState extends FieldState {
4
- constructor() {
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
- // eslint-disable-next-line @typescript-eslint/naming-convention
15
- Object.defineProperty(this, "DEPRECATED_onChangeHandler", {
16
- enumerable: true,
17
- configurable: true,
18
- writable: true,
19
- value: (_0, data) => {
20
- this.onChange(!!data.checked);
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(...arguments);
28
- Object.defineProperty(this, "onChangeHandler", {
29
- enumerable: true,
30
- configurable: true,
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(...arguments);
49
- /**
50
- * react-semantic type for onChange event of TextArea component seems to have a bug with data object type
51
- * so declaring data as any
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(...arguments);
66
- /**
67
- * react-semantic type for onChange event of Dropdown component seems to have a bug with data object type
68
- * so declaring data as any
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(...arguments);
83
- Object.defineProperty(this, "onChangeHandler", {
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(...arguments);
96
- Object.defineProperty(this, "onChangeHandler", {
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
- key: k,
109
- text: nameProvider ? nameProvider(enumObject[k]) : k,
110
- value: enumObject[k],
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 => typeof enumObject[k] === 'number')) {
116
- keys = keys.filter(k => typeof enumObject[k] === 'number');
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 => enumObject[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) => visitChild(index.toString(), child));
139
- }
140
- else {
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) => (formValues[key] = BAD_formStateToJS(form)), (key, field) => (formValues[key] = toJS(field.value)));
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) => (formValues[key] = formStateToJS(form)), (key, field) => (formValues[key] = toJS(field.$)));
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
- else if (Object.hasOwn(data, key)) {
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
@@ -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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"}
@@ -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) => 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 &&
21
- FormValidators.hasLowerCase(password) &&
22
- FormValidators.hasUpperCase(password) &&
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) => !/^(https?:\/\/)?(www\.)?([a-zA-Z0-9]+(-?[a-zA-Z0-9])*\.)+[\w]{2,}(\/\S*)?$/i.test(value) && errorMessage;
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) => (!date || date > FormValidators.maxDate || date < FormValidators.minDate) &&
35
- 'Please provide a valid date',
36
- isDateRangeValid: (dateRange) => dateRange.startDate.$ &&
37
- dateRange.endDate.$ &&
38
- dateRange.startDate.$ > dateRange.endDate.$ &&
39
- 'Start Date should not be after End Date',
40
- dateRangeRequired: (errorMessage = 'Date Range is required') => (dateRange) => (!(dateRange === null || dateRange === void 0 ? void 0 : dateRange.from) || !dateRange.to) && errorMessage,
41
- dateRangeValid: (errorMessage = 'Start cannot be after End') => (dateRange) => !!dateRange &&
42
- !!dateRange.from &&
43
- !!dateRange.to &&
44
- dateRange.from > dateRange.to &&
45
- errorMessage,
46
- isDateRangeLessThanMaxLength: (maxDays) => (val) => {
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,"file":"form-validators.js","sourceRoot":"","sources":["../src/form-validators.ts"],"names":[],"mappings":"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"}
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
@@ -3,4 +3,5 @@ export * from './persistent-form-state';
3
3
  export * from './dropdown-state';
4
4
  export * from './form-helpers';
5
5
  export * from './form-validators';
6
+
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
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
- export class DomainStorage {
2
- constructor({ cacheKey, version }) {
3
- Object.defineProperty(this, "version", {
4
- enumerable: true,
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
- this.version = version;
16
- this.cacheKey = cacheKey;
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 = { value, version: this.version };
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,"file":"domain-storage.js","sourceRoot":"","sources":["../../src/persistent-form-state/domain-storage.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,aAAa;IAItB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAyC;QAHvD;;;;;WAAgB;QAChB;;;;;WAAiB;QAG9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,OAAO;QACH,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAsB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC3D,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;oBACpC,OAAO,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC;gBACD,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC;QACL,CAAC;QAAC,WAAM,CAAC;YACL,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,UAAU;QACN,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,CAAS,EAAE,KAAwB;QACvC,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAClD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;CACJ"}
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
- export class InMemoryStorage {
2
- constructor() {
3
- Object.defineProperty(this, "storage", {
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,"file":"in-memory-storage.js","sourceRoot":"","sources":["../../src/persistent-form-state/in-memory-storage.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,eAAe;IAA5B;QACY;;;;mBAAU,IAAI,GAAG,EAA6B;WAAC;IAyB3D,CAAC;IAvBG,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAW;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC;IAED,GAAG,CAAC,KAAa;QACb,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC;IAED,UAAU,CAAC,GAAW;QAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAwB;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,eAAe,EAAO,CAAC"}
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"}
@@ -1,4 +1,5 @@
1
1
  export * from './persistent-form-state';
2
2
  export * from './domain-storage';
3
3
  export * from './in-memory-storage';
4
+
4
5
  //# sourceMappingURL=index.js.map