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
74 lines
2.0 KiB
TypeScript
74 lines
2.0 KiB
TypeScript
import { generatePath } from 'react-router-dom';
|
|
import { AppPath } from 'twenty-shared/types';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
import {
|
|
type AvailableWorkspace,
|
|
type AvailableWorkspaces,
|
|
} from '~/generated/graphql';
|
|
|
|
export const countAvailableWorkspaces = ({
|
|
availableWorkspacesForSignIn,
|
|
availableWorkspacesForSignUp,
|
|
}: AvailableWorkspaces): number => {
|
|
return (
|
|
availableWorkspacesForSignIn.length + availableWorkspacesForSignUp.length
|
|
);
|
|
};
|
|
|
|
export const getFirstAvailableWorkspaces = ({
|
|
availableWorkspacesForSignIn,
|
|
availableWorkspacesForSignUp,
|
|
}: AvailableWorkspaces): AvailableWorkspace => {
|
|
return availableWorkspacesForSignIn[0] ?? availableWorkspacesForSignUp[0];
|
|
};
|
|
|
|
const getAvailableWorkspacePathname = (
|
|
availableWorkspace: AvailableWorkspace,
|
|
) => {
|
|
if (isDefined(availableWorkspace.loginToken)) {
|
|
return AppPath.Verify;
|
|
}
|
|
|
|
if (
|
|
isDefined(availableWorkspace.personalInviteToken) &&
|
|
isDefined(availableWorkspace.inviteHash)
|
|
) {
|
|
return generatePath(AppPath.Invite, {
|
|
workspaceInviteHash: availableWorkspace.inviteHash,
|
|
});
|
|
}
|
|
|
|
return AppPath.SignInUp;
|
|
};
|
|
|
|
const getAvailableWorkspaceSearchParams = (
|
|
availableWorkspace: AvailableWorkspace,
|
|
defaultSearchParams: Record<string, string> = {},
|
|
) => {
|
|
const searchParams: Record<string, string> = defaultSearchParams;
|
|
|
|
if (isDefined(availableWorkspace.loginToken)) {
|
|
searchParams.loginToken = availableWorkspace.loginToken;
|
|
return searchParams;
|
|
}
|
|
|
|
if (isDefined(availableWorkspace.personalInviteToken)) {
|
|
searchParams.inviteToken = availableWorkspace.personalInviteToken;
|
|
}
|
|
|
|
return searchParams;
|
|
};
|
|
|
|
export const getAvailableWorkspacePathAndSearchParams = (
|
|
availableWorkspace: AvailableWorkspace,
|
|
defaultSearchParams: Record<string, string> = {},
|
|
): { pathname: string; searchParams: Record<string, string> } => {
|
|
return {
|
|
pathname: getAvailableWorkspacePathname(availableWorkspace),
|
|
searchParams: getAvailableWorkspaceSearchParams(
|
|
availableWorkspace,
|
|
defaultSearchParams,
|
|
),
|
|
};
|
|
};
|