dynamicformdjx-react 0.2.0 → 0.2.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/README.md +49 -6
- package/dist/antd/hooks/renderForm.d.ts +7 -2
- package/dist/antd/index.cjs +1 -1
- package/dist/antd/index.mjs +284 -257
- package/dist/constants/index.d.ts +2 -1
- package/dist/index-B4EyP31q.cjs +1 -0
- package/dist/index-px61OvsX.js +75 -0
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +340 -388
- package/dist/types/form.d.ts +1 -1
- package/package.json +1 -1
- package/dist/components/antd/AntdIndex.d.ts +0 -2
- package/dist/components/antd/allForm.d.ts +0 -2
- package/dist/components/antd/customForm.d.ts +0 -2
- package/dist/components/antd/simpleForm.d.ts +0 -2
- package/dist/components/cascadeInput.d.ts +0 -2
- package/dist/components/singleInput.d.ts +0 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# dynamicformdjx-react
|
|
2
2
|
|
|
3
|
-
基于 **React**
|
|
3
|
+
基于 **React** 的动态表单及录入。
|
|
4
4
|
|
|
5
5
|
[Document](https://xczcdjx.github.io/dynamicFormDoc/react/install.html)
|
|
6
6
|
|
|
@@ -267,17 +267,15 @@ export default CustomForm;
|
|
|
267
267
|
|
|
268
268
|
##### 总表单
|
|
269
269
|
|
|
270
|
-
> 除renderDynamicTags,renderCheckbox,renderSlider,renderInputNumber等待后续更新
|
|
271
|
-
|
|
272
270
|
```tsx
|
|
273
271
|
import {useRef, useState} from "react";
|
|
274
272
|
import {Button, Input, Radio} from "antd";
|
|
275
273
|
import {
|
|
276
274
|
AdDynamicForm,
|
|
277
|
-
type adDynamicFormRef, renderCheckboxGroup, renderDatePicker,
|
|
278
|
-
renderInput,
|
|
275
|
+
type adDynamicFormRef, renderCheckbox, renderCheckboxGroup, renderDatePicker, renderDynamicTags,
|
|
276
|
+
renderInput, renderInputNumber,
|
|
279
277
|
renderPopSelect, renderRadioButtonGroup, renderRadioGroup,
|
|
280
|
-
renderSelect, renderSwitch, renderTimePicker,
|
|
278
|
+
renderSelect, renderSlider, renderSwitch, renderTimePicker,
|
|
281
279
|
renderTreeSelect
|
|
282
280
|
} from "dynamicformdjx-react/antd";
|
|
283
281
|
import {useDyForm, useReactiveForm} from "dynamicformdjx-react";
|
|
@@ -298,6 +296,10 @@ type RowProps = {
|
|
|
298
296
|
job: number
|
|
299
297
|
job2: number
|
|
300
298
|
job3: number
|
|
299
|
+
checkbox: boolean
|
|
300
|
+
future: string[]
|
|
301
|
+
slider: number
|
|
302
|
+
inputNumber: number
|
|
301
303
|
}
|
|
302
304
|
const AllForm = () => {
|
|
303
305
|
const [formItems, setFormItems] = useReactiveForm<RowProps, Rule | Rule[]>([
|
|
@@ -420,6 +422,47 @@ const AllForm = () => {
|
|
|
420
422
|
value: null,
|
|
421
423
|
render2: f => renderTimePicker({}, f),
|
|
422
424
|
},
|
|
425
|
+
{
|
|
426
|
+
key: "future",
|
|
427
|
+
label: "未来",
|
|
428
|
+
value: [
|
|
429
|
+
{label: '你没见过不等于没有', value: 'hello world 1'},
|
|
430
|
+
{
|
|
431
|
+
label: '不要给自己设限',
|
|
432
|
+
value: 'hello world 2'
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
label: '不要说连升两级',
|
|
436
|
+
value: 'hello world 3'
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
label: '直接升到 CEO 都是有可能的',
|
|
440
|
+
value: 'hello world 4'
|
|
441
|
+
}
|
|
442
|
+
],
|
|
443
|
+
render2: f => renderDynamicTags(f.value, {}, f),
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
key: "checkbox",
|
|
447
|
+
label: "复选",
|
|
448
|
+
value: true,
|
|
449
|
+
render2: f => renderCheckbox({}, f),
|
|
450
|
+
formItemProps: {
|
|
451
|
+
valuePropName: 'checked',
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
key: "slider",
|
|
456
|
+
label: "滑块",
|
|
457
|
+
value: 0,
|
|
458
|
+
render2: f => renderSlider({}, f),
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
key: "inputNumber",
|
|
462
|
+
label: "数字输入",
|
|
463
|
+
value: 20,
|
|
464
|
+
render2: f => renderInputNumber({}, f),
|
|
465
|
+
},
|
|
423
466
|
])
|
|
424
467
|
const useForm = useDyForm([formItems, setFormItems])
|
|
425
468
|
const antdFormRef = useRef<adDynamicFormRef>(null)
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { default as React, ReactNode } from 'react';
|
|
2
|
-
import { PopSelectMultipleProps, PopSelectSingleProps, SelectOption } from './PopSelect
|
|
3
|
-
import { TreeSelectProps, SelectProps, TimePickerProps, DatePickerProps, SwitchProps } from 'antd';
|
|
2
|
+
import { PopSelectMultipleProps, PopSelectSingleProps, SelectOption } from './PopSelect';
|
|
3
|
+
import { CheckboxProps, InputNumberProps, TreeSelectProps, SelectProps, TimePickerProps, DatePickerProps, SwitchProps } from 'antd';
|
|
4
4
|
import { DyFormItem, SelectOptionItem, TreeSelectOption } from '../../types/form';
|
|
5
5
|
import { InputProps, PasswordProps, TextAreaProps } from 'antd/es/input';
|
|
6
6
|
import { RadioGroupProps } from 'antd/es/radio/interface';
|
|
7
7
|
import { CheckboxGroupProps } from 'antd/es/checkbox';
|
|
8
|
+
import { SliderProps } from 'antd/es/slider';
|
|
8
9
|
export declare function renderInput(optionProps: PasswordProps, rf?: DyFormItem): JSX.Element;
|
|
9
10
|
export declare function renderInput(optionProps: TextAreaProps, rf?: DyFormItem): JSX.Element;
|
|
10
11
|
export declare function renderInput(optionProps?: InputProps, rf?: DyFormItem): JSX.Element;
|
|
@@ -22,3 +23,7 @@ export declare function renderDatePicker(optionProps?: DatePickerProps & {
|
|
|
22
23
|
export declare function renderTimePicker(optionProps?: TimePickerProps & {
|
|
23
24
|
isRange?: boolean;
|
|
24
25
|
}, rf?: DyFormItem): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare function renderCheckbox(optionProps?: CheckboxProps, rf?: DyFormItem): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function renderSlider(optionProps?: SliderProps, rf?: DyFormItem): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function renderInputNumber(optionProps?: InputNumberProps, rf?: DyFormItem): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export declare function renderDynamicTags(options?: SelectOptionItem[], optionProps?: SelectProps, rf?: DyFormItem): import("react/jsx-runtime").JSX.Element;
|
package/dist/antd/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react/jsx-runtime"),T=require("react"),b=require("antd");function O(e){return Array.isArray(e)?e:typeof e=="string"&&e.includes(".")?e.split("."):e}function I(e){return Array.isArray(e)?e.join("."):String(e)}function z(e,r){return(Array.isArray(r)?r:[r]).reduce((l,i)=>l==null?l:l[i],e)}function H(e,r,n){const l=Array.isArray(r)?r:[r];let i=e;for(let c=0;c<l.length;c++){const s=l[c];c===l.length-1?i[s]=n:((i[s]==null||typeof i[s]!="object")&&(i[s]={}),i=i[s])}}function G(e){const r={};return e.forEach(n=>{const l=O(n?.path??n?.key);H(r,l,n?.value)}),r}const W=T.forwardRef((e,r)=>{const[n]=b.Form.useForm(),l=e.validateTrigger??"onBlur",i=e.validateTrigger===null?void 0:l,c=e.preset??"fullRow",[s,d]=T.useState({}),y=T.useMemo(()=>(e.items??[]).filter(t=>!t?.hidden),[e.items]),x=T.useMemo(()=>[...y].sort((t,o)=>{const a=t?.sort??1/0,m=o?.sort??1/0;return Number(a)-Number(m)}),[y]),v=T.useMemo(()=>{const t={};return y.forEach(o=>{const a=O(o?.path??o?.key),m=I(a);let C=o?.rule;if(o?.required&&!o?.rule){const p=typeof o?.label=="string"?o.label:"";C={required:!0,message:o?.requiredHint?.(p)??`${p||o?.key}不能为空`,validateTrigger:i}}if(C&&(t[m]=C,o.isCustom)){const p=Array.isArray(C)?C:[C];d(P=>({...P,[a]:{status:!1,help:p.map(F=>F.message).filter(Boolean).join(",")}}))}}),{...t,...e.rules??{}}},[y,e.rules]);T.useEffect(()=>{n.setFieldsValue(G(y))},[n,y]);const f=(t,o)=>{y.forEach(a=>{const m=O(a?.path??a?.key);a.value=z(o,m)})};T.useImperativeHandle(r,()=>({reset:(t=null)=>{y.forEach(o=>o.value=t),n.setFieldsValue(G(y))},validator:async()=>{const t=y.filter(p=>!p.isCustom).map(p=>O(p?.path??p?.key)),o=await n.validateFields(t);let a={};const m=y.filter(p=>p.isCustom),C=[];for(const p of m){const P=O(p?.path??p?.key),F=I(P),S=v[F],k=Array.isArray(S)?S:S?[S]:[];d(A=>({...A,[F]:{status:"validating",help:""}})),a={...a,[F]:p.value};try{await Q(p.value,k),d(A=>({...A,[F]:{status:"success",help:""}}))}catch(A){const R=A?.message||k.map(_=>_.message).filter(Boolean).join(",");d(_=>({..._,[F]:{status:"error",help:R}})),C.push({name:F,errors:[R]})}}return C.length?Promise.reject({errorFields:C,outOfDate:!1}):{...o,...a}},getResult:(t="res")=>t==="ori"?y:G(y),form:n}));const h=(t,o)=>typeof t?.render2=="function"?t.render2.length>=2?t.render2(t,o):t.render2(t):null,g=t=>{const o=O(t?.path??t?.key),a=I(o),m=v[a],C=Array.isArray(m)?m:m?[m]:void 0;let p=C?.map(R=>R.validateTrigger)?.filter(Boolean)??[];i&&(p=p.concat(l));const P=t?.colProps??{span:t?.span??24,offset:t?.offset??0},F=t?.formItemProps??{},{status:S,help:k}=s[a]??{status:void 0,help:void 0},A=t.isCustom?u.jsx(b.Form.Item,{name:void 0,label:t?.label,required:!!t?.required||s[a],validateStatus:S,help:S==="error"?k:void 0,...F,children:h(t,n)},a):u.jsx(b.Form.Item,{name:o,label:t?.label,rules:C,validateTrigger:p,...F,children:h(t,n)},a);return c==="grid"?u.jsx(b.Col,{...P,children:A},a):A};return u.jsxs("div",{className:"dynamicForm",children:[e.header&&u.jsx("div",{className:"header",children:e.header()}),u.jsx(b.Form,{form:n,onValuesChange:f,...e.formConfig,children:c==="grid"?u.jsx(b.Row,{gutter:e.gridConfig?.gutter??10,...e.gridConfig,children:x.map(g)}):x.map(g)}),e.footer&&u.jsx("div",{className:"footer",children:e.footer()})]})});function J(e){return!!(e==null||e===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===0)}async function Q(e,r){for(const n of r){const l=n;if(l?.required&&J(e))throw new Error(l?.message||"必填");typeof l?.validator=="function"&&await l.validator(l,e)}}function j(e,r,n){return e?.[r]??n}function U(e){return!!e&&(e.type==="group"||Array.isArray(e.children)||Array.isArray(e.options))}function N(e){return(e??[]).map(r=>{if(U(r)){const n=r.children??r.options??[];return{...r,__isGroup:!0,__children:n}}return{...r,__isGroup:!1}})}function X(e,r,n="label",l="value"){const i=N(r);for(const c of i)if(c.__isGroup){for(const s of c.__children)if(j(s,l,s.value)===e)return j(s,n,s.label)}else if(j(c,l,c.value)===e)return j(c,n,c.label);return""}function Y(e,r,n){const l=N(e),i=new Map;return{items:l.map((s,d)=>{if(s.__isGroup){const f=j(s,r,s.label),h=(s.__children??[]).map((g,t)=>{const o=j(g,r,g.label),a=j(g,n,g.value),m=`opt-${d}-${t}`;return i.set(m,{value:a,option:g}),{key:m,label:o,disabled:!!g.disabled}});return{key:`group-${d}`,type:"group",label:f,children:h}}const y=j(s,r,s.label),x=j(s,n,s.value),v=`opt-${d}`;return i.set(v,{value:x,option:s}),{key:v,label:y,disabled:!!s.disabled}}),keyMap:i,opts:l}}function Z(e){const{value:r,onChange:n,options:l,labelField:i="label",valueField:c="value",multiple:s,onChangeEx:d,dropdownProps:y,popoverProps:x,buttonProps:v,defaultRender:f}=e,h=l??[],g=s??Array.isArray(r),{items:t,keyMap:o,opts:a}=T.useMemo(()=>Y(h,i,c),[h,i,c]),m=T.useMemo(()=>{if(f)return f;const P=g?Array.isArray(r)&&r.length?`已选 ${r.length} 项`:"请选择":r!=null?X(r,h,i,c)||String(r):"请选择";return u.jsx(b.Button,{...v,children:P})},[f,g,r,h,i,c,v]);if(g){const P=a.flatMap(k=>k.__isGroup?k.__children??[]:[k]),F=Array.isArray(r)?r:[],S=u.jsx("div",{style:{maxWidth:360},children:u.jsx(b.Checkbox.Group,{value:F,onChange:k=>{n?.(k);const A=P.filter(R=>k.includes(j(R,c,R.value)));d?.(k,A)},children:u.jsx(b.Space,{direction:"vertical",size:8,style:{width:"100%"},children:a.map((k,A)=>{if(k.__isGroup){const E=j(k,i,k.label),$=k.__children??[];return u.jsxs("div",{children:[u.jsx(b.Typography.Text,{strong:!0,children:E}),u.jsx("div",{style:{marginTop:8},children:u.jsx(b.Space,{wrap:!0,children:$.map((w,q)=>{const V=j(w,i,w.label),K=j(w,c,w.value);return u.jsx(b.Checkbox,{value:K,disabled:!!w.disabled,children:V},w.key??`${A}-${q}`)})})}),u.jsx(b.Divider,{style:{margin:"12px 0"}})]},`g-${A}`)}const R=j(k,i,k.label),_=j(k,c,k.value);return u.jsx(b.Checkbox,{value:_,disabled:!!k.disabled,children:R},k.key??`o-${A}`)})})})});return u.jsx(b.Popover,{trigger:"click",placement:"bottom",content:S,...x,children:u.jsx("span",{style:{display:"inline-block"},children:m})})}const C=T.useMemo(()=>{if(r!=null){for(const[P,F]of o.entries())if(F.value===r)return P}},[r,o]),p={items:t,onClick:({key:P})=>{const F=o.get(String(P));F&&(n?.(F.value),d?.(F.value,F.option))},selectedKeys:C};return u.jsx(b.Dropdown,{trigger:["click"],menu:p,...y,children:u.jsx("span",{style:{display:"inline-block"},children:m})})}function L(e){return e==null||e===!1||e===!0?"":typeof e=="string"||typeof e=="number"?String(e):Array.isArray(e)?e.map(L).join(""):T.isValidElement(e)?L(e.props?.children):""}function ee(e={},r){const{type:n="text",key:l,render2:i,...c}=r??{},s=d=>{r?.onChange?.(d.target.value,r),e?.onChange?.(d)};switch(n){case"password":return u.jsx(b.Input.Password,{...c,...e,onChange:s});case"textarea":return u.jsx(b.Input.TextArea,{...c,...e,onChange:s});default:return u.jsx(b.Input,{...c,...e,onChange:s})}}function M(e,r,n="label"){const{labelField:l,valueField:i,childField:c,options:s=[]}=r,d=e.length?e:s,y=l??"label",x=i??"value",v=c??"children";return d.map(f=>{const h=f[y],g={...f,[n]:h,value:f[x],searchText:L(h)};return Array.isArray(f[v])&&(g.children=M(f[v],r,n)),g})}function B(e,r,n="label"){const{labelField:l,valueField:i,options:c=[]}=r,s=e.length?e:c,d=l??"label",y=i??"value";return s.map(x=>{const v=x[d];return{[n]:v,value:x[y]}})}function re(e=[],r={},n){const{type:l,key:i,render2:c,searchOnLabel:s,...d}=n??{},{labelField:y,valueField:x,childField:v,...f}=d,h=M(e,d),g=o=>{r?.onSearch?.(o);const a=o.trim().toLowerCase(),m=h.filter(p=>(p.searchText??"").toLowerCase().includes(a)),C=m.find(p=>(p.searchText??"").toLowerCase()===a);if(C)return t(C.value,C);if(m.length===1)return t(m[0].value,m[0])},t=(o,a)=>{n?.onChange?.(o,n,a),r?.onChange?.(o,a)};return u.jsx(b.Select,{...f,options:h,onSearch:s?g:void 0,optionFilterProp:s?"searchText":void 0,...r,onChange:t})}function ne(e,r={},n){const{type:l,key:i,render2:c,searchOnLabel:s,...d}=n??{},{labelField:y,valueField:x,childField:v,...f}=d,h=M(e,d,"title"),g=o=>{r?.onSearch?.(o);const a=o.trim().toLowerCase(),m=h.filter(p=>(p.searchText??"").toLowerCase().includes(a)),C=m.find(p=>(p.searchText??"").toLowerCase()===a);if(C)return t(C.value,n,C);if(m.length===1)return t(m[0].value,n,m[0])},t=(o,a,m)=>{n?.onChange?.(o,n,a),r?.onChange?.(o,a,m)};return u.jsx(b.TreeSelect,{...f,treeData:h,onSearch:s?g:void 0,treeNodeFilterProp:s?"searchText":void 0,...r,onChange:t})}function te(e=[],r={},n,l){const{labelField:i,valueField:c,onChange:s,mode:d,key:y,...x}=n??{},v=(g,t)=>{s?.(g,n,t)},f=d==="multiple",h=e.length?e:n?.options;return u.jsx(Z,{...x,options:h,labelField:i,valueField:c,multiple:f,defaultRender:l,onChangeEx:v,dropdownProps:f?void 0:r,popoverProps:f?r:void 0})}function D(e=[],r={},n){const{type:l,key:i,render2:c,searchOnLabel:s,...d}=n??{},{labelField:y,valueField:x,childField:v,...f}=d,h=B(e,d),g=t=>{n?.onChange?.(t.target.value,n,h),r?.onChange?.(t)};return u.jsx(b.Radio.Group,{...f,options:h,onChange:g,...r})}function se(e=[],r={},n){return D(e,{optionType:"button",...r},n)}function oe(e=[],r={},n){const{type:l,key:i,render2:c,searchOnLabel:s,...d}=n??{},{labelField:y,valueField:x,childField:v,...f}=d,h=B(e,d),g=t=>{n?.onChange?.(t,n,h),r?.onChange?.(t)};return u.jsx(b.Checkbox.Group,{...f,options:h,onChange:g,...r})}function ae(e={},r){const{type:n,key:l,render2:i,searchOnLabel:c,...s}=r??{},{labelField:d,valueField:y,childField:x,...v}=s,f=(h,g)=>{r?.onChange?.(h,r),e?.onChange?.(h,g)};return u.jsx(b.Switch,{...v,onChange:f,...e})}function le(e={},r){const{type:n,key:l,render2:i,searchOnLabel:c,...s}=r??{},{labelField:d,valueField:y,childField:x,...v}=s,f=(o,a)=>{r?.onChange?.(a,r),e?.onChange?.(o,a)},{isRange:h,...g}=e,t={...v,onChange:f,...g};return h?u.jsx(b.DatePicker.RangePicker,{...t}):u.jsx(b.DatePicker,{...t})}function ce(e={},r){const{type:n,key:l,render2:i,searchOnLabel:c,...s}=r??{},{labelField:d,valueField:y,childField:x,...v}=s,f=(o,a)=>{r?.onChange?.(a,r),e?.onChange?.(o,a)},{isRange:h,...g}=e,t={...v,onChange:f,...g};return h?u.jsx(b.TimePicker.RangePicker,{...t}):u.jsx(b.TimePicker,{...t})}exports.AdDynamicForm=W;exports.renderCheckboxGroup=oe;exports.renderDatePicker=le;exports.renderInput=ee;exports.renderPopSelect=te;exports.renderRadioButtonGroup=se;exports.renderRadioGroup=D;exports.renderSelect=re;exports.renderSwitch=ae;exports.renderTimePicker=ce;exports.renderTreeSelect=ne;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),R=require("react"),m=require("antd"),T=require("../index-B4EyP31q.cjs");function _(e){return Array.isArray(e)?e:typeof e=="string"&&e.includes(".")?e.split("."):e}function G(e){return Array.isArray(e)?e.join("."):String(e)}function W(e,n){return(Array.isArray(n)?n:[n]).reduce((a,o)=>a==null?a:a[o],e)}function J(e,n,r){const a=Array.isArray(n)?n:[n];let o=e;for(let l=0;l<a.length;l++){const s=a[l];l===a.length-1?o[s]=r:((o[s]==null||typeof o[s]!="object")&&(o[s]={}),o=o[s])}}function N(e){const n={};return e.forEach(r=>{const a=_(r?.path??r?.key);J(n,a,r?.value)}),n}const Q=R.forwardRef((e,n)=>{const[r]=m.Form.useForm(),a=e.validateTrigger??"onBlur",o=e.validateTrigger===null?void 0:a,l=e.preset??"fullRow",[s,u]=R.useState({}),h=R.useMemo(()=>(e.items??[]).filter(t=>!t?.hidden),[e.items]),j=R.useMemo(()=>[...h].sort((t,c)=>{const d=t?.sort??1/0,g=c?.sort??1/0;return Number(d)-Number(g)}),[h]),k=R.useMemo(()=>{const t={};return h.forEach(c=>{const d=_(c?.path??c?.key),g=G(d);let b=c?.rule;if(c?.required&&!c?.rule){const f=typeof c?.label=="string"?c.label:"";b={required:!0,message:c?.requiredHint?.(f)??`${f||c?.key}不能为空`,validateTrigger:o}}if(b&&(t[g]=b,c.isCustom)){const f=Array.isArray(b)?b:[b];u(S=>({...S,[d]:{status:!1,help:f.map(x=>x.message).filter(Boolean).join(",")}}))}}),{...t,...e.rules??{}}},[h,e.rules]);R.useEffect(()=>{r.setFieldsValue(N(h))},[r,h]);const C=(t,c)=>{h.forEach(d=>{const g=_(d?.path??d?.key);d.value=W(c,g)})};R.useImperativeHandle(n,()=>({reset:(t=null)=>{h.forEach(c=>c.value=t),r.setFieldsValue(N(h))},validator:async()=>{const t=h.filter(f=>!f.isCustom).map(f=>_(f?.path??f?.key)),c=await r.validateFields(t);let d={};const g=h.filter(f=>f.isCustom),b=[];for(const f of g){const S=_(f?.path??f?.key),x=G(S),O=k[x],v=Array.isArray(O)?O:O?[O]:[];u(F=>({...F,[x]:{status:"validating",help:""}})),d={...d,[x]:f.value};try{await X(f.value,v),u(F=>({...F,[x]:{status:"success",help:""}}))}catch(F){const w=F?.message||v.map(I=>I.message).filter(Boolean).join(",");u(I=>({...I,[x]:{status:"error",help:w}})),b.push({name:x,errors:[w]})}}return b.length?Promise.reject({errorFields:b,outOfDate:!1}):{...c,...d}},getResult:(t="res")=>t==="ori"?h:N(h),form:r}));const y=(t,c)=>typeof t?.render2=="function"?t.render2.length>=2?t.render2(t,c):t.render2(t):null,p=t=>{const c=_(t?.path??t?.key),d=G(c),g=k[d],b=Array.isArray(g)?g:g?[g]:void 0;let f=b?.map(w=>w.validateTrigger)?.filter(Boolean)??[];o&&(f=f.concat(a));const S=t?.colProps??{span:t?.span??24,offset:t?.offset??0},x=t?.formItemProps??{},{status:O,help:v}=s[d]??{status:void 0,help:void 0},F=t.isCustom?i.jsx(m.Form.Item,{name:void 0,label:t?.label,required:!!t?.required||s[d],validateStatus:O,help:O==="error"?v:void 0,...x,children:y(t,r)},d):i.jsx(m.Form.Item,{name:c,label:t?.label,rules:b,validateTrigger:f,...x,children:y(t,r)},d);return l==="grid"?i.jsx(m.Col,{...S,children:F},d):F};return i.jsxs("div",{className:"dynamicForm",children:[e.header&&i.jsx("div",{className:"header",children:e.header()}),i.jsx(m.Form,{form:r,onValuesChange:C,...e.formConfig,children:l==="grid"?i.jsx(m.Row,{gutter:e.gridConfig?.gutter??10,...e.gridConfig,children:j.map(p)}):j.map(p)}),e.footer&&i.jsx("div",{className:"footer",children:e.footer()})]})});function U(e){return!!(e==null||e===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===0)}async function X(e,n){for(const r of n){const a=r;if(a?.required&&U(e))throw new Error(a?.message||"必填");typeof a?.validator=="function"&&await a.validator(a,e)}}function A(e,n,r){return e?.[n]??r}function Y(e){return!!e&&(e.type==="group"||Array.isArray(e.children)||Array.isArray(e.options))}function V(e){return(e??[]).map(n=>{if(Y(n)){const r=n.children??n.options??[];return{...n,__isGroup:!0,__children:r}}return{...n,__isGroup:!1}})}function Z(e,n,r="label",a="value"){const o=V(n);for(const l of o)if(l.__isGroup){for(const s of l.__children)if(A(s,a,s.value)===e)return A(s,r,s.label)}else if(A(l,a,l.value)===e)return A(l,r,l.label);return""}function ee(e,n,r){const a=V(e),o=new Map;return{items:a.map((s,u)=>{if(s.__isGroup){const C=A(s,n,s.label),y=(s.__children??[]).map((p,t)=>{const c=A(p,n,p.label),d=A(p,r,p.value),g=`opt-${u}-${t}`;return o.set(g,{value:d,option:p}),{key:g,label:c,disabled:!!p.disabled}});return{key:`group-${u}`,type:"group",label:C,children:y}}const h=A(s,n,s.label),j=A(s,r,s.value),k=`opt-${u}`;return o.set(k,{value:j,option:s}),{key:k,label:h,disabled:!!s.disabled}}),keyMap:o,opts:a}}function ne(e){const{value:n,onChange:r,options:a,labelField:o="label",valueField:l="value",multiple:s,onChangeEx:u,dropdownProps:h,popoverProps:j,buttonProps:k,defaultRender:C}=e,y=a??[],p=s??Array.isArray(n),{items:t,keyMap:c,opts:d}=R.useMemo(()=>ee(y,o,l),[y,o,l]),g=R.useMemo(()=>{if(C)return C;const S=p?Array.isArray(n)&&n.length?`已选 ${n.length} 项`:"请选择":n!=null?Z(n,y,o,l)||String(n):"请选择";return i.jsx(m.Button,{...k,children:S})},[C,p,n,y,o,l,k]);if(p){const S=d.flatMap(v=>v.__isGroup?v.__children??[]:[v]),x=Array.isArray(n)?n:[],O=i.jsx("div",{style:{maxWidth:360},children:i.jsx(m.Checkbox.Group,{value:x,onChange:v=>{r?.(v);const F=S.filter(w=>v.includes(A(w,l,w.value)));u?.(v,F)},children:i.jsx(m.Space,{direction:"vertical",size:8,style:{width:"100%"},children:d.map((v,F)=>{if(v.__isGroup){const E=A(v,o,v.label),$=v.__children??[];return i.jsxs("div",{children:[i.jsx(m.Typography.Text,{strong:!0,children:E}),i.jsx("div",{style:{marginTop:8},children:i.jsx(m.Space,{wrap:!0,children:$.map((P,K)=>{const z=A(P,o,P.label),H=A(P,l,P.value);return i.jsx(m.Checkbox,{value:H,disabled:!!P.disabled,children:z},P.key??`${F}-${K}`)})})}),i.jsx(m.Divider,{style:{margin:"12px 0"}})]},`g-${F}`)}const w=A(v,o,v.label),I=A(v,l,v.value);return i.jsx(m.Checkbox,{value:I,disabled:!!v.disabled,children:w},v.key??`o-${F}`)})})})});return i.jsx(m.Popover,{trigger:"click",placement:"bottom",content:O,...j,children:i.jsx("span",{style:{display:"inline-block"},children:g})})}const b=R.useMemo(()=>{if(n!=null){for(const[S,x]of c.entries())if(x.value===n)return S}},[n,c]),f={items:t,onClick:({key:S})=>{const x=c.get(String(S));x&&(r?.(x.value),u?.(x.value,x.option))},selectedKeys:b};return i.jsx(m.Dropdown,{trigger:["click"],menu:f,...h,children:i.jsx("span",{style:{display:"inline-block"},children:g})})}function M(e){return e==null||e===!1||e===!0?"":typeof e=="string"||typeof e=="number"?String(e):Array.isArray(e)?e.map(M).join(""):R.isValidElement(e)?M(e.props?.children):""}function re(e={},n){const{type:r="text",key:a,render2:o,...l}=n??{},s=u=>{n?.onChange?.(u.target.value,n),e?.onChange?.(u)};switch(r){case"password":return i.jsx(m.Input.Password,{...l,...e,onChange:s});case"textarea":return i.jsx(m.Input.TextArea,{...l,...e,onChange:s});default:return i.jsx(m.Input,{...l,...e,onChange:s})}}function L(e,n,r="label"){const{labelField:a,valueField:o,childField:l,options:s=[]}=n,u=e.length?e:s,h=a??"label",j=o??"value",k=l??"children";return u.map(C=>{const y=C[h],p={...C,[r]:y,value:C[j],searchText:M(y)};return Array.isArray(C[k])&&(p.children=L(C[k],n,r)),p})}function D(e,n,r="label"){const{labelField:a,valueField:o,options:l=[]}=n,s=e.length?e:l,u=a??"label",h=o??"value";return s.map(j=>{const k=j[u];return{[r]:k,value:j[h]}})}function B(e=[],n={},r){const{type:a,key:o,render2:l,searchOnLabel:s,...u}=r??{},{labelField:h,valueField:j,childField:k,...C}=u,y=L(e,u),p=c=>{n?.onSearch?.(c);const d=c.trim().toLowerCase(),g=y.filter(f=>(f.searchText??"").toLowerCase().includes(d)),b=g.find(f=>(f.searchText??"").toLowerCase()===d);if(b)return t(b.value,b);if(g.length===1)return t(g[0].value,g[0])},t=(c,d)=>{r?.onChange?.(c,r,d),n?.onChange?.(c,d)};return i.jsx(m.Select,{...C,options:y,onSearch:s?p:void 0,optionFilterProp:s?"searchText":void 0,...n,onChange:t})}function te(e,n={},r){const{type:a,key:o,render2:l,searchOnLabel:s,...u}=r??{},{labelField:h,valueField:j,childField:k,...C}=u,y=L(e,u,"title"),p=c=>{n?.onSearch?.(c);const d=c.trim().toLowerCase(),g=y.filter(f=>(f.searchText??"").toLowerCase().includes(d)),b=g.find(f=>(f.searchText??"").toLowerCase()===d);if(b)return t(b.value,r,b);if(g.length===1)return t(g[0].value,r,g[0])},t=(c,d,g)=>{r?.onChange?.(c,r,d),n?.onChange?.(c,d,g)};return i.jsx(m.TreeSelect,{...C,treeData:y,onSearch:s?p:void 0,treeNodeFilterProp:s?"searchText":void 0,...n,onChange:t})}function oe(e=[],n={},r,a){const{labelField:o,valueField:l,onChange:s,mode:u,key:h,...j}=r??{},k=(p,t)=>{s?.(p,r,t)},C=u==="multiple",y=e.length?e:r?.options;return i.jsx(ne,{...j,options:y,labelField:o,valueField:l,multiple:C,defaultRender:a,onChangeEx:k,dropdownProps:C?void 0:n,popoverProps:C?n:void 0})}function q(e=[],n={},r){const{type:a,key:o,render2:l,searchOnLabel:s,...u}=r??{},{labelField:h,valueField:j,childField:k,...C}=u,y=D(e,u),p=t=>{r?.onChange?.(t.target.value,r,y),n?.onChange?.(t)};return i.jsx(m.Radio.Group,{...C,options:y,onChange:p,...n})}function se(e=[],n={},r){return q(e,{optionType:"button",...n},r)}function ae(e=[],n={},r){const{type:a,key:o,render2:l,searchOnLabel:s,...u}=r??{},{labelField:h,valueField:j,childField:k,...C}=u,y=D(e,u),p=t=>{r?.onChange?.(t,r,y),n?.onChange?.(t)};return i.jsx(m.Checkbox.Group,{...C,options:y,onChange:p,...n})}function le(e={},n){const r=T.OmitValue(n,T.omitAllCommonKey),a=(o,l)=>{n?.onChange?.(o,n),e?.onChange?.(o,l)};return i.jsx(m.Switch,{...r,onChange:a,...e})}function ce(e={},n){const r=T.OmitValue(n,T.omitAllCommonKey),a=(u,h)=>{n?.onChange?.(h,n),e?.onChange?.(u,h)},{isRange:o,...l}=e,s={...r,onChange:a,...l};return o?i.jsx(m.DatePicker.RangePicker,{...s}):i.jsx(m.DatePicker,{...s})}function ie(e={},n){const r=T.OmitValue(n,T.omitAllCommonKey),a=(u,h)=>{n?.onChange?.(h,n),e?.onChange?.(u,h)},{isRange:o,...l}=e,s={...r,onChange:a,...l};return o?i.jsx(m.TimePicker.RangePicker,{...s}):i.jsx(m.TimePicker,{...s})}function ue(e={},n){const r=T.OmitValue(n,T.omitAllCommonKey),a=o=>{const l=o.target.checked;n?.onChange?.(l,n),e?.onChange?.(o)};return i.jsx(m.Checkbox,{...r,checked:!!n?.value,onChange:a,...e})}function de(e={},n){const r=T.OmitValue(n,T.omitAllCommonKey),a=o=>{n?.onChange?.(o,n),e?.onChange?.(o)};return i.jsx(m.Slider,{...r,onChange:a,...e})}function he(e={},n){const r=T.OmitValue(n,T.omitAllCommonKey),a=o=>{n?.onChange?.(o,n),e?.onChange?.(o)};return i.jsx(m.InputNumber,{...r,onChange:a,...e})}function me(e=[],n={},r){return B(e,{mode:"tags",...n},r)}exports.AdDynamicForm=Q;exports.renderCheckbox=ue;exports.renderCheckboxGroup=ae;exports.renderDatePicker=ce;exports.renderDynamicTags=me;exports.renderInput=re;exports.renderInputNumber=he;exports.renderPopSelect=oe;exports.renderRadioButtonGroup=se;exports.renderRadioGroup=q;exports.renderSelect=B;exports.renderSlider=de;exports.renderSwitch=le;exports.renderTimePicker=ie;exports.renderTreeSelect=te;
|