@cyclone-ui/state 0.0.31 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/base/atoms/atom-with-broadcast.cjs +1 -44
- package/dist/base/atoms/atom-with-broadcast.mjs +1 -44
- package/dist/base/atoms/atom-with-broadcast.mjs.map +1 -1
- package/dist/base/atoms/atom-with-compare.cjs +1 -11
- package/dist/base/atoms/atom-with-compare.mjs +1 -11
- package/dist/base/atoms/atom-with-compare.mjs.map +1 -1
- package/dist/base/atoms/atom-with-debounce.cjs +1 -51
- package/dist/base/atoms/atom-with-debounce.mjs +1 -51
- package/dist/base/atoms/atom-with-debounce.mjs.map +1 -1
- package/dist/base/atoms/atom-with-effect.cjs +1 -122
- package/dist/base/atoms/atom-with-effect.mjs +1 -119
- package/dist/base/atoms/atom-with-effect.mjs.map +1 -1
- package/dist/base/atoms/atom-with-listeners.cjs +1 -35
- package/dist/base/atoms/atom-with-listeners.mjs +1 -35
- package/dist/base/atoms/atom-with-listeners.mjs.map +1 -1
- package/dist/base/atoms/atom-with-pending.cjs +1 -13
- package/dist/base/atoms/atom-with-pending.mjs +1 -13
- package/dist/base/atoms/atom-with-pending.mjs.map +1 -1
- package/dist/base/atoms/atom-with-refresh-and-default.cjs +1 -18
- package/dist/base/atoms/atom-with-refresh-and-default.mjs +1 -18
- package/dist/base/atoms/atom-with-refresh-and-default.mjs.map +1 -1
- package/dist/base/atoms/atom-with-refresh.cjs +1 -12
- package/dist/base/atoms/atom-with-refresh.mjs +1 -12
- package/dist/base/atoms/atom-with-refresh.mjs.map +1 -1
- package/dist/base/atoms/atom-with-toggle.cjs +1 -12
- package/dist/base/atoms/atom-with-toggle.mjs +1 -12
- package/dist/base/atoms/atom-with-toggle.mjs.map +1 -1
- package/dist/base/atoms/atom-with-web-storage.cjs +1 -47
- package/dist/base/atoms/atom-with-web-storage.mjs +1 -46
- package/dist/base/atoms/atom-with-web-storage.mjs.map +1 -1
- package/dist/base/atoms/atom-with-wrapper.cjs +1 -24
- package/dist/base/atoms/atom-with-wrapper.mjs +1 -24
- package/dist/base/atoms/atom-with-wrapper.mjs.map +1 -1
- package/dist/base/atoms/base-atom.cjs +1 -24
- package/dist/base/atoms/base-atom.mjs +1 -24
- package/dist/base/atoms/base-atom.mjs.map +1 -1
- package/dist/base/atoms/index.cjs +1 -24
- package/dist/base/atoms/index.mjs +1 -13
- package/dist/base/hooks/index.cjs +1 -9
- package/dist/base/hooks/index.mjs +1 -6
- package/dist/base/hooks/use-atom-effect.cjs +1 -16
- package/dist/base/hooks/use-atom-effect.mjs +1 -16
- package/dist/base/hooks/use-atom-effect.mjs.map +1 -1
- package/dist/base/hooks/use-hydrate-molecule.cjs +1 -16
- package/dist/base/hooks/use-hydrate-molecule.mjs +1 -16
- package/dist/base/hooks/use-hydrate-molecule.mjs.map +1 -1
- package/dist/base/hooks/use-prepare-atoms.cjs +1 -19
- package/dist/base/hooks/use-prepare-atoms.mjs +1 -19
- package/dist/base/hooks/use-prepare-atoms.mjs.map +1 -1
- package/dist/base/hooks/use-sync-molecule.cjs +1 -36
- package/dist/base/hooks/use-sync-molecule.mjs +1 -36
- package/dist/base/hooks/use-sync-molecule.mjs.map +1 -1
- package/dist/base/index.cjs +1 -47
- package/dist/base/index.mjs +1 -24
- package/dist/base/utilities/create-molecule.cjs +1 -104
- package/dist/base/utilities/create-molecule.mjs +1 -101
- package/dist/base/utilities/create-molecule.mjs.map +1 -1
- package/dist/base/utilities/create-web-storage.cjs +1 -54
- package/dist/base/utilities/create-web-storage.mjs +1 -54
- package/dist/base/utilities/create-web-storage.mjs.map +1 -1
- package/dist/base/utilities/debounce.cjs +1 -51
- package/dist/base/utilities/debounce.mjs +1 -51
- package/dist/base/utilities/debounce.mjs.map +1 -1
- package/dist/base/utilities/index.cjs +1 -13
- package/dist/base/utilities/index.mjs +1 -6
- package/dist/base/utilities/is-atom.cjs +1 -47
- package/dist/base/utilities/is-atom.mjs +1 -45
- package/dist/base/utilities/is-atom.mjs.map +1 -1
- package/dist/base/utilities/set-atom-debug.cjs +1 -23
- package/dist/base/utilities/set-atom-debug.mjs +1 -22
- package/dist/base/utilities/set-atom-debug.mjs.map +1 -1
- package/dist/form/atoms/atom-with-field.cjs +1 -22
- package/dist/form/atoms/atom-with-field.mjs +1 -22
- package/dist/form/atoms/atom-with-field.mjs.map +1 -1
- package/dist/form/atoms/atom-with-messages.cjs +1 -84
- package/dist/form/atoms/atom-with-messages.mjs +1 -77
- package/dist/form/atoms/atom-with-messages.mjs.map +1 -1
- package/dist/form/hooks/index.cjs +1 -7
- package/dist/form/hooks/index.mjs +1 -5
- package/dist/form/hooks/use-field-actions.cjs +1 -91
- package/dist/form/hooks/use-field-actions.mjs +1 -91
- package/dist/form/hooks/use-field-actions.mjs.map +1 -1
- package/dist/form/hooks/use-field-ref.cjs +1 -15
- package/dist/form/hooks/use-field-ref.mjs +1 -15
- package/dist/form/hooks/use-field-ref.mjs.map +1 -1
- package/dist/form/hooks/use-form-actions.cjs +1 -68
- package/dist/form/hooks/use-form-actions.mjs +1 -68
- package/dist/form/hooks/use-form-actions.mjs.map +1 -1
- package/dist/form/index.cjs +1 -30
- package/dist/form/index.mjs +1 -17
- package/dist/form/molecules/field-molecule.cjs +1 -156
- package/dist/form/molecules/field-molecule.mjs +1 -155
- package/dist/form/molecules/field-molecule.mjs.map +1 -1
- package/dist/form/molecules/form-molecule.cjs +1 -179
- package/dist/form/molecules/form-molecule.mjs +1 -178
- package/dist/form/molecules/form-molecule.mjs.map +1 -1
- package/dist/form/molecules/index.cjs +1 -7
- package/dist/form/molecules/index.mjs +1 -4
- package/dist/form/providers/FieldProvider.cjs +1 -102
- package/dist/form/providers/FieldProvider.mjs +1 -102
- package/dist/form/providers/FieldProvider.mjs.map +1 -1
- package/dist/form/providers/FormProvider.cjs +1 -65
- package/dist/form/providers/FormProvider.mjs +1 -65
- package/dist/form/providers/FormProvider.mjs.map +1 -1
- package/dist/form/providers/index.cjs +1 -5
- package/dist/form/providers/index.mjs +1 -4
- package/dist/form/types.cjs +1 -12
- package/dist/form/types.mjs +1 -12
- package/dist/form/types.mjs.map +1 -1
- package/dist/form/utilities/abort-error.cjs +1 -14
- package/dist/form/utilities/abort-error.mjs +1 -14
- package/dist/form/utilities/abort-error.mjs.map +1 -1
- package/dist/form/utilities/index.cjs +1 -7
- package/dist/form/utilities/index.mjs +1 -5
- package/dist/form/utilities/is-validation-results.cjs +1 -8
- package/dist/form/utilities/is-validation-results.mjs +1 -8
- package/dist/form/utilities/is-validation-results.mjs.map +1 -1
- package/dist/form/utilities/validators.cjs +1 -7
- package/dist/form/utilities/validators.mjs +1 -7
- package/dist/form/utilities/validators.mjs.map +1 -1
- package/dist/index.cjs +1 -46
- package/dist/index.mjs +1 -22
- package/dist/message/components/MessageViewport.cjs +1 -20
- package/dist/message/components/MessageViewport.mjs +1 -20
- package/dist/message/components/MessageViewport.mjs.map +1 -1
- package/dist/message/components/index.cjs +1 -3
- package/dist/message/components/index.mjs +1 -3
- package/dist/message/hooks/index.cjs +1 -3
- package/dist/message/hooks/index.mjs +1 -3
- package/dist/message/hooks/use-message-actions.cjs +1 -63
- package/dist/message/hooks/use-message-actions.mjs +1 -63
- package/dist/message/hooks/use-message-actions.mjs.map +1 -1
- package/dist/message/index.cjs +1 -23
- package/dist/message/index.mjs +1 -8
- package/dist/message/providers/MessageProvider.cjs +1 -15
- package/dist/message/providers/MessageProvider.mjs +1 -15
- package/dist/message/providers/MessageProvider.mjs.map +1 -1
- package/dist/theme/hooks/index.cjs +1 -7
- package/dist/theme/hooks/index.mjs +1 -4
- package/dist/theme/hooks/use-theme-actions.cjs +1 -20
- package/dist/theme/hooks/use-theme-actions.mjs +1 -20
- package/dist/theme/hooks/use-theme-actions.mjs.map +1 -1
- package/dist/theme/hooks/use-theme-store.cjs +1 -60
- package/dist/theme/hooks/use-theme-store.mjs +1 -58
- package/dist/theme/hooks/use-theme-store.mjs.map +1 -1
- package/dist/theme/index.cjs +1 -17
- package/dist/theme/index.mjs +1 -9
- package/dist/theme/molecules/index.cjs +1 -3
- package/dist/theme/molecules/index.mjs +1 -3
- package/dist/theme/molecules/theme-molecule.cjs +1 -13
- package/dist/theme/molecules/theme-molecule.mjs +1 -13
- package/dist/theme/molecules/theme-molecule.mjs.map +1 -1
- package/dist/theme/providers/ThemeProvider.cjs +1 -29
- package/dist/theme/providers/ThemeProvider.mjs +1 -29
- package/dist/theme/providers/ThemeProvider.mjs.map +1 -1
- package/dist/theme/utilities/theme-helpers.cjs +1 -70
- package/dist/theme/utilities/theme-helpers.mjs +1 -69
- package/dist/theme/utilities/theme-helpers.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -1,179 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_atom_with_messages = require("../atoms/atom-with-messages.cjs");
|
|
3
|
-
let _stryke_type_checks_is_function = require("@stryke/type-checks/is-function");
|
|
4
|
-
let jotai_utils = require("jotai/utils");
|
|
5
|
-
let _stryke_helpers_is_equal = require("@stryke/helpers/is-equal");
|
|
6
|
-
let jotai = require("jotai");
|
|
7
|
-
let _stryke_type_checks_is_string = require("@stryke/type-checks/is-string");
|
|
8
|
-
let _stryke_helpers_deep_merge = require("@stryke/helpers/deep-merge");
|
|
9
|
-
let _stryke_helpers_flatten_object = require("@stryke/helpers/flatten-object");
|
|
10
|
-
let _stryke_helpers_set_field = require("@stryke/helpers/set-field");
|
|
11
|
-
let _stryke_type_checks_is_number = require("@stryke/type-checks/is-number");
|
|
12
|
-
|
|
13
|
-
// src/form/molecules/form-molecule.ts
|
|
14
|
-
const DEFAULT_FORM_OPTIONS = {
|
|
15
|
-
theme: "base",
|
|
16
|
-
debounceMs: 100,
|
|
17
|
-
isEqual: _stryke_helpers_is_equal.isEqual,
|
|
18
|
-
disabled: false,
|
|
19
|
-
initialValues: {},
|
|
20
|
-
defaultFieldOptions: {}
|
|
21
|
-
};
|
|
22
|
-
const FormApi = require_create_molecule.createMoleculeApi((scope) => {
|
|
23
|
-
const optionsBaseAtom = (0, jotai_utils.atomWithReset)(DEFAULT_FORM_OPTIONS);
|
|
24
|
-
const optionsAtom = (0, jotai.atom)((get) => get(optionsBaseAtom), (get, set, update) => {
|
|
25
|
-
let nextValue = {};
|
|
26
|
-
if ((0, _stryke_type_checks_is_function.isFunction)(update)) nextValue = update(get(optionsBaseAtom));
|
|
27
|
-
else if (update === jotai_utils.RESET) nextValue = {};
|
|
28
|
-
else nextValue = update;
|
|
29
|
-
set(optionsBaseAtom, (0, _stryke_helpers_deep_merge.deepMerge)(DEFAULT_FORM_OPTIONS, nextValue));
|
|
30
|
-
});
|
|
31
|
-
const nameAtom = (0, jotai.atom)(scope);
|
|
32
|
-
const disabledAtom = (0, jotai_utils.atomWithDefault)((get) => Boolean(get(optionsAtom).disabled));
|
|
33
|
-
const formValidatingAtom = (0, jotai_utils.atomWithReset)(false);
|
|
34
|
-
const previousValuesBaseAtom = (0, jotai_utils.atomWithReset)({});
|
|
35
|
-
const previousValuesAtom = (0, jotai.atom)((get) => get(previousValuesBaseAtom), (_get, _set, _update) => {});
|
|
36
|
-
const initialValuesAtom = (0, jotai_utils.atomWithDefault)((get) => get(optionsAtom).initialValues);
|
|
37
|
-
const valuesBaseAtom = (0, jotai_utils.atomWithDefault)((get) => get(optionsAtom).initialValues);
|
|
38
|
-
const valuesAtom = (0, jotai.atom)((get) => get(valuesBaseAtom), (get, set, update) => {
|
|
39
|
-
let nextValue = {};
|
|
40
|
-
if (update) {
|
|
41
|
-
if ((0, _stryke_type_checks_is_function.isFunction)(update)) nextValue = update(get(valuesBaseAtom));
|
|
42
|
-
else nextValue = update;
|
|
43
|
-
}
|
|
44
|
-
set(previousValuesBaseAtom, get(valuesBaseAtom));
|
|
45
|
-
set(valuesBaseAtom, nextValue);
|
|
46
|
-
});
|
|
47
|
-
const validationResultsAtom = (0, jotai_utils.atomWithReset)({
|
|
48
|
-
initialize: [],
|
|
49
|
-
change: [],
|
|
50
|
-
blur: [],
|
|
51
|
-
submit: [],
|
|
52
|
-
server: []
|
|
53
|
-
});
|
|
54
|
-
const submittingAtom = (0, jotai_utils.atomWithReset)(false);
|
|
55
|
-
const submittedAtom = (0, jotai_utils.atomWithReset)(false);
|
|
56
|
-
const submitAttemptsAtom = (0, jotai_utils.atomWithReset)(0);
|
|
57
|
-
const focusedFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
58
|
-
const requiredFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
59
|
-
const disabledFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
60
|
-
const touchedFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
61
|
-
const blurredFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
62
|
-
const validatingFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
63
|
-
const validationResultsFieldsAtom = (0, jotai_utils.atomWithReset)({});
|
|
64
|
-
const refsAtom = (0, jotai_utils.atomWithReset)({});
|
|
65
|
-
const tabIndexesBaseAtom = (0, jotai_utils.atomWithReset)({});
|
|
66
|
-
const tabIndexesAtom = (0, jotai.atom)((get) => get(tabIndexesBaseAtom), (get, set, update) => {
|
|
67
|
-
let nextValue = {};
|
|
68
|
-
if ((0, _stryke_type_checks_is_function.isFunction)(update)) nextValue = update(get(tabIndexesBaseAtom));
|
|
69
|
-
else if (update === jotai_utils.RESET) nextValue = {};
|
|
70
|
-
else {
|
|
71
|
-
const tabIndexes = get(tabIndexesBaseAtom);
|
|
72
|
-
if ("field" in update && update.field && (0, _stryke_type_checks_is_string.isString)(update.field)) {
|
|
73
|
-
let tabIndex = update.tabIndex;
|
|
74
|
-
if (!(0, _stryke_type_checks_is_number.isNumber)(tabIndex) || tabIndex > -1) {
|
|
75
|
-
const flat = (0, _stryke_helpers_flatten_object.flattenObject)(tabIndexes);
|
|
76
|
-
let lastIndex = -1;
|
|
77
|
-
for (const key in flat) if ((0, _stryke_type_checks_is_number.isNumber)(flat[key]) && flat[key] > lastIndex) lastIndex = flat[key];
|
|
78
|
-
tabIndex = lastIndex + 1;
|
|
79
|
-
}
|
|
80
|
-
nextValue = (0, _stryke_helpers_set_field.setField)(tabIndexes, update.field, tabIndex);
|
|
81
|
-
} else nextValue = update;
|
|
82
|
-
}
|
|
83
|
-
set(tabIndexesBaseAtom, nextValue);
|
|
84
|
-
});
|
|
85
|
-
const dirtyAtom = (0, jotai.atom)((get) => {
|
|
86
|
-
return get(optionsAtom).isEqual(get(valuesAtom), get(initialValuesAtom));
|
|
87
|
-
});
|
|
88
|
-
const pristineAtom = (0, jotai.atom)((get) => !get(dirtyAtom));
|
|
89
|
-
const blurredAtom = (0, jotai.atom)((get) => {
|
|
90
|
-
const blurredFields = (0, _stryke_helpers_flatten_object.flattenObject)(get(blurredFieldsAtom));
|
|
91
|
-
return Object.keys(blurredFields).some((key) => blurredFields[key]);
|
|
92
|
-
});
|
|
93
|
-
const touchedAtom = (0, jotai.atom)((get) => {
|
|
94
|
-
const touchedFields = (0, _stryke_helpers_flatten_object.flattenObject)(get(touchedFieldsAtom));
|
|
95
|
-
return Object.keys(touchedFields).some((key) => touchedFields[key]);
|
|
96
|
-
});
|
|
97
|
-
const validatingAtom = (0, jotai.atom)((get) => {
|
|
98
|
-
if (get(formValidatingAtom)) return true;
|
|
99
|
-
const validatingFields = (0, _stryke_helpers_flatten_object.flattenObject)(get(validatingFieldsAtom));
|
|
100
|
-
return Object.keys(validatingFields).some((key) => validatingFields[key]);
|
|
101
|
-
});
|
|
102
|
-
const formErrorsAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "danger");
|
|
103
|
-
const formWarningsAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "warning");
|
|
104
|
-
const formInfoAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "info");
|
|
105
|
-
const formHelpAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "discovery");
|
|
106
|
-
const formSuccessesAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "success");
|
|
107
|
-
const formPositivesAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "positive");
|
|
108
|
-
const formNegativesAtom = require_atom_with_messages.atomWithMessageTypes(validationResultsAtom, "negative");
|
|
109
|
-
const isFormInvalidAtom = (0, jotai.atom)((get) => {
|
|
110
|
-
return get(formErrorsAtom).length > 0;
|
|
111
|
-
});
|
|
112
|
-
const errorFieldsAtom = require_atom_with_messages.atomWithFieldsMessageTypes(validationResultsFieldsAtom, "danger");
|
|
113
|
-
const warningFieldsAtom = require_atom_with_messages.atomWithFieldsMessageTypes(validationResultsFieldsAtom, "warning");
|
|
114
|
-
const infoFieldsAtom = require_atom_with_messages.atomWithFieldsMessageTypes(validationResultsFieldsAtom, "info");
|
|
115
|
-
const helpFieldsAtom = require_atom_with_messages.atomWithFieldsMessageTypes(validationResultsFieldsAtom, "discovery");
|
|
116
|
-
const successFieldsAtom = require_atom_with_messages.atomWithFieldsMessageTypes(validationResultsFieldsAtom, "success");
|
|
117
|
-
const fieldErrorMessagesAtom = require_atom_with_messages.atomWithFieldsMessageList(validationResultsFieldsAtom, "danger");
|
|
118
|
-
const fieldWarningMessagesAtom = require_atom_with_messages.atomWithFieldsMessageList(validationResultsFieldsAtom, "warning");
|
|
119
|
-
const fieldInfoMessagesAtom = require_atom_with_messages.atomWithFieldsMessageList(validationResultsFieldsAtom, "info");
|
|
120
|
-
const fieldHelpMessagesAtom = require_atom_with_messages.atomWithFieldsMessageList(validationResultsFieldsAtom, "discovery");
|
|
121
|
-
const fieldsSuccessMessagesAtom = require_atom_with_messages.atomWithFieldsMessageList(validationResultsFieldsAtom, "success");
|
|
122
|
-
const invalidAtom = (0, jotai.atom)((get) => {
|
|
123
|
-
return get(fieldErrorMessagesAtom).length > 0 || get(isFormInvalidAtom);
|
|
124
|
-
});
|
|
125
|
-
const validAtom = (0, jotai.atom)((get) => !get(invalidAtom));
|
|
126
|
-
const canSubmitAtom = (0, jotai.atom)((get) => get(validAtom) && !get(validatingAtom) && !get(submittingAtom) && !get(disabledAtom));
|
|
127
|
-
return {
|
|
128
|
-
options: optionsAtom,
|
|
129
|
-
name: nameAtom,
|
|
130
|
-
disabled: disabledAtom,
|
|
131
|
-
formValidating: formValidatingAtom,
|
|
132
|
-
validationResults: validationResultsAtom,
|
|
133
|
-
submitting: submittingAtom,
|
|
134
|
-
submitted: submittedAtom,
|
|
135
|
-
submitAttempts: submitAttemptsAtom,
|
|
136
|
-
focusedFields: focusedFieldsAtom,
|
|
137
|
-
requiredFields: requiredFieldsAtom,
|
|
138
|
-
disabledFields: disabledFieldsAtom,
|
|
139
|
-
touchedFields: touchedFieldsAtom,
|
|
140
|
-
blurredFields: blurredFieldsAtom,
|
|
141
|
-
validatingFields: validatingFieldsAtom,
|
|
142
|
-
validationResultsFields: validationResultsFieldsAtom,
|
|
143
|
-
tabIndexes: tabIndexesAtom,
|
|
144
|
-
refs: refsAtom,
|
|
145
|
-
dirty: dirtyAtom,
|
|
146
|
-
pristine: pristineAtom,
|
|
147
|
-
blurred: blurredAtom,
|
|
148
|
-
touched: touchedAtom,
|
|
149
|
-
validating: validatingAtom,
|
|
150
|
-
previousValues: previousValuesAtom,
|
|
151
|
-
initialValues: initialValuesAtom,
|
|
152
|
-
values: valuesAtom,
|
|
153
|
-
dangerMessages: formErrorsAtom,
|
|
154
|
-
warningMessages: formWarningsAtom,
|
|
155
|
-
infoMessages: formInfoAtom,
|
|
156
|
-
discoveryMessages: formHelpAtom,
|
|
157
|
-
successMessages: formSuccessesAtom,
|
|
158
|
-
positiveMessages: formPositivesAtom,
|
|
159
|
-
negativeMessages: formNegativesAtom,
|
|
160
|
-
messages: require_atom_with_messages.atomWithMessages(formErrorsAtom, formWarningsAtom, formInfoAtom, formHelpAtom, formSuccessesAtom, formPositivesAtom, formNegativesAtom),
|
|
161
|
-
dangerFields: errorFieldsAtom,
|
|
162
|
-
warningFields: warningFieldsAtom,
|
|
163
|
-
infoFields: infoFieldsAtom,
|
|
164
|
-
discoveryFields: helpFieldsAtom,
|
|
165
|
-
successFields: successFieldsAtom,
|
|
166
|
-
fieldDangerMessages: fieldErrorMessagesAtom,
|
|
167
|
-
fieldWarningMessages: fieldWarningMessagesAtom,
|
|
168
|
-
fieldInfoMessages: fieldInfoMessagesAtom,
|
|
169
|
-
fieldHelpMessages: fieldHelpMessagesAtom,
|
|
170
|
-
fieldsSuccessMessages: fieldsSuccessMessagesAtom,
|
|
171
|
-
valid: validAtom,
|
|
172
|
-
invalid: invalidAtom,
|
|
173
|
-
theme: require_atom_with_messages.atomWithTheme(optionsAtom, formErrorsAtom, formWarningsAtom, formInfoAtom, formHelpAtom, formSuccessesAtom, formPositivesAtom, formNegativesAtom),
|
|
174
|
-
canSubmit: canSubmitAtom
|
|
175
|
-
};
|
|
176
|
-
}, { type: "form" });
|
|
177
|
-
|
|
178
|
-
exports.DEFAULT_FORM_OPTIONS = DEFAULT_FORM_OPTIONS;
|
|
179
|
-
exports.FormApi = FormApi;
|
|
1
|
+
const e=require("../../base/utilities/create-molecule.cjs"),t=require("../atoms/atom-with-messages.cjs");let n=require("@stryke/type-checks/is-function"),r=require("jotai/utils"),i=require("@stryke/helpers/is-equal"),a=require("jotai"),o=require("@stryke/type-checks/is-string"),s=require("@stryke/helpers/deep-merge"),c=require("@stryke/helpers/flatten-object"),l=require("@stryke/helpers/set-field"),u=require("@stryke/type-checks/is-number");const d={theme:`base`,debounceMs:100,isEqual:i.isEqual,disabled:!1,initialValues:{},defaultFieldOptions:{}},f=e.createMoleculeApi(e=>{let i=(0,r.atomWithReset)(d),f=(0,a.atom)(e=>e(i),(e,t,a)=>{let o={};o=(0,n.isFunction)(a)?a(e(i)):a===r.RESET?{}:a,t(i,(0,s.deepMerge)(d,o))}),p=(0,a.atom)(e),m=(0,r.atomWithDefault)(e=>!!e(f).disabled),h=(0,r.atomWithReset)(!1),g=(0,r.atomWithReset)({}),_=(0,a.atom)(e=>e(g),(e,t,n)=>{}),v=(0,r.atomWithDefault)(e=>e(f).initialValues),y=(0,r.atomWithDefault)(e=>e(f).initialValues),b=(0,a.atom)(e=>e(y),(e,t,r)=>{let i={};r&&(i=(0,n.isFunction)(r)?r(e(y)):r),t(g,e(y)),t(y,i)}),x=(0,r.atomWithReset)({initialize:[],change:[],blur:[],submit:[],server:[]}),S=(0,r.atomWithReset)(!1),C=(0,r.atomWithReset)(!1),w=(0,r.atomWithReset)(0),T=(0,r.atomWithReset)({}),E=(0,r.atomWithReset)({}),D=(0,r.atomWithReset)({}),O=(0,r.atomWithReset)({}),k=(0,r.atomWithReset)({}),A=(0,r.atomWithReset)({}),j=(0,r.atomWithReset)({}),M=(0,r.atomWithReset)({}),N=(0,r.atomWithReset)({}),P=(0,a.atom)(e=>e(N),(e,t,i)=>{let a={};if((0,n.isFunction)(i))a=i(e(N));else if(i===r.RESET)a={};else{let t=e(N);if(`field`in i&&i.field&&(0,o.isString)(i.field)){let e=i.tabIndex;if(!(0,u.isNumber)(e)||e>-1){let n=(0,c.flattenObject)(t),r=-1;for(let e in n)(0,u.isNumber)(n[e])&&n[e]>r&&(r=n[e]);e=r+1}a=(0,l.setField)(t,i.field,e)}else a=i}t(N,a)}),F=(0,a.atom)(e=>e(f).isEqual(e(b),e(v))),ee=(0,a.atom)(e=>!e(F)),te=(0,a.atom)(e=>{let t=(0,c.flattenObject)(e(k));return Object.keys(t).some(e=>t[e])}),I=(0,a.atom)(e=>{let t=(0,c.flattenObject)(e(O));return Object.keys(t).some(e=>t[e])}),L=(0,a.atom)(e=>{if(e(h))return!0;let t=(0,c.flattenObject)(e(A));return Object.keys(t).some(e=>t[e])}),R=t.atomWithMessageTypes(x,`danger`),z=t.atomWithMessageTypes(x,`warning`),B=t.atomWithMessageTypes(x,`info`),V=t.atomWithMessageTypes(x,`discovery`),H=t.atomWithMessageTypes(x,`success`),U=t.atomWithMessageTypes(x,`positive`),W=t.atomWithMessageTypes(x,`negative`),G=(0,a.atom)(e=>e(R).length>0),K=t.atomWithFieldsMessageTypes(j,`danger`),q=t.atomWithFieldsMessageTypes(j,`warning`),J=t.atomWithFieldsMessageTypes(j,`info`),Y=t.atomWithFieldsMessageTypes(j,`discovery`),X=t.atomWithFieldsMessageTypes(j,`success`),Z=t.atomWithFieldsMessageList(j,`danger`),ne=t.atomWithFieldsMessageList(j,`warning`),re=t.atomWithFieldsMessageList(j,`info`),ie=t.atomWithFieldsMessageList(j,`discovery`),ae=t.atomWithFieldsMessageList(j,`success`),Q=(0,a.atom)(e=>e(Z).length>0||e(G)),$=(0,a.atom)(e=>!e(Q)),oe=(0,a.atom)(e=>e($)&&!e(L)&&!e(S)&&!e(m));return{options:f,name:p,disabled:m,formValidating:h,validationResults:x,submitting:S,submitted:C,submitAttempts:w,focusedFields:T,requiredFields:E,disabledFields:D,touchedFields:O,blurredFields:k,validatingFields:A,validationResultsFields:j,tabIndexes:P,refs:M,dirty:F,pristine:ee,blurred:te,touched:I,validating:L,previousValues:_,initialValues:v,values:b,dangerMessages:R,warningMessages:z,infoMessages:B,discoveryMessages:V,successMessages:H,positiveMessages:U,negativeMessages:W,messages:t.atomWithMessages(R,z,B,V,H,U,W),dangerFields:K,warningFields:q,infoFields:J,discoveryFields:Y,successFields:X,fieldDangerMessages:Z,fieldWarningMessages:ne,fieldInfoMessages:re,fieldHelpMessages:ie,fieldsSuccessMessages:ae,valid:$,invalid:Q,theme:t.atomWithTheme(f,R,z,B,V,H,U,W),canSubmit:oe}},{type:`form`});exports.DEFAULT_FORM_OPTIONS=d,exports.FormApi=f;
|
|
@@ -1,179 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { atomWithFieldsMessageList, atomWithFieldsMessageTypes, atomWithMessageTypes, atomWithMessages, atomWithTheme } from "../atoms/atom-with-messages.mjs";
|
|
3
|
-
import { isFunction } from "@stryke/type-checks/is-function";
|
|
4
|
-
import { RESET, atomWithDefault, atomWithReset } from "jotai/utils";
|
|
5
|
-
import { isEqual } from "@stryke/helpers/is-equal";
|
|
6
|
-
import { atom } from "jotai";
|
|
7
|
-
import { isString } from "@stryke/type-checks/is-string";
|
|
8
|
-
import { deepMerge } from "@stryke/helpers/deep-merge";
|
|
9
|
-
import { flattenObject } from "@stryke/helpers/flatten-object";
|
|
10
|
-
import { setField } from "@stryke/helpers/set-field";
|
|
11
|
-
import { isNumber } from "@stryke/type-checks/is-number";
|
|
12
|
-
|
|
13
|
-
// src/form/molecules/form-molecule.ts
|
|
14
|
-
const DEFAULT_FORM_OPTIONS = {
|
|
15
|
-
theme: "base",
|
|
16
|
-
debounceMs: 100,
|
|
17
|
-
isEqual,
|
|
18
|
-
disabled: false,
|
|
19
|
-
initialValues: {},
|
|
20
|
-
defaultFieldOptions: {}
|
|
21
|
-
};
|
|
22
|
-
const FormApi = createMoleculeApi((scope) => {
|
|
23
|
-
const optionsBaseAtom = atomWithReset(DEFAULT_FORM_OPTIONS);
|
|
24
|
-
const optionsAtom = atom((get) => get(optionsBaseAtom), (get, set, update) => {
|
|
25
|
-
let nextValue = {};
|
|
26
|
-
if (isFunction(update)) nextValue = update(get(optionsBaseAtom));
|
|
27
|
-
else if (update === RESET) nextValue = {};
|
|
28
|
-
else nextValue = update;
|
|
29
|
-
set(optionsBaseAtom, deepMerge(DEFAULT_FORM_OPTIONS, nextValue));
|
|
30
|
-
});
|
|
31
|
-
const nameAtom = atom(scope);
|
|
32
|
-
const disabledAtom = atomWithDefault((get) => Boolean(get(optionsAtom).disabled));
|
|
33
|
-
const formValidatingAtom = atomWithReset(false);
|
|
34
|
-
const previousValuesBaseAtom = atomWithReset({});
|
|
35
|
-
const previousValuesAtom = atom((get) => get(previousValuesBaseAtom), (_get, _set, _update) => {});
|
|
36
|
-
const initialValuesAtom = atomWithDefault((get) => get(optionsAtom).initialValues);
|
|
37
|
-
const valuesBaseAtom = atomWithDefault((get) => get(optionsAtom).initialValues);
|
|
38
|
-
const valuesAtom = atom((get) => get(valuesBaseAtom), (get, set, update) => {
|
|
39
|
-
let nextValue = {};
|
|
40
|
-
if (update) {
|
|
41
|
-
if (isFunction(update)) nextValue = update(get(valuesBaseAtom));
|
|
42
|
-
else nextValue = update;
|
|
43
|
-
}
|
|
44
|
-
set(previousValuesBaseAtom, get(valuesBaseAtom));
|
|
45
|
-
set(valuesBaseAtom, nextValue);
|
|
46
|
-
});
|
|
47
|
-
const validationResultsAtom = atomWithReset({
|
|
48
|
-
initialize: [],
|
|
49
|
-
change: [],
|
|
50
|
-
blur: [],
|
|
51
|
-
submit: [],
|
|
52
|
-
server: []
|
|
53
|
-
});
|
|
54
|
-
const submittingAtom = atomWithReset(false);
|
|
55
|
-
const submittedAtom = atomWithReset(false);
|
|
56
|
-
const submitAttemptsAtom = atomWithReset(0);
|
|
57
|
-
const focusedFieldsAtom = atomWithReset({});
|
|
58
|
-
const requiredFieldsAtom = atomWithReset({});
|
|
59
|
-
const disabledFieldsAtom = atomWithReset({});
|
|
60
|
-
const touchedFieldsAtom = atomWithReset({});
|
|
61
|
-
const blurredFieldsAtom = atomWithReset({});
|
|
62
|
-
const validatingFieldsAtom = atomWithReset({});
|
|
63
|
-
const validationResultsFieldsAtom = atomWithReset({});
|
|
64
|
-
const refsAtom = atomWithReset({});
|
|
65
|
-
const tabIndexesBaseAtom = atomWithReset({});
|
|
66
|
-
const tabIndexesAtom = atom((get) => get(tabIndexesBaseAtom), (get, set, update) => {
|
|
67
|
-
let nextValue = {};
|
|
68
|
-
if (isFunction(update)) nextValue = update(get(tabIndexesBaseAtom));
|
|
69
|
-
else if (update === RESET) nextValue = {};
|
|
70
|
-
else {
|
|
71
|
-
const tabIndexes = get(tabIndexesBaseAtom);
|
|
72
|
-
if ("field" in update && update.field && isString(update.field)) {
|
|
73
|
-
let tabIndex = update.tabIndex;
|
|
74
|
-
if (!isNumber(tabIndex) || tabIndex > -1) {
|
|
75
|
-
const flat = flattenObject(tabIndexes);
|
|
76
|
-
let lastIndex = -1;
|
|
77
|
-
for (const key in flat) if (isNumber(flat[key]) && flat[key] > lastIndex) lastIndex = flat[key];
|
|
78
|
-
tabIndex = lastIndex + 1;
|
|
79
|
-
}
|
|
80
|
-
nextValue = setField(tabIndexes, update.field, tabIndex);
|
|
81
|
-
} else nextValue = update;
|
|
82
|
-
}
|
|
83
|
-
set(tabIndexesBaseAtom, nextValue);
|
|
84
|
-
});
|
|
85
|
-
const dirtyAtom = atom((get) => {
|
|
86
|
-
return get(optionsAtom).isEqual(get(valuesAtom), get(initialValuesAtom));
|
|
87
|
-
});
|
|
88
|
-
const pristineAtom = atom((get) => !get(dirtyAtom));
|
|
89
|
-
const blurredAtom = atom((get) => {
|
|
90
|
-
const blurredFields = flattenObject(get(blurredFieldsAtom));
|
|
91
|
-
return Object.keys(blurredFields).some((key) => blurredFields[key]);
|
|
92
|
-
});
|
|
93
|
-
const touchedAtom = atom((get) => {
|
|
94
|
-
const touchedFields = flattenObject(get(touchedFieldsAtom));
|
|
95
|
-
return Object.keys(touchedFields).some((key) => touchedFields[key]);
|
|
96
|
-
});
|
|
97
|
-
const validatingAtom = atom((get) => {
|
|
98
|
-
if (get(formValidatingAtom)) return true;
|
|
99
|
-
const validatingFields = flattenObject(get(validatingFieldsAtom));
|
|
100
|
-
return Object.keys(validatingFields).some((key) => validatingFields[key]);
|
|
101
|
-
});
|
|
102
|
-
const formErrorsAtom = atomWithMessageTypes(validationResultsAtom, "danger");
|
|
103
|
-
const formWarningsAtom = atomWithMessageTypes(validationResultsAtom, "warning");
|
|
104
|
-
const formInfoAtom = atomWithMessageTypes(validationResultsAtom, "info");
|
|
105
|
-
const formHelpAtom = atomWithMessageTypes(validationResultsAtom, "discovery");
|
|
106
|
-
const formSuccessesAtom = atomWithMessageTypes(validationResultsAtom, "success");
|
|
107
|
-
const formPositivesAtom = atomWithMessageTypes(validationResultsAtom, "positive");
|
|
108
|
-
const formNegativesAtom = atomWithMessageTypes(validationResultsAtom, "negative");
|
|
109
|
-
const isFormInvalidAtom = atom((get) => {
|
|
110
|
-
return get(formErrorsAtom).length > 0;
|
|
111
|
-
});
|
|
112
|
-
const errorFieldsAtom = atomWithFieldsMessageTypes(validationResultsFieldsAtom, "danger");
|
|
113
|
-
const warningFieldsAtom = atomWithFieldsMessageTypes(validationResultsFieldsAtom, "warning");
|
|
114
|
-
const infoFieldsAtom = atomWithFieldsMessageTypes(validationResultsFieldsAtom, "info");
|
|
115
|
-
const helpFieldsAtom = atomWithFieldsMessageTypes(validationResultsFieldsAtom, "discovery");
|
|
116
|
-
const successFieldsAtom = atomWithFieldsMessageTypes(validationResultsFieldsAtom, "success");
|
|
117
|
-
const fieldErrorMessagesAtom = atomWithFieldsMessageList(validationResultsFieldsAtom, "danger");
|
|
118
|
-
const fieldWarningMessagesAtom = atomWithFieldsMessageList(validationResultsFieldsAtom, "warning");
|
|
119
|
-
const fieldInfoMessagesAtom = atomWithFieldsMessageList(validationResultsFieldsAtom, "info");
|
|
120
|
-
const fieldHelpMessagesAtom = atomWithFieldsMessageList(validationResultsFieldsAtom, "discovery");
|
|
121
|
-
const fieldsSuccessMessagesAtom = atomWithFieldsMessageList(validationResultsFieldsAtom, "success");
|
|
122
|
-
const invalidAtom = atom((get) => {
|
|
123
|
-
return get(fieldErrorMessagesAtom).length > 0 || get(isFormInvalidAtom);
|
|
124
|
-
});
|
|
125
|
-
const validAtom = atom((get) => !get(invalidAtom));
|
|
126
|
-
const canSubmitAtom = atom((get) => get(validAtom) && !get(validatingAtom) && !get(submittingAtom) && !get(disabledAtom));
|
|
127
|
-
return {
|
|
128
|
-
options: optionsAtom,
|
|
129
|
-
name: nameAtom,
|
|
130
|
-
disabled: disabledAtom,
|
|
131
|
-
formValidating: formValidatingAtom,
|
|
132
|
-
validationResults: validationResultsAtom,
|
|
133
|
-
submitting: submittingAtom,
|
|
134
|
-
submitted: submittedAtom,
|
|
135
|
-
submitAttempts: submitAttemptsAtom,
|
|
136
|
-
focusedFields: focusedFieldsAtom,
|
|
137
|
-
requiredFields: requiredFieldsAtom,
|
|
138
|
-
disabledFields: disabledFieldsAtom,
|
|
139
|
-
touchedFields: touchedFieldsAtom,
|
|
140
|
-
blurredFields: blurredFieldsAtom,
|
|
141
|
-
validatingFields: validatingFieldsAtom,
|
|
142
|
-
validationResultsFields: validationResultsFieldsAtom,
|
|
143
|
-
tabIndexes: tabIndexesAtom,
|
|
144
|
-
refs: refsAtom,
|
|
145
|
-
dirty: dirtyAtom,
|
|
146
|
-
pristine: pristineAtom,
|
|
147
|
-
blurred: blurredAtom,
|
|
148
|
-
touched: touchedAtom,
|
|
149
|
-
validating: validatingAtom,
|
|
150
|
-
previousValues: previousValuesAtom,
|
|
151
|
-
initialValues: initialValuesAtom,
|
|
152
|
-
values: valuesAtom,
|
|
153
|
-
dangerMessages: formErrorsAtom,
|
|
154
|
-
warningMessages: formWarningsAtom,
|
|
155
|
-
infoMessages: formInfoAtom,
|
|
156
|
-
discoveryMessages: formHelpAtom,
|
|
157
|
-
successMessages: formSuccessesAtom,
|
|
158
|
-
positiveMessages: formPositivesAtom,
|
|
159
|
-
negativeMessages: formNegativesAtom,
|
|
160
|
-
messages: atomWithMessages(formErrorsAtom, formWarningsAtom, formInfoAtom, formHelpAtom, formSuccessesAtom, formPositivesAtom, formNegativesAtom),
|
|
161
|
-
dangerFields: errorFieldsAtom,
|
|
162
|
-
warningFields: warningFieldsAtom,
|
|
163
|
-
infoFields: infoFieldsAtom,
|
|
164
|
-
discoveryFields: helpFieldsAtom,
|
|
165
|
-
successFields: successFieldsAtom,
|
|
166
|
-
fieldDangerMessages: fieldErrorMessagesAtom,
|
|
167
|
-
fieldWarningMessages: fieldWarningMessagesAtom,
|
|
168
|
-
fieldInfoMessages: fieldInfoMessagesAtom,
|
|
169
|
-
fieldHelpMessages: fieldHelpMessagesAtom,
|
|
170
|
-
fieldsSuccessMessages: fieldsSuccessMessagesAtom,
|
|
171
|
-
valid: validAtom,
|
|
172
|
-
invalid: invalidAtom,
|
|
173
|
-
theme: atomWithTheme(optionsAtom, formErrorsAtom, formWarningsAtom, formInfoAtom, formHelpAtom, formSuccessesAtom, formPositivesAtom, formNegativesAtom),
|
|
174
|
-
canSubmit: canSubmitAtom
|
|
175
|
-
};
|
|
176
|
-
}, { type: "form" });
|
|
177
|
-
|
|
178
|
-
export { DEFAULT_FORM_OPTIONS, FormApi };
|
|
1
|
+
import{createMoleculeApi as e}from"../../base/utilities/create-molecule.mjs";import{atomWithFieldsMessageList as t,atomWithFieldsMessageTypes as n,atomWithMessageTypes as r,atomWithMessages as i,atomWithTheme as a}from"../atoms/atom-with-messages.mjs";import{isFunction as o}from"@stryke/type-checks/is-function";import{RESET as s,atomWithDefault as c,atomWithReset as l}from"jotai/utils";import{isEqual as u}from"@stryke/helpers/is-equal";import{atom as d}from"jotai";import{isString as f}from"@stryke/type-checks/is-string";import{deepMerge as p}from"@stryke/helpers/deep-merge";import{flattenObject as m}from"@stryke/helpers/flatten-object";import{setField as ee}from"@stryke/helpers/set-field";import{isNumber as h}from"@stryke/type-checks/is-number";const g={theme:`base`,debounceMs:100,isEqual:u,disabled:!1,initialValues:{},defaultFieldOptions:{}},_=e(e=>{let u=l(g),_=d(e=>e(u),(e,t,n)=>{let r={};r=o(n)?n(e(u)):n===s?{}:n,t(u,p(g,r))}),v=d(e),y=c(e=>!!e(_).disabled),b=l(!1),x=l({}),S=d(e=>e(x),(e,t,n)=>{}),C=c(e=>e(_).initialValues),w=c(e=>e(_).initialValues),T=d(e=>e(w),(e,t,n)=>{let r={};n&&(r=o(n)?n(e(w)):n),t(x,e(w)),t(w,r)}),E=l({initialize:[],change:[],blur:[],submit:[],server:[]}),D=l(!1),O=l(!1),k=l(0),te=l({}),A=l({}),j=l({}),M=l({}),N=l({}),P=l({}),F=l({}),ne=l({}),I=l({}),L=d(e=>e(I),(e,t,n)=>{let r={};if(o(n))r=n(e(I));else if(n===s)r={};else{let t=e(I);if(`field`in n&&n.field&&f(n.field)){let e=n.tabIndex;if(!h(e)||e>-1){let n=m(t),r=-1;for(let e in n)h(n[e])&&n[e]>r&&(r=n[e]);e=r+1}r=ee(t,n.field,e)}else r=n}t(I,r)}),R=d(e=>e(_).isEqual(e(T),e(C))),z=d(e=>!e(R)),B=d(e=>{let t=m(e(N));return Object.keys(t).some(e=>t[e])}),V=d(e=>{let t=m(e(M));return Object.keys(t).some(e=>t[e])}),H=d(e=>{if(e(b))return!0;let t=m(e(P));return Object.keys(t).some(e=>t[e])}),U=r(E,`danger`),W=r(E,`warning`),G=r(E,`info`),K=r(E,`discovery`),q=r(E,`success`),J=r(E,`positive`),Y=r(E,`negative`),X=d(e=>e(U).length>0),re=n(F,`danger`),ie=n(F,`warning`),ae=n(F,`info`),oe=n(F,`discovery`),se=n(F,`success`),Z=t(F,`danger`),ce=t(F,`warning`),le=t(F,`info`),ue=t(F,`discovery`),de=t(F,`success`),Q=d(e=>e(Z).length>0||e(X)),$=d(e=>!e(Q)),fe=d(e=>e($)&&!e(H)&&!e(D)&&!e(y));return{options:_,name:v,disabled:y,formValidating:b,validationResults:E,submitting:D,submitted:O,submitAttempts:k,focusedFields:te,requiredFields:A,disabledFields:j,touchedFields:M,blurredFields:N,validatingFields:P,validationResultsFields:F,tabIndexes:L,refs:ne,dirty:R,pristine:z,blurred:B,touched:V,validating:H,previousValues:S,initialValues:C,values:T,dangerMessages:U,warningMessages:W,infoMessages:G,discoveryMessages:K,successMessages:q,positiveMessages:J,negativeMessages:Y,messages:i(U,W,G,K,q,J,Y),dangerFields:re,warningFields:ie,infoFields:ae,discoveryFields:oe,successFields:se,fieldDangerMessages:Z,fieldWarningMessages:ce,fieldInfoMessages:le,fieldHelpMessages:ue,fieldsSuccessMessages:de,valid:$,invalid:Q,theme:a(_,U,W,G,K,q,J,Y),canSubmit:fe}},{type:`form`});export{g as DEFAULT_FORM_OPTIONS,_ as FormApi};
|
|
179
2
|
//# sourceMappingURL=form-molecule.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-molecule.mjs","names":[],"sources":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"form-molecule.mjs","names":["DEFAULT_FORM_OPTIONS","FormApi","createMoleculeApi","optionsBaseAtom","atomWithReset","optionsAtom","atom","get","nextValue","isFunction","update","RESET","set","deepMerge","nameAtom","scope","disabledAtom","atomWithDefault","formValidatingAtom","previousValuesBaseAtom","previousValuesAtom","initialValuesAtom","valuesBaseAtom","valuesAtom","validationResultsAtom","submittingAtom","submittedAtom","submitAttemptsAtom","focusedFieldsAtom","requiredFieldsAtom","disabledFieldsAtom","touchedFieldsAtom","blurredFieldsAtom","validatingFieldsAtom","validationResultsFieldsAtom","refsAtom","tabIndexesBaseAtom","tabIndexesAtom","tabIndexes","isString","tabIndex","isNumber","flat","flattenObject","lastIndex","key","setField","dirtyAtom","pristineAtom","blurredAtom","blurredFields","touchedAtom","touchedFields","validatingAtom","validatingFields","formErrorsAtom","atomWithMessageTypes","formWarningsAtom","formInfoAtom","formHelpAtom","formSuccessesAtom","formPositivesAtom","formNegativesAtom","isFormInvalidAtom","errorFieldsAtom","atomWithFieldsMessageTypes","warningFieldsAtom","infoFieldsAtom","helpFieldsAtom","successFieldsAtom","fieldErrorMessagesAtom","atomWithFieldsMessageList","fieldWarningMessagesAtom","fieldInfoMessagesAtom","fieldHelpMessagesAtom","fieldsSuccessMessagesAtom","invalidAtom","validAtom","canSubmitAtom","atomWithMessages","atomWithTheme"],"sources":[],"mappings":""}
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_field_molecule = require("./field-molecule.cjs");
|
|
3
|
-
|
|
4
|
-
exports.DEFAULT_FIELD_OPTIONS = require_field_molecule.DEFAULT_FIELD_OPTIONS;
|
|
5
|
-
exports.DEFAULT_FORM_OPTIONS = require_form_molecule.DEFAULT_FORM_OPTIONS;
|
|
6
|
-
exports.FieldApi = require_field_molecule.FieldApi;
|
|
7
|
-
exports.FormApi = require_form_molecule.FormApi;
|
|
1
|
+
const e=require("./form-molecule.cjs"),t=require("./field-molecule.cjs");exports.DEFAULT_FIELD_OPTIONS=t.DEFAULT_FIELD_OPTIONS,exports.DEFAULT_FORM_OPTIONS=e.DEFAULT_FORM_OPTIONS,exports.FieldApi=t.FieldApi,exports.FormApi=e.FormApi;
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { DEFAULT_FIELD_OPTIONS, FieldApi } from "./field-molecule.mjs";
|
|
3
|
-
|
|
4
|
-
export { DEFAULT_FIELD_OPTIONS, DEFAULT_FORM_OPTIONS, FieldApi, FormApi };
|
|
1
|
+
import{DEFAULT_FORM_OPTIONS as e,FormApi as t}from"./form-molecule.mjs";import{DEFAULT_FIELD_OPTIONS as n,FieldApi as r}from"./field-molecule.mjs";export{n as DEFAULT_FIELD_OPTIONS,e as DEFAULT_FORM_OPTIONS,r as FieldApi,t as FormApi};
|
|
@@ -1,102 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_form_molecule = require("../molecules/form-molecule.cjs");
|
|
3
|
-
const require_field_molecule = require("../molecules/field-molecule.cjs");
|
|
4
|
-
const require_types = require("../types.cjs");
|
|
5
|
-
const require_use_field_actions = require("../hooks/use-field-actions.cjs");
|
|
6
|
-
const require_abort_error = require("../utilities/abort-error.cjs");
|
|
7
|
-
let _tamagui_core = require("@tamagui/core");
|
|
8
|
-
let _stryke_async = require("@stryke/async");
|
|
9
|
-
let _stryke_type_checks_is_boolean = require("@stryke/type-checks/is-boolean");
|
|
10
|
-
|
|
11
|
-
// src/form/providers/FieldProvider.tsx
|
|
12
|
-
function FieldStateManager(_props) {
|
|
13
|
-
const { validate } = require_use_field_actions.useFieldActions();
|
|
14
|
-
const form = require_form_molecule.FormApi.useMolecule();
|
|
15
|
-
const field = require_field_molecule.FieldApi.useMolecule();
|
|
16
|
-
require_use_atom_effect.useAtomEffect((get, set) => {
|
|
17
|
-
const value = get(field.value);
|
|
18
|
-
const abortController = new AbortController();
|
|
19
|
-
(async () => {
|
|
20
|
-
try {
|
|
21
|
-
const options = get(field.options);
|
|
22
|
-
await (0, _stryke_async.delay)(options.debounceMs);
|
|
23
|
-
abortController.signal.throwIfAborted();
|
|
24
|
-
if (options.onChange) {
|
|
25
|
-
await Promise.resolve(options.onChange({
|
|
26
|
-
get,
|
|
27
|
-
set,
|
|
28
|
-
atoms: field
|
|
29
|
-
}));
|
|
30
|
-
abortController.signal.throwIfAborted();
|
|
31
|
-
}
|
|
32
|
-
const promises = [];
|
|
33
|
-
promises.push(validate(value, require_types.ValidationCause.CHANGE));
|
|
34
|
-
if (get(field.blurred)) promises.push(validate(value, require_types.ValidationCause.BLUR));
|
|
35
|
-
if (get(form.submitAttempts) > 0) promises.push(validate(value, require_types.ValidationCause.SUBMIT));
|
|
36
|
-
await Promise.all(promises);
|
|
37
|
-
} catch (e) {
|
|
38
|
-
if (e instanceof require_abort_error.AbortError) {}
|
|
39
|
-
}
|
|
40
|
-
})();
|
|
41
|
-
return () => {
|
|
42
|
-
abortController.abort(new require_abort_error.AbortError());
|
|
43
|
-
};
|
|
44
|
-
}, [validate]);
|
|
45
|
-
require_use_atom_effect.useAtomEffect((get, set) => {
|
|
46
|
-
const focused = get(field.focused);
|
|
47
|
-
const abortController = new AbortController();
|
|
48
|
-
(async () => {
|
|
49
|
-
try {
|
|
50
|
-
const options = get(field.options);
|
|
51
|
-
await (0, _stryke_async.delay)(options.debounceMs);
|
|
52
|
-
abortController.signal.throwIfAborted();
|
|
53
|
-
if ((0, _stryke_type_checks_is_boolean.isBoolean)(focused)) {
|
|
54
|
-
if (!get(field.touched)) set(field.touched, true);
|
|
55
|
-
if (focused) {
|
|
56
|
-
if (options.onFocus) {
|
|
57
|
-
await Promise.resolve(options.onFocus({
|
|
58
|
-
get,
|
|
59
|
-
set,
|
|
60
|
-
atoms: field
|
|
61
|
-
}));
|
|
62
|
-
abortController.signal.throwIfAborted();
|
|
63
|
-
}
|
|
64
|
-
} else {
|
|
65
|
-
if (options.onBlur) {
|
|
66
|
-
await Promise.resolve(options.onBlur({
|
|
67
|
-
get,
|
|
68
|
-
set,
|
|
69
|
-
atoms: field
|
|
70
|
-
}));
|
|
71
|
-
abortController.signal.throwIfAborted();
|
|
72
|
-
}
|
|
73
|
-
const value = get(field.value);
|
|
74
|
-
const promises = [];
|
|
75
|
-
promises.push(validate(value, require_types.ValidationCause.BLUR));
|
|
76
|
-
if (get(form.submitAttempts) > 0) promises.push(validate(value, require_types.ValidationCause.SUBMIT));
|
|
77
|
-
await Promise.all(promises);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
} catch (e) {
|
|
81
|
-
if (e instanceof require_abort_error.AbortError) {}
|
|
82
|
-
}
|
|
83
|
-
})();
|
|
84
|
-
return () => {
|
|
85
|
-
abortController.abort(new require_abort_error.AbortError());
|
|
86
|
-
};
|
|
87
|
-
}, [validate]);
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
function FieldProvider({ children, name, ...props }) {
|
|
91
|
-
const formName = require_form_molecule.FormApi.use().name.get();
|
|
92
|
-
const theme = (0, _tamagui_core.useThemeName)();
|
|
93
|
-
return <require_field_molecule.FieldApi.Provider scope={`${formName}-${name}`} initialState={{ options: {
|
|
94
|
-
theme,
|
|
95
|
-
...props
|
|
96
|
-
} }}>
|
|
97
|
-
<FieldStateManager {...props} />
|
|
98
|
-
{children}
|
|
99
|
-
</require_field_molecule.FieldApi.Provider>;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
exports.FieldProvider = FieldProvider;
|
|
1
|
+
const e=require("../../base/hooks/use-atom-effect.cjs"),t=require("../molecules/form-molecule.cjs"),n=require("../molecules/field-molecule.cjs"),r=require("../types.cjs"),i=require("../hooks/use-field-actions.cjs"),a=require("../utilities/abort-error.cjs");let o=require("react/jsx-runtime"),s=require("@tamagui/core"),c=require("@stryke/async"),l=require("@stryke/type-checks/is-boolean");function u(o){let{validate:s}=i.useFieldActions(),u=t.FormApi.useMolecule(),d=n.FieldApi.useMolecule();return e.useAtomEffect((e,t)=>{let n=e(d.value),i=new AbortController;return(async()=>{try{let a=e(d.options);await(0,c.delay)(a.debounceMs),i.signal.throwIfAborted(),a.onChange&&(await Promise.resolve(a.onChange({get:e,set:t,atoms:d})),i.signal.throwIfAborted());let o=[];o.push(s(n,r.ValidationCause.CHANGE)),e(d.blurred)&&o.push(s(n,r.ValidationCause.BLUR)),e(u.submitAttempts)>0&&o.push(s(n,r.ValidationCause.SUBMIT)),await Promise.all(o)}catch(e){e instanceof a.AbortError}})(),()=>{i.abort(new a.AbortError)}},[s]),e.useAtomEffect((e,t)=>{let n=e(d.focused),i=new AbortController;return(async()=>{try{let a=e(d.options);if(await(0,c.delay)(a.debounceMs),i.signal.throwIfAborted(),(0,l.isBoolean)(n)){if(e(d.touched)||t(d.touched,!0),n)a.onFocus&&(await Promise.resolve(a.onFocus({get:e,set:t,atoms:d})),i.signal.throwIfAborted());else{a.onBlur&&(await Promise.resolve(a.onBlur({get:e,set:t,atoms:d})),i.signal.throwIfAborted());let n=e(d.value),o=[];o.push(s(n,r.ValidationCause.BLUR)),e(u.submitAttempts)>0&&o.push(s(n,r.ValidationCause.SUBMIT)),await Promise.all(o)}}}catch(e){e instanceof a.AbortError}})(),()=>{i.abort(new a.AbortError)}},[s]),null}function d({children:e,name:r,...i}){let a=t.FormApi.use().name.get(),c=(0,s.useThemeName)();return/* @__PURE__ */ (0,o.jsxs)(n.FieldApi.Provider,{scope:`${a}-${r}`,initialState:{options:{theme:c,...i}},children:[/* @__PURE__ */ (0,o.jsx)(u,{...i}),e]})}exports.FieldProvider=d;
|
|
@@ -1,103 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { FormApi } from "../molecules/form-molecule.mjs";
|
|
3
|
-
import { FieldApi } from "../molecules/field-molecule.mjs";
|
|
4
|
-
import { ValidationCause } from "../types.mjs";
|
|
5
|
-
import { useFieldActions } from "../hooks/use-field-actions.mjs";
|
|
6
|
-
import { AbortError } from "../utilities/abort-error.mjs";
|
|
7
|
-
import { useThemeName } from "@tamagui/core";
|
|
8
|
-
import { delay } from "@stryke/async";
|
|
9
|
-
import { isBoolean } from "@stryke/type-checks/is-boolean";
|
|
10
|
-
|
|
11
|
-
// src/form/providers/FieldProvider.tsx
|
|
12
|
-
function FieldStateManager(_props) {
|
|
13
|
-
const { validate } = useFieldActions();
|
|
14
|
-
const form = FormApi.useMolecule();
|
|
15
|
-
const field = FieldApi.useMolecule();
|
|
16
|
-
useAtomEffect((get, set) => {
|
|
17
|
-
const value = get(field.value);
|
|
18
|
-
const abortController = new AbortController();
|
|
19
|
-
(async () => {
|
|
20
|
-
try {
|
|
21
|
-
const options = get(field.options);
|
|
22
|
-
await delay(options.debounceMs);
|
|
23
|
-
abortController.signal.throwIfAborted();
|
|
24
|
-
if (options.onChange) {
|
|
25
|
-
await Promise.resolve(options.onChange({
|
|
26
|
-
get,
|
|
27
|
-
set,
|
|
28
|
-
atoms: field
|
|
29
|
-
}));
|
|
30
|
-
abortController.signal.throwIfAborted();
|
|
31
|
-
}
|
|
32
|
-
const promises = [];
|
|
33
|
-
promises.push(validate(value, ValidationCause.CHANGE));
|
|
34
|
-
if (get(field.blurred)) promises.push(validate(value, ValidationCause.BLUR));
|
|
35
|
-
if (get(form.submitAttempts) > 0) promises.push(validate(value, ValidationCause.SUBMIT));
|
|
36
|
-
await Promise.all(promises);
|
|
37
|
-
} catch (e) {
|
|
38
|
-
if (e instanceof AbortError) {}
|
|
39
|
-
}
|
|
40
|
-
})();
|
|
41
|
-
return () => {
|
|
42
|
-
abortController.abort(new AbortError());
|
|
43
|
-
};
|
|
44
|
-
}, [validate]);
|
|
45
|
-
useAtomEffect((get, set) => {
|
|
46
|
-
const focused = get(field.focused);
|
|
47
|
-
const abortController = new AbortController();
|
|
48
|
-
(async () => {
|
|
49
|
-
try {
|
|
50
|
-
const options = get(field.options);
|
|
51
|
-
await delay(options.debounceMs);
|
|
52
|
-
abortController.signal.throwIfAborted();
|
|
53
|
-
if (isBoolean(focused)) {
|
|
54
|
-
if (!get(field.touched)) set(field.touched, true);
|
|
55
|
-
if (focused) {
|
|
56
|
-
if (options.onFocus) {
|
|
57
|
-
await Promise.resolve(options.onFocus({
|
|
58
|
-
get,
|
|
59
|
-
set,
|
|
60
|
-
atoms: field
|
|
61
|
-
}));
|
|
62
|
-
abortController.signal.throwIfAborted();
|
|
63
|
-
}
|
|
64
|
-
} else {
|
|
65
|
-
if (options.onBlur) {
|
|
66
|
-
await Promise.resolve(options.onBlur({
|
|
67
|
-
get,
|
|
68
|
-
set,
|
|
69
|
-
atoms: field
|
|
70
|
-
}));
|
|
71
|
-
abortController.signal.throwIfAborted();
|
|
72
|
-
}
|
|
73
|
-
const value = get(field.value);
|
|
74
|
-
const promises = [];
|
|
75
|
-
promises.push(validate(value, ValidationCause.BLUR));
|
|
76
|
-
if (get(form.submitAttempts) > 0) promises.push(validate(value, ValidationCause.SUBMIT));
|
|
77
|
-
await Promise.all(promises);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
} catch (e) {
|
|
81
|
-
if (e instanceof AbortError) {}
|
|
82
|
-
}
|
|
83
|
-
})();
|
|
84
|
-
return () => {
|
|
85
|
-
abortController.abort(new AbortError());
|
|
86
|
-
};
|
|
87
|
-
}, [validate]);
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
function FieldProvider({ children, name, ...props }) {
|
|
91
|
-
const formName = FormApi.use().name.get();
|
|
92
|
-
const theme = useThemeName();
|
|
93
|
-
return <FieldApi.Provider scope={`${formName}-${name}`} initialState={{ options: {
|
|
94
|
-
theme,
|
|
95
|
-
...props
|
|
96
|
-
} }}>
|
|
97
|
-
<FieldStateManager {...props} />
|
|
98
|
-
{children}
|
|
99
|
-
</FieldApi.Provider>;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export { FieldProvider };
|
|
1
|
+
import{useAtomEffect as e}from"../../base/hooks/use-atom-effect.mjs";import{FormApi as t}from"../molecules/form-molecule.mjs";import{FieldApi as n}from"../molecules/field-molecule.mjs";import{ValidationCause as r}from"../types.mjs";import{useFieldActions as i}from"../hooks/use-field-actions.mjs";import{AbortError as a}from"../utilities/abort-error.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useThemeName as c}from"@tamagui/core";import{delay as l}from"@stryke/async";import{isBoolean as u}from"@stryke/type-checks/is-boolean";function d(o){let{validate:s}=i(),c=t.useMolecule(),d=n.useMolecule();return e((e,t)=>{let n=e(d.value),i=new AbortController;return(async()=>{try{let a=e(d.options);await l(a.debounceMs),i.signal.throwIfAborted(),a.onChange&&(await Promise.resolve(a.onChange({get:e,set:t,atoms:d})),i.signal.throwIfAborted());let o=[];o.push(s(n,r.CHANGE)),e(d.blurred)&&o.push(s(n,r.BLUR)),e(c.submitAttempts)>0&&o.push(s(n,r.SUBMIT)),await Promise.all(o)}catch(e){e instanceof a}})(),()=>{i.abort(new a)}},[s]),e((e,t)=>{let n=e(d.focused),i=new AbortController;return(async()=>{try{let a=e(d.options);if(await l(a.debounceMs),i.signal.throwIfAborted(),u(n)){if(e(d.touched)||t(d.touched,!0),n)a.onFocus&&(await Promise.resolve(a.onFocus({get:e,set:t,atoms:d})),i.signal.throwIfAborted());else{a.onBlur&&(await Promise.resolve(a.onBlur({get:e,set:t,atoms:d})),i.signal.throwIfAborted());let n=e(d.value),o=[];o.push(s(n,r.BLUR)),e(c.submitAttempts)>0&&o.push(s(n,r.SUBMIT)),await Promise.all(o)}}}catch(e){e instanceof a}})(),()=>{i.abort(new a)}},[s]),null}function f({children:e,name:r,...i}){let a=t.use().name.get(),l=c();return/* @__PURE__ */ s(n.Provider,{scope:`${a}-${r}`,initialState:{options:{theme:l,...i}},children:[/* @__PURE__ */ o(d,{...i}),e]})}export{f as FieldProvider};
|
|
103
2
|
//# sourceMappingURL=FieldProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldProvider.mjs","names":[],"sources":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"FieldProvider.mjs","names":["FieldStateManager","useFieldActions","form","FormApi","field","FieldApi","useAtomEffect","value","get","abortController","options","delay","promises","validate","ValidationCause","AbortError","focused","isBoolean","set","FieldProvider","props","formName","theme","useThemeName","name","children"],"sources":[],"mappings":""}
|