{"version":3,"file":"table-column.mjs","sources":["../../../components/table/table-column.ts"],"sourcesContent":["import {\r\n  computed,\r\n  defineComponent,\r\n  inject,\r\n  onBeforeUnmount,\r\n  reactive,\r\n  renderSlot,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { createSizeProp, useProps } from '@vexip-ui/config'\r\nimport { isNull, warnOnce } from '@vexip-ui/utils'\r\nimport { tableColumnProps } from './props'\r\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS, columnTypes, noopFormatter } from './symbol'\r\n\r\nimport type { ColumnWithKey, Data, TableRowState, TableTextAlign } from './symbol'\r\n\r\ntype ColumnPropKey = keyof typeof tableColumnProps\r\n\r\nconst propKeys = Object.keys(tableColumnProps) as ColumnPropKey[]\r\nconst aliases: Partial<Record<ColumnPropKey, string>> = {\r\n  idKey: 'key',\r\n}\r\nconst ignoredProps: ColumnPropKey[] = [\r\n  'renderer',\r\n  'headRenderer',\r\n  'filterRenderer',\r\n  'summaryRenderer',\r\n]\r\nconst triggerProps: ColumnPropKey[] = [\r\n  'idKey',\r\n  'fixed',\r\n  'type',\r\n  'width',\r\n  'minWidth',\r\n  'maxWidth',\r\n  'sorter',\r\n  'order',\r\n  'orderLabel',\r\n  'disableRow',\r\n  'headSpan',\r\n  'cellSpan',\r\n]\r\nconst aligns: TableTextAlign[] = ['left', 'center', 'right']\r\n\r\nconst funcProp = {\r\n  default: null,\r\n  isFunc: true,\r\n  static: true,\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'TableColumn',\r\n  inheritAttrs: false,\r\n  props: tableColumnProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('tableColumn', _props, {\r\n      idKey: {\r\n        default: null,\r\n        validator: value => !isNull(value),\r\n        static: true,\r\n      },\r\n      name: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      accessor: {\r\n        default: null,\r\n        isFunc: true,\r\n        static: true,\r\n      },\r\n      fixed: {\r\n        default: false,\r\n        static: true,\r\n      },\r\n      class: null,\r\n      style: null,\r\n      attrs: null,\r\n      type: {\r\n        default: null,\r\n        validator: value => columnTypes.includes(value),\r\n        static: true,\r\n      },\r\n      width: null,\r\n      minWidth: 100,\r\n      maxWidth: null,\r\n      filter: null,\r\n      sorter: false,\r\n      renderer: funcProp,\r\n      headRenderer: funcProp,\r\n      filterRenderer: funcProp,\r\n      order: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      ellipsis: null,\r\n      checkboxSize: {\r\n        ...createSizeProp(),\r\n        default: null,\r\n      },\r\n      selectionSize: {\r\n        ...createSizeProp(),\r\n        default: null,\r\n      },\r\n      disableRow: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      truthIndex: false,\r\n      orderLabel: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      meta: null,\r\n      textAlign: {\r\n        default: 'left',\r\n        validator: value => aligns.includes(value),\r\n      },\r\n      headSpan: {\r\n        default: 1,\r\n        static: true,\r\n      },\r\n      cellSpan: funcProp,\r\n      noSummary: false,\r\n      summaryRenderer: funcProp,\r\n      indented: false,\r\n      formatter: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      singleSelect: false,\r\n    })\r\n\r\n    const selectionSize = computed(() => {\r\n      if (props.checkboxSize) {\r\n        warnOnce(\"'checkboxSize' has been deprecated, please use 'selectionSize' instead.\")\r\n      }\r\n\r\n      return props.selectionSize ?? props.checkboxSize ?? 'default'\r\n    })\r\n\r\n    const tableAction = inject(TABLE_ACTIONS, null)\r\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\r\n    const options = reactive({}) as ColumnWithKey\r\n\r\n    for (const key of propKeys) {\r\n      if (ignoredProps.includes(key)) continue\r\n\r\n      if (key === 'selectionSize' || key === 'checkboxSize') {\r\n        ;(options as any).selectionSize = selectionSize.value\r\n\r\n        watch(selectionSize, value => {\r\n          ;(options as any).selectionSize = value\r\n          tableAction?.setColumnProp(options.key, 'selectionSize', value)\r\n        })\r\n\r\n        continue\r\n      }\r\n\r\n      const aliasKey = (aliases[key] || key) as keyof ColumnWithKey\r\n\r\n      ;(options[aliasKey] as any) = props[key]\r\n\r\n      if (key === 'idKey') {\r\n        const update = (value: string | number) => {\r\n          if (isNull(value) && props.type) {\r\n            ;(options[aliasKey] as any) = value = `__vxp_${props.type}`\r\n          } else {\r\n            ;(options[aliasKey] as any) = value\r\n          }\r\n        }\r\n\r\n        update(props.idKey)\r\n        watch(\r\n          () => props.idKey,\r\n          value => {\r\n            update(value)\r\n            tableAction?.updateColumns()\r\n          },\r\n        )\r\n      } else if (key === 'filter') {\r\n        const filterWithoutMeta = computed(() => {\r\n          if (props.filter) {\r\n            const { meta, ...filter } = props.filter\r\n            return filter\r\n          }\r\n\r\n          return props.filter\r\n        })\r\n\r\n        watch(\r\n          filterWithoutMeta,\r\n          () => {\r\n            options.filter = props.filter\r\n            tableAction?.updateColumns()\r\n          },\r\n          { deep: true },\r\n        )\r\n      } else {\r\n        const trigger = triggerProps.includes(key)\r\n\r\n        watch(\r\n          () => props[key],\r\n          value => {\r\n            ;(options[aliasKey] as any) = value\r\n            trigger\r\n              ? tableAction?.updateColumns()\r\n              : tableAction?.setColumnProp(options.key, key, value)\r\n          },\r\n        )\r\n      }\r\n    }\r\n\r\n    watch(() => props.renderer, setRenderer)\r\n    watch(() => props.headRenderer, setHeadRenderer)\r\n    watch(() => props.filterRenderer, setFilterRenderer)\r\n    watch(() => props.summaryRenderer, setSummaryRenderer)\r\n\r\n    setRenderer()\r\n    setHeadRenderer()\r\n    setFilterRenderer()\r\n    setSummaryRenderer()\r\n\r\n    if (parentActions) {\r\n      parentActions.increaseColumn(options)\r\n\r\n      onBeforeUnmount(() => {\r\n        parentActions.decreaseColumn(options)\r\n      })\r\n    } else {\r\n      tableAction?.increaseColumn(options)\r\n\r\n      onBeforeUnmount(() => {\r\n        tableAction?.decreaseColumn(options)\r\n      })\r\n    }\r\n\r\n    // TODO: 在动态列时会触发无限 watch，初步估计是重置单元格合并状态导致的\r\n    // onBeforeUpdate(() => {\r\n    //   setRenderer()\r\n    //   setHeadRenderer()\r\n    //   setFilterRenderer()\r\n    // }\r\n\r\n    function setRenderer() {\r\n      if (options.type && options.type !== 'expand') {\r\n        ;(options as any).renderer = undefined\r\n        return\r\n      }\r\n\r\n      options.renderer = (data: any) => {\r\n        if (typeof slots.default === 'function') {\r\n          return renderSlot(slots, 'default', data)\r\n        }\r\n\r\n        if (typeof props.renderer === 'function') {\r\n          return props.renderer(data)\r\n        }\r\n\r\n        if (options.type === 'expand') {\r\n          return ''\r\n        }\r\n\r\n        const row = data.row\r\n        const rowIndex = data.rowIndex as number\r\n        const formatter =\r\n          typeof options.formatter === 'function' ? options.formatter : noopFormatter\r\n\r\n        const result = formatter(\r\n          typeof props.accessor === 'function'\r\n            ? props.accessor(row as Data, rowIndex)\r\n            : (row as TableRowState)[options.key as unknown as keyof TableRowState],\r\n        )\r\n\r\n        return isNull(result) ? '' : String(result)\r\n      }\r\n    }\r\n\r\n    function setHeadRenderer() {\r\n      if (options.type === 'selection') {\r\n        ;(options as any).renderer = undefined\r\n        return\r\n      }\r\n\r\n      options.headRenderer = data => {\r\n        if (typeof slots.head === 'function') {\r\n          return renderSlot(slots, 'head', data)\r\n        }\r\n\r\n        if (typeof props.headRenderer === 'function') {\r\n          return props.headRenderer(data)\r\n        }\r\n\r\n        return props.name\r\n      }\r\n    }\r\n\r\n    function setFilterRenderer() {\r\n      if (typeof slots.filter === 'function' || typeof props.filterRenderer === 'function') {\r\n        options.filterRenderer = data => {\r\n          if (typeof slots.filter === 'function') {\r\n            return renderSlot(slots, 'filter', data)\r\n          }\r\n\r\n          return props.filterRenderer(data)\r\n        }\r\n      } else {\r\n        options.filterRenderer = undefined\r\n      }\r\n    }\r\n\r\n    function setSummaryRenderer() {\r\n      if (typeof slots.summary === 'function' || typeof props.summaryRenderer === 'function') {\r\n        options.summaryRenderer = data => {\r\n          if (typeof slots.summary === 'function') {\r\n            return renderSlot(slots, 'summary', data)\r\n          }\r\n\r\n          if (typeof props.summaryRenderer === 'function') {\r\n            return props.summaryRenderer(data)\r\n          }\r\n\r\n          return ''\r\n        }\r\n      } else {\r\n        options.summaryRenderer = undefined\r\n      }\r\n    }\r\n\r\n    return () => null\r\n  },\r\n})\r\n"],"names":["propKeys","tableColumnProps","aliases","ignoredProps","triggerProps","aligns","funcProp","TableColumn","defineComponent","_props","slots","props","useProps","value","isNull","columnTypes","createSizeProp","selectionSize","computed","warnOnce","tableAction","inject","TABLE_ACTIONS","parentActions","COLUMN_GROUP_ACTIONS","options","reactive","key","watch","aliasKey","update","filterWithoutMeta","meta","filter","trigger","setRenderer","setHeadRenderer","setFilterRenderer","setSummaryRenderer","onBeforeUnmount","data","renderSlot","row","rowIndex","result","noopFormatter"],"mappings":"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"}