{"version":3,"file":"FSelect.mjs","sources":["../../../packages/filter/src/FSelect.tsx"],"sourcesContent":["import { ElOption, ElPopover, ElSelect } from 'element-plus'\nimport { props, slots } from './common'\nimport type { State } from './common'\nimport type { App, PropType } from 'vue'\nimport type {\n  PowerfulTableFilter,\n  PowerfulTableHeaderProps,\n  SFCWithInstall,\n  SetDataType,\n} from '~/index'\nimport { SizeSymbol } from '~/keys'\nimport { LangKey, t } from '~/locale/lang'\n\nconst isFun = <T,>(key: string, data?: T) => {\n  if (typeof data == 'function') {\n    return data()[key]\n  } else {\n    return data ? (data as { [s: string]: any })[key] : ''\n  }\n}\nconst FSelect = defineComponent({\n  name: 'PTFSelect',\n  props: {\n    ...props,\n    // 过滤的配置数据\n    propData: {\n      type: Object as PropType<PowerfulTableHeaderProps>,\n      default: () => {\n        return {\n          prop: '',\n        }\n      },\n    },\n  },\n  emits: ['headerFilterChange'],\n  setup(props, { emit, expose }) {\n    const size = inject(SizeSymbol)\n\n    const state: State<(string | number)[]> = reactive({\n      value: [],\n      options: [],\n      selectVisible: false,\n      visible: false,\n    })\n\n    const selectVisibleChange = (e: boolean) => {\n      if (!e) {\n        state.visible = false\n      } else {\n        state.selectVisible = e\n      }\n    }\n\n    const selectChange = (val: (number | string)[]) => {\n      if (!val.length) val = []\n      emit('headerFilterChange', val, props.headerData)\n    }\n\n    const stop = watch(\n      () => props.propData,\n      (newProps) => {\n        // 首先判断是否存在filter属性\n        if (newProps.filters) {\n          // filter 属性支持 数组和函数 这里在判断是否数组\n          if (Array.isArray(newProps.filters)) state.options = newProps.filters\n          else {\n            console.warn(\n              props.headerData.label,\n              'The filter attribute of the column must be an array Or set the isShowOrFilterColumn property to false'\n            )\n          }\n        } else if (newProps.type === 'switch') {\n          const arr: PowerfulTableFilter[] = []\n          arr.push(\n            {\n              value: t(LangKey.Open),\n              key:\n                isFun(\n                  'activeValue',\n                  (newProps.data as SetDataType<'switch'>)?.property\n                ) || 1,\n            },\n            {\n              value: t(LangKey.Close),\n              key:\n                isFun(\n                  'inactiveValue',\n                  (newProps.data as SetDataType<'switch'>)?.property\n                ) || 0,\n            }\n          )\n          state.options = arr\n        }\n      },\n      { immediate: true, deep: true }\n    )\n\n    // 暴露状态\n    expose({\n      state,\n      header: props.headerData,\n    })\n\n    onBeforeUnmount(() => {\n      stop()\n    })\n\n    return () => (\n      <ElPopover\n        v-model={[state.visible, 'visible']}\n        placement=\"bottom-start\"\n        trigger=\"contextmenu\"\n        width={200}\n        v-slots={slots(state, props.headerData)}\n      >\n        <ElSelect\n          v-model={state.value}\n          multiple\n          collapse-tags\n          clearable\n          placeholder={t(LangKey.Select)}\n          style=\"width: 100%\"\n          teleported={false}\n          size={size}\n          onVisible-change={selectVisibleChange}\n          onChange={selectChange}\n        >\n          {state.options?.map((item, index) => {\n            return (\n              <ElOption\n                key={index}\n                label={item.value}\n                value={item.key}\n              ></ElOption>\n            )\n          })}\n        </ElSelect>\n      </ElPopover>\n    )\n  },\n})\n\nconst PTFSelect = FSelect as SFCWithInstall<typeof FSelect>\nPTFSelect.install = (app: App) => {\n  app.component(FSelect.name!, FSelect)\n}\nexport { PTFSelect, FSelect }\nexport default FSelect\n"],"names":["defineComponent","inject","reactive","watch","onBeforeUnmount","createVNode","ElPopover","ElSelect","ElOption","props","slots","SizeSymbol","t","LangKey","isFun","key","data","FSelect","emit","expose","size","state","selectVisibleChange","selectChange","val","stop","newProps","_a","_b","arr","_createVNode","$event","item","index","PTFSelect","app"],"mappings":"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"}