import { areaData2RowColumnArray, twoDArray2CSV } from '@/lib/calculate'; import { copy } from '@/lib/utils/copy'; import { CELL_CLICKED, CELL_SELECTED } from '@/lib/constants/dom-class'; import { highlightAnimationByClass } from '@/lib/utils/style'; import { Store } from '@/lib/store'; export const useCopySelection = (store: Store) => { const getSelectionCSV = (withColumn: boolean) => { const rowColumnData = areaData2RowColumnArray( withColumn ? store.state.index.columnRecord : null, store.state.selectionStatus.leftArea, store.state.selectionStatus.scrollArea, store.state.selectionStatus.rightArea, )( store.state.view.rowIndex2Id, store.state.index.columnGroupRecord.left.ids, store.state.index.columnGroupRecord.scroll.ids, store.state.index.columnGroupRecord.right.ids, store.state.index.data2D, ); return twoDArray2CSV(rowColumnData); }; return (withColumn = false) => { // 判断是否有选中 if (store.state.selectionStatus.active) { highlightAnimationByClass(CELL_SELECTED, 'cellCopy 1s'); store.mutation.inactiveRightMenu(); return copy(getSelectionCSV(withColumn)); } const { columnId, rowId } = store.state.activeStatus.clickedBodyCell; if (columnId && rowId) { highlightAnimationByClass(CELL_CLICKED, 'cellCopy 1s'); store.mutation.inactiveRightMenu(); return copy(`${store.state.index.data2D[rowId]?.fieldData?.[columnId].value} || ''`); } }; };