@ioca/react 1.5.15 → 1.5.17
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/README.md +5 -0
- package/lib/cjs/components/datagrid/datagrid.js +1 -1
- package/lib/cjs/components/datagrid/datagrid.js.map +1 -1
- package/lib/cjs/components/drawer/drawer.js +4 -1
- package/lib/cjs/components/drawer/drawer.js.map +1 -1
- package/lib/cjs/components/form/field.js +9 -5
- package/lib/cjs/components/form/field.js.map +1 -1
- package/lib/cjs/components/form/form.js +16 -8
- package/lib/cjs/components/form/form.js.map +1 -1
- package/lib/cjs/components/form/useConfig.js +1 -1
- package/lib/cjs/components/form/useConfig.js.map +1 -1
- package/lib/cjs/components/form/useForm.js +43 -58
- package/lib/cjs/components/form/useForm.js.map +1 -1
- package/lib/cjs/components/form/utils.js +33 -0
- package/lib/cjs/components/form/utils.js.map +1 -0
- package/lib/cjs/components/picker/time/index.js +1 -0
- package/lib/cjs/components/picker/time/index.js.map +1 -1
- package/lib/css/colors.css +1 -1
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/css/tokens.css +11 -10
- package/lib/es/components/datagrid/datagrid.js +1 -1
- package/lib/es/components/datagrid/datagrid.js.map +1 -1
- package/lib/es/components/drawer/drawer.js +4 -1
- package/lib/es/components/drawer/drawer.js.map +1 -1
- package/lib/es/components/form/field.js +9 -5
- package/lib/es/components/form/field.js.map +1 -1
- package/lib/es/components/form/form.js +17 -9
- package/lib/es/components/form/form.js.map +1 -1
- package/lib/es/components/form/useConfig.js +1 -1
- package/lib/es/components/form/useConfig.js.map +1 -1
- package/lib/es/components/form/useForm.js +43 -58
- package/lib/es/components/form/useForm.js.map +1 -1
- package/lib/es/components/form/utils.js +29 -0
- package/lib/es/components/form/utils.js.map +1 -0
- package/lib/es/components/picker/time/index.js +1 -0
- package/lib/es/components/picker/time/index.js.map +1 -1
- package/lib/index.js +101 -75
- package/lib/types/components/form/useForm.d.ts +3 -3
- package/package.json +1 -1
|
@@ -40,10 +40,10 @@ function Field(props) {
|
|
|
40
40
|
useEffect(() => {
|
|
41
41
|
if (!name)
|
|
42
42
|
return;
|
|
43
|
-
PubSub.subscribe(`${id}:set:${name}`, (
|
|
43
|
+
PubSub.subscribe(`${id}:set:${name}`, (_evt, v) => {
|
|
44
44
|
setFieldValue(v);
|
|
45
45
|
});
|
|
46
|
-
PubSub.subscribe(`${id}:invalid:${name}`, (
|
|
46
|
+
PubSub.subscribe(`${id}:invalid:${name}`, (_evt, v) => {
|
|
47
47
|
if (v?.value !== undefined)
|
|
48
48
|
setFieldValue(v.value);
|
|
49
49
|
if (v?.status)
|
|
@@ -52,14 +52,18 @@ function Field(props) {
|
|
|
52
52
|
setFieldMessage(v.message);
|
|
53
53
|
});
|
|
54
54
|
Promise.resolve().then(() => {
|
|
55
|
-
|
|
55
|
+
if (name in form.cacheData) {
|
|
56
|
+
form.set(name, form.cacheData[name]);
|
|
57
|
+
}
|
|
56
58
|
});
|
|
57
59
|
return () => {
|
|
58
60
|
PubSub.unsubscribe(`${id}:set:${name}`);
|
|
59
61
|
PubSub.unsubscribe(`${id}:invalid:${name}`);
|
|
60
|
-
|
|
62
|
+
if (name && !name.includes(".")) {
|
|
63
|
+
form.data[name] = undefined;
|
|
64
|
+
}
|
|
61
65
|
};
|
|
62
|
-
}, [name
|
|
66
|
+
}, [name]);
|
|
63
67
|
if (!name)
|
|
64
68
|
return children;
|
|
65
69
|
return hijackChildren;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sources":["../../../../packages/components/form/field.tsx"],"sourcesContent":["import PubSub from \"pubsub-js\";\nimport {\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport Context from \"./context\";\nimport { IField } from \"./type\";\n\nfunction Field(props: IField) {\n\tconst { name, required, children } = props;\n\tconst [fieldValue, setFieldValue] = useState<any>(undefined);\n\tconst [fieldStatus, setFieldStatus] = useState(\"normal\");\n\tconst [fieldMessage, setFieldMessage] = useState<any>(undefined);\n\tconst form = useContext(Context);\n\tconst { id } = form;\n\n\tconst handleChange = (v) => {\n\t\tif (!name) return;\n\n\t\tform.set(name, v);\n\t\tPubSub.publish(`${id}:change`, {\n\t\t\tname,\n\t\t\tvalue: v,\n\t\t});\n\t};\n\n\tconst hijackChildren = useMemo(() => {\n\t\treturn Children.map(children, (node) => {\n\t\t\tif (!isValidElement(node)) return null;\n\n\t\t\tconst { onChange } = node.props as any;\n\n\t\t\treturn cloneElement(node, {\n\t\t\t\tvalue: fieldValue,\n\t\t\t\tstatus: fieldStatus,\n\t\t\t\tmessage: fieldMessage,\n\t\t\t\trequired,\n\t\t\t\tonChange: (...args) => {\n\t\t\t\t\thandleChange(args[0]);\n\t\t\t\t\tonChange?.(...args);\n\t\t\t\t\tsetFieldStatus(\"normal\");\n\t\t\t\t\tsetFieldMessage(undefined);\n\t\t\t\t},\n\t\t\t} as any);\n\t\t});\n\t}, [children, fieldValue, fieldStatus, fieldMessage, required]);\n\n\tuseEffect(() => {\n\t\tif (!name) return;\n\n\t\tPubSub.subscribe(`${id}:set:${name}`, (
|
|
1
|
+
{"version":3,"file":"field.js","sources":["../../../../packages/components/form/field.tsx"],"sourcesContent":["import PubSub from \"pubsub-js\";\nimport {\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport Context from \"./context\";\nimport { IField } from \"./type\";\n\nfunction Field(props: IField) {\n\tconst { name, required, children } = props;\n\tconst [fieldValue, setFieldValue] = useState<any>(undefined);\n\tconst [fieldStatus, setFieldStatus] = useState(\"normal\");\n\tconst [fieldMessage, setFieldMessage] = useState<any>(undefined);\n\tconst form = useContext(Context);\n\tconst { id } = form;\n\n\tconst handleChange = (v) => {\n\t\tif (!name) return;\n\n\t\tform.set(name, v);\n\t\tPubSub.publish(`${id}:change`, {\n\t\t\tname,\n\t\t\tvalue: v,\n\t\t});\n\t};\n\n\tconst hijackChildren = useMemo(() => {\n\t\treturn Children.map(children, (node) => {\n\t\t\tif (!isValidElement(node)) return null;\n\n\t\t\tconst { onChange } = node.props as any;\n\n\t\t\treturn cloneElement(node, {\n\t\t\t\tvalue: fieldValue,\n\t\t\t\tstatus: fieldStatus,\n\t\t\t\tmessage: fieldMessage,\n\t\t\t\trequired,\n\t\t\t\tonChange: (...args) => {\n\t\t\t\t\thandleChange(args[0]);\n\t\t\t\t\tonChange?.(...args);\n\t\t\t\t\tsetFieldStatus(\"normal\");\n\t\t\t\t\tsetFieldMessage(undefined);\n\t\t\t\t},\n\t\t\t} as any);\n\t\t});\n\t}, [children, fieldValue, fieldStatus, fieldMessage, required]);\n\n\tuseEffect(() => {\n\t\tif (!name) return;\n\n\t\tPubSub.subscribe(`${id}:set:${name}`, (_evt, v) => {\n\t\t\tsetFieldValue(v);\n\t\t});\n\t\tPubSub.subscribe(`${id}:invalid:${name}`, (_evt, v) => {\n\t\t\tif (v?.value !== undefined) setFieldValue(v.value);\n\t\t\tif (v?.status) setFieldStatus(v.status);\n\t\t\tif (\"message\" in (v ?? {})) setFieldMessage(v.message);\n\t\t});\n\n\t\tPromise.resolve().then(() => {\n\t\t\tif (name in form.cacheData) {\n\t\t\t\tform.set(name, form.cacheData[name]);\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tPubSub.unsubscribe(`${id}:set:${name}`);\n\t\t\tPubSub.unsubscribe(`${id}:invalid:${name}`);\n\t\t\tif (name && !name.includes(\".\")) {\n\t\t\t\tform.data[name] = undefined;\n\t\t\t}\n\t\t};\n\t}, [name]);\n\n\tif (!name) return children;\n\n\treturn hijackChildren;\n}\n\nexport default Field;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import PubSub from 'pubsub-js';
|
|
4
|
-
import {
|
|
4
|
+
import { crush } from 'radash';
|
|
5
|
+
import { useMemo, useRef, useEffect } from 'react';
|
|
5
6
|
import Context from './context.js';
|
|
6
7
|
import Field from './field.js';
|
|
7
8
|
import useConfig from './useConfig.js';
|
|
@@ -26,20 +27,27 @@ const Form = (props) => {
|
|
|
26
27
|
}
|
|
27
28
|
return columns;
|
|
28
29
|
}, [columns]);
|
|
30
|
+
const initialAppliedRef = useRef(false);
|
|
29
31
|
useEffect(() => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
if (!initialAppliedRef.current && initialValues) {
|
|
33
|
+
const flat = crush(initialValues);
|
|
34
|
+
Object.keys(flat).forEach((key) => {
|
|
35
|
+
form.set(key, flat[key]);
|
|
36
|
+
});
|
|
37
|
+
initialAppliedRef.current = true;
|
|
38
|
+
}
|
|
39
|
+
if (rules) {
|
|
40
|
+
form.rules = rules;
|
|
41
|
+
}
|
|
42
|
+
}, [initialValues, rules, form]);
|
|
35
43
|
useEffect(() => {
|
|
36
|
-
PubSub.subscribe(`${form.id}:change`, (
|
|
44
|
+
const token = PubSub.subscribe(`${form.id}:change`, (_evt, v) => {
|
|
37
45
|
onChange?.(v.name, v.value);
|
|
38
46
|
});
|
|
39
47
|
return () => {
|
|
40
|
-
PubSub.unsubscribe(
|
|
48
|
+
PubSub.unsubscribe(token);
|
|
41
49
|
};
|
|
42
|
-
}, []);
|
|
50
|
+
}, [form.id, onChange]);
|
|
43
51
|
return (jsx(Context, { value: form, children: jsx("form", { style: {
|
|
44
52
|
...style,
|
|
45
53
|
width,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.js","sources":["../../../../packages/components/form/form.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport PubSub from \"pubsub-js\";\nimport { CSSProperties, useEffect, useMemo } from \"react\";\nimport Context from \"./context\";\nimport Field from \"./field\";\nimport \"./index.css\";\nimport { IForm } from \"./type\";\nimport useConfig from \"./useConfig\";\nimport useForm, { IFormInstance } from \"./useForm\";\n\nconst Form = (props: IForm) => {\n\tconst {\n\t\tform = {} as IFormInstance,\n\t\trules,\n\t\tinitialValues,\n\t\tstyle,\n\t\tclassName,\n\t\twidth,\n\t\tcolumns,\n\t\titemMaxWidth,\n\t\tgap = \"1em\",\n\t\tlabelInline,\n\t\tlabelWidth,\n\t\tlabelRight,\n\t\tchildren,\n\t\tonKeyDown,\n\t\tonEnter,\n\t\tonChange,\n\t\t...restProps\n\t} = props;\n\n\tconst handleKeyDown = (e) => {\n\t\tonKeyDown?.(e);\n\n\t\tif (e.keyCode !== 13) return;\n\n\t\tonEnter?.(e, form.data, form);\n\t};\n\n\tconst gridColumns = useMemo(() => {\n\t\tif (!columns && !itemMaxWidth) return;\n\n\t\tif (itemMaxWidth) {\n\t\t\treturn `repeat(auto-fill, minmax(${itemMaxWidth}, 1fr))`;\n\t\t}\n\n\t\tif (typeof columns === \"number\") {\n\t\t\treturn `minmax(0, 1fr) `.repeat(columns);\n\t\t}\n\n\t\treturn columns;\n\t}, [columns]);\n\n\tuseEffect(() => {\n\t\
|
|
1
|
+
{"version":3,"file":"form.js","sources":["../../../../packages/components/form/form.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport PubSub from \"pubsub-js\";\nimport { crush } from \"radash\";\nimport { CSSProperties, useEffect, useMemo, useRef } from \"react\";\nimport Context from \"./context\";\nimport Field from \"./field\";\nimport \"./index.css\";\nimport { IForm } from \"./type\";\nimport useConfig from \"./useConfig\";\nimport useForm, { IFormInstance } from \"./useForm\";\n\nconst Form = (props: IForm) => {\n\tconst {\n\t\tform = {} as IFormInstance,\n\t\trules,\n\t\tinitialValues,\n\t\tstyle,\n\t\tclassName,\n\t\twidth,\n\t\tcolumns,\n\t\titemMaxWidth,\n\t\tgap = \"1em\",\n\t\tlabelInline,\n\t\tlabelWidth,\n\t\tlabelRight,\n\t\tchildren,\n\t\tonKeyDown,\n\t\tonEnter,\n\t\tonChange,\n\t\t...restProps\n\t} = props;\n\n\tconst handleKeyDown = (e) => {\n\t\tonKeyDown?.(e);\n\n\t\tif (e.keyCode !== 13) return;\n\n\t\tonEnter?.(e, form.data, form);\n\t};\n\n\tconst gridColumns = useMemo(() => {\n\t\tif (!columns && !itemMaxWidth) return;\n\n\t\tif (itemMaxWidth) {\n\t\t\treturn `repeat(auto-fill, minmax(${itemMaxWidth}, 1fr))`;\n\t\t}\n\n\t\tif (typeof columns === \"number\") {\n\t\t\treturn `minmax(0, 1fr) `.repeat(columns);\n\t\t}\n\n\t\treturn columns;\n\t}, [columns]);\n\n\tconst initialAppliedRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (!initialAppliedRef.current && initialValues) {\n\t\t\tconst flat = crush(initialValues);\n\t\t\tObject.keys(flat).forEach((key) => {\n\t\t\t\tform.set(key, flat[key]);\n\t\t\t});\n\t\t\tinitialAppliedRef.current = true;\n\t\t}\n\n\t\tif (rules) {\n\t\t\tform.rules = rules;\n\t\t}\n\t}, [initialValues, rules, form]);\n\n\tuseEffect(() => {\n\t\tconst token = PubSub.subscribe(`${form.id}:change`, (_evt, v) => {\n\t\t\tonChange?.(v.name, v.value);\n\t\t});\n\n\t\treturn () => {\n\t\t\tPubSub.unsubscribe(token);\n\t\t};\n\t}, [form.id, onChange]);\n\n\treturn (\n\t\t<Context value={form}>\n\t\t\t<form\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tgap,\n\t\t\t\t\t\tgridTemplateColumns: gridColumns as any,\n\t\t\t\t\t\t\"--label-width\": labelWidth,\n\t\t\t\t\t\t\"--label-align\": labelRight ? \"right\" : undefined,\n\t\t\t\t\t} as CSSProperties\n\t\t\t\t}\n\t\t\t\tclassName={classNames(\"i-form\", className, {\n\t\t\t\t\t\"i-form-inline\": labelInline,\n\t\t\t\t})}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</form>\n\t\t</Context>\n\t);\n};\n\nForm.useForm = useForm;\nForm.Field = Field;\nForm.useConfig = useConfig;\n\nexport default Form;\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ function useConfig(configs, formProps) {
|
|
|
14
14
|
};
|
|
15
15
|
const node = useMemo(() => {
|
|
16
16
|
return (jsx(Form, { ...formProps, onChange: handleChange, form: form, children: configs.map((config) => {
|
|
17
|
-
const { name, label, required, component: El, componentProps = {}, colspan = 1, render,
|
|
17
|
+
const { name, label, required, component: El, componentProps = {}, colspan = 1, render, shouldRender, } = config;
|
|
18
18
|
const { className, style } = componentProps;
|
|
19
19
|
if (shouldRender && !shouldRender(values, form)) {
|
|
20
20
|
return jsx(Fragment, {}, name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConfig.js","sources":["../../../../packages/components/form/useConfig.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from \"react\";\nimport Field from \"./field\";\nimport Form from \"./form\";\nimport { IForm, IFormItem } from \"./type\";\nimport useForm from \"./useForm\";\n\nexport default function useConfig(configs: IFormItem[], formProps?: IForm) {\n\tconst form = useForm();\n\tconst { onChange } = formProps ?? {};\n\tconst [values, setValues] = useState({});\n\n\tconst handleChange = (name, value) => {\n\t\tsetValues(() => ({ ...form.get() }));\n\t\tonChange?.(name, value);\n\t};\n\n\tconst node = useMemo(() => {\n\t\treturn (\n\t\t\t<Form {...formProps} onChange={handleChange} form={form}>\n\t\t\t\t{configs.map((config) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\trequired,\n\t\t\t\t\t\tcomponent: El,\n\t\t\t\t\t\tcomponentProps = {},\n\t\t\t\t\t\tcolspan = 1,\n\t\t\t\t\t\trender,\n\t\t\t\t\t\
|
|
1
|
+
{"version":3,"file":"useConfig.js","sources":["../../../../packages/components/form/useConfig.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from \"react\";\nimport Field from \"./field\";\nimport Form from \"./form\";\nimport { IForm, IFormItem } from \"./type\";\nimport useForm from \"./useForm\";\n\nexport default function useConfig(configs: IFormItem[], formProps?: IForm) {\n\tconst form = useForm();\n\tconst { onChange } = formProps ?? {};\n\tconst [values, setValues] = useState({});\n\n\tconst handleChange = (name, value) => {\n\t\tsetValues(() => ({ ...form.get() }));\n\t\tonChange?.(name, value);\n\t};\n\n\tconst node = useMemo(() => {\n\t\treturn (\n\t\t\t<Form {...formProps} onChange={handleChange} form={form}>\n\t\t\t\t{configs.map((config) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\trequired,\n\t\t\t\t\t\tcomponent: El,\n\t\t\t\t\t\tcomponentProps = {},\n\t\t\t\t\t\tcolspan = 1,\n\t\t\t\t\t\trender,\n\t\t\t\t\t\tshouldRender,\n\t\t\t\t\t} = config;\n\t\t\t\t\tconst { className, style } = componentProps;\n\n\t\t\t\t\tif (shouldRender && !shouldRender(values, form)) {\n\t\t\t\t\t\treturn <Fragment key={name} />;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Field key={name} name={name} required={required}>\n\t\t\t\t\t\t\t{render?.(config, values) ?? (\n\t\t\t\t\t\t\t\t<El\n\t\t\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t\t{...componentProps}\n\t\t\t\t\t\t\t\t\tclassName={`${className ?? \"\"} ${\n\t\t\t\t\t\t\t\t\t\tcolspan !== 1\n\t\t\t\t\t\t\t\t\t\t\t? `colspan-${colspan}`\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Form>\n\t\t);\n\t}, [configs, values]);\n\n\treturn {\n\t\tform,\n\t\tnode,\n\t};\n}\n"],"names":["_jsx"],"mappings":";;;;;;AAMc,SAAU,SAAS,CAAC,OAAoB,EAAE,SAAiB,EAAA;AACxE,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE;AACtB,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,EAAE;IACpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAExC,IAAA,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,KAAI;AACpC,QAAA,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,QAAA,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAK;QACzB,QACCA,IAAC,IAAI,EAAA,EAAA,GAAK,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,YACrD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACvB,MAAM,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,OAAO,GAAG,CAAC,EACX,MAAM,EACN,YAAY,GACZ,GAAG,MAAM;AACV,gBAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,cAAc;gBAE3C,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAChD,oBAAA,OAAOA,GAAA,CAAC,QAAQ,EAAA,EAAA,EAAM,IAAI,CAAI;gBAC/B;AAEA,gBAAA,QACCA,GAAA,CAAC,KAAK,IAAY,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAC9C,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,KACxBA,IAAC,EAAE,EAAA,EACF,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAAA,GACd,cAAc,EAClB,SAAS,EAAE,GAAG,SAAS,IAAI,EAAE,CAAA,CAAA,EAC5B,OAAO,KAAK;8BACT,CAAA,QAAA,EAAW,OAAO,CAAA;8BAClB,EACJ,CAAA,CAAE,EAAA,CACD,CACF,EAAA,EAZU,IAAI,CAaR;YAEV,CAAC,CAAC,EAAA,CACI;AAET,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAErB,OAAO;QACN,IAAI;QACJ,IAAI;KACJ;AACF;;;;"}
|
|
@@ -1,109 +1,94 @@
|
|
|
1
1
|
import PubSub from 'pubsub-js';
|
|
2
2
|
import { uid } from 'radash';
|
|
3
3
|
import { useRef } from 'react';
|
|
4
|
+
import { getDeep, setDeep, deleteDeep } from './utils.js';
|
|
4
5
|
|
|
5
6
|
class IFormInstance {
|
|
6
7
|
id;
|
|
7
8
|
data = {};
|
|
8
9
|
cacheData = {};
|
|
9
|
-
rules
|
|
10
|
+
rules;
|
|
10
11
|
constructor() {
|
|
11
12
|
this.id = uid(8);
|
|
12
13
|
this.data = {};
|
|
13
14
|
}
|
|
14
15
|
get(field) {
|
|
15
|
-
return field ? this.data
|
|
16
|
+
return field ? getDeep(this.data, field) : this.data;
|
|
16
17
|
}
|
|
17
18
|
set(field, value) {
|
|
18
19
|
const id = this.id;
|
|
19
20
|
if (!this.data)
|
|
20
21
|
return;
|
|
21
22
|
if (typeof field === "string") {
|
|
22
|
-
|
|
23
|
+
if (field.includes(".")) {
|
|
24
|
+
const parts = field.split(".");
|
|
25
|
+
for (let i = 1; i < parts.length; i++) {
|
|
26
|
+
const ancestor = parts.slice(0, i).join(".");
|
|
27
|
+
if (ancestor in this.data) {
|
|
28
|
+
console.warn(`[ioca-form] Field "${field}" conflicts with "${ancestor}". ` +
|
|
29
|
+
"Nested representation in form.get() may be inconsistent.");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
setDeep(this.data, field, value);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this.data[field] = value;
|
|
36
|
+
}
|
|
23
37
|
this.cacheData[field] = value;
|
|
24
38
|
PubSub.publish(`${id}:set:${field}`, value);
|
|
25
39
|
return;
|
|
26
40
|
}
|
|
27
|
-
Object.keys(field).
|
|
28
|
-
|
|
41
|
+
Object.keys(field).forEach((name) => {
|
|
42
|
+
if (name.includes("."))
|
|
43
|
+
setDeep(this.data, name, field[name]);
|
|
44
|
+
else
|
|
45
|
+
this.data[name] = field[name];
|
|
29
46
|
this.cacheData[name] = field[name];
|
|
30
47
|
PubSub.publish(`${id}:set:${name}`, field[name]);
|
|
31
48
|
});
|
|
32
49
|
}
|
|
33
50
|
delete(field) {
|
|
34
|
-
delete this.
|
|
51
|
+
delete this.cacheData[field];
|
|
52
|
+
if (field.includes("."))
|
|
53
|
+
deleteDeep(this.data, field);
|
|
54
|
+
else
|
|
55
|
+
delete this.data[field];
|
|
35
56
|
}
|
|
36
57
|
clear() {
|
|
37
58
|
if (!this.data)
|
|
38
59
|
return;
|
|
60
|
+
const names = Object.keys(this.cacheData);
|
|
39
61
|
this.cacheData = {};
|
|
40
|
-
|
|
62
|
+
names.forEach((name) => {
|
|
63
|
+
if (name.includes("."))
|
|
64
|
+
deleteDeep(this.data, name);
|
|
65
|
+
else
|
|
66
|
+
this.data[name] = undefined;
|
|
41
67
|
PubSub.publish(`${this.id}:set:${name}`, undefined);
|
|
42
|
-
this.data[name] = undefined;
|
|
43
68
|
});
|
|
44
69
|
}
|
|
45
70
|
async validate(field) {
|
|
46
71
|
const { id, rules, data } = this;
|
|
47
72
|
if (!rules)
|
|
48
73
|
return data;
|
|
49
|
-
|
|
50
|
-
const o = rules[field];
|
|
51
|
-
const rule = {
|
|
52
|
-
validator: (v) => Array.isArray(v)
|
|
53
|
-
? v.length > 0
|
|
54
|
-
: ![undefined, null, ""].includes(v),
|
|
55
|
-
message: undefined,
|
|
56
|
-
};
|
|
57
|
-
if (typeof o === "function") {
|
|
58
|
-
rule.validator = o;
|
|
59
|
-
}
|
|
60
|
-
else if (o === true) {
|
|
61
|
-
rule.validator = (v) => ![undefined, null, ""].includes(v);
|
|
62
|
-
rule.message = "required";
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
Object.assign(rule, o);
|
|
66
|
-
}
|
|
67
|
-
const isValid = rule.validator?.(data[field], this);
|
|
68
|
-
if (typeof isValid === "string") {
|
|
69
|
-
rule.message = isValid;
|
|
70
|
-
}
|
|
71
|
-
if (isValid !== true) {
|
|
72
|
-
PubSub.publish(`${id}:invalid:${field}`, {
|
|
73
|
-
message: rule.message,
|
|
74
|
-
status: "error",
|
|
75
|
-
});
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
PubSub.publish(`${id}:invalid:${name}`, {
|
|
79
|
-
message: null,
|
|
80
|
-
status: "normal",
|
|
81
|
-
});
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
74
|
+
const names = field ? [field] : Object.keys(this.cacheData);
|
|
84
75
|
let isAllValid = true;
|
|
85
|
-
|
|
76
|
+
names.forEach((name) => {
|
|
86
77
|
const o = rules[name];
|
|
87
|
-
if (o === undefined)
|
|
78
|
+
if (!field && o === undefined)
|
|
88
79
|
return;
|
|
89
80
|
const rule = {
|
|
90
|
-
validator: (v) =>
|
|
91
|
-
message: undefined,
|
|
81
|
+
validator: (v) => Array.isArray(v) ? v.length > 0 : ![undefined, null, ""].includes(v),
|
|
92
82
|
};
|
|
93
|
-
if (typeof o === "function")
|
|
83
|
+
if (typeof o === "function")
|
|
94
84
|
rule.validator = o;
|
|
95
|
-
|
|
96
|
-
else if (o === true) {
|
|
97
|
-
rule.validator = (v) => ![undefined, null, ""].includes(v);
|
|
85
|
+
else if (o === true)
|
|
98
86
|
rule.message = "required";
|
|
99
|
-
|
|
100
|
-
else {
|
|
87
|
+
else if (o)
|
|
101
88
|
Object.assign(rule, o);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (typeof isValid === "string") {
|
|
89
|
+
const isValid = rule.validator?.(getDeep(data, name), this);
|
|
90
|
+
if (typeof isValid === "string")
|
|
105
91
|
rule.message = isValid;
|
|
106
|
-
}
|
|
107
92
|
if (isValid !== true) {
|
|
108
93
|
PubSub.publish(`${id}:invalid:${name}`, {
|
|
109
94
|
message: rule.message,
|
|
@@ -118,7 +103,7 @@ class IFormInstance {
|
|
|
118
103
|
});
|
|
119
104
|
}
|
|
120
105
|
});
|
|
121
|
-
return isAllValid ?
|
|
106
|
+
return field ? isAllValid : isAllValid ? data : false;
|
|
122
107
|
}
|
|
123
108
|
}
|
|
124
109
|
function useForm(form) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.js","sources":["../../../../packages/components/form/useForm.ts"],"sourcesContent":["import PubSub from \"pubsub-js\";\nimport { uid } from \"radash\";\nimport { useRef } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"useForm.js","sources":["../../../../packages/components/form/useForm.ts"],"sourcesContent":["import PubSub from \"pubsub-js\";\nimport { uid } from \"radash\";\nimport { useRef } from \"react\";\nimport { TValidator, TRule } from \"./type\";\nimport { getDeep, setDeep, deleteDeep } from \"./utils\";\n\nexport class IFormInstance {\n\treadonly id?: string;\n\tdata: Record<string, any> = {};\n\tcacheData: Record<string, any> = {};\n\trules?: Record<string, boolean | TValidator | TRule>;\n\n\tconstructor() {\n\t\tthis.id = uid(8);\n\t\tthis.data = {};\n\t}\n\n\tget(field?: string) {\n\t\treturn field ? getDeep(this.data, field) : this.data;\n\t}\n\n\tset(field: any, value?: any) {\n\t\tconst id = this.id;\n\t\tif (!this.data) return;\n\n\t\tif (typeof field === \"string\") {\n\t\t\tif (field.includes(\".\")) {\n\t\t\t\tconst parts = field.split(\".\");\n\t\t\t\tfor (let i = 1; i < parts.length; i++) {\n\t\t\t\t\tconst ancestor = parts.slice(0, i).join(\".\");\n\t\t\t\t\tif (ancestor in this.data) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`[ioca-form] Field \"${field}\" conflicts with \"${ancestor}\". ` +\n\t\t\t\t\t\t\t\t\"Nested representation in form.get() may be inconsistent.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetDeep(this.data, field, value);\n\t\t\t} else {\n\t\t\t\tthis.data[field] = value;\n\t\t\t}\n\n\t\t\tthis.cacheData[field] = value;\n\t\t\tPubSub.publish(`${id}:set:${field}`, value);\n\t\t\treturn;\n\t\t}\n\n\t\tObject.keys(field).forEach((name) => {\n\t\t\tif (name.includes(\".\")) setDeep(this.data, name, field[name]);\n\t\t\telse this.data[name] = field[name];\n\n\t\t\tthis.cacheData[name] = field[name];\n\t\t\tPubSub.publish(`${id}:set:${name}`, field[name]);\n\t\t});\n\t}\n\n\tdelete(field: string) {\n\t\tdelete this.cacheData[field];\n\t\tif (field.includes(\".\")) deleteDeep(this.data, field);\n\t\telse delete this.data[field];\n\t}\n\n\tclear() {\n\t\tif (!this.data) return;\n\t\tconst names = Object.keys(this.cacheData);\n\t\tthis.cacheData = {};\n\n\t\tnames.forEach((name) => {\n\t\t\tif (name.includes(\".\")) deleteDeep(this.data, name);\n\t\t\telse this.data[name] = undefined;\n\n\t\t\tPubSub.publish(`${this.id}:set:${name}`, undefined);\n\t\t});\n\t}\n\n\tasync validate(field?: string) {\n\t\tconst { id, rules, data } = this;\n\t\tif (!rules) return data;\n\n\t\tconst names = field ? [field] : Object.keys(this.cacheData);\n\t\tlet isAllValid = true;\n\n\t\tnames.forEach((name) => {\n\t\t\tconst o = rules[name];\n\t\t\tif (!field && o === undefined) return;\n\n\t\t\tconst rule: TRule = {\n\t\t\t\tvalidator: (v) =>\n\t\t\t\t\tArray.isArray(v) ? v.length > 0 : ![undefined, null, \"\"].includes(v),\n\t\t\t};\n\n\t\t\tif (typeof o === \"function\") rule.validator = o;\n\t\t\telse if (o === true) rule.message = \"required\";\n\t\t\telse if (o) Object.assign(rule, o);\n\n\t\t\tconst isValid = rule.validator?.(getDeep(data, name), this);\n\t\t\tif (typeof isValid === \"string\") rule.message = isValid;\n\n\t\t\tif (isValid !== true) {\n\t\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\n\t\t\t\t\tmessage: rule.message,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t});\n\t\t\t\tisAllValid = false;\n\t\t\t} else {\n\t\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\n\t\t\t\t\tmessage: null,\n\t\t\t\t\tstatus: \"normal\",\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn field ? isAllValid : isAllValid ? data : false;\n\t}\n}\n\nexport default function useForm(form?: IFormInstance) {\n\tconst formRef = useRef<IFormInstance>(null);\n\n\tif (!formRef.current) {\n\t\tformRef.current = form ?? new IFormInstance();\n\t}\n\n\treturn formRef.current;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function getDeep(obj, path) {
|
|
2
|
+
if (!path.includes("."))
|
|
3
|
+
return obj[path];
|
|
4
|
+
return path.split(".").reduce((acc, key) => (acc != null ? acc[key] : undefined), obj);
|
|
5
|
+
}
|
|
6
|
+
function setDeep(obj, path, value) {
|
|
7
|
+
const parts = path.split(".");
|
|
8
|
+
let current = obj;
|
|
9
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
10
|
+
const key = parts[i];
|
|
11
|
+
if (current[key] == null || typeof current[key] !== "object") {
|
|
12
|
+
current[key] = {};
|
|
13
|
+
}
|
|
14
|
+
current = current[key];
|
|
15
|
+
}
|
|
16
|
+
current[parts[parts.length - 1]] = value;
|
|
17
|
+
}
|
|
18
|
+
function deleteDeep(obj, path) {
|
|
19
|
+
const parts = path.split(".");
|
|
20
|
+
const parent = parts
|
|
21
|
+
.slice(0, -1)
|
|
22
|
+
.reduce((acc, key) => (acc != null ? acc[key] : undefined), obj);
|
|
23
|
+
if (parent != null) {
|
|
24
|
+
delete parent[parts[parts.length - 1]];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { deleteDeep, getDeep, setDeep };
|
|
29
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../packages/components/form/utils.ts"],"sourcesContent":["export function getDeep(obj: any, path: string): any {\n\tif (!path.includes(\".\")) return obj[path];\n\treturn path.split(\".\").reduce((acc, key) => (acc != null ? acc[key] : undefined), obj);\n}\n\nexport function setDeep(obj: any, path: string, value: any) {\n\tconst parts = path.split(\".\");\n\tlet current = obj;\n\tfor (let i = 0; i < parts.length - 1; i++) {\n\t\tconst key = parts[i];\n\t\tif (current[key] == null || typeof current[key] !== \"object\") {\n\t\t\tcurrent[key] = {};\n\t\t}\n\t\tcurrent = current[key];\n\t}\n\tcurrent[parts[parts.length - 1]] = value;\n}\n\nexport function deleteDeep(obj: any, path: string) {\n\tconst parts = path.split(\".\");\n\tconst parent = parts\n\t\t.slice(0, -1)\n\t\t.reduce((acc, key) => (acc != null ? acc[key] : undefined), obj);\n\tif (parent != null) {\n\t\tdelete parent[parts[parts.length - 1]];\n\t}\n}\n"],"names":[],"mappings":"AAAM,SAAU,OAAO,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC7C,IAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC;AACzC,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC;AACvF;SAEgB,OAAO,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU,EAAA;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAI,OAAO,GAAG,GAAG;AACjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC7D,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;QAClB;AACA,QAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IACvB;AACA,IAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;AACzC;AAEM,SAAU,UAAU,CAAC,GAAQ,EAAE,IAAY,EAAA;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,MAAM,MAAM,GAAG;AACb,SAAA,KAAK,CAAC,CAAC,EAAE,EAAE;SACX,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC;AACjE,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;QACnB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC;AACD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/time/index.tsx"],"sourcesContent":["import { AccessTimeRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport { useEffect, useState } from \"react\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Popup from \"../../popup\";\nimport { ITimePicker } from \"../type\";\nimport Panel from \"./panel\";\n\nconst FORMAT = \"hh:mm:ss\";\n\nexport default function TimePicker(props: ITimePicker) {\n\tconst {\n\t\tname,\n\t\tvalue,\n\t\tformat = FORMAT,\n\t\tperiods,\n\t\tplaceholder = props.format ?? FORMAT,\n\t\tclassName,\n\t\trenderItem,\n\t\tonChange,\n\t\tonBlur,\n\t\tpopupProps,\n\t\t...restProps\n\t} = props;\n\tconst [timeValue, setTimeValue] = useState(value);\n\tconst [safeValue, setSafeValue] = useState(undefined);\n\tconst [active, setActive] = useState<boolean>(false);\n\n\tconst handleChange = (v) => {\n\t\tsetTimeValue(v);\n\t};\n\n\tconst handleFallback = (v) => {\n\t\tsetSafeValue(v);\n\t};\n\n\tconst handleValidTime = () => {\n\t\tif (!timeValue) return;\n\n\t\tsetTimeValue(safeValue);\n\t};\n\n\tconst handleBlur = (e) => {\n\t\tonBlur?.(e);\n\t\thandleValidTime();\n\t};\n\n\tconst handleVisibleChange = (v) => {\n\t\tpopupProps?.onVisibleChange?.(v);\n\t\tsetActive(v);\n\t};\n\n\tuseEffect(() => {\n\t\tsetTimeValue(value);\n\t}, [value]);\n\n\treturn (\n\t\t<Popup\n\t\t\tvisible={active}\n\t\t\ttrigger='click'\n\t\t\tposition='bottom'\n\t\t\tarrow={false}\n\t\t\talign='start'\n\t\t\t{...popupProps}\n\t\t\tonVisibleChange={handleVisibleChange}\n\t\t\tcontent={\n\t\t\t\t<Panel\n\t\t\t\t\tvalue={timeValue}\n\t\t\t\t\tformat={format}\n\t\t\t\t\tperiods={periods}\n\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonFallback={handleFallback}\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<Input\n\t\t\t\tvalue={timeValue}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tappend={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={<AccessTimeRound />}\n\t\t\t\t\t\tclassName='i-timepicker-icon'\n\t\t\t\t\t\tsize='1em'\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tclassName={classNames(\"i-timepicker-label\", className)}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t</Popup>\n\t);\n}\n"],"names":["_jsx"],"mappings":";;;;;;;;;AASA,MAAM,MAAM,GAAG,UAAU;AAEX,SAAU,UAAU,CAAC,KAAkB,EAAA;AACpD,IAAA,MAAM,EACL,IAAI,EACJ,KAAK,EACL,MAAM,GAAG,MAAM,EACf,OAAO,EACP,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,EACpC,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,UAAU,EACV,GAAG,SAAS,EACZ,GAAG,KAAK;IACT,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC;AAEpD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAI;QAC1B,YAAY,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/time/index.tsx"],"sourcesContent":["import { AccessTimeRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport { useEffect, useState } from \"react\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Popup from \"../../popup\";\nimport { ITimePicker } from \"../type\";\nimport Panel from \"./panel\";\n\nconst FORMAT = \"hh:mm:ss\";\n\nexport default function TimePicker(props: ITimePicker) {\n\tconst {\n\t\tname,\n\t\tvalue,\n\t\tformat = FORMAT,\n\t\tperiods,\n\t\tplaceholder = props.format ?? FORMAT,\n\t\tclassName,\n\t\trenderItem,\n\t\tonChange,\n\t\tonBlur,\n\t\tpopupProps,\n\t\t...restProps\n\t} = props;\n\tconst [timeValue, setTimeValue] = useState(value);\n\tconst [safeValue, setSafeValue] = useState(undefined);\n\tconst [active, setActive] = useState<boolean>(false);\n\n\tconst handleChange = (v) => {\n\t\tsetTimeValue(v);\n\t\tonChange?.(v);\n\t};\n\n\tconst handleFallback = (v) => {\n\t\tsetSafeValue(v);\n\t};\n\n\tconst handleValidTime = () => {\n\t\tif (!timeValue) return;\n\n\t\tsetTimeValue(safeValue);\n\t};\n\n\tconst handleBlur = (e) => {\n\t\tonBlur?.(e);\n\t\thandleValidTime();\n\t};\n\n\tconst handleVisibleChange = (v) => {\n\t\tpopupProps?.onVisibleChange?.(v);\n\t\tsetActive(v);\n\t};\n\n\tuseEffect(() => {\n\t\tsetTimeValue(value);\n\t}, [value]);\n\n\treturn (\n\t\t<Popup\n\t\t\tvisible={active}\n\t\t\ttrigger='click'\n\t\t\tposition='bottom'\n\t\t\tarrow={false}\n\t\t\talign='start'\n\t\t\t{...popupProps}\n\t\t\tonVisibleChange={handleVisibleChange}\n\t\t\tcontent={\n\t\t\t\t<Panel\n\t\t\t\t\tvalue={timeValue}\n\t\t\t\t\tformat={format}\n\t\t\t\t\tperiods={periods}\n\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonFallback={handleFallback}\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<Input\n\t\t\t\tvalue={timeValue}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tappend={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={<AccessTimeRound />}\n\t\t\t\t\t\tclassName='i-timepicker-icon'\n\t\t\t\t\t\tsize='1em'\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tclassName={classNames(\"i-timepicker-label\", className)}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t</Popup>\n\t);\n}\n"],"names":["_jsx"],"mappings":";;;;;;;;;AASA,MAAM,MAAM,GAAG,UAAU;AAEX,SAAU,UAAU,CAAC,KAAkB,EAAA;AACpD,IAAA,MAAM,EACL,IAAI,EACJ,KAAK,EACL,MAAM,GAAG,MAAM,EACf,OAAO,EACP,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,EACpC,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,UAAU,EACV,GAAG,SAAS,EACZ,GAAG,KAAK;IACT,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC;AAEpD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAI;QAC1B,YAAY,CAAC,CAAC,CAAC;AACf,QAAA,QAAQ,GAAG,CAAC,CAAC;AACd,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,CAAC,KAAI;QAC5B,YAAY,CAAC,CAAC,CAAC;AAChB,IAAA,CAAC;IAED,MAAM,eAAe,GAAG,MAAK;AAC5B,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,YAAY,CAAC,SAAS,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAI;AACxB,QAAA,MAAM,GAAG,CAAC,CAAC;AACX,QAAA,eAAe,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAI;AACjC,QAAA,UAAU,EAAE,eAAe,GAAG,CAAC,CAAC;QAChC,SAAS,CAAC,CAAC,CAAC;AACb,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;QACd,YAAY,CAAC,KAAK,CAAC;AACpB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAEX,QACCA,GAAA,CAAC,KAAK,EAAA,EACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAC,OAAO,EAAA,GACT,UAAU,EACd,eAAe,EAAE,mBAAmB,EACpC,OAAO,EACNA,GAAA,CAAC,KAAK,IACL,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,cAAc,EAAA,CACzB,EAAA,QAAA,EAGHA,GAAA,CAAC,KAAK,EAAA,EACL,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,WAAW,EACxB,MAAM,EACLA,GAAA,CAAC,IAAI,EAAA,EACJ,IAAI,EAAEA,GAAA,CAAC,eAAe,EAAA,EAAA,CAAG,EACzB,SAAS,EAAC,mBAAmB,EAC7B,IAAI,EAAC,KAAK,EAAA,CACT,EAEH,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAAA,GAClD,SAAS,EAAA,CACZ,EAAA,CACK;AAEV;;;;"}
|