column.ts 1.4 KB

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