35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
export type CanonicalIntent = 'customer' | 'professional' | 'company' | 'job_seeker' | null;
|
|
|
|
const INTENT_KEY = 'nxtgauge_intent_v1';
|
|
|
|
export function normalizeIntent(value: string | null | undefined): CanonicalIntent {
|
|
if (!value) return null;
|
|
const normalized = value.trim().toLowerCase();
|
|
if (!normalized) return null;
|
|
if (normalized === 'customer') return 'customer';
|
|
if (normalized === 'professional' || normalized === 'pro') return 'professional';
|
|
if (normalized === 'company' || normalized === 'employer') return 'company';
|
|
if (normalized === 'job_seeker' || normalized === 'job-seeker' || normalized === 'jobseeker') return 'job_seeker';
|
|
return null;
|
|
}
|
|
|
|
export function intentToOnboardingPath(intent: CanonicalIntent): string {
|
|
if (intent === 'company') return '/signup?intent=company';
|
|
if (intent === 'job_seeker') return '/signup?intent=job_seeker';
|
|
if (intent === 'professional') return '/signup?intent=professional';
|
|
return '/signup?intent=customer';
|
|
}
|
|
|
|
export function saveCanonicalIntent(intent: CanonicalIntent): void {
|
|
if (typeof window === 'undefined') return;
|
|
if (!intent) {
|
|
window.localStorage.removeItem(INTENT_KEY);
|
|
return;
|
|
}
|
|
window.localStorage.setItem(INTENT_KEY, intent);
|
|
}
|
|
|
|
export function readCanonicalIntent(): CanonicalIntent {
|
|
if (typeof window === 'undefined') return null;
|
|
return normalizeIntent(window.localStorage.getItem(INTENT_KEY));
|
|
}
|