import { FormDefinitionForUi } from '@features/configure-forms/form.typing'; import { TypeaheadSelectOption } from '@yourcause/common'; import moment from 'moment'; import { AutomationAPI } from '../api/automation.typing'; export namespace Automation { export enum MajorityOptions { One = 1, Majority = 2, All = 3 } export interface FormForRuleObject { id: number; name: string; formDefinition: FormDefinitionForUi[]; } export interface SequenceArg { workflowLevelAutomationRuleSetId: number; sequence: number; } export interface RuleSetForDisplay { detail: T; rules: DisplayRule[]; } export interface DisplayRule { column: string; value: string; } export interface CriteriaFormState { object: ObjectConfig; column: ObjectColumnConfig; values: CriteriaValueFormState[]; isRemoved: boolean; err?: Error; ruleLabel?: string; } export interface CriteriaValueFormState { greaterThanId: number; lessThanId: number; valueId: number; comparisonNegated: boolean; comparisonLessThan: number|moment.Moment; comparisonGreaterThan: number|moment.Moment; comparisonValue: string|boolean|MajorityOptions|number; comparisonType: CriteriaComparisonTypes; isRemoved: boolean; } export enum CriteriaComparisonTypes { Default = -1, Last365Days = AutomationAPI.AutomationRuleComparisonTypes.Last365Days, LastWeek = AutomationAPI.AutomationRuleComparisonTypes.LastWeek, LastMonth = AutomationAPI.AutomationRuleComparisonTypes.LastMonth, LastYear = AutomationAPI.AutomationRuleComparisonTypes.LastYear, ThisMonth = AutomationAPI.AutomationRuleComparisonTypes.ThisMonth, ThisWeek = AutomationAPI.AutomationRuleComparisonTypes.ThisWeek, ThisYear = AutomationAPI.AutomationRuleComparisonTypes.ThisYear, Today = AutomationAPI.AutomationRuleComparisonTypes.Today, Tomorrow = AutomationAPI.AutomationRuleComparisonTypes.Tomorrow, Yesterday = AutomationAPI.AutomationRuleComparisonTypes.Yesterday } export enum Comparisons { NumberRange, DateRange, IsSelected, IsUploaded, SelectIs, TextIs, Majority, NumberIs } interface BaseConfig { label: string; /* Used for identifying config for applying custom logic */ key: T; } export interface CoreObjectColumnType extends BaseConfig { removeObjectName?: boolean; } export interface BaseObjectColumnType extends CoreObjectColumnType { comparison: Exclude; } export interface ObjectColumnSelectType extends CoreObjectColumnType { comparison: Comparisons.SelectIs; options: TypeaheadSelectOption[]; } export interface ObjectColumnIsSelected extends CoreObjectColumnType { comparison: Comparisons.IsSelected; options?: TypeaheadSelectOption[]; } export type ObjectColumnConfig = ObjectColumnSelectType|ObjectColumnIsSelected|BaseObjectColumnType; export interface ObjectConfig extends BaseConfig { columns: ObjectColumnConfig[]; } export type RuleWithValues = AutomationAPI.SaveAutomationRuleSetExpressionModel&{values?: CriteriaValueFormState[]}; }