import { BaseRunResult } from '../logic-builder/logic-builder.typing'; import { BaseLogicState } from '../logic-builder/logic-state.typing'; export enum FormulaEvaluationType { Add = 0, Subtract = 1, Divide = 2, Multiply = 3, Average = 4 } export enum FormulaStepValueType { Fixed = 0, NestedStep = 1, ParentValue = 2 } export interface FixedFormulaStepValue { type: FormulaStepValueType.Fixed; value: number; } export interface NestedStepFormulaValue { type: FormulaStepValueType.NestedStep; value: FormulaStep; } export interface ParentFormulaValue { type: FormulaStepValueType.ParentValue; value: string; } export type FormulaStepValue = FixedFormulaStepValue|NestedStepFormulaValue|ParentFormulaValue; export interface ConstructiveFormulaStep { type: FormulaEvaluationType.Multiply|FormulaEvaluationType.Add|FormulaEvaluationType.Average; values: FormulaStepValue[]; } export interface DestructiveFormulaStep { type: FormulaEvaluationType.Divide|FormulaEvaluationType.Subtract; values: [ FormulaStepValue, FormulaStepValue ]; } export type FormulaStep = DestructiveFormulaStep|ConstructiveFormulaStep; export interface RootFormula { step: FormulaStep; property: string; } export type FormulaRunResult = BaseRunResult; export type FormulaForColumn = RootFormula&FormulaRunResult; export type FormulaState = BaseLogicState, string>;