502bd07db9
After moving a section on the frontend, this broke the path that was sent by email on the backend. This kind of error comes back every ~2-3 month under different forms so we need a more robust solution: I moved routes to the shared folder, that way we will share one common source of truth between the frontend and the backend. Fixes #14343
31 lines
735 B
TypeScript
31 lines
735 B
TypeScript
import qs from 'qs';
|
|
import { generatePath, type PathParam } from 'react-router-dom';
|
|
import { type AppPath } from '../../types';
|
|
import { isDefined } from '../validation';
|
|
|
|
export const getAppPath = <T extends AppPath>(
|
|
to: T,
|
|
params?: { [key in PathParam<T>]: string | null },
|
|
queryParams?: Record<string, any>,
|
|
) => {
|
|
let path: string = to;
|
|
|
|
if (isDefined(params)) {
|
|
path = generatePath<T>(to, params);
|
|
}
|
|
|
|
if (isDefined(queryParams)) {
|
|
const filteredParams = Object.fromEntries(
|
|
Object.entries(queryParams).filter(([_, value]) => isDefined(value)),
|
|
);
|
|
|
|
const queryString = qs.stringify(filteredParams);
|
|
|
|
if (queryString !== '') {
|
|
path += `?${queryString}`;
|
|
}
|
|
}
|
|
|
|
return path;
|
|
};
|