diff --git a/src/components/ApprovalWorkflows/RequestedBy.tsx b/src/components/ApprovalWorkflows/RequestedBy.tsx index 0f13ae32..e3c8d7da 100644 --- a/src/components/ApprovalWorkflows/RequestedBy.tsx +++ b/src/components/ApprovalWorkflows/RequestedBy.tsx @@ -3,11 +3,12 @@ import React from "react"; import { FaRegUser } from "react-icons/fa"; interface Props { + prefix: string; name: string; profileImage: string; } -export default function RequestedBy({ name, profileImage }: Props) { +export default function RequestedBy({ prefix, name, profileImage }: Props) { return (
Requested by
{name}
+{prefix} {name}
Started on
{date}
+ {/* Display the formatted date and add a title attribute for hover */} ++ {yearMonthDay} +
{prefix} {name}
+Form: Intake
- {completed && ( + {completed && completedBy && (- Completed by {completedBy} + Completed by {getUserTypeLabelShort(completedByUser?.type)} {completedByUser?.name}
)} - {!completed && ( -- In progress... -
+ {!completed && completedBy && ( + <> + {assigneesUsers.map(user => ( ++ {getUserTypeLabelShort(user.type)} {user.name} +
+ ))} + > )} > ) : ( @@ -63,12 +79,23 @@ export default function WorkflowStepComponent({Approval: {getUserTypeLabel(assigneesType)}
{completed ? (- Approved by {completedBy} + Approved by {workflowAssignees.find((assignee) => assignee.id === completedBy)?.name || "Unknown"}
) : !completed && currentStep ? ( -- In progress... -
+
Waiting for previous steps...
diff --git a/src/demo/approval_workflows.json b/src/demo/approval_workflows.json
index 226167e9..47592b7f 100644
--- a/src/demo/approval_workflows.json
+++ b/src/demo/approval_workflows.json
@@ -7,64 +7,61 @@
"reading",
"writing"
],
+ "requester": "ffdIipRyXTRmm10Sq2eg7P97rLB2",
+ "startDate": 1737712243906,
"status": "pending",
"steps": [
{
"stepType": "form-intake",
"stepNumber": 1,
"completed": true,
- "completedBy": "Prof. X",
+ "completedBy": "231c84b2-a65a-49a9-803c-c664d84b13e0",
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 2,
"completed": true,
- "completedBy": "Prof. Y",
+ "completedBy": "c5fc1514-1a94-4f8c-a046-a62099097a50",
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 3,
"completed": false,
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 4,
"completed": false,
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 5,
"completed": false,
"assignees": [
- "Dir. X",
- "Dir. Y",
- "Dir. Z"
- ],
- "assigneesType": "corporate"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
}
]
},
@@ -79,67 +76,64 @@
"speaking",
"listening"
],
+ "requester": "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "startDate": 1737712243906,
"status": "approved",
"steps": [
{
"stepType": "form-intake",
"stepNumber": 1,
"completed": true,
- "completedBy": "Prof. X",
+ "completedBy": "fd5fce42-4bcc-4150-a143-b484e750b265",
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 2,
"completed": true,
- "completedBy": "Prof. Y",
+ "completedBy": "231c84b2-a65a-49a9-803c-c664d84b13e0",
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 3,
"completed": true,
- "completedBy": "Prof. Y",
+ "completedBy": "231c84b2-a65a-49a9-803c-c664d84b13e0",
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 4,
"completed": true,
- "completedBy": "Prof. Y",
+ "completedBy": "231c84b2-a65a-49a9-803c-c664d84b13e0",
"assignees": [
- "Prof. X",
- "Prof. Y",
- "Prof. Z"
- ],
- "assigneesType": "teacher"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
},
{
"stepType": "approval-by",
"stepNumber": 5,
"completed": true,
- "completedBy": "Prof. Y",
+ "completedBy": "c5fc1514-1a94-4f8c-a046-a62099097a50",
"assignees": [
- "Dir. X",
- "Dir. Y",
- "Dir. Z"
- ],
- "assigneesType": "corporate"
+ "fd5fce42-4bcc-4150-a143-b484e750b265",
+ "231c84b2-a65a-49a9-803c-c664d84b13e0",
+ "c5fc1514-1a94-4f8c-a046-a62099097a50"
+ ]
}
]
}
diff --git a/src/interfaces/approval.workflow.ts b/src/interfaces/approval.workflow.ts
index 62458976..07d19850 100644
--- a/src/interfaces/approval.workflow.ts
+++ b/src/interfaces/approval.workflow.ts
@@ -1,11 +1,12 @@
-import {Module} from ".";
-import Option from "./option";
-import { CorporateUser, MasterCorporateUser, TeacherUser, userTypeLabels } from "./user";
+import { Module } from ".";
+import { Type, User, userTypeLabels, userTypeLabelsShort } from "./user";
export interface ApprovalWorkflow {
id: string,
name: string,
entityId: string,
+ requester: User["id"],
+ startDate: number,
modules: Module[],
status: ApprovalWorkflowStatus,
steps: WorkflowStep[],
@@ -17,35 +18,34 @@ export const StepTypeLabel: Record