import {Module} from "."; import Option from "./option"; import { CorporateUser, MasterCorporateUser, TeacherUser, userTypeLabels } from "./user"; export interface ApprovalWorkflow { id: string, name: string, entityId: string, modules: Module[], status: ApprovalWorkflowStatus, steps: WorkflowStep[], } export type StepType = "form-intake" | "approval-by"; export const StepTypeLabel: Record = { "form-intake": "Form Intake", "approval-by": "Approval", }; type AssigneesType = TeacherUser["type"] | CorporateUser["type"] | MasterCorporateUser["type"]; export interface WorkflowStep { key?: number, stepType?: StepType, stepNumber: number, completed?: boolean, completedBy?: string, assignees?: (string | null | undefined)[]; // bit of an hack, but allowing null or undefined values allows us to match one to one the select input components with the assignees array. And since select inputs allow undefined or null values, it is allowed here too, but must validate required input before form submission assigneesType?: AssigneesType, editView?: boolean, firstStep?: boolean, currentStep?: boolean, finalStep?: boolean, selected?: boolean, requestedBy?: string, //requestedBy: TeacherUser | CorporateUser | MasterCorporateUser, onDelete?: () => void; onClick?: React.MouseEventHandler } export function getUserTypeLabel(type: AssigneesType | undefined): string { if (type) return userTypeLabels[type]; return ''; } export type ApprovalWorkflowStatus = "approved" | "pending" | "rejected"; export const ApprovalWorkflowStatusLabel: Record = { approved: "Approved", pending: "Pending", rejected: "Rejected", };