{"version":3,"file":"useSelectionActions.cjs","sources":["../../../../src/components/Grid/useSelectionActions.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport {\n  SelectionAction,\n  SelectedRegion,\n  SelectionPos,\n  RowsSelection,\n  Rectangle,\n  ColumnsSelection,\n  KeyEventType,\n  onSelectFn,\n  RowSelectionAction,\n  ColumnSelectionAction,\n  CellSelectionAction,\n  SelectionType,\n  IsSelectedType,\n  SelectionTypeFn,\n  AllSelection,\n} from './types';\n\ninterface Props {\n  onCellSelect: onSelectFn;\n  focus: { row: number; column: number };\n  columnCount: number;\n  rowCount: number;\n  onFocusChange: (rowIndex: number, columnIndex: number) => void;\n  scrollGridTo: (props: { row?: number; column?: number }) => void;\n  selection: SelectedRegion;\n  rowStart: number;\n}\n\ninterface SelectionActions {\n  getSelectionType: SelectionTypeFn;\n  onSelection: (action: SelectionAction) => void;\n  mouseMoveCellSelect: (row: number, column: number) => void;\n  moveSelection: (\n    columnDiff: number,\n    rowDiff: number,\n    moveAnchor: boolean,\n    event: KeyEventType\n  ) => SelectionAction | null;\n}\n\nexport const singleCellSelected = (selection: SelectedRegion): SelectionPos | null => {\n  if (\n    selection.type === 'rectangle' &&\n    selection.bounds.left === selection.bounds.right &&\n    selection.bounds.top === selection.bounds.bottom\n  ) {\n    return {\n      column: selection.bounds.left,\n      row: selection.bounds.top,\n    };\n  } else {\n    return null;\n  }\n};\n\nconst orderedRect = (x1: number, y1: number, x2: number, y2: number): Rectangle => {\n  const left = Math.min(x1, x2);\n  const right = Math.max(x1, x2);\n  const top = Math.min(y1, y2);\n  const bottom = Math.max(y1, y2);\n  return { left, right, top, bottom };\n};\n\nexport const cellRectSelected = (\n  selection: SelectedRegion,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number\n): boolean => {\n  const { left, right, top, bottom } = orderedRect(x1, y1, x2, y2);\n  switch (selection.type) {\n    case 'columns':\n      for (let i = left; i <= right; ++i) {\n        if (!selection.columns.has(i)) {\n          return false;\n        }\n      }\n      return true;\n    case 'rows':\n      for (let i = top; i <= bottom; ++i) {\n        if (!selection.rows.has(i)) {\n          return false;\n        }\n      }\n      return true;\n    case 'rectangle':\n      return (\n        selection.bounds.left <= left &&\n        selection.bounds.right >= right &&\n        selection.bounds.top <= top &&\n        selection.bounds.bottom >= bottom\n      );\n    default:\n      return false;\n  }\n};\n\nconst rowSelection = (rows: Iterable<number>, anchorRow: number): RowsSelection => ({\n  type: 'rows',\n  rows: new Set(rows),\n  anchorRow,\n});\n\nconst columnSelection = (\n  columns: Iterable<number>,\n  anchorColumn: number\n): ColumnsSelection => ({\n  type: 'columns',\n  columns: new Set(columns),\n  anchorColumn,\n});\n\nexport const rectangleSelection = (\n  anchorColumn: number,\n  anchorRow: number,\n  focusColumn: number,\n  focusRow: number\n): SelectedRegion => {\n  if (anchorColumn === focusColumn && focusRow === anchorRow) {\n    return emptySelection();\n  }\n  return {\n    type: 'rectangle',\n    bounds: orderedRect(anchorColumn, anchorRow, focusColumn, focusRow),\n    anchor: { column: anchorColumn, row: anchorRow },\n  };\n};\n\nexport const emptySelection = (): SelectedRegion => ({ type: 'empty' });\n\nexport const columnIsSelected = (\n  selection: SelectedRegion,\n  column: number,\n  bounds: Rectangle\n): boolean => cellRectSelected(selection, column, bounds.top, column, bounds.bottom);\nconst rowAnySelected = (selection: SelectedRegion, row: number): boolean =>\n  selection.type === 'columns' ||\n  (selection.type === 'rows' && selection.rows.has(row)) ||\n  (selection.type === 'rectangle' &&\n    selection.bounds.top <= row &&\n    selection.bounds.bottom >= row);\n\nconst columnAnySelected = (selection: SelectedRegion, column: number): boolean =>\n  selection.type === 'rows' ||\n  (selection.type === 'columns' && selection.columns.has(column)) ||\n  (selection.type === 'rectangle' &&\n    selection.bounds.left <= column &&\n    selection.bounds.right >= column);\n\nexport const rangeIndices = (a: number, b: number): number[] => {\n  const low = Math.min(a, b);\n  const high = Math.max(a, b);\n  const indices: number[] = [];\n  for (let i = low; i <= high; ++i) {\n    indices.push(i);\n  }\n  return indices;\n};\n\nexport const useSelectionActions = ({\n  onCellSelect,\n  focus,\n  columnCount,\n  rowCount,\n  onFocusChange,\n  scrollGridTo,\n  selection,\n  rowStart,\n}: Props): SelectionActions => {\n  const allSelect = useCallback(\n    (action: AllSelection) => {\n      const newSelection: SelectedRegion = {\n        type: 'rows',\n        rows: new Set(rangeIndices(rowStart, rowCount + rowStart - 1)),\n        anchorRow: 0,\n      };\n      scrollGridTo({ row: rowStart, column: 0 });\n      onFocusChange(rowStart, 0);\n      onCellSelect(action, newSelection, {\n        row: rowStart,\n        column: 0,\n      });\n    },\n    [onCellSelect, onFocusChange, rowCount, rowStart, scrollGridTo]\n  );\n\n  const cellSelect = useCallback(\n    (action: CellSelectionAction) => {\n      const { row, column } = action;\n      scrollGridTo({ row, column });\n      onFocusChange(row, column);\n      const newSelection: SelectedRegion = emptySelection();\n      onCellSelect(action, newSelection, focus);\n    },\n    [focus, onCellSelect, onFocusChange, scrollGridTo]\n  );\n\n  const shiftSelect = useCallback(\n    (action: CellSelectionAction) => {\n      const { row: rowIndex, column: columnIndex } = action;\n      const newSelection = rectangleSelection(\n        columnIndex,\n        rowIndex,\n        focus.column,\n        focus.row\n      );\n      scrollGridTo({ row: rowIndex, column: columnIndex });\n      onCellSelect(action, newSelection, focus);\n    },\n    [focus, onCellSelect, scrollGridTo]\n  );\n\n  const rowSelect = useCallback(\n    (action: RowSelectionAction) => {\n      const rowIndex = action.row;\n      const newSelection = rowSelection([rowIndex], rowIndex);\n      scrollGridTo({ row: rowIndex });\n      onCellSelect(action, newSelection, focus);\n    },\n    [focus, onCellSelect, scrollGridTo]\n  );\n\n  const shiftRowSelect = useCallback(\n    (action: RowSelectionAction) => {\n      const rowIndex = action.row;\n      const newSelection = rowSelection(rangeIndices(focus.row, rowIndex), rowIndex);\n      scrollGridTo({ row: rowIndex });\n      onCellSelect(action, newSelection, focus);\n    },\n    [focus, onCellSelect, scrollGridTo]\n  );\n\n  const columnSelect = useCallback(\n    (action: ColumnSelectionAction) => {\n      const columnIndex = action.column;\n      const newSelection = columnSelection([columnIndex], columnIndex);\n      scrollGridTo({ column: columnIndex });\n      onCellSelect(action, newSelection, focus);\n    },\n    [focus, onCellSelect, scrollGridTo]\n  );\n\n  const shiftColumnSelect = useCallback(\n    (action: ColumnSelectionAction) => {\n      const columnIndex = action.column;\n      const newSelection = columnSelection(\n        rangeIndices(focus.column, columnIndex),\n        columnIndex\n      );\n      onCellSelect(action, newSelection, focus);\n      scrollGridTo({ column: columnIndex });\n    },\n    [focus, onCellSelect, scrollGridTo]\n  );\n\n  const onSelection = useCallback(\n    (action: SelectionAction): void => {\n      switch (action.type) {\n        case 'all':\n          allSelect(action);\n          break;\n        case 'normal':\n          cellSelect(action);\n          break;\n        case 'shiftSelection':\n          shiftSelect(action);\n          break;\n        case 'columnSelection':\n          columnSelect(action);\n          break;\n        case 'shiftColumnSelection':\n          shiftColumnSelect(action);\n          break;\n        case 'rowSelection':\n          rowSelect(action);\n          break;\n        case 'shiftRowSelection':\n          shiftRowSelect(action);\n          break;\n        default:\n          throw new Error(`Value should not occur ${action}`);\n      }\n    },\n    [\n      allSelect,\n      cellSelect,\n      shiftSelect,\n      columnSelect,\n      shiftColumnSelect,\n      rowSelect,\n      shiftRowSelect,\n    ]\n  );\n\n  const moveSelection = useCallback(\n    (\n      columnDiff: number,\n      rowDiff: number,\n      moveAnchor: boolean,\n      event: KeyEventType\n    ): SelectionAction | null => {\n      const clamp = (n: number, low: number, high: number) => {\n        return Math.max(low, Math.min(high, n));\n      };\n\n      let action: SelectionAction | null = null;\n\n      if (moveAnchor) {\n        if (selection.type === 'rows') {\n          const row = clamp(selection.anchorRow + rowDiff, 0, rowCount + rowStart - 1);\n          action = { type: 'shiftRowSelection', row, event };\n        } else if (selection.type === 'columns') {\n          const column = clamp(selection.anchorColumn + columnDiff, 0, columnCount - 1);\n          action = { type: 'shiftColumnSelection', column, event };\n        } else if (selection.type === 'rectangle') {\n          const row = clamp(selection.anchor.row + rowDiff, 0, rowCount + rowStart - 1);\n          const column = clamp(selection.anchor.column + columnDiff, 0, columnCount - 1);\n          action = { type: 'shiftSelection', row, column, event };\n        }\n      } else {\n        const row = clamp(focus.row + rowDiff, 0, rowCount + rowStart - 1);\n        const column = clamp(focus.column + columnDiff, 0, columnCount - 1);\n        action = { type: 'normal', row, column, event };\n      }\n\n      if (action) {\n        onSelection(action);\n      }\n\n      return action;\n    },\n    [onSelection, columnCount, rowCount, selection, focus, rowStart]\n  );\n\n  const getSelectionType = useCallback(\n    (args: IsSelectedType): SelectionType => {\n      if (args.type === 'all') {\n        const isSelected = cellRectSelected(\n          selection,\n          0,\n          rowStart,\n          columnCount - 1,\n          rowCount + rowStart - 1\n        );\n        return isSelected ? 'selectDirect' : 'default';\n      }\n\n      if (args.type === 'column') {\n        if (\n          cellRectSelected(\n            selection,\n            args.column,\n            rowStart,\n            args.column,\n            rowCount + rowStart\n          )\n        ) {\n          return 'selectDirect';\n        }\n\n        return columnAnySelected(selection, args.column) ? 'selectIndirect' : 'default';\n      }\n\n      const isRowSelected = cellRectSelected(\n        selection,\n        0,\n        args.row,\n        columnCount,\n        args.row\n      );\n      const isRowAnySelected =\n        focus.row === args.row || rowAnySelected(selection, args.row);\n\n      if (args.type === 'cell' && args.column == -1) {\n        return 'default';\n      }\n\n      if (isRowSelected) {\n        return 'selectDirect';\n      }\n\n      if (!isRowAnySelected) {\n        return 'default';\n      }\n\n      if (args.type === 'cell') {\n        const { row, column } = args;\n        if (\n          row >= rowCount + rowStart ||\n          column >= columnCount ||\n          row < rowStart ||\n          column < 0\n        ) {\n          return 'default';\n        }\n\n        if (cellRectSelected(selection, column, row, column, row)) {\n          return 'selectDirect';\n        }\n      }\n\n      if (selection.type === 'columns') {\n        return 'default';\n      }\n\n      return 'selectIndirect';\n    },\n    [columnCount, focus.row, rowCount, rowStart, selection]\n  );\n\n  const mouseMoveCellSelect = useCallback(\n    (row: number, column: number) => {\n      const selectionType = selection.type;\n      const event = 'click';\n      if (row === -1 && column == -1) {\n        return;\n      }\n\n      if (selectionType === 'columns') {\n        onSelection({\n          type: 'shiftColumnSelection',\n          column,\n          event,\n        });\n        return;\n      }\n\n      if (selectionType === 'rows') {\n        onSelection({\n          type: 'shiftRowSelection',\n          row,\n          event,\n        });\n        return;\n      }\n\n      if (row === -1) {\n        let row = focus.row;\n        if (selection.type !== 'empty') {\n          const {\n            bounds: { top, bottom },\n          } = selection;\n          if (top <= row) {\n            row = top;\n          } else {\n            row = bottom;\n          }\n        }\n        onSelection({\n          type: 'shiftSelection',\n          row,\n          column,\n          event,\n        });\n        return;\n      }\n      if (column === -1) {\n        let column = focus.column;\n        if (selection.type !== 'empty') {\n          const {\n            bounds: { left, right },\n          } = selection;\n          if (left <= column) {\n            column = left;\n          } else {\n            column = right;\n          }\n        }\n        onSelection({\n          type: 'shiftSelection',\n          row,\n          column,\n          event,\n        });\n        return;\n      }\n\n      onSelection({\n        type: 'shiftSelection',\n        row,\n        column,\n        event,\n      });\n    },\n    [focus.column, focus.row, onSelection, selection]\n  );\n\n  return {\n    getSelectionType,\n    onSelection,\n    mouseMoveCellSelect,\n    moveSelection,\n  };\n};\n"],"names":["useCallback","row","column"],"mappings":"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"}