vue-admin-core
Version:
A Component Library for Vue 3
1 lines • 11 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../package/formily/form-collapse/src/index.ts"],"sourcesContent":["import { model } from \"@formily/reactive\";\nimport { computed, defineComponent } from \"vue\";\nimport type { PropType } from \"vue\";\nimport { useField, useFieldSchema, RecursionField, h, Fragment } from \"@formily/vue\";\nimport { observer } from \"@formily/reactive-vue\";\nimport { Schema, SchemaKey } from \"@formily/json-schema\";\nimport { ElCollapse, ElCollapseItem, ElBadge } from \"element-plus\";\nimport { toArr } from \"@formily/shared\";\nimport { GeneralField } from \"@formily/core\";\n\nimport { composeExport, stylePrefix } from \"../../__builtins__\";\n\ntype ActiveKeys = string | number | Array<string | number>;\n\ntype ActiveKey = string | number;\n\ntype Panels = { name: SchemaKey; props: any; schema: Schema }[];\n\nexport interface IFormCollapse {\n activeKeys: ActiveKeys;\n hasActiveKey(key: ActiveKey): boolean;\n setActiveKeys(key: ActiveKeys): void;\n addActiveKey(key: ActiveKey): void;\n removeActiveKey(key: ActiveKey): void;\n toggleActiveKey(key: ActiveKey): void;\n}\n\nexport interface IFormCollapseProps {\n formCollapse?: IFormCollapse;\n activeKey?: ActiveKey;\n}\n\nconst usePanels = (collapseField: GeneralField, schema: Schema) => {\n const panels: Panels = [];\n schema.mapProperties((schema, name) => {\n const field = collapseField.query(collapseField.address.concat(name)).take();\n if (field?.display === \"none\" || field?.display === \"hidden\") return;\n\n if (schema[\"x-component\"]?.indexOf(\"FormCollapse.Item\") > -1) {\n panels.push({\n name,\n props: {\n ...schema?.[\"x-component-props\"],\n key: schema?.[\"x-component-props\"]?.key || name\n },\n schema\n });\n }\n });\n return panels;\n};\n\nconst createFormCollapse = (defaultActiveKeys?: ActiveKeys) => {\n const formCollapse = model({\n activeKeys: defaultActiveKeys,\n setActiveKeys(keys: ActiveKeys) {\n formCollapse.activeKeys = keys;\n },\n hasActiveKey(key: ActiveKey) {\n if (Array.isArray(formCollapse.activeKeys)) {\n if (formCollapse.activeKeys.includes(key)) {\n return true;\n }\n } else if (formCollapse.activeKeys == key) {\n return true;\n }\n return false;\n },\n addActiveKey(key: ActiveKey) {\n if (formCollapse.hasActiveKey(key)) return;\n formCollapse.activeKeys = toArr(formCollapse.activeKeys).concat(key);\n },\n removeActiveKey(key: ActiveKey) {\n if (Array.isArray(formCollapse.activeKeys)) {\n formCollapse.activeKeys = formCollapse.activeKeys.filter((item) => item != key);\n } else {\n formCollapse.activeKeys = \"\";\n }\n },\n toggleActiveKey(key: ActiveKey) {\n if (formCollapse.hasActiveKey(key)) {\n formCollapse.removeActiveKey(key);\n } else {\n formCollapse.addActiveKey(key);\n }\n }\n });\n return formCollapse;\n};\n\nconst FormCollapse = observer(\n defineComponent({\n inheritAttrs: false,\n props: {\n formCollapse: { type: Object as PropType<IFormCollapse> },\n activeKey: {\n type: [String, Number]\n }\n },\n emits: [\"input\"],\n setup(props, { attrs, emit }) {\n const field = useField();\n const schema = useFieldSchema();\n const prefixCls = `${stylePrefix}-form-collapse`;\n const formCollapseRef = computed(() => props.formCollapse ?? createFormCollapse());\n\n const takeActiveKeys = (panels: Panels) => {\n if (props.activeKey) return props.activeKey;\n if (formCollapseRef.value?.activeKeys) return formCollapseRef.value?.activeKeys;\n if (attrs.accordion) return panels[0]?.name;\n return panels.map((item) => item.name);\n };\n\n const badgedHeader = (key: SchemaKey, props: any) => {\n const errors = field.value.form.queryFeedbacks({\n type: \"error\",\n address: `${field.value.address.concat(key)}.*`\n });\n if (errors.length > 0) {\n return h(\n ElBadge,\n {\n class: [`${prefixCls}-errors-badge`],\n value: errors.length\n },\n { default: () => props.title }\n );\n }\n return props.title;\n };\n\n return () => {\n const panels = usePanels(field.value, schema.value);\n const activeKey = takeActiveKeys(panels);\n return h(\n ElCollapse,\n {\n class: prefixCls,\n modelValue: activeKey,\n onChange: (key: string | string[]) => {\n emit(\"input\", key);\n formCollapseRef.value.setActiveKeys(key);\n }\n },\n {\n default: () => {\n return panels.map(({ props, schema, name }, key) => {\n return h(\n ElCollapseItem,\n {\n key,\n ...props,\n name\n },\n {\n default: () => h(RecursionField, { schema, name }, {}),\n title: () => h(\"span\", {}, { default: () => [badgedHeader(name, props)] })\n }\n );\n });\n }\n }\n );\n };\n }\n })\n);\n\nexport const FormCollapseItem = defineComponent({\n name: \"FFormCollapseItem\",\n inheritAttrs: false,\n setup(_props, { slots }) {\n return () => h(Fragment, {}, slots);\n }\n});\n\nconst composeFormCollapse = composeExport(FormCollapse, {\n Item: FormCollapseItem,\n createFormCollapse\n});\n\nexport { composeFormCollapse as FormCollapse };\nexport default composeFormCollapse;\n"],"names":["schema","props"],"mappings":";;;;;;;;;;AAgCA,MAAM,SAAA,GAAY,CAAC,aAAA,EAA6B,MAAmB,KAAA;AACjE,EAAA,MAAM,SAAiB,EAAC,CAAA;AACxB,EAAO,MAAA,CAAA,aAAA,CAAc,CAACA,OAAAA,EAAQ,IAAS,KAAA;AAlCzC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAmCI,IAAM,MAAA,KAAA,GAAQ,cAAc,KAAM,CAAA,aAAA,CAAc,QAAQ,MAAO,CAAA,IAAI,CAAC,CAAA,CAAE,IAAK,EAAA,CAAA;AAC3E,IAAA,IAAA,CAAI,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,OAAA,MAAY,MAAU,IAAA,CAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,OAAY,MAAA,QAAA;AAAU,MAAA,OAAA;AAE9D,IAAA,IAAA,CAAA,CAAI,KAAAA,OAAO,CAAA,aAAa,MAApB,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,wBAAuB,CAAI,CAAA,EAAA;AAC5D,MAAA,MAAA,CAAO,IAAK,CAAA;AAAA,QACV,IAAA;AAAA,QACA,KAAO,EAAA;AAAA,UACL,GAAGA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,OAAS,CAAA,mBAAA,CAAA;AAAA,UACZ,OAAK,EAAAA,GAAAA,OAAAA,IAAA,gBAAAA,OAAS,CAAA,mBAAA,CAAA,KAAT,mBAA+B,GAAO,KAAA,IAAA;AAAA,SAC7C;AAAA,QACA,MAAAA,EAAAA,OAAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,CAAC,iBAAmC,KAAA;AAC7D,EAAA,MAAM,eAAe,KAAM,CAAA;AAAA,IACzB,UAAY,EAAA,iBAAA;AAAA,IACZ,cAAc,IAAkB,EAAA;AAC9B,MAAA,YAAA,CAAa,UAAa,GAAA,IAAA,CAAA;AAAA,KAC5B;AAAA,IACA,aAAa,GAAgB,EAAA;AAC3B,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,YAAa,CAAA,UAAU,CAAG,EAAA;AAC1C,QAAA,IAAI,YAAa,CAAA,UAAA,CAAW,QAAS,CAAA,GAAG,CAAG,EAAA;AACzC,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACF,MAAA,IAAW,YAAa,CAAA,UAAA,IAAc,GAAK,EAAA;AACzC,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,aAAa,GAAgB,EAAA;AAC3B,MAAI,IAAA,YAAA,CAAa,aAAa,GAAG,CAAA;AAAG,QAAA,OAAA;AACpC,MAAA,YAAA,CAAa,aAAa,KAAM,CAAA,YAAA,CAAa,UAAU,CAAA,CAAE,OAAO,GAAG,CAAA,CAAA;AAAA,KACrE;AAAA,IACA,gBAAgB,GAAgB,EAAA;AAC9B,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,YAAa,CAAA,UAAU,CAAG,EAAA;AAC1C,QAAA,YAAA,CAAa,aAAa,YAAa,CAAA,UAAA,CAAW,OAAO,CAAC,IAAA,KAAS,QAAQ,GAAG,CAAA,CAAA;AAAA,OACzE,MAAA;AACL,QAAA,YAAA,CAAa,UAAa,GAAA,EAAA,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,IACA,gBAAgB,GAAgB,EAAA;AAC9B,MAAI,IAAA,YAAA,CAAa,YAAa,CAAA,GAAG,CAAG,EAAA;AAClC,QAAA,YAAA,CAAa,gBAAgB,GAAG,CAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,YAAA,CAAa,aAAa,GAAG,CAAA,CAAA;AAAA,OAC/B;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,YAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,QAAA;AAAA,EACnB,eAAgB,CAAA;AAAA,IACd,YAAc,EAAA,KAAA;AAAA,IACd,KAAO,EAAA;AAAA,MACL,YAAA,EAAc,EAAE,IAAA,EAAM,MAAkC,EAAA;AAAA,MACxD,SAAW,EAAA;AAAA,QACT,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,OACvB;AAAA,KACF;AAAA,IACA,KAAA,EAAO,CAAC,OAAO,CAAA;AAAA,IACf,KAAM,CAAA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAQ,EAAA;AAC5B,MAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AACvB,MAAA,MAAM,SAAS,cAAe,EAAA,CAAA;AAC9B,MAAM,MAAA,SAAA,GAAY,GAAG,WAAW,CAAA,cAAA,CAAA,CAAA;AAChC,MAAM,MAAA,eAAA,GAAkB,SAAS,MAAG;AAxG1C,QAAA,IAAA,EAAA,CAAA;AAwG6C,QAAM,OAAA,CAAA,EAAA,GAAA,KAAA,CAAA,YAAA,KAAN,YAAsB,kBAAmB,EAAA,CAAA;AAAA,OAAC,CAAA,CAAA;AAEjF,MAAM,MAAA,cAAA,GAAiB,CAAC,MAAmB,KAAA;AA1GjD,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA2GQ,QAAA,IAAI,KAAM,CAAA,SAAA;AAAW,UAAA,OAAO,KAAM,CAAA,SAAA,CAAA;AAClC,QAAI,IAAA,CAAA,EAAA,GAAA,eAAA,CAAgB,UAAhB,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA;AAAY,UAAO,OAAA,CAAA,EAAA,GAAA,eAAA,CAAgB,UAAhB,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,CAAA;AACrE,QAAA,IAAI,KAAM,CAAA,SAAA;AAAW,UAAO,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,CAAC,CAAA,KAAR,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA;AACvC,QAAA,OAAO,MAAO,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA,CAAA;AAAA,OACvC,CAAA;AAEA,MAAM,MAAA,YAAA,GAAe,CAAC,GAAA,EAAgBC,MAAe,KAAA;AACnD,QAAA,MAAM,MAAS,GAAA,KAAA,CAAM,KAAM,CAAA,IAAA,CAAK,cAAe,CAAA;AAAA,UAC7C,IAAM,EAAA,OAAA;AAAA,UACN,SAAS,CAAG,EAAA,KAAA,CAAM,MAAM,OAAQ,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,SAC5C,CAAA,CAAA;AACD,QAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,UAAO,OAAA,CAAA;AAAA,YACL,OAAA;AAAA,YACA;AAAA,cACE,KAAO,EAAA,CAAC,CAAG,EAAA,SAAS,CAAe,aAAA,CAAA,CAAA;AAAA,cACnC,OAAO,MAAO,CAAA,MAAA;AAAA,aAChB;AAAA,YACA,EAAE,OAAA,EAAS,MAAMA,MAAAA,CAAM,KAAM,EAAA;AAAA,WAC/B,CAAA;AAAA,SACF;AACA,QAAA,OAAOA,MAAM,CAAA,KAAA,CAAA;AAAA,OACf,CAAA;AAEA,MAAA,OAAO,MAAM;AACX,QAAA,MAAM,MAAS,GAAA,SAAA,CAAU,KAAM,CAAA,KAAA,EAAO,OAAO,KAAK,CAAA,CAAA;AAClD,QAAM,MAAA,SAAA,GAAY,eAAe,MAAM,CAAA,CAAA;AACvC,QAAO,OAAA,CAAA;AAAA,UACL,UAAA;AAAA,UACA;AAAA,YACE,KAAO,EAAA,SAAA;AAAA,YACP,UAAY,EAAA,SAAA;AAAA,YACZ,QAAA,EAAU,CAAC,GAA2B,KAAA;AACpC,cAAA,IAAA,CAAK,SAAS,GAAG,CAAA,CAAA;AACjB,cAAgB,eAAA,CAAA,KAAA,CAAM,cAAc,GAAG,CAAA,CAAA;AAAA,aACzC;AAAA,WACF;AAAA,UACA;AAAA,YACE,SAAS,MAAM;AACb,cAAO,OAAA,MAAA,CAAO,GAAI,CAAA,CAAC,EAAE,KAAA,EAAAA,QAAO,MAAAD,EAAAA,OAAAA,EAAQ,IAAK,EAAA,EAAG,GAAQ,KAAA;AAClD,gBAAO,OAAA,CAAA;AAAA,kBACL,cAAA;AAAA,kBACA;AAAA,oBACE,GAAA;AAAA,oBACA,GAAGC,MAAAA;AAAA,oBACH,IAAA;AAAA,mBACF;AAAA,kBACA;AAAA,oBACE,OAAA,EAAS,MAAM,CAAA,CAAE,cAAgB,EAAA,EAAE,QAAAD,OAAQ,EAAA,IAAA,EAAQ,EAAA,EAAE,CAAA;AAAA,oBACrD,KAAO,EAAA,MAAM,CAAE,CAAA,MAAA,EAAQ,EAAI,EAAA,EAAE,OAAS,EAAA,MAAM,CAAC,YAAa,CAAA,IAAA,EAAMC,MAAK,CAAC,GAAG,CAAA;AAAA,mBAC3E;AAAA,iBACF,CAAA;AAAA,eACD,CAAA,CAAA;AAAA,aACH;AAAA,WACF;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACD,CAAA;AACH,CAAA,CAAA;AAEO,MAAM,mBAAmB,eAAgB,CAAA;AAAA,EAC9C,IAAM,EAAA,mBAAA;AAAA,EACN,YAAc,EAAA,KAAA;AAAA,EACd,KAAM,CAAA,MAAA,EAAQ,EAAE,KAAA,EAAS,EAAA;AACvB,IAAA,OAAO,MAAM,CAAA,CAAE,QAAU,EAAA,IAAI,KAAK,CAAA,CAAA;AAAA,GACpC;AACF,CAAC,EAAA;AAEK,MAAA,mBAAA,GAAsB,cAAc,YAAc,EAAA;AAAA,EACtD,IAAM,EAAA,gBAAA;AAAA,EACN,kBAAA;AACF,CAAC;;;;"}