Merge branch 'fix-typo-drive' into 'main'
[ProtonMail-WebClient.git] / packages / pass / hooks / useNavigateToUpgrade.ts
blob64ae2b48f1bf21c43b6c0e5cff0b199370835241
1 import { useAuthStore } from '@proton/pass//components/Core/AuthStoreProvider';
2 import { usePassCore } from '@proton/pass/components/Core/PassCoreProvider';
3 import { SAFARI_URL_SCHEME, type UpsellRef, UpsellRefPrefix } from '@proton/pass/constants';
5 /** Prefer navigating to signup from extension/desktop
6  * as we cannot guarantee the session exists */
7 export const PASS_UPGRADE_PATH = EXTENSION_BUILD || DESKTOP_BUILD ? 'pass/signup' : 'pass/dashboard';
9 /** `pathRef` will be passed to the upgrade link */
10 export const useNavigateToUpgrade = (options: {
11     coupon?: string;
12     cycle?: string;
13     path?: string;
14     plan?: string;
15     offer?: boolean;
16     upsellRef?: UpsellRef;
17     email?: string;
18 }) => {
19     const { onLink, config, endpoint } = usePassCore();
20     const authStore = useAuthStore();
21     const searchParams = new URLSearchParams();
23     const refPrefix: UpsellRefPrefix = (() => {
24         switch (endpoint) {
25             case 'desktop':
26                 return UpsellRefPrefix.Desktop;
27             case 'web':
28                 return UpsellRefPrefix.Web;
29             default:
30                 return UpsellRefPrefix.Extension;
31         }
32     })();
34     if (options.coupon) searchParams.append('coupon', options.coupon);
35     if (options.cycle) searchParams.append('cycle', options.cycle);
36     if (options.email) searchParams.append('email', options.email);
37     if (options.offer) searchParams.append('offer', 'true');
38     if (options.plan) searchParams.append('plan', options.plan);
39     if (options.upsellRef) searchParams.append('ref', `${refPrefix}_${options.upsellRef}`);
41     if (!options.email) {
42         const localID = authStore?.getLocalID();
43         if (localID !== undefined) searchParams.append('u', localID.toString());
44     }
46     const upgradeHref =
47         BUILD_TARGET === 'safari'
48             ? `${SAFARI_URL_SCHEME}//upgrade?${searchParams.toString()}`
49             : `${config.SSO_URL}/${options.path ?? PASS_UPGRADE_PATH}?${searchParams.toString()}`;
51     return () => onLink(upgradeHref, { replace: true });