import { AttachmentFileTypeOptions, DateComparisonOptions } from '../../types'; import { ColumnType, FilterCondition, FilterType, } from '../../types/graphql-global-types'; import { AttachmentFilterConditions, CheckboxFilterConditions, LookupFilterConditions, MultiSelectFilterConditions, NullDateComparisonValues, NumberFilterConditions, SelectFilterConditions, StatusFilterConditions, TextFilterConditions, } from '../types'; import { add, formatISO, sub } from 'date-fns'; export const DATE_COMPARISON_VALUE: { [key in DateComparisonOptions]: key extends NullDateComparisonValues ? null : () => string; } = { [DateComparisonOptions.TODAY]: () => formatISO(new Date()), [DateComparisonOptions.TOMORROW]: () => formatISO(add(new Date(), { days: 1 })), [DateComparisonOptions.YESTERDAY]: () => formatISO(sub(new Date(), { days: 1 })), [DateComparisonOptions.ONE_WEEK_AGO]: () => formatISO(sub(new Date(), { weeks: 1 })), [DateComparisonOptions.ONE_WEEK_FROM_NOW]: () => formatISO(add(new Date(), { weeks: 1 })), [DateComparisonOptions.ONE_MONTH_AGO]: () => formatISO(sub(new Date(), { months: 1 })), [DateComparisonOptions.ONE_MONTH_FROM_NOW]: () => formatISO(add(new Date(), { months: 1 })), [DateComparisonOptions.NUM_DAYS_AGO]: null, [DateComparisonOptions.NUM_DAYS_FROM_NOW]: null, [DateComparisonOptions.EXACT_DATE]: null, }; export const FILE_TYPE_FILTERS_EXTENSIONS: { [key in AttachmentFileTypeOptions]: string[]; } = { [AttachmentFileTypeOptions.TEXT]: ['.txt', '.doc', '.docx'], [AttachmentFileTypeOptions.IMAGE]: [ '.jpeg', '.png', '.gif', '.jpg', '.bmp', '.svg', ], [AttachmentFileTypeOptions.PDF]: ['.pdf'], [AttachmentFileTypeOptions.EXCEL]: ['.xls', '.xlsx'], [AttachmentFileTypeOptions.VIDEO]: [ '.m4v', '.avi', '.mpg', '.mp4', '.flv', '.mov', '.wmv', ], }; export const SHOW_DATE_NUMBER_INPUT: { [key in DateComparisonOptions]: boolean; } = { [DateComparisonOptions.TODAY]: false, [DateComparisonOptions.TOMORROW]: false, [DateComparisonOptions.YESTERDAY]: false, [DateComparisonOptions.ONE_WEEK_AGO]: false, [DateComparisonOptions.ONE_WEEK_FROM_NOW]: false, [DateComparisonOptions.ONE_MONTH_AGO]: false, [DateComparisonOptions.ONE_MONTH_FROM_NOW]: false, [DateComparisonOptions.NUM_DAYS_AGO]: true, [DateComparisonOptions.NUM_DAYS_FROM_NOW]: true, [DateComparisonOptions.EXACT_DATE]: false, }; export const SHOW_DATE_DATE_INPUT: { [key in DateComparisonOptions]: boolean; } = { [DateComparisonOptions.TODAY]: false, [DateComparisonOptions.TOMORROW]: false, [DateComparisonOptions.YESTERDAY]: false, [DateComparisonOptions.ONE_WEEK_AGO]: false, [DateComparisonOptions.ONE_WEEK_FROM_NOW]: false, [DateComparisonOptions.ONE_MONTH_AGO]: false, [DateComparisonOptions.ONE_MONTH_FROM_NOW]: false, [DateComparisonOptions.NUM_DAYS_AGO]: false, [DateComparisonOptions.NUM_DAYS_FROM_NOW]: false, [DateComparisonOptions.EXACT_DATE]: true, }; const TEXT_FILTERS: { value: TextFilterConditions }[] = [ { value: FilterCondition.EQUALS }, { value: FilterCondition.NOT_EQUAL }, { value: FilterCondition.STARTS_WITH }, { value: FilterCondition.ENDS_WITH }, { value: FilterCondition.CONTAINS }, { value: FilterCondition.NOT_CONTAINS }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; /** Number Filter */ const NUMBER_FILTERS: { value: NumberFilterConditions }[] = [ { value: FilterCondition.EQUALS }, { value: FilterCondition.NOT_EQUAL }, { value: FilterCondition.LESS_THAN }, { value: FilterCondition.LESS_THAN_OR_EQUAL }, { value: FilterCondition.GREATER_THAN }, { value: FilterCondition.GREATER_THAN_OR_EQUAL }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; const DATE_FILTERS: { value: NumberFilterConditions }[] = [ { value: FilterCondition.EQUALS }, { value: FilterCondition.NOT_EQUAL }, { value: FilterCondition.LESS_THAN }, { value: FilterCondition.LESS_THAN_OR_EQUAL, }, { value: FilterCondition.GREATER_THAN }, { value: FilterCondition.GREATER_THAN_OR_EQUAL, }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; const SELECT_FILTERS: { value: SelectFilterConditions }[] = [ { value: FilterCondition.EQUALS }, { value: FilterCondition.NOT_EQUAL }, { value: FilterCondition.EQUALS_ANY_OF }, { value: FilterCondition.EQUALS_NONE_OF }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; const STATUS_FILTERS: { value: StatusFilterConditions }[] = [ { value: FilterCondition.EQUALS }, { value: FilterCondition.NOT_EQUAL }, { value: FilterCondition.EQUALS_ANY_OF }, { value: FilterCondition.EQUALS_NONE_OF }, ]; const MULTI_SELECT_FILTERS: { value: MultiSelectFilterConditions; }[] = [ { value: FilterCondition.HAS_ANY_OF }, { value: FilterCondition.HAS_ALL_OF }, { value: FilterCondition.HAS_NONE_OF }, { value: FilterCondition.EQUALS }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; const ATTACHMENT_FILTERS: { value: AttachmentFilterConditions; }[] = [ { value: FilterCondition.FILE_NAME }, { value: FilterCondition.FILE_TYPE }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; const LOOKUP_FILTERS: { value: LookupFilterConditions }[] = [ { value: FilterCondition.EQUALS }, { value: FilterCondition.NOT_EQUAL }, { value: FilterCondition.CONTAINS }, { value: FilterCondition.NOT_CONTAINS }, { value: FilterCondition.IS_EMPTY }, { value: FilterCondition.IS_NOT_EMPTY }, ]; const CHECKBOX_FILTERS: { value: CheckboxFilterConditions }[] = [ { value: FilterCondition.EQUALS }, ]; export const CONDITION_OPTIONS: { [key in FilterType]: Array<{ value: FilterCondition }>; } = { [FilterType.TEXT]: TEXT_FILTERS, [FilterType.PHONE]: TEXT_FILTERS, [FilterType.EMAIL]: TEXT_FILTERS, [FilterType.NUMBER]: NUMBER_FILTERS, [FilterType.DATE]: DATE_FILTERS, [FilterType.SELECT]: SELECT_FILTERS, [FilterType.STATUS]: STATUS_FILTERS, [FilterType.MULTI_SELECT]: MULTI_SELECT_FILTERS, [FilterType.ATTACHMENT]: ATTACHMENT_FILTERS, [FilterType.LOOKUP]: LOOKUP_FILTERS, [FilterType.CHECKBOX]: CHECKBOX_FILTERS, [FilterType.RECORD_REFERENCE]: TEXT_FILTERS, [FilterType.COLLABORATOR]: MULTI_SELECT_FILTERS, [FilterType.CREATED_BY]: SELECT_FILTERS, }; export const FILTER_TYPE_MAP: { [key in ColumnType]: FilterType } = { [ColumnType.TEXT]: FilterType.TEXT, [ColumnType.PHONE]: FilterType.TEXT, [ColumnType.EMAIL]: FilterType.TEXT, [ColumnType.LONG_TEXT]: FilterType.TEXT, [ColumnType.UNIQUE_ID]: FilterType.TEXT, [ColumnType.NUMBER]: FilterType.NUMBER, [ColumnType.RECORD_REFERENCE]: FilterType.TEXT, [ColumnType.DATETIME]: FilterType.DATE, [ColumnType.SELECT]: FilterType.SELECT, [ColumnType.STATUS]: FilterType.STATUS, [ColumnType.MULTI_SELECT]: FilterType.MULTI_SELECT, [ColumnType.MULTI_ATTACHMENT]: FilterType.ATTACHMENT, [ColumnType.LOOKUP]: FilterType.LOOKUP, [ColumnType.RATING]: FilterType.NUMBER, [ColumnType.CHECKBOX]: FilterType.CHECKBOX, [ColumnType.ROLLUP]: FilterType.TEXT, [ColumnType.NOOP]: FilterType.TEXT, [ColumnType.INTEGRATION_REFERENCE]: FilterType.TEXT, [ColumnType.FORMULA]: FilterType.TEXT, [ColumnType.PROGRESS]: FilterType.TEXT, [ColumnType.CURRENCY]: FilterType.NUMBER, [ColumnType.COLLABORATOR]: FilterType.COLLABORATOR, [ColumnType.AUTO_NUMBER]: FilterType.NUMBER, [ColumnType.CREATED_AT]: FilterType.DATE, [ColumnType.CREATED_BY]: FilterType.CREATED_BY, [ColumnType.SUBTABLE]: FilterType.TEXT, };