column.ts46 lines · main
1// @ts-nocheck
2import { CalculatedColumn } from 'react-data-grid'
3
4import { ADD_COLUMN_KEY, SELECT_COLUMN_KEY } from '../constants'
5import type { SavedState } from '../types'
6
7export function getInitialGridColumns(
8 gridColumns: CalculatedColumn<any, any>[],
9 savedState?: SavedState
10) {
11 let result = gridColumns
12
13 if (savedState?.gridColumns) {
14 result = []
15
16 // filter utility columns select, add-column
17 const stateColumnsFiltered = savedState.gridColumns.filter((x) => x?.name !== '')
18
19 for (let i = 0; i < stateColumnsFiltered.length; i++) {
20 const state = stateColumnsFiltered[i]
21 const found = gridColumns.find((y) => y.key === state.key)
22 // merge with savedState item props: width
23 if (found) result.push({ ...found, width: state.width, frozen: state.frozen })
24 }
25
26 // check for newly created columns
27 const newGridColumns = gridColumns.filter((x) => {
28 // no existed in stateColumnsFiltered and not utility column
29 const found = stateColumnsFiltered.find((state) => state.key === x.key)
30 return !found && x.name !== ''
31 })
32 result = result.concat(newGridColumns)
33
34 // process utility columns
35 const selectColumn = gridColumns.find((x) => x.key === SELECT_COLUMN_KEY)
36 if (selectColumn) {
37 result = [selectColumn, ...result]
38 }
39 const addColumn = gridColumns.find((x) => x.key === ADD_COLUMN_KEY)
40 if (addColumn) {
41 result.push(addColumn)
42 }
43 }
44
45 return result
46}