Skip to content

Commit

Permalink
add redirect util function for project custom actions (#1865)
Browse files Browse the repository at this point in the history
  • Loading branch information
CarlosQ96 authored Oct 29, 2024
1 parent 5e9e255 commit f6d7b3f
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 4 deletions.
1 change: 0 additions & 1 deletion src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ const envVars = [
'GIVBACK_MAX_FACTOR',
'GIVBACK_MIN_FACTOR',
'DONATION_VERIFICAITON_EXPIRATION_HOURS',
'SYNC_USER_MODEL_SCORE_CRONJOB_EXPRESSION',
];

interface requiredEnv {
Expand Down
1 change: 1 addition & 0 deletions src/server/adminJs/adminJs-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export interface AdminJsContextInterface {
export interface AdminJsRequestInterface {
payload?: any;
record?: any;
rawHeaders?: any;
query?: {
recordIds?: string;
};
Expand Down
33 changes: 33 additions & 0 deletions src/server/adminJs/adminJsUtils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { logger } from '../../utils/logger';

/**
* Extracts the redirect URL from request headers for AdminJS actions
* @param request - The AdminJS action request object
* @param resourceName - The name of the resource (e.g., 'Project', 'User')
* @returns The URL to redirect to after action completion
*/
export const getRedirectUrl = (request: any, resourceName: string): string => {
const refererIndex =
request?.rawHeaders?.findIndex(h => h.toLowerCase() === 'referer') || -1;
const referrerUrl =
refererIndex !== -1 ? request.rawHeaders[refererIndex + 1] : false;

// Default fallback URL if no referer is found
const defaultUrl = `/admin/resources/${resourceName}`;

try {
if (referrerUrl) {
const url = new URL(referrerUrl);
// If it's the main list view (no search params), add a timestamp to force refresh
if (url.pathname === `/admin/resources/${resourceName}` && !url.search) {
return `${url.pathname}?timestamp=${Date.now()}`;
}
return url.pathname + url.search;
}
} catch (error) {
logger.error('Error parsing referrer URL:', error);
}

// Add timestamp to default URL as well
return `${defaultUrl}?timestamp=${Date.now()}`;
};
12 changes: 9 additions & 3 deletions src/server/adminJs/tabs/projectsTab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import { refreshProjectEstimatedMatchingView } from '../../../services/projectVi
import { extractAdminJsReferrerUrlParams } from '../adminJs';
import { relateManyProjectsToQfRound } from '../../../repositories/qfRoundRepository2';
import { Category } from '../../../entities/category';
import { getRedirectUrl } from '../adminJsUtils';

// add queries depending on which filters were selected
export const buildProjectsQuery = (
Expand Down Expand Up @@ -188,6 +189,7 @@ export const verifyProjects = async (
request: AdminJsRequestInterface,
vouchedStatus: boolean = true,
) => {
const redirectUrl = getRedirectUrl(request, 'Project');
const { records, currentAdmin } = context;
try {
const projectIds = request?.query?.recordIds
Expand Down Expand Up @@ -236,7 +238,7 @@ export const verifyProjects = async (
throw error;
}
return {
redirectUrl: '/admin/resources/Project',
redirectUrl: redirectUrl,
records: records.map(record => {
record.toJSON(context.currentAdmin);
}),
Expand All @@ -254,6 +256,7 @@ export const updateStatusOfProjects = async (
request: AdminJsRequestInterface,
status,
) => {
const redirectUrl = getRedirectUrl(request, 'Project');
const { records, currentAdmin } = context;
const projectIds = request?.query?.recordIds
?.split(',')
Expand Down Expand Up @@ -319,7 +322,7 @@ export const updateStatusOfProjects = async (
]);
}
return {
redirectUrl: '/admin/resources/Project',
redirectUrl: redirectUrl,
records: records.map(record => {
record.toJSON(context.currentAdmin);
}),
Expand Down Expand Up @@ -415,6 +418,7 @@ export const addSingleProjectToQfRound = async (
request: AdminJsRequestInterface,
add: boolean = true,
) => {
const redirectUrl = getRedirectUrl(request, 'Project');
const { record, currentAdmin } = context;
let message = messages.PROJECTS_RELATED_TO_ACTIVE_QF_ROUND_SUCCESSFULLY;
const projectId = Number(request?.params?.recordId);
Expand All @@ -431,6 +435,7 @@ export const addSingleProjectToQfRound = async (
message = messages.THERE_IS_NOT_ANY_ACTIVE_QF_ROUND;
}
return {
redirectUrl: redirectUrl,
record: record.toJSON(currentAdmin),
notice: {
message,
Expand Down Expand Up @@ -523,6 +528,7 @@ export const listDelist = async (
request,
reviewStatus: ReviewStatus = ReviewStatus.Listed,
) => {
const redirectUrl = getRedirectUrl(request, 'Project');
const { records, currentAdmin } = context;
let listed;
switch (reviewStatus) {
Expand Down Expand Up @@ -586,7 +592,7 @@ export const listDelist = async (
throw error;
}
return {
redirectUrl: '/admin/resources/Project',
redirectUrl: redirectUrl,
records: records.map(record => {
record.toJSON(context.currentAdmin);
}),
Expand Down

0 comments on commit f6d7b3f

Please sign in to comment.