linear-react-components-ui 2.0.0-beta.5 → 2.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assets/styles/radio.css +1 -1
- package/lib/assets/styles/selectfield.css +1 -1
- package/lib/assets/styles/split.css +1 -1
- package/lib/form/index.js +65 -65
- package/lib/form/index.js.map +1 -1
- package/lib/form2/useForm/index.js +74 -63
- package/lib/form2/useForm/index.js.map +1 -1
- package/lib/inputs/base/types.d.ts +2 -2
- package/lib/inputs/mask/types.d.ts +2 -1
- package/lib/inputs/period/helper.d.ts +1 -0
- package/lib/inputs/period/helper.js +27 -19
- package/lib/inputs/period/helper.js.map +1 -1
- package/lib/inputs/period/index.js +143 -139
- package/lib/inputs/period/index.js.map +1 -1
- package/lib/inputs2/selectfield/base.d.ts +1 -2
- package/lib/inputs2/selectfield/base.js +260 -382
- package/lib/inputs2/selectfield/base.js.map +1 -1
- package/lib/inputs2/selectfield/context.d.ts +1 -1
- package/lib/inputs2/selectfield/context.js.map +1 -1
- package/lib/inputs2/selectfield/helpers.d.ts +5 -0
- package/lib/inputs2/selectfield/helpers.js +22 -13
- package/lib/inputs2/selectfield/helpers.js.map +1 -1
- package/lib/inputs2/selectfield/index.js.map +1 -1
- package/lib/inputs2/selectfield/listbox.js +17 -18
- package/lib/inputs2/selectfield/listbox.js.map +1 -1
- package/lib/inputs2/selectfield/selections.d.ts +1 -1
- package/lib/inputs2/selectfield/selections.js +11 -11
- package/lib/inputs2/selectfield/selections.js.map +1 -1
- package/lib/inputs2/selectfield/triggers.js +15 -15
- package/lib/inputs2/selectfield/triggers.js.map +1 -1
- package/lib/radio/index.js +74 -84
- package/lib/radio/index.js.map +1 -1
- package/lib/table/Row.js +57 -46
- package/lib/table/Row.js.map +1 -1
- package/lib/table/types.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
.split-component{font-family:Roboto,sans-serif;font-size:14px;line-height:1.6em;display:flex;flex-direction:row;width:100%;height:100%;overflow:hidden}.split-component p{font-size:14px}.split-component .layout-changing{cursor:col-resize}.split-component .layout-changing>.layout-splitter{background-color:#ddd}.split-component .layout-pane{position:relative;flex:0 0 auto;overflow:auto}.split-component .layout-pane>.layoutpanecontent{padding:2px}.split-component .layout-pane.layout-pane-primary{flex:1 1 auto}.split-component>.layout-splitter{flex:0 0 auto;width:5px;height:100%;cursor:col-resize;background:#ddd}.split-component>.layout-splitter>.toggler-horizontal{position:relative;display:block;padding:0;margin:0;overflow:hidden;text-align:center;font-size:1px;z-index:
|
|
1
|
+
.split-component{font-family:Roboto,sans-serif;font-size:14px;line-height:1.6em;display:flex;flex-direction:row;width:100%;height:100%;overflow:hidden}.split-component p{font-size:14px}.split-component .layout-changing{cursor:col-resize}.split-component .layout-changing>.layout-splitter{background-color:#ddd}.split-component .layout-pane{position:relative;flex:0 0 auto;overflow:auto}.split-component .layout-pane>.layoutpanecontent{padding:2px}.split-component .layout-pane.layout-pane-primary{flex:1 1 auto}.split-component>.layout-splitter{flex:0 0 auto;width:5px;height:100%;cursor:col-resize;background:#ddd}.split-component>.layout-splitter>.toggler-horizontal{position:relative;display:block;padding:0;margin:0;overflow:hidden;text-align:center;font-size:1px;z-index:0;background:#aaa;visibility:visible;height:50px;width:7px;top:45%;left:-1px;cursor:pointer}.split-component>.layout-splitter.layout-splitter:hover{background-color:#bbb}.split-component .layout-changing>.layout-splitter{background-color:#aaa}.split-component.splitter-layout-vertical{flex-direction:column}.split-component.splitter-layout-vertical>.layout-splitter{width:100%;height:5px;cursor:row-resize}.split-component.splitter-layout-vertical>.layout-splitter>.toggler-vertical{border-radius:2px;align-items:center;height:7px;width:54px;align-self:center;margin-left:47%;background:#aaa;margin-top:-1px;cursor:pointer}
|
package/lib/form/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as m, useContext as
|
|
1
|
+
import { jsxs as dr, jsx as w } from "react/jsx-runtime";
|
|
2
|
+
import { useState as m, useContext as mr, useRef as j, useCallback as pr, useEffect as E, Fragment as gr } from "react";
|
|
3
3
|
import n from "../_virtual/lodash.js";
|
|
4
|
-
import {
|
|
4
|
+
import { FormContext as Er, changeValue as L } from "./helpers.js";
|
|
5
5
|
import { default as Rr } from "./Field.js";
|
|
6
6
|
import { default as Qr } from "./FieldNumber.js";
|
|
7
7
|
import { default as Dr } from "./FieldArray.js";
|
|
@@ -15,80 +15,80 @@ const Cr = ({
|
|
|
15
15
|
submitOnPressEnterKey: F = !0,
|
|
16
16
|
dataSource: p,
|
|
17
17
|
securityBeforeUnload: x,
|
|
18
|
-
handlerReset:
|
|
19
|
-
handlerSubmit:
|
|
20
|
-
handlerValidates:
|
|
21
|
-
style:
|
|
22
|
-
customClass:
|
|
23
|
-
securityTitle:
|
|
24
|
-
securityText:
|
|
25
|
-
securityData:
|
|
18
|
+
handlerReset: C,
|
|
19
|
+
handlerSubmit: M,
|
|
20
|
+
handlerValidates: J,
|
|
21
|
+
style: W,
|
|
22
|
+
customClass: z,
|
|
23
|
+
securityTitle: I,
|
|
24
|
+
securityText: T,
|
|
25
|
+
securityData: A,
|
|
26
26
|
onDataChange: u,
|
|
27
27
|
onValidateForm: g,
|
|
28
|
-
externalFieldErrors:
|
|
29
|
-
onSubmit:
|
|
30
|
-
skeletonize:
|
|
28
|
+
externalFieldErrors: $,
|
|
29
|
+
onSubmit: G,
|
|
30
|
+
skeletonize: H,
|
|
31
31
|
disabled: V,
|
|
32
|
-
children:
|
|
32
|
+
children: X,
|
|
33
33
|
useInternalState: l = !1,
|
|
34
34
|
onValidateErrorsOnTab: b
|
|
35
35
|
}) => {
|
|
36
|
-
const
|
|
36
|
+
const Y = yr(), [v, R] = m(p), [h, Z] = m(p), [S, K] = m(F), [O, N] = m({}), [Q, _] = m(0), [rr, tr] = m(!1), c = mr(hr), er = j(null), a = j({}), d = j([]), f = l ? v : p, q = (r, t) => {
|
|
37
37
|
const e = r instanceof Array ? r : [r];
|
|
38
38
|
let o = [];
|
|
39
39
|
return e.forEach((s) => {
|
|
40
40
|
if (typeof s == "function") {
|
|
41
|
-
const
|
|
42
|
-
|
|
41
|
+
const i = s(t);
|
|
42
|
+
i && (o = [...o, i]);
|
|
43
43
|
}
|
|
44
44
|
}), o;
|
|
45
|
-
},
|
|
46
|
-
const e = r ||
|
|
47
|
-
let o = n.pickBy(O, (s,
|
|
48
|
-
return n.forEach(t, (s,
|
|
49
|
-
const
|
|
45
|
+
}, or = (r, t) => {
|
|
46
|
+
const e = r || f;
|
|
47
|
+
let o = n.pickBy(O, (s, i) => Object.keys(t).includes(i));
|
|
48
|
+
return n.forEach(t, (s, i) => {
|
|
49
|
+
const B = n.get(e, i), ur = q(s, B);
|
|
50
50
|
o = {
|
|
51
51
|
...o,
|
|
52
|
-
[
|
|
52
|
+
[i]: ur
|
|
53
53
|
};
|
|
54
54
|
}), o;
|
|
55
55
|
}, y = (r, t = !0, e = null) => {
|
|
56
|
-
const o =
|
|
57
|
-
return t &&
|
|
58
|
-
},
|
|
56
|
+
const o = or(r, e || a.current), s = Object.values(o).every((i) => i.length === 0);
|
|
57
|
+
return t && tr(s), s;
|
|
58
|
+
}, sr = (r) => {
|
|
59
59
|
const {
|
|
60
60
|
target: t
|
|
61
61
|
} = r;
|
|
62
|
-
!l && u ? u((e) =>
|
|
63
|
-
},
|
|
62
|
+
!l && u ? u((e) => L(e, t)) : R((e) => L(e, t));
|
|
63
|
+
}, nr = (r, t, e) => {
|
|
64
64
|
if (e) {
|
|
65
65
|
let o = O;
|
|
66
|
-
const s =
|
|
66
|
+
const s = q(e, t);
|
|
67
67
|
s.length === 0 ? o = n.omit(o, r) : o = {
|
|
68
68
|
...o,
|
|
69
69
|
[r]: s
|
|
70
70
|
}, N(o);
|
|
71
71
|
}
|
|
72
|
-
},
|
|
73
|
-
r && (r.preventDefault(), r.stopPropagation()), y(
|
|
74
|
-
},
|
|
72
|
+
}, D = (r) => {
|
|
73
|
+
r && (r.preventDefault(), r.stopPropagation()), y(f) && G(f);
|
|
74
|
+
}, P = (r, t) => {
|
|
75
75
|
const e = t ? t instanceof Array ? t : [t] : [];
|
|
76
76
|
e.length > 0 ? (r((o) => {
|
|
77
77
|
const s = JSON.parse(JSON.stringify(o));
|
|
78
|
-
return e.forEach((
|
|
79
|
-
|
|
78
|
+
return e.forEach((i) => {
|
|
79
|
+
i && n.set(s, i, n.get(h, i));
|
|
80
80
|
}), s;
|
|
81
81
|
}), N((o) => (e.forEach((s) => {
|
|
82
82
|
delete o[s];
|
|
83
83
|
}), o))) : (r(JSON.parse(JSON.stringify(h))), N({}));
|
|
84
|
+
}, ir = (r) => {
|
|
85
|
+
P(!l && u ? u : R, r);
|
|
84
86
|
}, cr = (r) => {
|
|
85
|
-
U(!l && u ? u : S, r);
|
|
86
|
-
}, fr = (r) => {
|
|
87
87
|
const t = n.omit(a, r);
|
|
88
88
|
a.current = t;
|
|
89
89
|
}, k = (r) => {
|
|
90
|
-
r.preventDefault(), n.isEqual(
|
|
91
|
-
},
|
|
90
|
+
r.preventDefault(), n.isEqual(f, h);
|
|
91
|
+
}, fr = pr((r) => {
|
|
92
92
|
if (!r.tabId) return;
|
|
93
93
|
const t = [...d.current].findIndex((e) => e.name === r.name);
|
|
94
94
|
if (t !== -1) {
|
|
@@ -102,57 +102,57 @@ const Cr = ({
|
|
|
102
102
|
})));
|
|
103
103
|
b(e);
|
|
104
104
|
}
|
|
105
|
-
}, [b]),
|
|
105
|
+
}, [b]), lr = () => {
|
|
106
106
|
let r = null;
|
|
107
107
|
return V || (r = {
|
|
108
108
|
onSubmit: (t) => t.preventDefault(),
|
|
109
109
|
onKeyPress: (t) => {
|
|
110
|
-
t && t.key === "Enter" && (t.preventDefault(), t.stopPropagation(),
|
|
110
|
+
t && t.key === "Enter" && (t.preventDefault(), t.stopPropagation(), S && D());
|
|
111
111
|
}
|
|
112
112
|
}), r;
|
|
113
|
-
},
|
|
114
|
-
if (!n.isEmpty(
|
|
113
|
+
}, U = () => {
|
|
114
|
+
if (!n.isEmpty(c)) {
|
|
115
115
|
const {
|
|
116
116
|
onChangedData: r
|
|
117
|
-
} =
|
|
118
|
-
|
|
117
|
+
} = c;
|
|
118
|
+
A && !n.isEqual(f, A) ? r(!0) : r(!1);
|
|
119
119
|
}
|
|
120
|
-
u && l && u(
|
|
120
|
+
u && l && u(f), g && g(y(f, !0)), V || (M(D), C && C(ir), J && J(() => y(f))), n.isEmpty(f) && Z(f);
|
|
121
121
|
};
|
|
122
122
|
E(() => {
|
|
123
|
-
l &&
|
|
123
|
+
l && U();
|
|
124
124
|
}, [JSON.stringify(v), l]), E(() => {
|
|
125
|
-
!l && u &&
|
|
126
|
-
}, [JSON.stringify(p), l]), E(() => (x && (Object.entries(
|
|
127
|
-
x && Object.entries(
|
|
125
|
+
!l && u && U();
|
|
126
|
+
}, [JSON.stringify(p), l]), E(() => (x && (Object.entries(c).length && c.setSecurityBeforeUnload(!0), window.addEventListener("beforeunload", k)), () => {
|
|
127
|
+
x && Object.entries(c).length && c.setSecurityBeforeUnload(!1), window.removeEventListener("beforeunload", k);
|
|
128
128
|
}), [x, k]), E(() => {
|
|
129
|
-
!V && F !==
|
|
129
|
+
!V && F !== S && K(F);
|
|
130
130
|
}, [F]), E(() => {
|
|
131
131
|
const r = Object.values(a.current).reduce((t, e) => t + (e?.length || 0), 0);
|
|
132
|
-
a.current && g &&
|
|
133
|
-
}, [a.current,
|
|
134
|
-
const
|
|
135
|
-
skeletonize:
|
|
136
|
-
handlerFieldChange:
|
|
137
|
-
handlerFieldValidate:
|
|
138
|
-
handleValidationErrorsOnTab:
|
|
132
|
+
a.current && g && Q !== r && (_(r), g(y(f, !0, a.current)));
|
|
133
|
+
}, [a.current, Q, g, JSON.stringify(f)]);
|
|
134
|
+
const ar = {
|
|
135
|
+
skeletonize: H,
|
|
136
|
+
handlerFieldChange: sr,
|
|
137
|
+
handlerFieldValidate: nr,
|
|
138
|
+
handleValidationErrorsOnTab: fr,
|
|
139
139
|
handlerStoreValidators: (r, t) => {
|
|
140
140
|
a.current = {
|
|
141
141
|
...a.current,
|
|
142
142
|
[r]: t
|
|
143
143
|
};
|
|
144
144
|
},
|
|
145
|
-
handlerRemoveValidators:
|
|
145
|
+
handlerRemoveValidators: cr,
|
|
146
146
|
data: l ? v : p,
|
|
147
147
|
originalData: h,
|
|
148
148
|
fieldErrors: O,
|
|
149
|
-
externalFieldErrors:
|
|
150
|
-
isFormValid:
|
|
149
|
+
externalFieldErrors: $,
|
|
150
|
+
isFormValid: rr
|
|
151
151
|
};
|
|
152
|
-
return /* @__PURE__ */
|
|
153
|
-
/* @__PURE__ */ w(Er.Provider, { value:
|
|
154
|
-
/* @__PURE__ */ w(Fr, { zIndex: "99999999", title:
|
|
155
|
-
}, onUnconfirmClick:
|
|
152
|
+
return /* @__PURE__ */ dr(gr, { children: [
|
|
153
|
+
/* @__PURE__ */ w(Er.Provider, { value: ar, children: /* @__PURE__ */ w("form", { id: Y, ref: er, style: W, ...lr(), role: "presentation", className: `form-component ${z}`, children: X }) }),
|
|
154
|
+
/* @__PURE__ */ w(Fr, { zIndex: "99999999", title: I || "Dados Alterados", text: T || "Você possui dados alterados, confirma o fechamento?", visible: !n.isEmpty(c) && c.showQuestion, onConfirmClick: c ? c.onConfirmClick : () => {
|
|
155
|
+
}, onUnconfirmClick: c ? c.onUnconfirmClick : () => {
|
|
156
156
|
} })
|
|
157
157
|
] });
|
|
158
158
|
};
|
package/lib/form/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/lib/form/index.tsx"],"sourcesContent":["import { Fragment, useState, useEffect, useContext, useRef, FormEvent, useCallback, KeyboardEvent, Dispatch, SetStateAction } from 'react';\nimport { v1 } from 'uuid';\nimport _ from 'lodash';\nimport { changeValue, FormContext } from './helpers';\nimport Field from './Field';\nimport FieldNumber from './FieldNumber';\nimport FieldArray from './FieldArray';\nimport FieldPeriod from './FieldPeriod';\nimport '../assets/styles/form.scss';\nimport { DialogQuestion } from '../dialog';\nimport { FormSecurityContext } from './withFormSecurity';\nimport { FieldErrors, FieldValidator, FormContextProps, FormProps, OnFielChangeEvent, Validator, type PropsValidateTabErrors } from './types';\n\nconst Form = ({\n submitOnPressEnterKey = true, dataSource, securityBeforeUnload, handlerReset, handlerSubmit,\n handlerValidates, style, customClass, securityTitle, securityText, securityData, onDataChange,\n onValidateForm, externalFieldErrors, onSubmit, skeletonize, disabled, children,\n useInternalState = false, onValidateErrorsOnTab,\n}: FormProps) => {\n const formId = v1();\n const [data, setData] = useState(dataSource);\n const [originalData, setOriginalData] = useState(dataSource);\n const [submitFormOnEnter, setSubmitFormOnEnter] = useState(submitOnPressEnterKey);\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n const [oldFieldsValidatorsQuantity, setOldFieldsValidatorsQuantity] = useState(0);\n const [isValid, setIsValid] = useState(false);\n const context = useContext(FormSecurityContext);\n const formRef = useRef<HTMLFormElement | null>(null);\n const fieldsValidators = useRef<FieldValidator>({});\n const tabsWithErrorRef = useRef<PropsValidateTabErrors[]>([]);\n const usedData = useInternalState ? data : dataSource;\n\n const getValidatesErrorMessages = (validators: Validator | Validator[], fieldValue: string) => {\n const validatorsArray = (!(validators instanceof Array)) ? [validators] : validators;\n let errors: string[] = [];\n validatorsArray.forEach((validator: Validator) => {\n if (typeof validator === 'function') {\n const result = validator(fieldValue);\n if (result) errors = [...errors, result];\n }\n });\n return errors;\n };\n\n const getErrorMessages = (\n currentData: object,\n currentValidators: Validator | Validator[] | FieldValidator,\n ) => {\n const dataValidate = currentData || usedData;\n let currentFieldErrors: FieldErrors = _.pickBy(fieldErrors, (__, fieldName) => {\n const fieldValidatorsNames = Object.keys(currentValidators);\n return fieldValidatorsNames.includes(fieldName);\n }) as FieldErrors;\n _.forEach(currentValidators, (validators, fieldName) => {\n const fieldValue = _.get(dataValidate, fieldName);\n const messages = getValidatesErrorMessages(validators, fieldValue);\n currentFieldErrors = { ...currentFieldErrors, [fieldName]: messages };\n });\n return currentFieldErrors;\n };\n\n const checkIsValid = (\n currentData: object,\n updateState = true,\n currentValidators: Validator | Validator[] | FieldValidator | null = null,\n ): boolean => {\n const currentFieldErrors =\n getErrorMessages(currentData, currentValidators || fieldsValidators.current);\n const isValidNow = Object.values(currentFieldErrors).every(value => value.length === 0);\n if (updateState) setIsValid(isValidNow);\n return isValidNow;\n };\n\n const onFieldChange = useCallback((event: OnFielChangeEvent) => {\n const { target } = event;\n if (!useInternalState && onDataChange) {\n onDataChange((prevState: object) => changeValue(prevState, target));\n } else {\n setData(prevState => changeValue(prevState, target));\n }\n }, []);\n\n const onValidate = (\n fieldName: string,\n fieldValue: string,\n validators: Validator | Validator[],\n ) => {\n if (validators) {\n let currentFieldErrors = fieldErrors;\n const errors = getValidatesErrorMessages(validators, fieldValue);\n if (errors.length === 0) {\n currentFieldErrors = _.omit(currentFieldErrors, fieldName);\n } else {\n currentFieldErrors = { ...currentFieldErrors, [fieldName]: errors };\n }\n setFieldErrors(currentFieldErrors);\n }\n };\n\n const onFormSubmit = useCallback((event?: Event) => {\n if (event) { event.preventDefault(); event.stopPropagation(); }\n if (checkIsValid(usedData)) onSubmit(usedData);\n }, [usedData]);\n\n const onResetField = (\n cb: Dispatch<SetStateAction<object>>,\n fields?: string | string[],\n ) => {\n const fieldsArray = !fields ? [] : (fields instanceof Array ? fields : [fields]);\n if (fieldsArray.length > 0) {\n cb((state: any) => {\n const newState = JSON.parse(JSON.stringify(state));\n fieldsArray.forEach((field) => {\n if (field)\n _.set(newState, field, _.get(originalData, field));\n });\n return newState;\n });\n\n setFieldErrors((state) => {\n fieldsArray.forEach((field) => {\n delete state[field];\n });\n return state;\n });\n } else {\n cb(JSON.parse(JSON.stringify(originalData)));\n setFieldErrors({});\n }\n };\n\n const onReset = (fields?: string | string[]) => {\n if (!useInternalState && onDataChange) {\n onResetField(onDataChange, fields);\n } else {\n onResetField(setData, fields);\n }\n };\n\n const onRemoveFieldValidators = (fieldName: string) => {\n const newFieldsValidators = _.omit(fieldsValidators, fieldName);\n fieldsValidators.current = newFieldsValidators;\n };\n\n const onBeforeUnload = (e: Event) => {\n const event = e as Event;\n event.preventDefault();\n if (_.isEqual(usedData, originalData)) return;\n };\n\n const onValidateTabErrors = useCallback((props: PropsValidateTabErrors) => {\n if (!props.tabId) return;\n\n const tabIndex = [...tabsWithErrorRef.current].findIndex(tab => tab.name === props.name);\n\n if (tabIndex !== -1) {\n const novasTabs = [...tabsWithErrorRef.current];\n novasTabs[tabIndex] = props;\n tabsWithErrorRef.current = [...novasTabs];\n } else {\n tabsWithErrorRef.current = [...tabsWithErrorRef.current, props];\n }\n\n if (onValidateErrorsOnTab) {\n const tabIdsWithErrors = _.uniq(\n _.compact(\n tabsWithErrorRef.current.map((tab) => {\n if (tab.hasErrors) return String(tab.tabId);\n }),\n ),\n );\n onValidateErrorsOnTab(tabIdsWithErrors);\n }\n }, [onValidateErrorsOnTab]);\n\n const formProps = () => {\n let propsForm = null;\n\n if (!disabled) {\n propsForm = {\n onSubmit: (event: FormEvent<HTMLFormElement>) => event.preventDefault(),\n onKeyPress: (event: KeyboardEvent<HTMLFormElement>) => {\n if (event && event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n if (submitFormOnEnter) onFormSubmit();\n }\n },\n };\n }\n return propsForm;\n };\n\n const updateFormState = () => {\n if (!_.isEmpty(context)) {\n const { onChangedData } = context;\n if (securityData && !_.isEqual(usedData, securityData)) {\n onChangedData(true);\n } else {\n onChangedData(false);\n }\n }\n\n if (onDataChange && useInternalState) onDataChange(usedData);\n\n // TODO - Usar debounce para evitar chamada a cada letra digitada\n if (onValidateForm) {\n onValidateForm(checkIsValid(usedData, true));\n }\n\n if (!disabled) {\n handlerSubmit(onFormSubmit);\n if (handlerReset) handlerReset(onReset);\n if (handlerValidates) handlerValidates(() => checkIsValid(usedData));\n }\n if (_.isEmpty(usedData)) setOriginalData(usedData);\n };\n\n useEffect(() => {\n if (useInternalState) updateFormState();\n }, [JSON.stringify(data), useInternalState]);\n\n useEffect(() => {\n if (!useInternalState && onDataChange) updateFormState();\n }, [JSON.stringify(dataSource), useInternalState]);\n\n useEffect(() => {\n if (securityBeforeUnload) {\n if (Object.entries(context).length) context.setSecurityBeforeUnload(true);\n window.addEventListener('beforeunload', onBeforeUnload);\n }\n return () => {\n if (securityBeforeUnload && Object.entries(context).length) \n context.setSecurityBeforeUnload(false);\n window.removeEventListener('beforeunload', onBeforeUnload);\n };\n }, [securityBeforeUnload, onBeforeUnload]);\n\n useEffect(() => {\n if (!disabled && submitOnPressEnterKey !== submitFormOnEnter) {\n setSubmitFormOnEnter(submitOnPressEnterKey);\n }\n }, [submitOnPressEnterKey]);\n\n useEffect(() => {\n const validatorsQuantity = Object.values(fieldsValidators.current)\n .reduce((acc, currentValue) => acc + (currentValue?.length || 0), 0);\n\n if (fieldsValidators.current && onValidateForm\n && oldFieldsValidatorsQuantity !== validatorsQuantity) {\n setOldFieldsValidatorsQuantity(validatorsQuantity);\n onValidateForm(checkIsValid(usedData, true, fieldsValidators.current));\n }\n }, [\n fieldsValidators.current, oldFieldsValidatorsQuantity, onValidateForm, JSON.stringify(usedData),\n ]);\n\n const contextValues: FormContextProps = {\n skeletonize,\n handlerFieldChange: onFieldChange,\n handlerFieldValidate: onValidate,\n handleValidationErrorsOnTab: onValidateTabErrors,\n handlerStoreValidators: (fieldName, fieldValidates) => {\n fieldsValidators.current = { ...fieldsValidators.current, [fieldName]: fieldValidates };\n },\n handlerRemoveValidators: onRemoveFieldValidators,\n data: useInternalState ? data : dataSource,\n originalData,\n fieldErrors,\n externalFieldErrors,\n isFormValid: isValid,\n };\n\n return (\n <Fragment>\n <FormContext.Provider value={contextValues}>\n <form\n id={formId}\n ref={formRef}\n style={style}\n {...formProps()}\n role=\"presentation\"\n className={`form-component ${customClass}`}>\n {children}\n </form>\n </FormContext.Provider>\n <DialogQuestion\n zIndex=\"99999999\"\n title={securityTitle || 'Dados Alterados'}\n text={securityText || 'Você possui dados alterados, confirma o fechamento?'}\n visible={!_.isEmpty(context) && context.showQuestion}\n onConfirmClick={context ? context.onConfirmClick : () => {}}\n onUnconfirmClick={context ? context.onUnconfirmClick : () => {}} />\n </Fragment>\n );\n};\n\nexport default Form;\nexport {\n Field,\n FieldNumber,\n FieldArray,\n FieldPeriod,\n};\n"],"names":["Form","submitOnPressEnterKey","dataSource","securityBeforeUnload","handlerReset","handlerSubmit","handlerValidates","style","customClass","securityTitle","securityText","securityData","onDataChange","onValidateForm","externalFieldErrors","onSubmit","skeletonize","disabled","children","useInternalState","onValidateErrorsOnTab","formId","v1","data","setData","useState","originalData","setOriginalData","submitFormOnEnter","setSubmitFormOnEnter","fieldErrors","setFieldErrors","oldFieldsValidatorsQuantity","setOldFieldsValidatorsQuantity","isValid","setIsValid","context","useContext","FormSecurityContext","formRef","useRef","fieldsValidators","tabsWithErrorRef","usedData","getValidatesErrorMessages","validators","fieldValue","validatorsArray","Array","errors","forEach","validator","result","getErrorMessages","currentData","currentValidators","dataValidate","currentFieldErrors","_","pickBy","__","fieldName","Object","keys","includes","get","messages","checkIsValid","updateState","current","isValidNow","values","every","value","length","onFieldChange","useCallback","event","target","prevState","changeValue","onValidate","omit","onFormSubmit","preventDefault","stopPropagation","onResetField","cb","fields","fieldsArray","state","newState","JSON","parse","stringify","field","set","onReset","onRemoveFieldValidators","newFieldsValidators","onBeforeUnload","e","isEqual","onValidateTabErrors","props","tabId","tabIndex","findIndex","tab","name","novasTabs","tabIdsWithErrors","uniq","compact","map","hasErrors","String","formProps","propsForm","onKeyPress","key","updateFormState","isEmpty","onChangedData","useEffect","entries","setSecurityBeforeUnload","window","addEventListener","removeEventListener","validatorsQuantity","reduce","acc","currentValue","contextValues","handlerFieldChange","handlerFieldValidate","handleValidationErrorsOnTab","handlerStoreValidators","fieldValidates","handlerRemoveValidators","isFormValid","Fragment","jsx","FormContext","DialogQuestion","showQuestion","onConfirmClick","onUnconfirmClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/lib/form/index.tsx"],"sourcesContent":["import { Fragment, useState, useEffect, useContext, useRef, FormEvent, useCallback, KeyboardEvent, Dispatch, SetStateAction } from 'react';\nimport { v1 } from 'uuid';\nimport _ from 'lodash';\nimport { changeValue, FormContext } from './helpers';\nimport Field from './Field';\nimport FieldNumber from './FieldNumber';\nimport FieldArray from './FieldArray';\nimport FieldPeriod from './FieldPeriod';\nimport '../assets/styles/form.scss';\nimport { DialogQuestion } from '../dialog';\nimport { FormSecurityContext } from './withFormSecurity';\nimport { FieldErrors, FieldValidator, FormContextProps, FormProps, OnFielChangeEvent, Validator, type PropsValidateTabErrors } from './types';\n\nconst Form = ({\n submitOnPressEnterKey = true, dataSource, securityBeforeUnload, handlerReset, handlerSubmit,\n handlerValidates, style, customClass, securityTitle, securityText, securityData, onDataChange,\n onValidateForm, externalFieldErrors, onSubmit, skeletonize, disabled, children,\n useInternalState = false, onValidateErrorsOnTab,\n}: FormProps) => {\n const formId = v1();\n const [data, setData] = useState(dataSource);\n const [originalData, setOriginalData] = useState(dataSource);\n const [submitFormOnEnter, setSubmitFormOnEnter] = useState(submitOnPressEnterKey);\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n const [oldFieldsValidatorsQuantity, setOldFieldsValidatorsQuantity] = useState(0);\n const [isValid, setIsValid] = useState(false);\n const context = useContext(FormSecurityContext);\n const formRef = useRef<HTMLFormElement | null>(null);\n const fieldsValidators = useRef<FieldValidator>({});\n const tabsWithErrorRef = useRef<PropsValidateTabErrors[]>([]);\n const usedData = useInternalState ? data : dataSource;\n\n const getValidatesErrorMessages = (validators: Validator | Validator[], fieldValue: string) => {\n const validatorsArray = (!(validators instanceof Array)) ? [validators] : validators;\n let errors: string[] = [];\n validatorsArray.forEach((validator: Validator) => {\n if (typeof validator === 'function') {\n const result = validator(fieldValue);\n if (result) errors = [...errors, result];\n }\n });\n return errors;\n };\n\n const getErrorMessages = (\n currentData: object,\n currentValidators: Validator | Validator[] | FieldValidator,\n ) => {\n const dataValidate = currentData || usedData;\n let currentFieldErrors: FieldErrors = _.pickBy(fieldErrors, (__, fieldName) => {\n const fieldValidatorsNames = Object.keys(currentValidators);\n return fieldValidatorsNames.includes(fieldName);\n }) as FieldErrors;\n _.forEach(currentValidators, (validators, fieldName) => {\n const fieldValue = _.get(dataValidate, fieldName);\n const messages = getValidatesErrorMessages(validators, fieldValue);\n currentFieldErrors = { ...currentFieldErrors, [fieldName]: messages };\n });\n return currentFieldErrors;\n };\n\n const checkIsValid = (\n currentData: object,\n updateState = true,\n currentValidators: Validator | Validator[] | FieldValidator | null = null,\n ): boolean => {\n const currentFieldErrors =\n getErrorMessages(currentData, currentValidators || fieldsValidators.current);\n const isValidNow = Object.values(currentFieldErrors).every(value => value.length === 0);\n if (updateState) setIsValid(isValidNow);\n return isValidNow;\n };\n\n const onFieldChange = (event: OnFielChangeEvent) => {\n const { target } = event;\n if (!useInternalState && onDataChange) {\n onDataChange((prevState: object) => changeValue(prevState, target));\n } else {\n setData(prevState => changeValue(prevState, target));\n }\n };\n\n const onValidate = (\n fieldName: string,\n fieldValue: string,\n validators: Validator | Validator[],\n ) => {\n if (validators) {\n let currentFieldErrors = fieldErrors;\n const errors = getValidatesErrorMessages(validators, fieldValue);\n if (errors.length === 0) {\n currentFieldErrors = _.omit(currentFieldErrors, fieldName);\n } else {\n currentFieldErrors = { ...currentFieldErrors, [fieldName]: errors };\n }\n setFieldErrors(currentFieldErrors);\n }\n };\n\n const onFormSubmit = (event?: Event) => {\n if (event) { event.preventDefault(); event.stopPropagation(); }\n if (checkIsValid(usedData)) onSubmit(usedData);\n };\n\n const onResetField = (\n cb: Dispatch<SetStateAction<object>>,\n fields?: string | string[],\n ) => {\n const fieldsArray = !fields ? [] : (fields instanceof Array ? fields : [fields]);\n if (fieldsArray.length > 0) {\n cb((state: any) => {\n const newState = JSON.parse(JSON.stringify(state));\n fieldsArray.forEach((field) => {\n if (field)\n _.set(newState, field, _.get(originalData, field));\n });\n return newState;\n });\n\n setFieldErrors((state) => {\n fieldsArray.forEach((field) => {\n delete state[field];\n });\n return state;\n });\n } else {\n cb(JSON.parse(JSON.stringify(originalData)));\n setFieldErrors({});\n }\n };\n\n const onReset = (fields?: string | string[]) => {\n if (!useInternalState && onDataChange) {\n onResetField(onDataChange, fields);\n } else {\n onResetField(setData, fields);\n }\n };\n\n const onRemoveFieldValidators = (fieldName: string) => {\n const newFieldsValidators = _.omit(fieldsValidators, fieldName);\n fieldsValidators.current = newFieldsValidators;\n };\n\n const onBeforeUnload = (e: Event) => {\n const event = e as Event;\n event.preventDefault();\n if (_.isEqual(usedData, originalData)) return;\n };\n\n const onValidateTabErrors = useCallback((props: PropsValidateTabErrors) => {\n if (!props.tabId) return;\n\n const tabIndex = [...tabsWithErrorRef.current].findIndex(tab => tab.name === props.name);\n\n if (tabIndex !== -1) {\n const novasTabs = [...tabsWithErrorRef.current];\n novasTabs[tabIndex] = props;\n tabsWithErrorRef.current = [...novasTabs];\n } else {\n tabsWithErrorRef.current = [...tabsWithErrorRef.current, props];\n }\n\n if (onValidateErrorsOnTab) {\n const tabIdsWithErrors = _.uniq(\n _.compact(\n tabsWithErrorRef.current.map((tab) => {\n if (tab.hasErrors) return String(tab.tabId);\n }),\n ),\n );\n onValidateErrorsOnTab(tabIdsWithErrors);\n }\n }, [onValidateErrorsOnTab]);\n\n const formProps = () => {\n let propsForm = null;\n\n if (!disabled) {\n propsForm = {\n onSubmit: (event: FormEvent<HTMLFormElement>) => event.preventDefault(),\n onKeyPress: (event: KeyboardEvent<HTMLFormElement>) => {\n if (event && event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n if (submitFormOnEnter) onFormSubmit();\n }\n },\n };\n }\n return propsForm;\n };\n\n const updateFormState = () => {\n if (!_.isEmpty(context)) {\n const { onChangedData } = context;\n if (securityData && !_.isEqual(usedData, securityData)) {\n onChangedData(true);\n } else {\n onChangedData(false);\n }\n }\n\n if (onDataChange && useInternalState) onDataChange(usedData);\n\n // TODO - Usar debounce para evitar chamada a cada letra digitada\n if (onValidateForm) {\n onValidateForm(checkIsValid(usedData, true));\n }\n\n if (!disabled) {\n handlerSubmit(onFormSubmit);\n if (handlerReset) handlerReset(onReset);\n if (handlerValidates) handlerValidates(() => checkIsValid(usedData));\n }\n if (_.isEmpty(usedData)) setOriginalData(usedData);\n };\n\n useEffect(() => {\n if (useInternalState) updateFormState();\n }, [JSON.stringify(data), useInternalState]);\n\n useEffect(() => {\n if (!useInternalState && onDataChange) updateFormState();\n }, [JSON.stringify(dataSource), useInternalState]);\n\n useEffect(() => {\n if (securityBeforeUnload) {\n if (Object.entries(context).length) context.setSecurityBeforeUnload(true);\n window.addEventListener('beforeunload', onBeforeUnload);\n }\n return () => {\n if (securityBeforeUnload && Object.entries(context).length) \n context.setSecurityBeforeUnload(false);\n window.removeEventListener('beforeunload', onBeforeUnload);\n };\n }, [securityBeforeUnload, onBeforeUnload]);\n\n useEffect(() => {\n if (!disabled && submitOnPressEnterKey !== submitFormOnEnter) {\n setSubmitFormOnEnter(submitOnPressEnterKey);\n }\n }, [submitOnPressEnterKey]);\n\n useEffect(() => {\n const validatorsQuantity = Object.values(fieldsValidators.current)\n .reduce((acc, currentValue) => acc + (currentValue?.length || 0), 0);\n\n if (fieldsValidators.current && onValidateForm\n && oldFieldsValidatorsQuantity !== validatorsQuantity) {\n setOldFieldsValidatorsQuantity(validatorsQuantity);\n onValidateForm(checkIsValid(usedData, true, fieldsValidators.current));\n }\n }, [\n fieldsValidators.current, oldFieldsValidatorsQuantity, onValidateForm, JSON.stringify(usedData),\n ]);\n\n const contextValues: FormContextProps = {\n skeletonize,\n handlerFieldChange: onFieldChange,\n handlerFieldValidate: onValidate,\n handleValidationErrorsOnTab: onValidateTabErrors,\n handlerStoreValidators: (fieldName, fieldValidates) => {\n fieldsValidators.current = { ...fieldsValidators.current, [fieldName]: fieldValidates };\n },\n handlerRemoveValidators: onRemoveFieldValidators,\n data: useInternalState ? data : dataSource,\n originalData,\n fieldErrors,\n externalFieldErrors,\n isFormValid: isValid,\n };\n\n return (\n <Fragment>\n <FormContext.Provider value={contextValues}>\n <form\n id={formId}\n ref={formRef}\n style={style}\n {...formProps()}\n role=\"presentation\"\n className={`form-component ${customClass}`}>\n {children}\n </form>\n </FormContext.Provider>\n <DialogQuestion\n zIndex=\"99999999\"\n title={securityTitle || 'Dados Alterados'}\n text={securityText || 'Você possui dados alterados, confirma o fechamento?'}\n visible={!_.isEmpty(context) && context.showQuestion}\n onConfirmClick={context ? context.onConfirmClick : () => {}}\n onUnconfirmClick={context ? context.onUnconfirmClick : () => {}} />\n </Fragment>\n );\n};\n\nexport default Form;\nexport {\n Field,\n FieldNumber,\n FieldArray,\n FieldPeriod,\n};\n"],"names":["Form","submitOnPressEnterKey","dataSource","securityBeforeUnload","handlerReset","handlerSubmit","handlerValidates","style","customClass","securityTitle","securityText","securityData","onDataChange","onValidateForm","externalFieldErrors","onSubmit","skeletonize","disabled","children","useInternalState","onValidateErrorsOnTab","formId","v1","data","setData","useState","originalData","setOriginalData","submitFormOnEnter","setSubmitFormOnEnter","fieldErrors","setFieldErrors","oldFieldsValidatorsQuantity","setOldFieldsValidatorsQuantity","isValid","setIsValid","context","useContext","FormSecurityContext","formRef","useRef","fieldsValidators","tabsWithErrorRef","usedData","getValidatesErrorMessages","validators","fieldValue","validatorsArray","Array","errors","forEach","validator","result","getErrorMessages","currentData","currentValidators","dataValidate","currentFieldErrors","_","pickBy","__","fieldName","Object","keys","includes","get","messages","checkIsValid","updateState","current","isValidNow","values","every","value","length","onFieldChange","event","target","prevState","changeValue","onValidate","omit","onFormSubmit","preventDefault","stopPropagation","onResetField","cb","fields","fieldsArray","state","newState","JSON","parse","stringify","field","set","onReset","onRemoveFieldValidators","newFieldsValidators","onBeforeUnload","e","isEqual","onValidateTabErrors","useCallback","props","tabId","tabIndex","findIndex","tab","name","novasTabs","tabIdsWithErrors","uniq","compact","map","hasErrors","String","formProps","propsForm","onKeyPress","key","updateFormState","isEmpty","onChangedData","useEffect","entries","setSecurityBeforeUnload","window","addEventListener","removeEventListener","validatorsQuantity","reduce","acc","currentValue","contextValues","handlerFieldChange","handlerFieldValidate","handleValidationErrorsOnTab","handlerStoreValidators","fieldValidates","handlerRemoveValidators","isFormValid","Fragment","jsx","FormContext","DialogQuestion","showQuestion","onConfirmClick","onUnconfirmClick"],"mappings":"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"}
|
|
@@ -1,67 +1,78 @@
|
|
|
1
1
|
import e from "../../_virtual/lodash.js";
|
|
2
|
-
import { useState as D, useRef as
|
|
2
|
+
import { useState as D, useRef as B } from "react";
|
|
3
3
|
import { flattenValidators as Q, deepMergeValues as U, mergeRefs as W } from "../helpers.js";
|
|
4
4
|
const $ = ({
|
|
5
5
|
initialValues: S,
|
|
6
|
-
validators:
|
|
6
|
+
validators: q = {},
|
|
7
7
|
options: C = {
|
|
8
8
|
validationMode: "default"
|
|
9
9
|
}
|
|
10
10
|
}) => {
|
|
11
|
-
const [u, V] = D(S), [
|
|
12
|
-
const n = Object.keys(
|
|
13
|
-
const
|
|
14
|
-
return !!(
|
|
11
|
+
const [u, V] = D(S), [f, i] = D({}), [F, m] = D({}), [E, O] = D({}), j = B({}), h = B(S), v = B(S), g = Q(q), w = (t, r = E, s = f) => {
|
|
12
|
+
const n = Object.keys(g).filter((a) => {
|
|
13
|
+
const c = e.get(r, a), o = !e.isEmpty(e.get(s, a));
|
|
14
|
+
return !!(c || o);
|
|
15
15
|
});
|
|
16
|
-
n.length &&
|
|
17
|
-
const
|
|
18
|
-
return n.forEach((
|
|
19
|
-
const l = e.get(t,
|
|
20
|
-
e.set(
|
|
21
|
-
}),
|
|
16
|
+
n.length && i((a) => {
|
|
17
|
+
const c = e.cloneDeep(a);
|
|
18
|
+
return n.forEach((o) => {
|
|
19
|
+
const l = e.get(t, o), b = (e.get(g, o) ?? []).map((p) => p(l, t)).filter((p) => !!p);
|
|
20
|
+
e.set(c, o, b);
|
|
21
|
+
}), c;
|
|
22
22
|
});
|
|
23
23
|
}, R = () => {
|
|
24
24
|
const t = {};
|
|
25
|
-
return Object.keys(
|
|
26
|
-
const s = e.get(u, r),
|
|
27
|
-
|
|
28
|
-
}),
|
|
29
|
-
},
|
|
25
|
+
return Object.keys(g).forEach((r) => {
|
|
26
|
+
const s = e.get(u, r), a = (e.get(g, r) ?? []).map((c) => c(s, u)).filter((c) => !!c);
|
|
27
|
+
a.length && e.set(t, r, a);
|
|
28
|
+
}), i(t), t;
|
|
29
|
+
}, T = () => Object.keys(g).every((t) => {
|
|
30
30
|
const r = e.get(u, t);
|
|
31
|
-
return (e.get(
|
|
32
|
-
}), k = (t) => e.get(
|
|
33
|
-
|
|
31
|
+
return (e.get(g, t) ?? []).every((n) => !n(r, u));
|
|
32
|
+
}), k = (t) => e.get(f, t) ?? [], x = (t) => {
|
|
33
|
+
i((r) => {
|
|
34
34
|
const s = e.cloneDeep(r);
|
|
35
|
-
return Object.entries(t).forEach(([n,
|
|
36
|
-
e.set(s, n,
|
|
35
|
+
return Object.entries(t).forEach(([n, a]) => {
|
|
36
|
+
e.set(s, n, a);
|
|
37
37
|
}), s;
|
|
38
38
|
});
|
|
39
39
|
}, I = (t) => e.get(u, t), A = (t, r) => {
|
|
40
40
|
V((s) => {
|
|
41
41
|
const n = e.cloneDeep(s);
|
|
42
42
|
e.set(n, t, r);
|
|
43
|
-
const
|
|
44
|
-
return m((
|
|
45
|
-
const l = e.cloneDeep(
|
|
46
|
-
return e.set(l, t,
|
|
47
|
-
}), C.validationMode === "default" &&
|
|
43
|
+
const a = e.get(v.current, t), c = !e.isEqual(a, r);
|
|
44
|
+
return m((o) => {
|
|
45
|
+
const l = e.cloneDeep(o);
|
|
46
|
+
return e.set(l, t, c), l;
|
|
47
|
+
}), C.validationMode === "default" && w(n), n;
|
|
48
48
|
});
|
|
49
49
|
}, H = (t, r) => {
|
|
50
|
-
const s =
|
|
50
|
+
const s = j.current[t];
|
|
51
51
|
s?.focus?.(), r?.shouldSelect && s?.select?.();
|
|
52
52
|
}, z = (t, r) => e.isEqual(e.get(u, t), r), G = (t) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
})
|
|
53
|
+
if (!t) {
|
|
54
|
+
i({});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
i((r) => {
|
|
58
|
+
const s = e.cloneDeep(r);
|
|
59
|
+
return t.forEach((n) => {
|
|
60
|
+
e.unset(s, n);
|
|
61
|
+
}), s;
|
|
62
|
+
});
|
|
63
|
+
}, y = (t, r) => {
|
|
64
|
+
const s = e.cloneDeep(u), n = e.cloneDeep(E), a = e.cloneDeep(F);
|
|
65
|
+
(t ?? Object.keys(h.current)).forEach((o) => {
|
|
66
|
+
const l = e.get(h.current, o);
|
|
67
|
+
e.set(s, o, l), e.set(n, o, !1), e.set(a, o, !1);
|
|
68
|
+
}), V(s), O(n), m(a), i(t ? (o) => {
|
|
69
|
+
const l = e.cloneDeep(o);
|
|
70
|
+
return t.forEach((d) => {
|
|
71
|
+
e.unset(l, d);
|
|
72
|
+
}), l;
|
|
73
|
+
} : {}), r || (v.current = h.current);
|
|
63
74
|
}, J = (t) => {
|
|
64
|
-
|
|
75
|
+
y(void 0, !0), V((r) => {
|
|
65
76
|
const s = U(r, t);
|
|
66
77
|
return v.current = s, s;
|
|
67
78
|
});
|
|
@@ -69,47 +80,47 @@ const $ = ({
|
|
|
69
80
|
const {
|
|
70
81
|
onChange: s,
|
|
71
82
|
onBlur: n,
|
|
72
|
-
ref:
|
|
83
|
+
ref: a
|
|
73
84
|
} = r ?? {};
|
|
74
85
|
return {
|
|
75
86
|
name: t,
|
|
76
|
-
ref: W((
|
|
77
|
-
|
|
78
|
-
},
|
|
87
|
+
ref: W((c) => {
|
|
88
|
+
j.current[t] = c;
|
|
89
|
+
}, a),
|
|
79
90
|
value: e.get(u, t, e.get(h.current, t, "")),
|
|
80
|
-
errors: e.get(
|
|
81
|
-
onChange: (
|
|
91
|
+
errors: e.get(f, t, []),
|
|
92
|
+
onChange: (c) => {
|
|
82
93
|
const {
|
|
83
|
-
value:
|
|
84
|
-
} =
|
|
94
|
+
value: o
|
|
95
|
+
} = c.target;
|
|
85
96
|
V((l) => {
|
|
86
|
-
const
|
|
87
|
-
e.set(
|
|
88
|
-
const
|
|
97
|
+
const d = e.cloneDeep(l);
|
|
98
|
+
e.set(d, t, o);
|
|
99
|
+
const b = !e.isEqual(e.get(v.current, t), o);
|
|
89
100
|
return m((p) => {
|
|
90
|
-
const
|
|
91
|
-
return e.set(
|
|
92
|
-
}), C.validationMode === "default" &&
|
|
93
|
-
}), s?.(
|
|
101
|
+
const M = e.cloneDeep(p);
|
|
102
|
+
return e.set(M, t, b), M;
|
|
103
|
+
}), C.validationMode === "default" && w(d, E, f), d;
|
|
104
|
+
}), s?.(c);
|
|
94
105
|
},
|
|
95
|
-
onBlur: (
|
|
96
|
-
const
|
|
97
|
-
e.set(
|
|
98
|
-
const
|
|
99
|
-
return e.set(
|
|
100
|
-
}), C.validationMode === "default" &&
|
|
106
|
+
onBlur: (c) => {
|
|
107
|
+
const o = e.cloneDeep(E);
|
|
108
|
+
e.set(o, t, !0), O((l) => {
|
|
109
|
+
const d = e.cloneDeep(l);
|
|
110
|
+
return e.set(d, t, !0), d;
|
|
111
|
+
}), C.validationMode === "default" && w(u, o, f), n?.(c);
|
|
101
112
|
}
|
|
102
113
|
};
|
|
103
114
|
}, L = (t) => (r) => {
|
|
104
115
|
r.preventDefault();
|
|
105
116
|
const s = R();
|
|
106
117
|
e.isEmpty(s) && t(u);
|
|
107
|
-
}, N =
|
|
118
|
+
}, N = T(), P = Object.values(F).some(Boolean);
|
|
108
119
|
return {
|
|
109
|
-
reset:
|
|
120
|
+
reset: y,
|
|
110
121
|
changed: F,
|
|
111
122
|
values: u,
|
|
112
|
-
errors:
|
|
123
|
+
errors: f,
|
|
113
124
|
touched: E,
|
|
114
125
|
isValid: N,
|
|
115
126
|
formHasChange: P,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/lib/form2/useForm/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { ChangeEvent, FocusEvent, FormEvent, useRef, useState } from 'react';\nimport type {\n FieldErrors, FieldChanged, FieldTouched, FieldFocusOptions, UseFormProps,\n UseFormReturn, DeepPartial,\n RegisterOptions,\n} from '../types';\nimport { deepMergeValues, flattenValidators, mergeRefs } from '../helpers';\n\nconst useForm = <ValuesType extends Record<string, any>>({\n initialValues,\n validators = {},\n options = { validationMode: 'default' },\n}: UseFormProps<ValuesType>): UseFormReturn<ValuesType> => {\n const [values, setValues] = useState<ValuesType>(initialValues);\n const [errors, setErrors] = useState<FieldErrors<ValuesType>>({});\n const [changed, setChanged] = useState<FieldChanged<ValuesType>>({});\n const [touched, setTouched] = useState<FieldTouched<ValuesType>>({});\n const fieldsRef = useRef<Record<string, HTMLInputElement | HTMLTextAreaElement | null>>({});\n const initialValuesRef = useRef<ValuesType>(initialValues);\n const valuesToCompareInChangedRef = useRef<ValuesType>(initialValues);\n\n const flattenedValidators = flattenValidators(validators);\n\n const validateBatchOfFields = (\n valuesSnapshot: ValuesType,\n touchedFields: FieldTouched<ValuesType> = touched,\n errorsFields: FieldErrors<ValuesType> = errors,\n ) => {\n const fieldsToValidate = Object.keys(flattenedValidators).filter((path) => {\n const wasTouched = _.get(touchedFields, path);\n const hasErrors = !_.isEmpty(_.get(errorsFields, path));\n return Boolean(wasTouched || hasErrors);\n });\n\n if (!fieldsToValidate.length) return;\n\n setErrors((prevErrorsState) => {\n const updatedErrorsState = _.cloneDeep(prevErrorsState);\n\n fieldsToValidate.forEach((path) => {\n const value = _.get(valuesSnapshot, path);\n const fieldValidators = _.get(flattenedValidators, path) ?? [];\n const fieldErrors = fieldValidators\n .map((validator: any) => validator(value, valuesSnapshot))\n .filter((message: string) => Boolean(message));\n\n _.set(updatedErrorsState, path, fieldErrors);\n });\n\n return updatedErrorsState;\n });\n };\n\n const validateAllFields = () => {\n const allValidationErrors: FieldErrors<ValuesType> = {};\n\n Object.keys(flattenedValidators).forEach((path) => {\n const value = _.get(values, path);\n const fieldValidators = _.get(flattenedValidators, path) ?? [];\n const fieldErrors = fieldValidators\n .map((validator: any) => validator(value, values))\n .filter((message: string) => Boolean(message));\n\n if (fieldErrors.length) {\n _.set(allValidationErrors, path, fieldErrors);\n }\n });\n\n setErrors(allValidationErrors);\n return allValidationErrors;\n };\n\n const checkFormIsValid = () => {\n return Object.keys(flattenedValidators).every((path) => {\n const value = _.get(values, path);\n const fieldValidators = _.get(flattenedValidators, path) ?? [];\n return fieldValidators.every((validator: any) => !validator(value, values));\n });\n };\n\n const getFieldError = (name: string): string[] => {\n const fieldErrors = _.get(errors, name) as string[] ?? [];\n return fieldErrors;\n };\n\n const setExternalErrors = (externalErrors: Record<string, string[]>) => {\n setErrors((prevStateErrors) => {\n const newErrorsState = _.cloneDeep(prevStateErrors);\n Object.entries(externalErrors).forEach(([key, value]) => {\n _.set(newErrorsState, key, value);\n });\n return newErrorsState;\n });\n };\n\n const getFieldValue = (name: string): any => {\n return _.get(values, name);\n };\n\n const setFieldValue = (name: string, value: any) => {\n setValues((prevStateValues) => {\n const updatedValuesState = _.cloneDeep(prevStateValues);\n _.set(updatedValuesState, name, value);\n\n const valueToCompare = _.get(valuesToCompareInChangedRef.current, name);\n const hasChanged = !_.isEqual(valueToCompare, value);\n\n setChanged((prevStateChanged) => {\n const updatedChangedState = _.cloneDeep(prevStateChanged);\n _.set(updatedChangedState, name, hasChanged);\n return updatedChangedState;\n });\n\n if (options.validationMode === 'default') {\n validateBatchOfFields(updatedValuesState);\n }\n\n return updatedValuesState;\n });\n };\n\n const setFieldFocus = (name: string, fieldFocusOptions?: FieldFocusOptions) => {\n const field = fieldsRef.current[name];\n field?.focus?.();\n if (fieldFocusOptions?.shouldSelect) {\n field?.select?.();\n }\n };\n\n const compareField = (name: string, valueToCompare: any): boolean => {\n return _.isEqual(_.get(values, name), valueToCompare);\n };\n\n const cleanErrors = (fieldsToClean?: string[]) => {\n const newErrorsState = _.cloneDeep(errors);\n const fields = fieldsToClean ?? Object.keys(errors);\n\n fields.forEach((key) => {\n _.set(newErrorsState, key, []);\n });\n\n setErrors(newErrorsState);\n };\n\n const reset = (inputsToReset?: string[], internalReset?: boolean) => {\n const newValuesState = _.cloneDeep(values);\n const newTouchedState = _.cloneDeep(touched);\n const newChangedState = _.cloneDeep(changed);\n const newErrorsState = _.cloneDeep(errors);\n const inputs = inputsToReset ?? Object.keys(initialValuesRef.current);\n\n inputs.forEach((key) => {\n const initialValue = _.get(initialValuesRef.current, key);\n _.set(newValuesState, key, initialValue);\n _.set(newTouchedState, key, false);\n _.set(newChangedState, key, false);\n _.set(newErrorsState, key, []);\n });\n\n setValues(newValuesState);\n setTouched(newTouchedState);\n setChanged(newChangedState);\n setErrors(newErrorsState);\n\n if (!internalReset) { valuesToCompareInChangedRef.current = initialValuesRef.current; }\n };\n\n const changeValues = (fieldValues: DeepPartial<ValuesType>) => {\n reset(undefined, true);\n setValues((prevStateValues) => {\n const newValuesState = deepMergeValues(prevStateValues, fieldValues);\n valuesToCompareInChangedRef.current = newValuesState;\n return newValuesState;\n });\n };\n\n const register = (\n name: string,\n registerOptions?: RegisterOptions,\n ) => {\n const { onChange, onBlur, ref } = registerOptions ?? {};\n return {\n name,\n ref: mergeRefs<HTMLInputElement | HTMLTextAreaElement>((inputElement: any) => {\n fieldsRef.current[name] = inputElement;\n }, ref),\n value: _.get(values, name, _.get(initialValuesRef.current, name, '')),\n errors: _.get(errors, name, []),\n onChange: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { value } = event.target;\n\n setValues((prevStateValues) => {\n const updatedValues = _.cloneDeep(prevStateValues);\n _.set(updatedValues, name, value);\n\n const hasChanged = !_.isEqual(_.get(valuesToCompareInChangedRef.current, name), value);\n setChanged((prevStateChanged) => {\n const updatedChangedState = _.cloneDeep(prevStateChanged);\n _.set(updatedChangedState, name, hasChanged);\n return updatedChangedState;\n });\n\n if (options.validationMode === 'default') {\n validateBatchOfFields(updatedValues, touched, errors);\n }\n\n return updatedValues;\n });\n\n onChange?.(event);\n },\n onBlur: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const touchedSnapshot = _.cloneDeep(touched);\n _.set(touchedSnapshot, name, true);\n\n setTouched((prevStateTouched) => {\n const updated = _.cloneDeep(prevStateTouched);\n _.set(updated, name, true);\n return updated;\n });\n\n if (options.validationMode === 'default') {\n validateBatchOfFields(values, touchedSnapshot, errors);\n }\n\n onBlur?.(event);\n },\n };\n };\n\n const handleSubmit = (callback: (data: ValuesType) => void) => (event: FormEvent) => {\n event.preventDefault();\n\n const validationErrors = validateAllFields();\n const hasErrors = !_.isEmpty(validationErrors);\n\n if (hasErrors) return;\n callback(values);\n };\n\n const isValid = checkFormIsValid();\n const formHasChange = Object.values(changed).some(Boolean);\n\n return {\n reset,\n changed,\n values,\n errors,\n touched,\n isValid,\n formHasChange,\n register,\n cleanErrors,\n changeValues,\n compareField,\n handleSubmit,\n getFieldValue,\n getFieldError,\n setFieldFocus,\n setFieldValue,\n setExternalErrors,\n initialValues: initialValuesRef.current,\n };\n};\n\nexport default useForm;\n"],"names":["useForm","initialValues","validators","options","validationMode","values","setValues","useState","errors","setErrors","changed","setChanged","touched","setTouched","fieldsRef","useRef","initialValuesRef","valuesToCompareInChangedRef","flattenedValidators","flattenValidators","validateBatchOfFields","valuesSnapshot","touchedFields","errorsFields","fieldsToValidate","Object","keys","filter","path","wasTouched","_","get","hasErrors","isEmpty","Boolean","length","prevErrorsState","updatedErrorsState","cloneDeep","forEach","value","fieldErrors","map","validator","message","set","validateAllFields","allValidationErrors","checkFormIsValid","every","getFieldError","name","setExternalErrors","externalErrors","prevStateErrors","newErrorsState","entries","key","getFieldValue","setFieldValue","prevStateValues","updatedValuesState","valueToCompare","current","hasChanged","isEqual","prevStateChanged","updatedChangedState","setFieldFocus","fieldFocusOptions","field","focus","shouldSelect","select","compareField","cleanErrors","fieldsToClean","fields","reset","inputsToReset","internalReset","newValuesState","newTouchedState","newChangedState","inputs","initialValue","changeValues","fieldValues","undefined","deepMergeValues","register","registerOptions","onChange","onBlur","ref","mergeRefs","inputElement","event","target","updatedValues","touchedSnapshot","prevStateTouched","updated","handleSubmit","callback","preventDefault","validationErrors","isValid","formHasChange","some"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/lib/form2/useForm/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { ChangeEvent, FocusEvent, FormEvent, useRef, useState } from 'react';\nimport type {\n FieldErrors, FieldChanged, FieldTouched, FieldFocusOptions, UseFormProps,\n UseFormReturn, DeepPartial,\n RegisterOptions,\n} from '../types';\nimport { deepMergeValues, flattenValidators, mergeRefs } from '../helpers';\n\nconst useForm = <ValuesType extends Record<string, any>>({\n initialValues,\n validators = {},\n options = { validationMode: 'default' },\n}: UseFormProps<ValuesType>): UseFormReturn<ValuesType> => {\n const [values, setValues] = useState<ValuesType>(initialValues);\n const [errors, setErrors] = useState<FieldErrors<ValuesType>>({});\n const [changed, setChanged] = useState<FieldChanged<ValuesType>>({});\n const [touched, setTouched] = useState<FieldTouched<ValuesType>>({});\n const fieldsRef = useRef<Record<string, HTMLInputElement | HTMLTextAreaElement | null>>({});\n const initialValuesRef = useRef<ValuesType>(initialValues);\n const valuesToCompareInChangedRef = useRef<ValuesType>(initialValues);\n\n const flattenedValidators = flattenValidators(validators);\n\n const validateBatchOfFields = (\n valuesSnapshot: ValuesType,\n touchedFields: FieldTouched<ValuesType> = touched,\n errorsFields: FieldErrors<ValuesType> = errors,\n ) => {\n const fieldsToValidate = Object.keys(flattenedValidators).filter((path) => {\n const wasTouched = _.get(touchedFields, path);\n const hasErrors = !_.isEmpty(_.get(errorsFields, path));\n return Boolean(wasTouched || hasErrors);\n });\n\n if (!fieldsToValidate.length) return;\n\n setErrors((prevErrorsState) => {\n const updatedErrorsState = _.cloneDeep(prevErrorsState);\n\n fieldsToValidate.forEach((path) => {\n const value = _.get(valuesSnapshot, path);\n const fieldValidators = _.get(flattenedValidators, path) ?? [];\n const fieldErrors = fieldValidators\n .map((validator: any) => validator(value, valuesSnapshot))\n .filter((message: string) => Boolean(message));\n\n _.set(updatedErrorsState, path, fieldErrors);\n });\n\n return updatedErrorsState;\n });\n };\n\n const validateAllFields = () => {\n const allValidationErrors: FieldErrors<ValuesType> = {};\n\n Object.keys(flattenedValidators).forEach((path) => {\n const value = _.get(values, path);\n const fieldValidators = _.get(flattenedValidators, path) ?? [];\n const fieldErrors = fieldValidators\n .map((validator: any) => validator(value, values))\n .filter((message: string) => Boolean(message));\n\n if (fieldErrors.length) {\n _.set(allValidationErrors, path, fieldErrors);\n }\n });\n\n setErrors(allValidationErrors);\n return allValidationErrors;\n };\n\n const checkFormIsValid = () => {\n return Object.keys(flattenedValidators).every((path) => {\n const value = _.get(values, path);\n const fieldValidators = _.get(flattenedValidators, path) ?? [];\n return fieldValidators.every((validator: any) => !validator(value, values));\n });\n };\n\n const getFieldError = (name: string): string[] => {\n const fieldErrors = _.get(errors, name) as string[] ?? [];\n return fieldErrors;\n };\n\n const setExternalErrors = (externalErrors: Record<string, string[]>) => {\n setErrors((prevStateErrors) => {\n const newErrorsState = _.cloneDeep(prevStateErrors);\n Object.entries(externalErrors).forEach(([key, value]) => {\n _.set(newErrorsState, key, value);\n });\n return newErrorsState;\n });\n };\n\n const getFieldValue = (name: string): any => {\n return _.get(values, name);\n };\n\n const setFieldValue = (name: string, value: any) => {\n setValues((prevStateValues) => {\n const updatedValuesState = _.cloneDeep(prevStateValues);\n _.set(updatedValuesState, name, value);\n\n const valueToCompare = _.get(valuesToCompareInChangedRef.current, name);\n const hasChanged = !_.isEqual(valueToCompare, value);\n\n setChanged((prevStateChanged) => {\n const updatedChangedState = _.cloneDeep(prevStateChanged);\n _.set(updatedChangedState, name, hasChanged);\n return updatedChangedState;\n });\n\n if (options.validationMode === 'default') {\n validateBatchOfFields(updatedValuesState);\n }\n\n return updatedValuesState;\n });\n };\n\n const setFieldFocus = (name: string, fieldFocusOptions?: FieldFocusOptions) => {\n const field = fieldsRef.current[name];\n field?.focus?.();\n if (fieldFocusOptions?.shouldSelect) {\n field?.select?.();\n }\n };\n\n const compareField = (name: string, valueToCompare: any): boolean => {\n return _.isEqual(_.get(values, name), valueToCompare);\n };\n\n const cleanErrors = (fieldsToClean?: string[]) => {\n if (!fieldsToClean) {\n setErrors({});\n return;\n }\n\n setErrors((prevErrorsState) => {\n const newErrorsState = _.cloneDeep(prevErrorsState);\n fieldsToClean.forEach((key) => {\n _.unset(newErrorsState, key);\n });\n return newErrorsState;\n });\n };\n\n const reset = (inputsToReset?: string[], internalReset?: boolean) => {\n const newValuesState = _.cloneDeep(values);\n const newTouchedState = _.cloneDeep(touched);\n const newChangedState = _.cloneDeep(changed);\n const inputs = inputsToReset ?? Object.keys(initialValuesRef.current);\n\n inputs.forEach((key) => {\n const initialValue = _.get(initialValuesRef.current, key);\n _.set(newValuesState, key, initialValue);\n _.set(newTouchedState, key, false);\n _.set(newChangedState, key, false);\n });\n\n setValues(newValuesState);\n setTouched(newTouchedState);\n setChanged(newChangedState);\n\n if (inputsToReset) {\n setErrors((prevErrorsState) => {\n const newErrorsState = _.cloneDeep(prevErrorsState);\n inputsToReset.forEach((key) => {\n _.unset(newErrorsState, key);\n });\n return newErrorsState;\n });\n } else {\n setErrors({});\n }\n\n if (!internalReset) { valuesToCompareInChangedRef.current = initialValuesRef.current; }\n };\n\n const changeValues = (fieldValues: DeepPartial<ValuesType>) => {\n reset(undefined, true);\n setValues((prevStateValues) => {\n const newValuesState = deepMergeValues(prevStateValues, fieldValues);\n valuesToCompareInChangedRef.current = newValuesState;\n return newValuesState;\n });\n };\n\n const register = (\n name: string,\n registerOptions?: RegisterOptions,\n ) => {\n const { onChange, onBlur, ref } = registerOptions ?? {};\n return {\n name,\n ref: mergeRefs<HTMLInputElement | HTMLTextAreaElement>((inputElement: any) => {\n fieldsRef.current[name] = inputElement;\n }, ref),\n value: _.get(values, name, _.get(initialValuesRef.current, name, '')),\n errors: _.get(errors, name, []),\n onChange: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { value } = event.target;\n\n setValues((prevStateValues) => {\n const updatedValues = _.cloneDeep(prevStateValues);\n _.set(updatedValues, name, value);\n\n const hasChanged = !_.isEqual(_.get(valuesToCompareInChangedRef.current, name), value);\n setChanged((prevStateChanged) => {\n const updatedChangedState = _.cloneDeep(prevStateChanged);\n _.set(updatedChangedState, name, hasChanged);\n return updatedChangedState;\n });\n\n if (options.validationMode === 'default') {\n validateBatchOfFields(updatedValues, touched, errors);\n }\n\n return updatedValues;\n });\n\n onChange?.(event);\n },\n onBlur: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const touchedSnapshot = _.cloneDeep(touched);\n _.set(touchedSnapshot, name, true);\n\n setTouched((prevStateTouched) => {\n const updated = _.cloneDeep(prevStateTouched);\n _.set(updated, name, true);\n return updated;\n });\n\n if (options.validationMode === 'default') {\n validateBatchOfFields(values, touchedSnapshot, errors);\n }\n\n onBlur?.(event);\n },\n };\n };\n\n const handleSubmit = (callback: (data: ValuesType) => void) => (event: FormEvent) => {\n event.preventDefault();\n\n const validationErrors = validateAllFields();\n const hasErrors = !_.isEmpty(validationErrors);\n\n if (hasErrors) return;\n callback(values);\n };\n\n const isValid = checkFormIsValid();\n const formHasChange = Object.values(changed).some(Boolean);\n\n return {\n reset,\n changed,\n values,\n errors,\n touched,\n isValid,\n formHasChange,\n register,\n cleanErrors,\n changeValues,\n compareField,\n handleSubmit,\n getFieldValue,\n getFieldError,\n setFieldFocus,\n setFieldValue,\n setExternalErrors,\n initialValues: initialValuesRef.current,\n };\n};\n\nexport default useForm;\n"],"names":["useForm","initialValues","validators","options","validationMode","values","setValues","useState","errors","setErrors","changed","setChanged","touched","setTouched","fieldsRef","useRef","initialValuesRef","valuesToCompareInChangedRef","flattenedValidators","flattenValidators","validateBatchOfFields","valuesSnapshot","touchedFields","errorsFields","fieldsToValidate","Object","keys","filter","path","wasTouched","_","get","hasErrors","isEmpty","Boolean","length","prevErrorsState","updatedErrorsState","cloneDeep","forEach","value","fieldErrors","map","validator","message","set","validateAllFields","allValidationErrors","checkFormIsValid","every","getFieldError","name","setExternalErrors","externalErrors","prevStateErrors","newErrorsState","entries","key","getFieldValue","setFieldValue","prevStateValues","updatedValuesState","valueToCompare","current","hasChanged","isEqual","prevStateChanged","updatedChangedState","setFieldFocus","fieldFocusOptions","field","focus","shouldSelect","select","compareField","cleanErrors","fieldsToClean","unset","reset","inputsToReset","internalReset","newValuesState","newTouchedState","newChangedState","inputs","initialValue","changeValues","fieldValues","undefined","deepMergeValues","register","registerOptions","onChange","onBlur","ref","mergeRefs","inputElement","event","target","updatedValues","touchedSnapshot","prevStateTouched","updated","handleSubmit","callback","preventDefault","validationErrors","isValid","formHasChange","some"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CSSProperties, KeyboardEvent, MutableRefObject, RefObject, DragEvent, MouseEvent, JSX, ReactNode } from 'react';
|
|
1
|
+
import { CSSProperties, KeyboardEvent, MutableRefObject, RefObject, DragEvent, MouseEvent, JSX, ReactNode, HTMLInputAutoCompleteAttribute } from 'react';
|
|
2
2
|
import { TextAlign } from 'src/lib/@types/Align';
|
|
3
3
|
import { ITooltipCommonProps } from 'src/lib/tooltip/types';
|
|
4
4
|
import { Period } from '../../@types/Period';
|
|
@@ -80,9 +80,9 @@ export interface IBaseProps extends ITooltipCommonProps {
|
|
|
80
80
|
accept?: string;
|
|
81
81
|
multiple?: boolean;
|
|
82
82
|
readOnlyClass?: string;
|
|
83
|
-
autoComplete?: 'on' | 'off';
|
|
84
83
|
themePopover?: 'light' | 'dark';
|
|
85
84
|
popoverAlign?: 'right' | 'left';
|
|
86
85
|
tabIndex?: number;
|
|
87
86
|
defaultValue?: string | string[];
|
|
87
|
+
autoComplete?: HTMLInputAutoCompleteAttribute;
|
|
88
88
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { JSX, KeyboardEvent, MutableRefObject } from 'react';
|
|
1
|
+
import { JSX, KeyboardEvent, MutableRefObject, HTMLInputAutoCompleteAttribute } from 'react';
|
|
2
2
|
import { TextAlign } from 'src/lib/@types/Align';
|
|
3
3
|
import { OnDenied, PermissionAttr } from '../../@types/PermissionAttr';
|
|
4
4
|
import { CustomInputEvent } from '../base/types';
|
|
@@ -54,6 +54,7 @@ export type IBaseMaskProps = {
|
|
|
54
54
|
mapToRadix?: string[];
|
|
55
55
|
normalizeZeros?: boolean;
|
|
56
56
|
isDateTimeField?: boolean;
|
|
57
|
+
autoComplete?: HTMLInputAutoCompleteAttribute;
|
|
57
58
|
};
|
|
58
59
|
export type ICnpjFieldProps = IBaseMaskProps & {
|
|
59
60
|
value?: string;
|