{"version":3,"file":"panel2.mjs","sources":["../../../../../../packages/components/tabs-select/src/panel.vue"],"sourcesContent":["<template>\n  <div :class=\"[ns.b(), border ? ns.m('border') : '']\" :style=\"panelStyle\">\n    <div v-show=\"showTabs\" :class=\"ns.e('tabs')\">\n      <el-tabs\n        v-model=\"currentTab\"\n        v-bind=\"tabsProps\"\n        @tab-click=\"handleTabClick\"\n      >\n        <el-tab-pane\n          v-for=\"(item, index) in tabs\"\n          :key=\"index\"\n          :label=\"item.title\"\n          :name=\"item.id\"\n        />\n      </el-tabs>\n    </div>\n    <div v-if=\"showSearch\" :class=\"ns.e('search')\">\n      <el-input\n        v-model=\"searchKey\"\n        clearable\n        :suffix-icon=\"Search\"\n        :placeholder=\"t('epx.tabsSelect.searchPlaceholder')\"\n      />\n    </div>\n    <el-scrollbar :height=\"height\" :class=\"ns.e('content')\">\n      <div v-if=\"loading && remoteMethod\" :class=\"ns.e('loading')\">\n        {{ t('epx.tabsSelect.loading') }}\n      </div>\n      <template v-else>\n        <template v-if=\"currentTabInfo.type === 'group'\">\n          <el-collapse-panel\n            v-for=\"(option, index) in currentOptions\"\n            v-show=\"showPanel(index)\"\n            :key=\"option[realValueKey] ?? index\"\n            :title=\"option.label\"\n            :collapse=\"false\"\n          >\n            <el-tree\n              v-if=\"option.children\"\n              v-bind=\"treeProps\"\n              :ref=\"(treeInstance) => collectTreeInstance(index, treeInstance)\"\n              default-expand-all\n              :data=\"option.children\"\n              :expand-on-click-node=\"false\"\n              :class=\"\n                !hasChildren(option.children)\n                  ? ns.em('tree', 'has-no-subchild')\n                  : ''\n              \"\n              :filter-node-method=\"filterNode\"\n              @node-click=\"handleNodeClick\"\n            >\n              <template #default=\"{ data, node }\">\n                <slot name=\"option\" v-bind=\"{ data, node }\">\n                  <div\n                    :class=\"[\n                      ns.e('option'),\n                      checkSelectedState(data)\n                        ? ns.em('option', 'selected')\n                        : '',\n                    ]\"\n                  >\n                    <span v-if=\"prefixLabel\" :class=\"ns.e('option-prefix')\">\n                      {{ prefixLabel }}\n                    </span>\n                    <span :class=\"ns.e('option-label')\">{{ data.label }}</span>\n                  </div>\n                </slot>\n              </template>\n            </el-tree>\n          </el-collapse-panel>\n          <div v-if=\"isEmpty\" :class=\"ns.e('empty')\" :style=\"{ height }\">\n            <slot name=\"empty\" v-bind=\"{ hasSearchKey }\">\n              <div :class=\"ns.e('empty-text')\">\n                {{ emptyText }}\n              </div>\n            </slot>\n          </div>\n        </template>\n        <template v-if=\"currentTabInfo.type === 'option'\">\n          <el-tree\n            v-bind=\"treeProps\"\n            :ref=\"(treeInstance) => collectTreeInstance(0, treeInstance)\"\n            default-expand-all\n            :data=\"currentOptions\"\n            :expand-on-click-node=\"false\"\n            :class=\"\n              !hasChildren(currentOptions)\n                ? ns.em('tree', 'has-no-subchild')\n                : ''\n            \"\n            :filter-node-method=\"filterNode\"\n            @node-click=\"handleNodeClick\"\n          >\n            <template #default=\"{ data, node }\">\n              <slot name=\"option\" v-bind=\"{ data, node }\">\n                <div\n                  :class=\"[\n                    ns.e('option'),\n                    checkSelectedState(data) ? ns.em('option', 'selected') : '',\n                  ]\"\n                >\n                  <span v-if=\"prefixLabel\" :class=\"ns.e('option-prefix')\">\n                    {{ prefixLabel }}\n                  </span>\n                  <span :class=\"ns.e('option-label')\">{{ data.label }}</span>\n                </div>\n              </slot>\n            </template>\n            <template #empty>\n              <div :class=\"ns.e('empty')\" :style=\"{ height }\">\n                <slot name=\"empty\" v-bind=\"{ hasSearchKey }\">\n                  <div :class=\"ns.e('empty-text')\">\n                    {{ emptyText }}\n                  </div>\n                </slot>\n              </div>\n            </template>\n          </el-tree>\n        </template>\n      </template>\n    </el-scrollbar>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, provide, ref, watch } from 'vue'\nimport {\n  ElScrollbar,\n  ElTabPane,\n  ElTabs,\n  ElTree,\n  selectKey,\n  useLocale,\n  useNamespace,\n} from 'element-plus'\nimport { isFunction } from '@element-plus/utils'\nimport { Search } from '@element-plus/icons-vue'\nimport { ElCollapsePanel } from '@element-plus/components/collapse-panel/index'\nimport { panelEmits, panelProps } from './panel'\nimport type { TreeInstance } from 'element-plus'\nimport type { IPanelModelValue, ITabItem, ITreeOption } from './panel'\n\ndefineOptions({\n  name: 'ElTabsSelectPanel',\n})\n\nprovide(selectKey, null as any)\n\nconst props = defineProps(panelProps)\nconst emit = defineEmits(panelEmits)\n\nconst { t } = useLocale()\nconst ns = useNamespace('tabs-select-panel')\n\nconst searchKey = ref<string>('')\n\nconst treeRefs = ref<Record<number, TreeInstance>>({})\nconst collectTreeInstance = (index: number, treeInstance: any) => {\n  if (treeInstance) {\n    treeRefs.value[index] = treeInstance\n  } else {\n    delete treeRefs.value[index]\n  }\n}\n\nconst bindValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value: IPanelModelValue) {\n    emit('update:modelValue', value)\n  },\n})\n\nconst hasValueKey = computed(() => !!props.valueKey)\nconst realValueKey = computed(() => props.valueKey ?? 'value')\n\nconst arrBindValue: any = computed(() => {\n  return props.multiple\n    ? bindValue?.value || []\n    : bindValue?.value\n    ? [bindValue?.value]\n    : []\n})\n\nconst currentTab = computed({\n  get() {\n    return props.tab\n  },\n  set(value: string | number) {\n    emit('update:tab', value)\n  },\n})\n\nconst currentTabInfo: any = computed(() => {\n  return props.tabs.find((item) => item.id === currentTab.value)\n})\n\nconst currentOptions = computed(() => {\n  return props.tabs.find((item) => item.id === currentTab.value)?.options || []\n})\n\nconst flattenTreeData = (treeData: ITreeOption[] = []) => {\n  const flattenDatas: ITreeOption[] = []\n\n  const stack: ITreeOption[] = []\n  for (let i = treeData.length - 1; i >= 0; --i) {\n    stack.push(treeData[i])\n  }\n  while (stack.length) {\n    const data = stack.pop()!\n\n    flattenDatas.push(data)\n    if (data.children) {\n      for (let i = data.children.length - 1; i >= 0; --i) {\n        stack.push(data.children[i])\n      }\n    }\n  }\n\n  return flattenDatas\n}\n\nconst getFlattenOptions = (tabItem: ITabItem) => {\n  const { type, options } = tabItem\n  if (type === 'group') {\n    return (options ?? []).reduce((pre: ITreeOption[], option) => {\n      pre.push(...flattenTreeData(option.children))\n      return pre\n    }, [] as ITreeOption[])\n  } else if (type === 'option') {\n    return flattenTreeData(options)\n  } else {\n    return []\n  }\n}\n\nconst currentFlattenOptions = computed(() =>\n  getFlattenOptions(currentTabInfo.value)\n)\n\nconst allFlattenOptions = computed(() =>\n  props.tabs.reduce((pre, item) => {\n    pre.push(...getFlattenOptions(item))\n    return pre\n  }, [] as ITreeOption[])\n)\n\nconst currentSelectedOptions = computed(() => {\n  return allFlattenOptions.value.filter((data: ITreeOption) =>\n    checkSelectedState(data)\n  )\n})\n\nconst checkSelectedState = (data: ITreeOption) => {\n  const valueKey = realValueKey.value\n  if (hasValueKey.value) {\n    const list = arrBindValue.value\n      .map((item: ITreeOption) => item[valueKey])\n      .filter((_: ITreeOption) => _)\n    return list.includes(data[valueKey])\n  } else {\n    return arrBindValue.value.includes(data[valueKey])\n  }\n}\n\nwatch(\n  () => currentSelectedOptions.value,\n  (val) => {\n    emit('selected-options-change', val)\n  },\n  { immediate: true }\n)\n\nconst handleSearch = () => {\n  const value = searchKey.value.trim()\n  if (props.remoteMethod && isFunction(props.remoteMethod)) {\n    props.remoteMethod(value, currentTab.value as string | number)\n  } else {\n    Object.values(treeRefs.value).forEach((tree) => {\n      tree.filter(value)\n    })\n  }\n}\n\nwatch(\n  () => searchKey.value,\n  () => handleSearch()\n)\n\nconst filterNode = (value: string, data: any) => {\n  const searchValue = value.trim().toLocaleLowerCase()\n  if (!searchValue) return true\n  return data.label.toLocaleLowerCase().includes(searchValue)\n}\n\nconst showPanel = (index: number) => {\n  const treeInstance = treeRefs.value[index]\n  if (!treeInstance) return true\n  return !treeInstance.isEmpty\n}\n\nconst showTabs = computed(() => props.tabs.length > 1)\n\nconst hasSearchKey = computed(() => !!searchKey.value.trim())\n\nconst emptyText = computed(() =>\n  hasSearchKey.value\n    ? t('epx.tabsSelect.searchEmptyText')\n    : t('epx.common.noData')\n)\n\nconst isEmpty = computed(() => {\n  const treeInstances = Object.values(treeRefs.value)\n  const optionsLength = currentOptions.value.length\n  if (optionsLength === 0) return true\n  if (treeInstances.length) {\n    return treeInstances.every((tree) => tree.isEmpty)\n  }\n  return false\n})\n\nconst hasChildren = (data: ITreeOption[]) => {\n  return data.some((item) => item.children && item.children.length > 0)\n}\n\nconst handleNodeClick = (data: ITreeOption) => {\n  const valueKey = realValueKey.value\n  if (hasValueKey.value) {\n    if (props.multiple) {\n      const list: IPanelModelValue = bindValue.value ?? []\n\n      const index = list.findIndex(\n        (item: ITreeOption) => item[props.valueKey!] === data[valueKey]\n      )\n      if (index === -1) {\n        list.push(data)\n      } else {\n        list.splice(index, 1)\n      }\n      bindValue.value = list\n    } else {\n      bindValue.value = data\n    }\n  } else {\n    if (props.multiple) {\n      const list: any = bindValue.value\n      if (list.includes(data[valueKey])) {\n        const newList = list.filter(\n          (value: string | number) => value !== data[valueKey]\n        )\n        bindValue.value = newList\n      } else {\n        list.push(data[valueKey])\n        bindValue.value = list\n      }\n    } else {\n      bindValue.value = data[valueKey]\n    }\n  }\n\n  emit('change', hasValueKey.value ? data : data[valueKey])\n}\n\nconst handleTabClick = () => {\n  searchKey.value = ''\n}\n\ndefineExpose({\n  currentFlattenOptions,\n  allFlattenOptions,\n  currentSelectedOptions,\n})\n</script>\n"],"names":[],"mappings":"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"}