vue-gantt-3
Version:
A gantt component for Vue 3
1 lines • 7.25 kB
Source Map (JSON)
{"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":";AAKO,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOM;AACE,QAAA,qBAAqB,MAAM,OAAO,MAAM;AACxC,QAAA,UAAU,WAAsB,EAAE;AAClC,QAAA,YAAY,WAAsB,EAAE;AACpC,QAAA,YAAY,IAAI,QAAQ;AAC9B,MAAI,iBAAiB;AACrB,MAAI,kBAAyC;AAE7C,gBAAc,MAAM;AACV,YAAA;AAAA,EAAA,CACT;AAED,QAAM,oBAAoB,MAAM;AAC9B,UAAM,YAAY,sBAAsB;AACxC,QAAI,CAAC,WAAW;AACN,cAAA;AAAA,IAAA;AAAA,EACV,GACC,EAAE,MAAM,OAAO;AAElB,QAAM,WAAW,MAAM;AACb,YAAA;AAAA,EAAA,GACP,EAAE,MAAM,OAAO;AAKlB,QAAM,UAAU,MAAM;AACpB,YAAQ,QAAQ,mBAAmB,MAAM,OAAO,UAAU,KAAK;AAC/D,aAAS,mBAAmB;AAAA,EAC9B;AAEM,QAAA,gBAAgB,CAAC,WAA8B;AACnD,QAAI,OAAO,MAAM;AACR,aAAA,MAAM,SAAS,OAAO,IAAI;AAAA,IAAA,OAC5B;AACE,aAAA;AAAA,IAAA;AAAA,EAEX;AAEM,QAAA,aAAa,CAAC,QAAkB;AAChC,QAAA;AACJ,QAAI,KAAK;AACD,YAAA,KAAK,MAAM,SAAS,GAAG;AACnB,gBAAA,MAAM,WAAW,IAAI,EAAE;AAAA,IAAA;AAE5B,WAAA;AAAA,EACT;AAOM,QAAA,wBAAwB,CAAC,WAA4B;;AACzD,UAAM,EAAE,cAAc,WAAW,SAAa,IAAA;AAC9C,QAAI,YAAY;AAChB,QAAI,gBAAgB,SAAS,SAAS,cAAc,OAAO;AACzD,YAAM,cAAa,iCAAQ,iBAAgB,cAAc,MAAM;AAC/D,YAAM,aAAa,KAAK,KAAK,aAAa,SAAS;AAC7C,YAAA,oBAAoB,mBAAmB,UAAU;AACvD,YAAM,gBAAgB,aAAa;AACnC,UAAI,eAA0B,CAAC;AACzB,YAAA,oBAAoB,UAAU,MAAM;AAC1C,UAAI,kBAAkB,mBAAmB;AACjC,cAAA,kBAAiB,qCAAgC,UAAhC,mBAAuC;AAC9D,YAAI,gBAAgB;AAClB,cAAI,gBAAgB,GAAG;AACrB,sBAAU,QAAQ;AAAA,UAAA,OACb;AACL,sBAAU,QAAQ;AAAA,UAAA;AAAA,QACpB;AAEF,uBAAe,aAAa,aAAa;AACzC,qBAAa,QAAQ,CAAA,SAAQ,KAAK,UAAU,IAAI;AAChD,kBAAU,QAAQ;AACN,oBAAA;AAAA,MAAA;AAEd,UAAI,gBAAgB,GAAG;AACjB,YAAA,oBAAoB,KAAK,gBAAgB,mBAAmB;AAC9D,gBAAM,eAAe,UAAU,MAAM,oBAAoB,CAAC;AAC1D,gBAAM,gBAAe,cAAS,UAAT,mBAAgB,WAAW,SAAS,YAAY;AACrE,uDAAc,aAAa;AAAA,QAAS;AAEtC,iBAAS,MAAM;;AACP,gBAAA,aAAa,aAAa,YAAY;AAC5C,gBAAM,cAAc,UAAU,MAAM,gBAAgB,CAAC;AAC/C,gBAAA,YAAY,SAAS,WAAW;AACtC,gBAAM,eAAcA,MAAA,SAAS,UAAT,gBAAAA,IAAgB,WAAW;AAClC,qDAAA,aAAa,YAAY;AAChC,gBAAA,aAAa,mBAAmB,YAAY,kBAAkB,cAAc,MAAO,cAAc,IAAI,QAAQ,YAAY,SAAS,IAAI;AAC5I,cAAI,mBAAmB,WAAW;AACf,6BAAA;AACC,8BAAA;AAAA,UAAA;AAEpB,cAAI,eAAe,GAAG;AACL,0BAAA,WAAW,UAAU,OAAO,sBAAsB;AAAA,UAAA,OAC5D;AACU,0BAAA,WAAW,UAAU,IAAI,sBAAsB;AAAA,UAAA;AAEhE,WAAAC,MAAA,SAAS,UAAT,gBAAAA,IAAgB;AAAA,QAAmB,CACpC;AAAA,MAAA;AAAA,IAEH;AAEK,WAAA;AAAA,EAET;AAEM,QAAA,qBAAqB,CAAC,eAAuB;AACjD,QAAI,QAAQ;AACH,aAAA,kBAAkB,mBAAmB,OAAO;AACnD,UAAI,SAAS,WAAY;AACnB,YAAA,UAAU,WAAW,cAAc;AAC9B,iBAAA,CAAC,QAAQ,QAAQ;AAAA,IAAA;AAEvB,WAAA;AAAA,EACT;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;"}