{"version":3,"file":"copyGridElements.cjs","sources":["../../../../src/components/Grid/copyGridElements.ts"],"sourcesContent":["import { CellProps, SelectedRegion, SelectionFocus } from './types';\nimport { RefObject, createElement } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { flushSync } from 'react-dom';\n\ninterface CopyGridElementsProps {\n  cell: CellProps;\n  selection: SelectedRegion;\n  rowCount: number;\n  columnCount: number;\n  pageStart?: number;\n  focus: SelectionFocus;\n  outerRef: RefObject<HTMLDivElement>;\n}\n\nconst addCellToRow = (\n  row: HTMLTableRowElement,\n  cell: CellProps,\n  rowIndex: number,\n  columnIndex: number\n) => {\n  const td = document.createElement('td');\n  const container = document.createElement('div');\n  const root = createRoot(container);\n\n  flushSync(() => {\n    root.render(\n      createElement(cell, { rowIndex, columnIndex, width: 1000, type: 'row-cell' })\n    );\n  });\n\n  td.innerHTML = container.innerHTML;\n  root.unmount();\n\n  row.appendChild(td);\n};\n\nconst columnListLoop = (\n  tbody: HTMLTableSectionElement,\n  columnList: number[],\n  cell: CellProps,\n  rowIndex: number\n) => {\n  const row = document.createElement('tr');\n  columnList.forEach(columnIndex => {\n    addCellToRow(row, cell, rowIndex, columnIndex);\n  });\n  tbody.appendChild(row);\n};\n\nconst copyGridElements = async ({\n  cell,\n  selection,\n  rowCount,\n  columnCount,\n  pageStart = 0,\n  focus,\n  outerRef,\n}: CopyGridElementsProps): Promise<void> => {\n  if (!outerRef.current) {\n    throw 'Could not fetch selection';\n  }\n  const table = document.createElement('table');\n  table.style.position = 'absolute';\n  table.style.top = '-200px';\n  table.style.left = '-200px';\n  table.style.width = '0px';\n  table.style.height = '0px';\n  table.style.overflow = 'hidden';\n  const thead = document.createElement('thead');\n  const tbody = document.createElement('tbody');\n\n  switch (selection.type) {\n    case 'rectangle':\n      Array.from(\n        { length: selection.bounds.bottom + 1 - selection.bounds.top },\n        (_, index) => selection.bounds.top + index\n      ).forEach(rowIndex => {\n        const columnList = Array.from(\n          { length: selection.bounds.right + 1 - selection.bounds.left },\n          (_, index) => selection.bounds.left + index\n        );\n        columnListLoop(tbody, columnList, cell, rowIndex);\n      });\n      break;\n    case 'columns':\n      Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(\n        rowIndex => {\n          const columnList = [...selection.columns].sort();\n          columnListLoop(tbody, columnList, cell, rowIndex);\n        }\n      );\n      break;\n    case 'rows':\n      [...selection.rows].sort().forEach(rowIndex => {\n        const columnList = Array.from(\n          { length: columnCount },\n          (_, index) => pageStart + index\n        );\n        columnListLoop(tbody, columnList, cell, rowIndex);\n      });\n      break;\n    case 'empty':\n      columnListLoop(tbody, [focus.column], cell, focus.row);\n      break;\n    default:\n      throw new Error('incorrect selection provided');\n  }\n\n  table.appendChild(thead);\n  table.appendChild(tbody);\n\n  outerRef.current.appendChild(table);\n\n  const windowSelection = window.getSelection();\n  if (windowSelection) {\n    const range = document.createRange();\n    range.selectNodeContents(table);\n    windowSelection.removeAllRanges();\n    windowSelection.addRange(range);\n    await navigator.clipboard.writeText(table.innerText);\n    windowSelection.removeAllRanges();\n\n    outerRef.current.removeChild(table);\n  } else {\n    throw 'Could not fetch selection';\n  }\n};\n\nexport default copyGridElements;\n"],"names":["createRoot","flushSync","createElement"],"mappings":"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"}