zhangyong
2023-08-22 1353e87cb21a4032d585d7404bae9042f2ebcf08
1
{"version":3,"file":"row.mjs","sources":["../../../../../../../packages/components/table-v2/src/components/row.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  inject,\n  nextTick,\n  onMounted,\n  ref,\n  unref,\n} from 'vue'\nimport { isArray, isFunction, isNumber } from '@element-plus/utils'\nimport { tableV2RowProps } from '../row'\nimport { TableV2InjectionKey } from '../tokens'\nimport { placeholderSign } from '../private'\n\nimport type { CSSProperties, RendererElement, RendererNode, VNode } from 'vue'\nimport type { RowEventHandlers, TableV2RowProps } from '../row'\n\ntype CustomizedCellsType = VNode<\n  RendererNode,\n  RendererElement,\n  {\n    [key: string]: any\n  }\n>[]\n\ntype DefaultCellsType = VNode<\n  RendererNode,\n  RendererElement,\n  {\n    [key: string]: any\n  }\n>[][]\n\ntype ColumnCellsType = DefaultCellsType | CustomizedCellsType\n\nconst useTableRow = (props: TableV2RowProps) => {\n  const { isScrolling } = inject(TableV2InjectionKey)!\n\n  const measured = ref(false)\n  const rowRef = ref<HTMLElement>()\n  const measurable = computed(() => {\n    return isNumber(props.estimatedRowHeight) && props.rowIndex >= 0\n  })\n\n  const doMeasure = (isInit = false) => {\n    const $rowRef = unref(rowRef)\n    if (!$rowRef) return\n    const { columns, onRowHeightChange, rowKey, rowIndex, style } = props\n    const { height } = $rowRef.getBoundingClientRect()\n    measured.value = true\n\n    nextTick(() => {\n      if (isInit || height !== Number.parseInt(style!.height as string)) {\n        const firstColumn = columns[0]\n        const isPlaceholder = firstColumn?.placeholderSign === placeholderSign\n        onRowHeightChange?.(\n          { rowKey, height, rowIndex },\n          firstColumn && !isPlaceholder && firstColumn.fixed\n        )\n      }\n    })\n  }\n\n  const eventHandlers = computed(() => {\n    const { rowData, rowIndex, rowKey, onRowHover } = props\n    const handlers = props.rowEventHandlers || ({} as RowEventHandlers)\n    const eventHandlers = {} as {\n      [key in keyof RowEventHandlers]: (e: Event) => void\n    }\n\n    Object.entries(handlers).forEach(([eventName, handler]) => {\n      if (isFunction(handler)) {\n        eventHandlers[eventName as keyof RowEventHandlers] = (event: Event) => {\n          handler({\n            event,\n            rowData,\n            rowIndex,\n            rowKey,\n          })\n        }\n      }\n    })\n\n    if (onRowHover) {\n      ;(\n        [\n          { name: 'onMouseleave', hovered: false },\n          { name: 'onMouseenter', hovered: true },\n        ] as const\n      ).forEach(({ name, hovered }) => {\n        const existedHandler = eventHandlers[name]\n        eventHandlers[name] = ((event: MouseEvent) => {\n          onRowHover({\n            event,\n            hovered,\n            rowData,\n            rowIndex,\n            rowKey,\n          })\n\n          existedHandler?.(event)\n        }) as any\n      })\n    }\n    return eventHandlers\n  })\n\n  const onExpand = (expanded: boolean) => {\n    const { onRowExpand, rowData, rowIndex, rowKey } = props\n\n    onRowExpand?.({\n      expanded,\n      rowData,\n      rowIndex,\n      rowKey,\n    })\n  }\n\n  onMounted(() => {\n    if (unref(measurable)) {\n      doMeasure(true)\n    }\n  })\n\n  return { isScrolling, measurable, measured, rowRef, eventHandlers, onExpand }\n}\n\nconst COMPONENT_NAME = 'ElTableV2TableRow'\n\nconst TableV2Row = defineComponent({\n  name: COMPONENT_NAME,\n  props: tableV2RowProps,\n  setup(props, { expose, slots, attrs }) {\n    const {\n      eventHandlers,\n      isScrolling,\n      measurable,\n      measured,\n      rowRef,\n\n      onExpand,\n    } = useTableRow(props)\n\n    expose({\n      /**\n       * @description manually dispatching expand action on row.\n       */\n      onExpand,\n    })\n\n    return () => {\n      const {\n        columns,\n        columnsStyles,\n        expandColumnKey,\n        depth,\n        rowData,\n        rowIndex,\n        style,\n      } = props\n\n      let ColumnCells: ColumnCellsType = columns.map((column, columnIndex) => {\n        const expandable =\n          isArray(rowData.children) &&\n          rowData.children.length > 0 &&\n          column.key === expandColumnKey\n\n        return slots.cell!({\n          column,\n          columns,\n          columnIndex,\n          depth,\n          style: columnsStyles[column.key],\n          rowData,\n          rowIndex,\n          isScrolling: unref(isScrolling),\n          expandIconProps: expandable\n            ? {\n                rowData,\n                rowIndex,\n                onExpand,\n              }\n            : undefined,\n        })\n      })\n\n      if (slots.row) {\n        ColumnCells = slots.row({\n          cells: ColumnCells.map((node) => {\n            if (isArray(node) && node.length === 1) {\n              return node[0]\n            }\n            return node\n          }),\n          style,\n          columns,\n          depth,\n          rowData,\n          rowIndex,\n          isScrolling: unref(isScrolling),\n        })\n      }\n\n      if (unref(measurable)) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { height, ...exceptHeightStyle } = style || {}\n        const _measured = unref(measured)\n        return (\n          <div\n            ref={rowRef}\n            class={props.class}\n            style={_measured ? style : exceptHeightStyle}\n            role=\"row\"\n            {...attrs}\n            {...unref(eventHandlers)}\n          >\n            {ColumnCells}\n          </div>\n        )\n      }\n\n      return (\n        <div\n          {...attrs}\n          ref={rowRef}\n          class={props.class}\n          style={style}\n          role=\"row\"\n          {...unref(eventHandlers)}\n        >\n          {ColumnCells}\n        </div>\n      )\n    }\n  },\n})\n\nexport default TableV2Row\n\nexport type TableV2RowCellRenderParam = {\n  column: TableV2RowProps['columns'][number]\n  columns: TableV2RowProps['columns']\n  columnIndex: number\n  depth: number\n  style: CSSProperties\n  rowData: any\n  rowIndex: number\n  isScrolling: boolean\n  expandIconProps?: {\n    rowData: any\n    rowIndex: number\n    onExpand: (expand: boolean) => void\n  }\n}\n"],"names":["useTableRow","isScrolling","inject","TableV2InjectionKey","measured","rowRef","ref","isNumber","doMeasure","columns","onRowHeightChange","rowKey","rowIndex","style","height","$rowRef","getBoundingClientRect","value","nextTick","parseInt","firstColumn","placeholderSign","rowData","onRowHover","handlers","props","rowEventHandlers","eventHandlers","Object","forEach","eventName","isFunction","handler","event","name","hovered","onExpand","onRowExpand","onMounted","COMPONENT_NAME","TableV2Row","attrs","measurable","expose","ColumnCells","expandable","slots","depth","column","unref","undefined","cells","isArray","node","_createVNode","_mergeProps"],"mappings":"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"}