import { QTableColumn } from "quasar"; import { TableRow } from "../components/KTable/types"; type rule = | ((val: number) => boolean | string) | ((val: string) => boolean | string); interface baseColumn extends QTableColumn { type: | "boolean" | "date" | "number" | "option" | "string" | "textarea" | "decimal" | "select" | "dateTime" | "image"; initValue?: string | number | boolean; selectOptions?: string[]; editable?: boolean; editFunction?: string; rules?: rule[]; validation?: ((val: number) => boolean) | ((val: string) => boolean); trueValue?: string; falseValue?: string; dateFormat?: | "DD-MM-YYYY" | "YYYY-MM-DD" | "MM-DD-YYYY" | "DD/MM/YYYY" | "YYYY/MM/DD" | "MM/DD/YYYY"; dateTimeFormat?: | "DD-MM-YYYY HH:mm:ss" | "YYYY-MM-DD HH:mm:ss" | "MM-DD-YYYY HH:mm:ss" | "DD/MM/YYYY HH:mm:ss" | "YYYY/MM/DD HH:mm:ss" | "MM/DD/YYYY HH:mm:ss"; selectAdvancedFilterFormat?: (value: any) => string; nOfDecimals?: number; isFieldEditableByRules?: (row: TableRow) => boolean; selectOptionsFormat?: (val: string) => string; } interface immutableColumn extends baseColumn { editable: false; } interface imageColumn extends baseColumn { type: "image"; width?: string; height?: string; } interface editableColumn extends baseColumn { editable: true; editFunction: string; isFieldEditableByRules?: (row: TableRow) => boolean; notEditableMessage?: string; } interface selectColumn extends editableColumn { type: "select" | "option"; selectOptions?: string[]; editable: true; selectOptionsFormat?: (val: string) => string; } interface immutableBooleanColumn extends immutableColumn { type: "boolean"; trueValue?: string; falseValue?: string; } interface editableBooleanColumn extends baseColumn { type: "boolean"; trueValue?: string; falseValue?: string; } interface editableDateColumn extends editableColumn { type: "date"; dateFormat: | "DD-MM-YYYY" | "YYYY-MM-DD" | "MM-DD-YYYY" | "DD/MM/YYYY" | "YYYY/MM/DD" | "MM/DD/YYYY"; rules: rule[]; validation: ((val: number) => boolean) | ((val: string) => boolean); dateOptions?: Function; } interface dateTimeColumn extends baseColumn { type: "dateTime"; dateTimeFormat: | "DD-MM-YYYY HH:mm:ss" | "YYYY-MM-DD HH:mm:ss" | "MM-DD-YYYY HH:mm:ss" | "DD/MM/YYYY HH:mm:ss" | "YYYY/MM/DD HH:mm:ss" | "MM/DD/YYYY HH:mm:ss"; } interface editableColumnsWithValidation extends editableColumn { rules: rule[]; validation: ((val: number) => boolean) | ((val: string) => boolean); } export interface KettalColumnSort { column: string; isAscending: boolean | ""; } export interface KettalTableAdvancedFilters { [key: string]: string | boolean | string[]; } interface PageAction { title: string; actionSelectionRules?: (row: TableRow) => boolean; } export interface KettalPopupAction extends PageAction { type: "popup"; popupName: string; selection: "single" | "multiple" | "none"; rowKey?: string; } export interface KettalFunctionAction extends PageAction { functionName: string; selection: "single" | "multiple" | "none"; type: "function"; rowKey?: string; } export interface KettalExpandAction extends PageAction { type: "expand"; content: (KettalPopupAction | KettalFunctionAction)[]; } export type KettalPageActions = | KettalExpandAction | KettalPopupAction | KettalFunctionAction; export interface KettalVisibleColumn { name: string; isVisible: boolean; } export type { TableRow }; export type KettalQTableColumn = | baseColumn | immutableBooleanColumn | editableBooleanColumn | immutableColumn | editableColumn | editableColumnsWithValidation | selectColumn | editableDateColumn | dateTimeColumn | imageColumn;