mirror of
https://github.com/supabase/supabase.git
synced 2026-10-19 16:19:10 +03:00
88 lines
2.0 KiB
TypeScript
88 lines
2.0 KiB
TypeScript
import { TOTAL_ROWS_INITIAL, TOTAL_ROWS_RESET } from '../../constants'
|
|
import type { SupaRow } from '../../types'
|
|
import { INIT_ACTIONTYPE } from './base'
|
|
|
|
export interface RowInitialState {
|
|
rows: SupaRow[]
|
|
selectedRows: ReadonlySet<number>
|
|
selectedCellPosition: { idx: number; rowIdx: number } | null
|
|
totalRows: number
|
|
}
|
|
|
|
export const rowInitialState: RowInitialState = {
|
|
rows: [],
|
|
selectedRows: new Set(),
|
|
selectedCellPosition: null,
|
|
totalRows: TOTAL_ROWS_INITIAL,
|
|
}
|
|
|
|
type ROW_ACTIONTYPE =
|
|
| INIT_ACTIONTYPE
|
|
| {
|
|
type: 'SELECTED_CELL_CHANGE'
|
|
payload: { position: { idx: number; rowIdx: number } }
|
|
}
|
|
| {
|
|
type: 'SELECTED_ROWS_CHANGE'
|
|
payload: { selectedRows: ReadonlySet<number> }
|
|
}
|
|
| {
|
|
type: 'SET_ROWS'
|
|
payload: { rows: SupaRow[] }
|
|
}
|
|
| {
|
|
type: 'SET_ROWS_COUNT'
|
|
payload: number
|
|
}
|
|
| { type: 'REMOVE_ROWS'; payload: { rowIdxs: number[] } }
|
|
| { type: 'SELECT_ALL_ROWS'; payload: { selectedRows: ReadonlySet<number> } }
|
|
|
|
const RowReducer = (state: RowInitialState, action: ROW_ACTIONTYPE) => {
|
|
switch (action.type) {
|
|
case 'INIT_TABLE': {
|
|
return {
|
|
...state,
|
|
selectedCellPosition: null,
|
|
selectedRows: new Set(),
|
|
totalRows: TOTAL_ROWS_RESET,
|
|
}
|
|
}
|
|
case 'SELECTED_CELL_CHANGE': {
|
|
return {
|
|
...state,
|
|
selectedCellPosition: action.payload.position,
|
|
}
|
|
}
|
|
case 'SELECTED_ROWS_CHANGE': {
|
|
return {
|
|
...state,
|
|
allRowsSelected: false,
|
|
selectedRows: action.payload.selectedRows,
|
|
}
|
|
}
|
|
case 'SELECT_ALL_ROWS': {
|
|
return {
|
|
...state,
|
|
allRowsSelected: true,
|
|
selectedRows: action.payload.selectedRows,
|
|
}
|
|
}
|
|
case 'SET_ROWS': {
|
|
return {
|
|
...state,
|
|
rows: action.payload.rows,
|
|
}
|
|
}
|
|
case 'SET_ROWS_COUNT': {
|
|
return {
|
|
...state,
|
|
totalRows: action.payload,
|
|
}
|
|
}
|
|
default:
|
|
return state
|
|
}
|
|
}
|
|
|
|
export default RowReducer
|