From d2d220adfe5008b88ecf60a4121f4abe95014ee1 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 30 May 2024 18:36:21 +0800 Subject: [PATCH] update --- src/app/utils/commonUtil.ts | 12 +++++++++++- .../GenerateProjectPotentialDelayReport.tsx | 6 ++++-- .../GenerateProjectPotentialDelayReportWrapper.tsx | 5 +++-- src/config/authConfig.ts | 10 ++++++++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/app/utils/commonUtil.ts b/src/app/utils/commonUtil.ts index fa68bda..39667fe 100644 --- a/src/app/utils/commonUtil.ts +++ b/src/app/utils/commonUtil.ts @@ -1,4 +1,4 @@ -import { SessionWithTokens, authOptions } from "@/config/authConfig" +import { SessionStaff, SessionWithTokens, authOptions } from "@/config/authConfig" import { getServerSession } from "next-auth" export interface WildCard { [key: string]: any; @@ -51,7 +51,17 @@ export function readIntFromString(input: string): [string, number | null] | stri return [stringPart, intPart]; } +export const getUserSession = async () => { + const session = await getServerSession(authOptions) as SessionWithTokens; + return session +} + export const getUserAbilities = async () => { const session = await getServerSession(authOptions) as SessionWithTokens; return session?.abilities ?? [] as string[] +} + +export const getUserStaff = async () => { + const session = await getServerSession(authOptions) as SessionWithTokens; + return session?.staff } \ No newline at end of file diff --git a/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReport.tsx b/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReport.tsx index e94b1ba..4f6cf6c 100644 --- a/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReport.tsx +++ b/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReport.tsx @@ -9,17 +9,19 @@ import { downloadFile } from "@/app/utils/commonUtil"; import { TeamResult } from "@/app/api/team"; import { Customer } from "@/app/api/customer"; import { Subsidiary } from "@/app/api/subsidiary"; +import { SessionStaff } from "@/config/authConfig"; interface Props { teams: TeamResult[]; clients: Customer[]; subsidiaries: Subsidiary[]; + userStaff: SessionStaff; } type SearchQuery = Partial>; type SearchParamNames = keyof SearchQuery; -const GenerateProjectPotentialDelayReport: React.FC = ({ teams, clients, subsidiaries }) => { +const GenerateProjectPotentialDelayReport: React.FC = ({ teams, clients, subsidiaries, userStaff }) => { const { t } = useTranslation("report"); const teamCombo = teams.map(team => `${team.code} - ${team.name}`) @@ -42,7 +44,7 @@ const GenerateProjectPotentialDelayReport: React.FC = ({ teams, clients, const searchCriteria: Criterion[] = useMemo( () => [ - { label: t("Team"), paramName: "team", type: "select", options: teamCombo }, + { label: t("Team"), paramName: "team", type: "select", options: teamCombo, needAll: !Boolean(userStaff?.isTeamLead) }, { label: t("Client"), paramName: "client", type: "autocomplete", options: [...subsidiaryCombo, ...clientCombo] }, { label: t("Days until current stage end"), paramName: "daysUntilCurrentStageEnd", type: "text", textType: "number", error: errors.daysUntilCurrentStageEnd, helperText: t("Can not be null and decimal, and should be >= 0") }, { label: t("Resource Utilization Percentage (<= %)"), paramName: "resourceUtilizationPercentage", type: "text", textType: "number", error: errors.resourceUtilizationPercentage, helperText: t("Can not be null and decimal, and should be in range of 0 - 100") }, diff --git a/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReportWrapper.tsx b/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReportWrapper.tsx index ea62e6e..392224e 100644 --- a/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReportWrapper.tsx +++ b/src/components/GenerateProjectPotentialDelayReport/GenerateProjectPotentialDelayReportWrapper.tsx @@ -4,15 +4,16 @@ import GenerateProjectPotentialDelayReport from "./GenerateProjectPotentialDelay import { fetchTeam } from "@/app/api/team"; import { fetchAllCustomers } from "@/app/api/customer"; import { fetchAllSubsidiaries } from "@/app/api/subsidiary"; +import { getUserStaff } from "@/app/utils/commonUtil"; interface SubComponents { Loading: typeof GenerateProjectPotentialDelayReportLoading; } const GenerateProjectPotentialDelayReportWrapper: React.FC & SubComponents = async () => { - const [teams, clients, subsidiaries] = await Promise.all([fetchTeam(), fetchAllCustomers(), fetchAllSubsidiaries()]) + const [teams, clients, subsidiaries, userStaff] = await Promise.all([fetchTeam(), fetchAllCustomers(), fetchAllSubsidiaries(), getUserStaff()]) - return ; + return team.id === userStaff?.teamId)} clients={clients} subsidiaries={subsidiaries} userStaff={userStaff}/>; }; GenerateProjectPotentialDelayReportWrapper.Loading = GenerateProjectPotentialDelayReportLoading; diff --git a/src/config/authConfig.ts b/src/config/authConfig.ts index b41c045..210e0f1 100644 --- a/src/config/authConfig.ts +++ b/src/config/authConfig.ts @@ -2,12 +2,18 @@ import { AuthOptions, Session } from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; import { LOGIN_API_PATH } from "./api"; +export interface SessionStaff { + id: number; + teamId: number; + isTeamLead: boolean; +} export interface SessionWithTokens extends Session { - staff?: any; + staff?: SessionStaff; role?: String; abilities?: string[]; accessToken?: string; refreshToken?: string; + isTeamLead?: boolean; } export interface ability { @@ -61,7 +67,7 @@ export const authOptions: AuthOptions = { ) as string[], accessToken: token.accessToken as string | undefined, refreshToken: token.refreshToken as string | undefined, - staff: token.staff as any + staff: token.staff as SessionStaff }; // console.log(sessionWithToken) return sessionWithToken;