{"version":3,"file":"useTableRow.mjs","sources":["../../../../src/components/tableView/useTableRow.ts"],"sourcesContent":["import { toRef, shallowRef, onBeforeMount, watch, nextTick, ref } from 'vue';\nimport type { Ref } from 'vue';\nimport type { RowData, GanttRowNode } from '@/types';\nimport type { IRowNode, GridApi } from \"ag-grid-community\";\n\nexport const useTableRow = ({\n  props,\n  setTableRowSelected,\n  rowClass,\n  tableRef,\n  tableBodyView,\n  tableBodyVerticalScrollViewport\n}: {\n  props: any,\n  setTableRowSelected: () => void,\n  rowClass: string,\n  tableRef: Ref<GridApi<RowData> | undefined>,\n  tableBodyView: Ref<HTMLDivElement | null>,\n  tableBodyVerticalScrollViewport: Ref<HTMLDivElement | null>,\n}) => {\n  const visibleRowDataList = toRef(props, 'rows');\n  const rowData = shallowRef<RowData[]>([]);\n  const emptyRows = shallowRef<RowData[]>([]);\n  const domLayout = ref('normal');\n  let cacheLastRowId = '';\n  let cacheLastRowDom: HTMLDivElement | null = null;\n\n  onBeforeMount(() => {\n    getRows();\n  });\n\n  watch(visibleRowDataList, () => {\n    const hasChange = handleEmptyRowChanged();\n    if (!hasChange) {\n      getRows();\n    }\n  }, { deep: false });\n\n  watch(emptyRows, () => {\n    getRows();\n  }, { deep: false });\n\n  /**\n   * rows also include empty rows\n   */\n  const getRows = () => {\n    rowData.value = visibleRowDataList.value.concat(emptyRows.value);\n    nextTick(setTableRowSelected);\n  };\n\n  const getTableRowId = (params: IRowNode<RowData>) => {\n    if (params.data) {\n      return props.getRowId(params.data);\n    } else {\n      return '';\n    }\n  };\n\n  const getRowNode = (row?: RowData) => {\n    let rowNode: GanttRowNode | undefined;\n    if (row) {\n      const id = props.getRowId(row);\n      rowNode = props.rowNodeMap.get(id);\n    }\n    return rowNode;\n  };\n\n  /**\n   * according Empty Row count to change domLayout, make table and gantt view align\n   * @param target\n   * @returns\n   */\n  const handleEmptyRowChanged = (target?: HTMLDivElement) => {\n    const { getEmptyRows, rowHeight, getRowId } = props;\n    let hasChange = false;\n    if (getEmptyRows && tableRef.value && tableBodyView.value) {\n      const bodyHeight = target?.offsetHeight || tableBodyView.value.offsetHeight;\n      const limitCount = Math.ceil(bodyHeight / rowHeight);\n      const displayedRowCount = getVisibleRowCount(limitCount);\n      const emptyRowCount = limitCount - displayedRowCount;\n      let newEmptyRows: RowData[] = [];\n      const lastEmptyRowCount = emptyRows.value.length;\n      if (emptyRowCount !== lastEmptyRowCount) {\n        const verticalScroll = tableBodyVerticalScrollViewport.value?.parentElement;\n        if (verticalScroll) {\n          if (emptyRowCount > 0) {\n            domLayout.value = 'autoHeight';\n          } else {\n            domLayout.value = 'normal';\n          }\n        }\n        newEmptyRows = getEmptyRows(emptyRowCount);\n        newEmptyRows.forEach(item => item.isEmpty = true);\n        emptyRows.value = newEmptyRows;\n        hasChange = true;\n      }\n      if (emptyRowCount > 0) {\n        if (lastEmptyRowCount > 0 && emptyRowCount > lastEmptyRowCount) {\n          const resetRowData = emptyRows.value[lastEmptyRowCount - 1];\n          const resetRowNode = tableRef.value?.getRowNode(getRowId(resetRowData));\n          resetRowNode?.setRowHeight(rowHeight);\n        }\n        nextTick(() => {\n          const diffHeight = limitCount * rowHeight - bodyHeight;\n          const lastRowData = emptyRows.value[emptyRowCount - 1];\n          const lastRowId = getRowId(lastRowData);\n          const lastRowNode = tableRef.value?.getRowNode(lastRowId);\n          lastRowNode?.setRowHeight(rowHeight - diffHeight);\n          const lastRowDom = cacheLastRowId === lastRowId ? cacheLastRowDom : tableBodyView.value!.querySelector(`.${rowClass}[row-id=\"${lastRowId}\"]`) as HTMLDivElement;\n          if (cacheLastRowId !== lastRowId) {\n            cacheLastRowId = lastRowId;\n            cacheLastRowDom = lastRowDom;\n          }\n          if (diffHeight === 0) {\n            lastRowDom && (lastRowDom.classList.remove('no-bottom-border-row'));\n          } else {\n            lastRowDom && (lastRowDom.classList.add('no-bottom-border-row'));\n          }\n          tableRef.value?.onRowHeightChanged();\n        });\n\n      }\n    }\n    return hasChange;\n\n  };\n\n  const getVisibleRowCount = (limitCount: number) => {\n    let count = 0;\n    for (let visibleRowData of visibleRowDataList.value) {\n      if (count >= limitCount) break;\n      const rowNode = getRowNode(visibleRowData);\n      rowNode && !rowNode.hide && count++;\n    }\n    return count;\n  };\n\n  return {\n    rowData,\n    getTableRowId,\n    getRowNode,\n    handleEmptyRowChanged,\n    visibleRowDataList\n  };\n};"],"names":["_a","_b"],"mappings":"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"}