import { FormAudience, FormDefinitionComponent, FormioAnswerValues, ReportFieldDataOptions } from '@features/configure-forms/form.typing'; import { SimpleStringMap, YcFile } from '@yourcause/common'; import { CurrencyValue } from '@yourcause/common/masking'; import { ReferenceFieldAPI } from '../api/reference-fields.typing'; export const STANDARD_FIELDS_CATEGORY_ID = 'STANDARD_FIELDS_CATEGORY_ID'; export namespace ReferenceFieldsUI { export enum ReferenceFieldTypes { TextField = 'TextField', TextArea = 'TextArea', CustomDataTable = 'CustomDataTable', Number = 'Number', Checkbox = 'Checkbox', Date = 'Date', Radio = 'Radio', SelectBoxes = 'Selectboxes', FileUpload = 'FileUpload', ExternalAPI = 'ExternalAPI', Aggregate = 'Aggregate', Table = 'Table', Currency = 'Currency', Subset = 'Subset', DataPoint = 'DataPoint' } export type RefResponseType = YcFile[]|string|boolean|string[]|SimpleStringMap|number|moment.Moment|TableResponseRowForUi[]|CurrencyValue; export type RefResponseMap = Record; export type RefResponseMapForAdapting = Record; export enum SaveRefFieldsResponse { Error = 1, NeedToSaveFileIds = 2, NoNeedToSaveFileIds = 3 } export interface FormFieldComponentCopy { oldKey: string; newKey: string; } export interface TypeForFormio { type: ReferenceFieldTypes; formAudience: FormAudience; name: string; } export interface DataPointResponseMap { [x: string]: DataPointForUI; } export interface DataPointForUI extends ReferenceFieldsUI.TableFieldForUi { value: FormioAnswerValues; } export interface TableFieldForUi extends ReferenceFieldAPI.TableField { summarizeData: boolean; summarizeLabel: string; errors?: { [x: string]: { i18nKey: string; context?: Record; defaultValue: string; }; }; referenceField: ReferenceFieldAPI.ReferenceFieldDisplayModel; } export interface TableFieldForCrudUi extends TableFieldForUi { component: FormDefinitionComponent; } export interface TableFieldForUiWithField extends TableFieldForUi { referenceField: ReferenceFieldAPI.ReferenceFieldDisplayModel; } export interface TableFieldForCrudModal extends TableFieldForUi { value: FormioAnswerValues; type: ReferenceFieldTypes; customDataTableGuid: string; } export interface ModalReturn { field: ReferenceFieldAPI.ReferenceFieldBaseModel; tableFields: TableFieldForUi[]; isSecondarySave: boolean; } export interface TableRow { rowId: number; tableFields: TableFieldForCrudModal[]; } export interface TableResponseForUi { tableReferenceFieldId: number; rows: TableResponseRowForUi[]; } export interface TableResponseRowForUi { rowId: number; columns: ReferenceFieldAPI.ApplicationRefFieldResponse[]; } export interface TableResponseRowForUiMapped extends TableResponseRowForUi { responses: Record; } export interface RowToUpdate { tableReferenceFieldId: number; update: ReferenceFieldAPI.TableChangeValues; } export interface AdaptRefChangesResponse { needToSaveFileIds: boolean; standardChangeValues: ReferenceFieldAPI.ApplicationRefFieldResponseForApi[]; tableChangeValues: ReferenceFieldAPI.TableChangeResponse; tableChangeMap: ReferenceFieldsUI.RefResponseMap; } export interface InvalidDependentPicklist { fieldWithoutParent: ReferenceFieldAPI.ReferenceFieldDisplayModel; parentPicklist: ReferenceFieldAPI.ReferenceFieldDisplayModel; } export interface FileNeedingUploaded { referenceFieldId: number; key: string; file: YcFile; }; export interface QuickAddStandardComponent { key: string; type: string; label: string; name: string; showRequired: boolean; } export interface QuickAddFormField extends ReferenceFieldAPI.ReferenceFieldDisplayModel { isStandardComp: false; } export interface QuickAddReportField extends ReferenceFieldAPI.ReferenceFieldDisplayModel { isReportField: true; reportFieldConfigType: ReportFieldDataOptions; } export type QuickAddField = QuickAddStandardComponent|ReferenceFieldAPI.ReferenceFieldDisplayModel|QuickAddReportField; export enum QuickAddFieldType { STANDARD, APPLICANT, MANAGER, REPORT, ALL } export interface QuickAddCompsForAccordion { name: string; type: QuickAddFieldType; components: Record; } export interface StandardQuickAddComponentsForAccordion { name: string; type: QuickAddFieldType; components: ReferenceFieldsUI.QuickAddStandardComponent[]; } export interface QuickAddComponentsFlatList { name: string; type: QuickAddFieldType; components: QuickAddField[]; } export interface QuickAddReportComponents { name: string; type: QuickAddFieldType; components: QuickAddField[]; } export type QuickAddComponentsForAccordion = (QuickAddCompsForAccordion|StandardQuickAddComponentsForAccordion|QuickAddComponentsFlatList|QuickAddReportComponents)[]; export const ReferenceFieldTypeList = [ ReferenceFieldsUI.ReferenceFieldTypes.TextField, ReferenceFieldsUI.ReferenceFieldTypes.Number, ReferenceFieldsUI.ReferenceFieldTypes.TextArea, ReferenceFieldsUI.ReferenceFieldTypes.CustomDataTable, ReferenceFieldsUI.ReferenceFieldTypes.Checkbox, ReferenceFieldsUI.ReferenceFieldTypes.Date, ReferenceFieldsUI.ReferenceFieldTypes.Radio, ReferenceFieldsUI.ReferenceFieldTypes.SelectBoxes, ReferenceFieldsUI.ReferenceFieldTypes.FileUpload, ReferenceFieldsUI.ReferenceFieldTypes.ExternalAPI, ReferenceFieldsUI.ReferenceFieldTypes.Aggregate, ReferenceFieldsUI.ReferenceFieldTypes.Table, ReferenceFieldsUI.ReferenceFieldTypes.Currency, ReferenceFieldsUI.ReferenceFieldTypes.Subset, ReferenceFieldsUI.ReferenceFieldTypes.DataPoint ]; export enum RefFieldConversionTypes { TEXT_TO_NUMBER = 1, NUMBER_TO_TEXT = 2, TEXT_TO_DATE = 3, DATE_TO_TEXT = 4 } }