{"version":3,"file":"config.mjs","sources":["../../../../../src/components/ivue-table/config.ts"],"sourcesContent":["import { h } from 'vue';\r\nimport { hasOwn } from '@vue/shared';\r\nimport IvueCheckbox from '../ivue-checkbox/index.vue';\r\nimport IvueIcon from '../ivue-icon/index.vue';\r\nimport Loading from './loading.vue';\r\nimport { getProp } from '../../utils/objects';\r\n\r\n// ts\r\nimport type { VNode } from 'vue';\r\nimport type { TableColumnCtx } from './table-column/defaults';\r\nimport type { RenderRowData } from './table/defaults';\r\nimport type { Store } from './store';\r\n\r\nconst defaultClassNames = {\r\n  selection: 'ivue-table-column--selection',\r\n  expand: 'ivue-table--expand-column',\r\n};\r\n\r\n// 行样式\r\nexport const cellStyles = {\r\n  default: {\r\n    order: '',\r\n  },\r\n  selection: {\r\n    width: 48,\r\n    minWidth: 48,\r\n    columnWidth: 48,\r\n    order: '',\r\n  },\r\n  expand: {\r\n    width: 48,\r\n    minWidth: 48,\r\n    columnWidth: 48,\r\n    order: '',\r\n  },\r\n  index: {\r\n    width: 48,\r\n    minWidth: 48,\r\n    columnWidth: 48,\r\n    order: '',\r\n  },\r\n};\r\n\r\n// 合并选项\r\nexport function mergeOptions<T, K>(defaults: T, config: K): T & K {\r\n  const options = {} as T & K;\r\n\r\n  let key;\r\n\r\n  // 复制对象\r\n  for (key in defaults) {\r\n    options[key] = defaults[key];\r\n  }\r\n\r\n  // config\r\n  for (key in config) {\r\n    if (hasOwn(config as unknown as Record<string, any>, key)) {\r\n      const value = config[key];\r\n      if (typeof value !== 'undefined') {\r\n        options[key] = value;\r\n      }\r\n    }\r\n  }\r\n\r\n  return options;\r\n}\r\n\r\n// https://github.com/reduxjs/redux/blob/master/src/compose.js\r\n// 函数执行的顺序是从右到左\r\nexport function compose(...funcs) {\r\n  if (funcs.length === 0) {\r\n    return (arg) => arg;\r\n  }\r\n  if (funcs.length === 1) {\r\n    return funcs[0];\r\n  }\r\n  return funcs.reduce(\r\n    (a, b) =>\r\n      (...args) =>\r\n        a(b(...args))\r\n  );\r\n}\r\n\r\n// 渲染行\r\nexport function defaultRenderCell({\r\n  row,\r\n  column,\r\n  $index,\r\n}: {\r\n  row: any;\r\n  column: TableColumnCtx;\r\n  $index: number;\r\n}) {\r\n  // 字段名称 对应列内容的字段名\r\n  const property = column.property;\r\n  const value = property && getProp(row, property).value;\r\n\r\n  // 是否有格式化内容\r\n  if (column && column.formatter) {\r\n    return column.formatter(row, column, value, $index);\r\n  }\r\n\r\n  // 普通渲染\r\n  return value?.toString?.() || '';\r\n}\r\n\r\n// 列\r\nexport function treeCellPrefix(\r\n  { row, treeNode, store }: RenderRowData,\r\n  createPlaceholder = false\r\n) {\r\n  // 不是树节点\r\n  if (!treeNode) {\r\n    // 创建占位符\r\n    if (createPlaceholder) {\r\n      return [\r\n        h('span', {\r\n          class: 'ivue-table-indent--placeholder',\r\n        }),\r\n      ];\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  // ele\r\n  const ele: VNode[] = [];\r\n\r\n  const callback = (event) => {\r\n    event.stopPropagation();\r\n\r\n    // 加载中\r\n    if (treeNode.loading) {\r\n      return;\r\n    }\r\n\r\n    // 树形数据与懒加载\r\n    store.loadOrToggle(row);\r\n  };\r\n\r\n  // 展示树形数据时，树节点的缩进\r\n  if (treeNode.indent) {\r\n    ele.push(\r\n      h('span', {\r\n        class: 'ivue-table-indent',\r\n        style: {\r\n          'padding-left': `${treeNode.indent}px`,\r\n        },\r\n      })\r\n    );\r\n  }\r\n\r\n  // 展开行\r\n  if (typeof treeNode.expanded === 'boolean' && !treeNode.noLazyChildren) {\r\n    const expandClasses = [\r\n      'ivue-table--expand-icon',\r\n      {\r\n        ['ivue-table--expand-icon__expandend']: treeNode.expanded,\r\n      },\r\n    ];\r\n\r\n    let icon = 'chevron_right';\r\n\r\n    // 加载中\r\n    if (treeNode.loading) {\r\n      icon = '';\r\n    }\r\n\r\n    // 解析指令\r\n\r\n    ele.push(\r\n      h(\r\n        'div',\r\n        {\r\n          class: expandClasses,\r\n          onClick: callback,\r\n        },\r\n        {\r\n          default: () => {\r\n            return [\r\n              icon\r\n                ? h(IvueIcon, null, {\r\n                    default: () => icon,\r\n                  })\r\n                : h(Loading),\r\n            ];\r\n          },\r\n        }\r\n      )\r\n    );\r\n  }\r\n  // 其他\r\n  else {\r\n    ele.push(\r\n      h('span', {\r\n        class: 'ivue-table-indent--placeholder',\r\n      })\r\n    );\r\n  }\r\n\r\n  return ele;\r\n}\r\n\r\n// 需要替换的渲染函数\r\nexport const cellForced = {\r\n  // 多选\r\n  selection: {\r\n    // 渲染头部\r\n    renderHeader({ store }: { store: Store }) {\r\n      return h(IvueCheckbox, {\r\n        // 没有数据禁用\r\n        disabled:\r\n          store.states.data.value && store.states.data.value.length === 0,\r\n        // 是否选择了全部\r\n        modelValue: store.states.isAllSelected.value,\r\n        // 更新modelValue\r\n        'onUpdate:modelValue': store.toggleAllSelection,\r\n        // 中间状态\r\n        indeterminate:\r\n          store.states.selection.value.length > 0 &&\r\n          !store.states.isAllSelected.value,\r\n        // onClick\r\n        onClick: (event: Event) => {\r\n          event.stopPropagation();\r\n        },\r\n      });\r\n    },\r\n    // 渲染单元格\r\n    renderCell({\r\n      row,\r\n      column,\r\n      store,\r\n      $index,\r\n    }: {\r\n      row: any;\r\n      column: TableColumnCtx;\r\n      store: Store;\r\n      $index: string;\r\n    }) {\r\n      return h(IvueCheckbox, {\r\n        disabled: column.selectable\r\n          ? !column.selectable.call(null, row, $index)\r\n          : false,\r\n        modelValue: store.isSelected(row),\r\n        onChange: () => {\r\n          store.commit('rowSelectedChanged', row);\r\n        },\r\n        // 阻止捕获和冒泡阶段中当前事件\r\n        onClick: (event: Event) => event.stopPropagation(),\r\n      });\r\n    },\r\n    // 对应列是否可以排序\r\n    sortable: false,\r\n    // 对应列是否可以通过拖动改变宽度\r\n    resizable: false,\r\n  },\r\n  // 索引\r\n  index: {\r\n    // 渲染头部\r\n    renderHeader({ column }: { column: TableColumnCtx }) {\r\n      return column.label || '#';\r\n    },\r\n    // 渲染单元格\r\n    renderCell({ column, $index }: { column: TableColumnCtx; $index: number }) {\r\n      let i = $index + 1;\r\n\r\n      const index = column.index;\r\n\r\n      // number\r\n      if (typeof index === 'number') {\r\n        i = $index + index;\r\n      }\r\n      // function\r\n      else if (typeof index === 'function') {\r\n        i = index($index);\r\n      }\r\n\r\n      return h('div', {}, [i]);\r\n    },\r\n  },\r\n  expand: {\r\n    // 渲染头部\r\n    renderHeader({ column }: { column: TableColumnCtx }) {\r\n      return column.label || '';\r\n    },\r\n    renderCell({\r\n      row,\r\n      store,\r\n      expanded,\r\n    }: {\r\n      row: TableColumnCtx;\r\n      store: Store;\r\n      expanded: boolean;\r\n    }) {\r\n      // 切换展开\r\n      const handleToggleRowExpansion = (event: Event) => {\r\n        event.stopPropagation();\r\n\r\n        // 切换行展开\r\n        store.toggleRowExpansion(row);\r\n      };\r\n\r\n      return h(\r\n        'div',\r\n        {\r\n          class: [\r\n            'ivue-table--expand-icon',\r\n            {\r\n              ['ivue-table--expand-icon__expandend']: expanded,\r\n            },\r\n          ],\r\n          onClick: handleToggleRowExpansion,\r\n        },\r\n        {\r\n          default: () => {\r\n            return [\r\n              h(IvueIcon, null, {\r\n                default: () => 'chevron_right',\r\n              }),\r\n            ];\r\n          },\r\n        }\r\n      );\r\n    },\r\n    sortable: false,\r\n    resizable: false,\r\n  },\r\n};\r\n\r\n// 获取默认的class\r\nexport const getDefaultClassName = (type) => {\r\n  return defaultClassNames[type] || '';\r\n};\r\n"],"names":[],"mappings":"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"}