{"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":"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"}