- {/* Left Select */}
-
-
-
- {/* Right Select */}
-
-
-
+ {selects.map((option, index) => {
+ let classes = "px-2 rounded-none";
+ if (index === 0 && selects.length === 1) {
+ classes += " rounded-l-2xl rounded-r-2xl";
+ } else if (index === 0) {
+ classes += " rounded-l-2xl";
+ } else if (index === selects.length - 1) {
+ classes += " rounded-r-2xl";
+ }
+
+ return (
+
+
+ );
+ })}
);
}
\ No newline at end of file
diff --git a/src/interfaces/approval.workflow.ts b/src/interfaces/approval.workflow.ts
index 7ca5fcd8..62458976 100644
--- a/src/interfaces/approval.workflow.ts
+++ b/src/interfaces/approval.workflow.ts
@@ -1,4 +1,5 @@
import {Module} from ".";
+import Option from "./option";
import { CorporateUser, MasterCorporateUser, TeacherUser, userTypeLabels } from "./user";
export interface ApprovalWorkflow {
@@ -24,7 +25,7 @@ export interface WorkflowStep {
stepNumber: number,
completed?: boolean,
completedBy?: string,
- assignees?: 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,
diff --git a/src/pages/approval-workflows/create.tsx b/src/pages/approval-workflows/create.tsx
index 716b6fb0..5a5faf2e 100644
--- a/src/pages/approval-workflows/create.tsx
+++ b/src/pages/approval-workflows/create.tsx
@@ -1,7 +1,7 @@
import Layout from "@/components/High/Layout";
import useUser from "@/hooks/useUser";
import { sessionOptions } from "@/lib/session";
-import { redirect, serialize } from "@/utils";
+import { mapBy, redirect, serialize } from "@/utils";
import { requestUser } from "@/utils/api";
import { shouldRedirectHome } from "@/utils/navigation.disabled";
import { withIronSessionSsr } from "iron-session/next";
@@ -15,11 +15,11 @@ import WorkflowForm from "@/components/ApprovalWorkflows/WorkflowForm";
import Button from "@/components/Low/Button";
import Input from "@/components/Low/Input";
import { ApprovalWorkflow } from "@/interfaces/approval.workflow";
-import { useState } from "react";
+import { useEffect, useState } from "react";
import { MdFormatListBulletedAdd } from "react-icons/md";
-import { User } from "@/interfaces/user";
+import { CorporateUser, TeacherUser, User } from "@/interfaces/user";
import Select from "@/components/Low/Select";
-import { getUserWithEntity } from "@/utils/users.be";
+import { getEntitiesUsers, getUsers, getUserWithEntity } from "@/utils/users.be";
import { getEntities } from "@/utils/entities.be";
import { Entity } from "@/interfaces/entity";
@@ -30,10 +30,14 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
if (shouldRedirectHome(user) || !["admin", "developer", "teacher", "corporate", "mastercorporate"].includes(user.type))
return redirect("/")
+ const userEntitiesWithLabel = await getEntities(user.entities.map(entity => entity.id));
+
return {
props: serialize({
user,
- userEntitiesWithLabel: await getEntities(user.entities.map(entity => entity.id)),
+ userEntitiesWithLabel,
+ userEntitiesTeachers: await getEntitiesUsers(userEntitiesWithLabel.map(entity => entity.id), { type: "teacher" }) as TeacherUser[],
+ userEntitiesCorporates: await getEntitiesUsers(userEntitiesWithLabel.map(entity => entity.id), { type: "corporate" }) as CorporateUser[],
}),
};
}, sessionOptions);
@@ -41,12 +45,34 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
interface Props {
user: User,
userEntitiesWithLabel: Entity[],
+ userEntitiesTeachers: TeacherUser[],
+ userEntitiesCorporates: CorporateUser[],
}
-export default function Home({ user, userEntitiesWithLabel }: Props) {
+export default function Home({ user, userEntitiesWithLabel, userEntitiesTeachers, userEntitiesCorporates }: Props) {
const [workflows, setWorkflows] = useState