{"version":3,"file":"index.mjs","sources":["../../../../../../package/formily/array-tabs/src/index.ts"],"sourcesContent":["import { defineComponent, ref, h } from \"vue\";\nimport { observer } from \"@formily/reactive-vue\";\nimport { ArrayField } from \"@formily/core\";\nimport { useField, useFieldSchema, RecursionField } from \"@formily/vue\";\nimport { ElTabs, ElTabPane, ElBadge } from \"element-plus\";\nimport { stylePrefix } from \"../../__builtins__/configs\";\n\nElTabPane.props.label = {\n  default: \"\",\n  type: Object\n};\n\nexport const ArrayTabs = observer(\n  defineComponent({\n    name: \"ArrayTabs\",\n    props: [\"onChange\"],\n    setup(props, { attrs }) {\n      const fieldRef = useField<ArrayField>();\n      const schemaRef = useFieldSchema();\n\n      const prefixCls = `${stylePrefix}-array-tabs`;\n      const activeKey = ref(\"tab-0\");\n      return () => {\n        const field = fieldRef.value;\n        const schema = schemaRef.value;\n        const value = Array.isArray(field.value) ? field.value : [];\n        const dataSource = value?.length ? value : [{}];\n\n        const onEdit = (targetKey: any, type: \"add\" | \"remove\") => {\n          if (type == \"add\") {\n            const id = dataSource.length;\n            if (field?.value?.length) {\n              field.push(null);\n            } else {\n              field.push(null, null);\n            }\n            activeKey.value = `tab-${id}`;\n          } else if (type == \"remove\") {\n            const index = targetKey.match(/-(\\d+)/)?.[1];\n            field.remove(Number(index));\n            if (activeKey.value === targetKey) {\n              activeKey.value = `tab-${index - 1}`;\n            }\n          }\n          !(attrs as any)?.[\"tab-remove\"]?.(targetKey, type);\n        };\n\n        const badgedTab = (index: number) => {\n          const tab = `${field.title || \"Untitled\"} ${index + 1}`;\n          const path = field.address.concat(index);\n          const errors = field.form.queryFeedbacks({\n            type: \"error\",\n            address: `${path}.**`\n          });\n          if (errors.length) {\n            return h(\n              \"span\",\n              {},\n              {\n                default: () => [\n                  h(\n                    ElBadge,\n                    {\n                      class: [`${prefixCls}-errors-badge`],\n                      value: errors.length\n                    },\n                    {\n                      default: () => [tab]\n                    }\n                  )\n                ]\n              }\n            );\n          }\n          return h(\n            \"span\",\n            {},\n            {\n              default: () => [tab]\n            }\n          );\n        };\n\n        const renderItems = () =>\n          dataSource?.map((item, index) => {\n            const items = Array.isArray(schema.items) ? schema.items[index] : schema.items;\n            const key = `tab-${index}`;\n\n            const IElTabPane = h(\n              ElTabPane,\n              {\n                key,\n                closable: index !== 0,\n                name: key\n              },\n              {\n                default: () =>\n                  h(\n                    RecursionField,\n                    {\n                      schema: items,\n                      name: index\n                    },\n                    {}\n                  )\n              }\n            );\n            (IElTabPane.props as any).label = badgedTab(index);\n            return IElTabPane;\n          });\n        return h(\n          ElTabs as any,\n          {\n            class: [prefixCls],\n            type: \"card\",\n            modelValue: activeKey.value,\n            addable: true,\n            ...attrs,\n            \"onUpdata:modelValue\": (key: any) => {\n              activeKey.value = key;\n            },\n            onEdit: onEdit\n          },\n          {\n            default: () => [renderItems()]\n          }\n        );\n      };\n    }\n  })\n);\n\nexport default ArrayTabs;\n"],"names":[],"mappings":"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"}