import { CellValue, ColumnType, ITypeOptions } from '../../types'; import { exhaustiveSwitch } from '../../typeUtils'; import { transformStringToDate } from '../transformString'; import { transformCellValueToString, transformCellValueToStringArray, } from './transformCellValueToString'; import formatISO from 'date-fns/formatISO'; export const transformCellValueToDate = ({ cellValue, typeOptions, }: { cellValue: CellValue; typeOptions: ITypeOptions; }) => { let stringValue: string | null = null; switch (typeOptions.type) { case ColumnType.DATETIME: case ColumnType.CREATED_AT: return cellValue as CellValue; case ColumnType.LOOKUP: case ColumnType.MULTI_SELECT: case ColumnType.RECORD_REFERENCE: { const arrayCellValue = cellValue as CellValue< | ColumnType.LOOKUP | ColumnType.MULTI_SELECT | ColumnType.RECORD_REFERENCE >; if (arrayCellValue.length >= 1) { const stringArrayValue = transformCellValueToStringArray({ cellValue: arrayCellValue, typeOptions: typeOptions as ITypeOptions< | ColumnType.LOOKUP | ColumnType.MULTI_SELECT | ColumnType.RECORD_REFERENCE >, }); if (stringArrayValue.length >= 1) { stringValue = stringArrayValue[0]; } } break; } case ColumnType.SUBTABLE: case ColumnType.AUTO_NUMBER: case ColumnType.CURRENCY: case ColumnType.FORMULA: case ColumnType.PROGRESS: case ColumnType.LONG_TEXT: case ColumnType.NUMBER: case ColumnType.PHONE: case ColumnType.RATING: case ColumnType.ROLLUP: case ColumnType.SELECT: case ColumnType.STATUS: case ColumnType.TEXT: case ColumnType.CHECKBOX: case ColumnType.COLLABORATOR: case ColumnType.EMAIL: case ColumnType.INTEGRATION_REFERENCE: case ColumnType.MULTI_ATTACHMENT: case ColumnType.CREATED_BY: case ColumnType.NOOP: case ColumnType.UNIQUE_ID: { stringValue = transformCellValueToString({ cellValue, typeOptions }); break; } default: { const { type } = typeOptions; return exhaustiveSwitch({ switchValue: type, returnValue: null, }); } } if (stringValue === null) return null; const dateValue = transformStringToDate(stringValue); if (dateValue === null) return null; return formatISO(dateValue); };