{"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  _TYPE,\n} from '~/index'\nimport { SizeSymbol } from '~/keys'\nimport { LangKey, t } from '~/locale/lang'\nimport { isData } from '~/powerful-table/src/powerful-table-data'\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        const data = isData(\n          { row: {}, index: 0, props: newProps },\n          newProps.data\n        ) as _TYPE['switch']\n\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: isFun('activeValue', data?.property) || 1,\n            },\n            {\n              value: t(LangKey.Close),\n              key: isFun('inactiveValue', data?.property) || 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","isData","LangKey","isFun","key","data","FSelect","emit","expose","size","state","selectVisibleChange","selectChange","val","stop","newProps","arr","_createVNode","$event","_a","item","index","PTFSelect","app"],"mappings":"AAMA,SAAA,mBAAAA,GAAA,UAAAC,GAAA,YAAAC,GAAA,SAAAC,GAAA,mBAAAC,GAAA,eAAAC,SAAA;AAAA,SAAA,aAAAC,GAAA,YAAAC,GAAA,YAAAC,SAAA;AAAA,SAAA,SAAAC,GAAA,SAAAC,SAAA;AAAA,SAAA,cAAAC,SAAA;AAAA,SAAA,KAAAC,SAAA;AAAA,SAAA,UAAAC,SAAA;AAAA,SAAA,WAAAC,SAAA;AAAA,MAAAC,IAAA,CAAAC,GAAAC,MACA,OAAAA,KAAA,aACAA,EAAA,EAAAD,CAAA,IAEAC,IAAAA,EAAAD,CAAA,IAAA,IAGAE,IAAA,gBAAAlB,EAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,IACA,GAAAS;AAAA;AAAA,IAEA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,OACA;AAAA,QACA,MAAA;AAAA,MACA;AAAA,IAEA;AAAA,EACA;AAAA,EACA,OAAA,CAAA,oBAAA;AAAA,EACA,MAAAA,GAAA;AAAA,IACA,MAAAU;AAAA,IACA,QAAAC;AAAA,EACA,GAAA;AACA,UAAAC,IAAApB,EAAAU,CAAA,GACAW,IAAApB,EAAA;AAAA,MACA,OAAA,CAAA;AAAA,MACA,SAAA,CAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAA;AAAA,IACA,CAAA,GACAqB,IAAA,OAAA;AACA,MAAA,IAGAD,EAAA,gBAAA,IAFAA,EAAA,UAAA;AAAA,IAIA,GACAE,IAAA,CAAAC,MAAA;AACA,MAAAA,EAAA,WAAAA,IAAA,CAAA,IACAN,EAAA,sBAAAM,GAAAhB,EAAA,UAAA;AAAA,IACA,GACAiB,IAAAvB,EAAA,MAAAM,EAAA,UAAA,CAAAkB,MAAA;AACA,YAAAV,IAAAJ,EAAA;AAAA,QACA,KAAA,CAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAAc;AAAA,MACA,GAAAA,EAAA,IAAA;AAGA,UAAAA,EAAA;AAEA,QAAA,MAAA,QAAAA,EAAA,OAAA,IAAAL,EAAA,UAAAK,EAAA,UACA,QAAA,KAAAlB,EAAA,WAAA,OAAA,uGAAA;AAAA,eAEAkB,EAAA,SAAA,UAAA;AACA,cAAAC,IAAA,CAAA;AACA,QAAAA,EAAA,KAAA;AAAA,UACA,OAAAhB,EAAAE,EAAA,IAAA;AAAA,UACA,KAAAC,EAAA,eAAAE,KAAA,gBAAAA,EAAA,QAAA,KAAA;AAAA,QACA,GAAA;AAAA,UACA,OAAAL,EAAAE,EAAA,KAAA;AAAA,UACA,KAAAC,EAAA,iBAAAE,KAAA,gBAAAA,EAAA,QAAA,KAAA;AAAA,QACA,CAAA,GACAK,EAAA,UAAAM;AAAA,MACA;AAAA,IACA,GAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,IACA,CAAA;AAGA,WAAAR,EAAA;AAAA,MACA,OAAAE;AAAA,MACA,QAAAb,EAAA;AAAA,IACA,CAAA,GACAL,EAAA,MAAA;AACA,MAAAsB;IACA,CAAA,GACA,MAAAG,EAAAvB,GAAA;AAAA,MACA,SAAAgB,EAAA;AAAA,MACA,oBAAA,CAAAQ,MAAAR,EAAA,UAAAQ;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,IACA,GAAA;AAAA,MACA,SAAA,MAAA,CAAAD,EAAAtB,GAAA;AAAA,QACA,YAAAe,EAAA;AAAA,QACA,uBAAA,CAAAQ,MAAAR,EAAA,QAAAQ;AAAA,QACA,UAAA;AAAA,QACA,iBAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAAlB,EAAAE,EAAA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAAO;AAAA,QACA,oBAAAE;AAAA,QACA,UAAAC;AAAA,MACA,GAAA;AAAA,QACA,SAAA,MAAA;AArGA,cAAAO;AAqGA,mBAAAA,IAAAT,EAAA,YAAA,gBAAAS,EAAA,IAAA,CAAAC,GAAAC,MACAJ,EAAArB,GAAA;AAAA,YACA,KAAAyB;AAAA,YACA,OAAAD,EAAA;AAAA,YACA,OAAAA,EAAA;AAAA,UACA,GAAA,IAAA,EACA;AAAA;AAAA,MACA,CAAA,CAAA;AAAA,MACA,GAAAtB,EAAAY,GAAAb,EAAA,UAAA;AAAA,IACA,CAAA;AAAA,EACA;AACA,CAAA,GACAyB,IAAAhB;AACAgB,EAAA,UAAA,CAAAC,MAAA;AACA,EAAAA,EAAA,UAAAjB,EAAA,MAAAA,CAAA;AACA;"}