From 44af39d2fc4dd4aa30bf227864a42d1c1a4b3630 Mon Sep 17 00:00:00 2001 From: Mohammad Ranjbar Z Date: Tue, 13 Jun 2023 15:17:44 +0330 Subject: [PATCH] Add ability to assign/unassign qfRound to project in admin panel project page related to #1015 --- src/server/adminJs/adminJs-types.ts | 1 + src/server/adminJs/tabs/projectsTab.ts | 69 ++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/src/server/adminJs/adminJs-types.ts b/src/server/adminJs/adminJs-types.ts index e23a9b47a..b616d6e93 100644 --- a/src/server/adminJs/adminJs-types.ts +++ b/src/server/adminJs/adminJs-types.ts @@ -5,6 +5,7 @@ export interface AdminJsContextInterface { h: any; resource: any; records: any[]; + record?: any; currentAdmin: User; payload?: any; } diff --git a/src/server/adminJs/tabs/projectsTab.ts b/src/server/adminJs/tabs/projectsTab.ts index c3ca00c3a..683a3c8e0 100644 --- a/src/server/adminJs/tabs/projectsTab.ts +++ b/src/server/adminJs/tabs/projectsTab.ts @@ -380,7 +380,7 @@ export const updateStatusOfProjects = async ( }; }; -export const addProjectToQfRound = async ( +export const addProjectsToQfRound = async ( context: AdminJsContextInterface, request: AdminJsRequestInterface, add: boolean = true, @@ -416,6 +416,37 @@ export const addProjectToQfRound = async ( }; }; +export const addSingleProjectToQfRound = async ( + context: AdminJsContextInterface, + request: AdminJsRequestInterface, + add: boolean = true, +) => { + const { record, currentAdmin } = context; + let message = messages.PROJECTS_RELATED_TO_ACTIVE_QF_ROUND_SUCCESSFULLY; + try { + const projectId = Number(request?.params?.recordId); + const activeQfRound = await findActiveQfRound(); + if (activeQfRound) { + await relateManyProjectsToQfRound({ + projectIds: [projectId], + qfRoundId: activeQfRound.id, + add, + }); + } else { + message = messages.THERE_IS_NOT_ANY_ACTIVE_QF_ROUND; + } + } catch (error) { + throw error; + } + return { + record: record.toJSON(currentAdmin), + notice: { + message, + type: 'success', + }, + }; +}; + export const fillSocialProfileAndQfRounds: After = async ( response, request, @@ -1167,6 +1198,38 @@ export const projectsTab = { component: false, }, + addProjectToQfRound: { + // https://docs.adminjs.co/basics/action#record-type-actions + actionType: 'record', + isVisible: true, + isAccessible: ({ currentAdmin }) => + canAccessQfRoundAction( + { currentAdmin }, + ResourceActions.ADD_PROJECT_TO_QF_ROUND, + ), + guard: 'Do you want to add this project to current active qf round?', + handler: async (request, response, context) => { + return addSingleProjectToQfRound(context, request, true); + }, + component: false, + }, + removeProjectFromQfRound: { + // https://docs.adminjs.co/basics/action#record-type-actions + actionType: 'record', + isVisible: true, + isAccessible: ({ currentAdmin }) => + canAccessQfRoundAction( + { currentAdmin }, + ResourceActions.ADD_PROJECT_TO_QF_ROUND, + ), + guard: + 'Do you want to remove this project from current active qf round?', + handler: async (request, response, context) => { + return addSingleProjectToQfRound(context, request, false); + }, + component: false, + }, + addToQfRound: { actionType: 'bulk', isVisible: true, @@ -1176,7 +1239,7 @@ export const projectsTab = { ResourceActions.ADD_PROJECT_TO_QF_ROUND, ), handler: async (request, response, context) => { - return addProjectToQfRound(context, request, true); + return addProjectsToQfRound(context, request, true); }, component: false, }, @@ -1189,7 +1252,7 @@ export const projectsTab = { ResourceActions.ADD_PROJECT_TO_QF_ROUND, ), handler: async (request, response, context) => { - return addProjectToQfRound(context, request, false); + return addProjectsToQfRound(context, request, false); }, component: false, },