Skip to content

Commit 0db1ec5

Browse files
committed
fix(frontend): localize onboarding tour to user
1 parent f9d5cee commit 0db1ec5

16 files changed

+74
-36
lines changed

apps/frontend/app/lib/state/general.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { useNavigate } from "react-router";
1515
import { $path } from "safe-routes";
1616
import { match } from "ts-pattern";
1717
import { clientGqlService } from "../common";
18+
import { useDashboardLayoutData } from "../hooks";
1819

1920
type OpenedSidebarLinks = {
2021
media: boolean;
@@ -75,8 +76,6 @@ export enum OnboardingTourStepTargets {
7576
OpenSettingsPreferences = "tour-step-open-settings-preferences",
7677
}
7778

78-
export const ONBOARDING_COMPLETED_COOKIE_KEY = "OnboardingCompleted";
79-
8079
const onboardingTourAtom = atomWithStorage<
8180
| undefined
8281
| {
@@ -89,6 +88,7 @@ const onboardingTourAtom = atomWithStorage<
8988
export const useOnboardingTour = () => {
9089
const [tourState, setTourState] = useAtom(onboardingTourAtom);
9190
const navigate = useNavigate();
91+
const dashboardData = useDashboardLayoutData();
9292
const { setOpenedSidebarLinks } = useOpenedSidebarLinks();
9393
const isOnboardingTourInProgress =
9494
isNumber(tourState?.currentStepIndex) && !tourState?.isCompleted;
@@ -114,7 +114,7 @@ export const useOnboardingTour = () => {
114114
if (draft) draft.isCompleted = true;
115115
}),
116116
);
117-
Cookies.set(ONBOARDING_COMPLETED_COOKIE_KEY, "true");
117+
Cookies.set(dashboardData.onboardingTourCompletedCookie, "true");
118118
navigate($path("/"));
119119
};
120120

apps/frontend/app/lib/utilities.server.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,20 @@ export const extendResponseHeaders = (
349349
responseHeaders.append(key, value);
350350
};
351351

352-
export const getEnhancedCookieName = async (path: string, request: Request) => {
352+
export const getEnhancedCookieName = async (
353+
path: string,
354+
name: string,
355+
request: Request,
356+
) => {
353357
const userDetails = await redirectIfNotAuthenticatedOrUpdated(request);
354-
return `SearchParams__${userDetails.id}__${path}`;
358+
return `${name}__${userDetails.id}__${path}`;
355359
};
356360

361+
export const getSearchEnhancedCookieName = async (
362+
path: string,
363+
request: Request,
364+
) => getEnhancedCookieName(path, "SearchParams", request);
365+
357366
export const redirectUsingEnhancedCookieSearchParams = async (
358367
request: Request,
359368
cookieName: string,

apps/frontend/app/routes/_dashboard.calendar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { MetadataDisplayItem } from "~/components/media";
2424
import { dayjsLib } from "~/lib/common";
2525
import { useAppSearchParam } from "~/lib/hooks";
2626
import {
27-
getEnhancedCookieName,
27+
getSearchEnhancedCookieName,
2828
redirectUsingEnhancedCookieSearchParams,
2929
serverGqlService,
3030
} from "~/lib/utilities.server";
@@ -37,7 +37,7 @@ const searchParamsSchema = z.object({
3737
export type SearchParams = z.infer<typeof searchParamsSchema>;
3838

3939
export const loader = async ({ request }: Route.LoaderArgs) => {
40-
const cookieName = await getEnhancedCookieName("calendar", request);
40+
const cookieName = await getSearchEnhancedCookieName("calendar", request);
4141
await redirectUsingEnhancedCookieSearchParams(request, cookieName);
4242
const query = parseSearchQuery(request, searchParamsSchema);
4343
const date = dayjsLib(query.date);

apps/frontend/app/routes/_dashboard.collections.$id._index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import { useAppSearchParam, useUserPreferences } from "~/lib/hooks";
5454
import { useBulkEditCollection } from "~/lib/state/collection";
5555
import { useReviewEntity } from "~/lib/state/media";
5656
import {
57-
getEnhancedCookieName,
57+
getSearchEnhancedCookieName,
5858
redirectToFirstPageIfOnInvalidPage,
5959
redirectUsingEnhancedCookieSearchParams,
6060
serverGqlService,
@@ -87,7 +87,7 @@ export const loader = async ({ request, params }: Route.LoaderArgs) => {
8787
params,
8888
z.object({ id: z.string() }),
8989
);
90-
const cookieName = await getEnhancedCookieName(
90+
const cookieName = await getSearchEnhancedCookieName(
9191
`collections.details.${collectionId}`,
9292
request,
9393
);

apps/frontend/app/routes/_dashboard.collections.list.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,18 @@ import {
8282
} from "~/lib/hooks";
8383
import {
8484
createToastHeaders,
85-
getEnhancedCookieName,
85+
getSearchEnhancedCookieName,
8686
getUserCollectionsListRaw,
8787
redirectUsingEnhancedCookieSearchParams,
8888
serverGqlService,
8989
} from "~/lib/utilities.server";
9090
import type { Route } from "./+types/_dashboard.collections.list";
9191

9292
export const loader = async ({ request }: Route.LoaderArgs) => {
93-
const cookieName = await getEnhancedCookieName("collections.list", request);
93+
const cookieName = await getSearchEnhancedCookieName(
94+
"collections.list",
95+
request,
96+
);
9497
await redirectUsingEnhancedCookieSearchParams(request, cookieName);
9598
const [{ usersList }, userCollectionsList] = await Promise.all([
9699
serverGqlService.authenticatedRequest(request, UsersListDocument, {}),

apps/frontend/app/routes/_dashboard.fitness.$entity.list.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ import {
9292
useOnboardingTour,
9393
} from "~/lib/state/general";
9494
import {
95-
getEnhancedCookieName,
95+
getSearchEnhancedCookieName,
9696
redirectToFirstPageIfOnInvalidPage,
9797
redirectUsingEnhancedCookieSearchParams,
9898
serverGqlService,
@@ -120,7 +120,10 @@ export const loader = async ({ params, request }: Route.LoaderArgs) => {
120120
params,
121121
z.object({ entity: z.nativeEnum(FitnessEntity) }),
122122
);
123-
const cookieName = await getEnhancedCookieName(`${entity}.list`, request);
123+
const cookieName = await getSearchEnhancedCookieName(
124+
`${entity}.list`,
125+
request,
126+
);
124127
await redirectUsingEnhancedCookieSearchParams(request, cookieName);
125128
const query = parseSearchQuery(request, searchParamsSchema);
126129
const input: UserTemplatesOrWorkoutsListInput = {

apps/frontend/app/routes/_dashboard.fitness.exercises.list.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ import {
9090
useOnboardingTour,
9191
} from "~/lib/state/general";
9292
import {
93-
getEnhancedCookieName,
93+
getSearchEnhancedCookieName,
9494
redirectToFirstPageIfOnInvalidPage,
9595
redirectUsingEnhancedCookieSearchParams,
9696
redirectWithToast,
@@ -125,7 +125,10 @@ const searchParamsSchema = z.object({
125125
export type SearchParams = z.infer<typeof searchParamsSchema>;
126126

127127
export const loader = async ({ request }: Route.LoaderArgs) => {
128-
const cookieName = await getEnhancedCookieName("exercises.list", request);
128+
const cookieName = await getSearchEnhancedCookieName(
129+
"exercises.list",
130+
request,
131+
);
129132
await redirectUsingEnhancedCookieSearchParams(request, cookieName);
130133
const query = parseSearchQuery(request, searchParamsSchema);
131134
query.sortBy = query.sortBy ?? defaultFiltersValue.sortBy;

apps/frontend/app/routes/_dashboard.fitness.measurements.list.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import {
5050
import { useMeasurementsDrawerOpen } from "~/lib/state/fitness";
5151
import {
5252
createToastHeaders,
53-
getEnhancedCookieName,
53+
getSearchEnhancedCookieName,
5454
redirectUsingEnhancedCookieSearchParams,
5555
serverGqlService,
5656
} from "~/lib/utilities.server";
@@ -65,7 +65,10 @@ export type SearchParams = z.infer<typeof searchParamsSchema>;
6565
const defaultTimeSpan = TimeSpan.Last30Days;
6666

6767
export const loader = async ({ request }: Route.LoaderArgs) => {
68-
const cookieName = await getEnhancedCookieName("measurements.list", request);
68+
const cookieName = await getSearchEnhancedCookieName(
69+
"measurements.list",
70+
request,
71+
);
6972
await redirectUsingEnhancedCookieSearchParams(request, cookieName);
7073
const query = parseSearchQuery(request, searchParamsSchema);
7174
const now = dayjsLib();

apps/frontend/app/routes/_dashboard.media.$action.$lot.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ import {
9797
} from "~/lib/state/media";
9898
import {
9999
getCoreDetails,
100-
getEnhancedCookieName,
100+
getSearchEnhancedCookieName,
101101
redirectToFirstPageIfOnInvalidPage,
102102
redirectUsingEnhancedCookieSearchParams,
103103
serverGqlService,
@@ -129,7 +129,7 @@ export const loader = async ({ request, params }: Route.LoaderArgs) => {
129129
lot: z.string().transform((v) => getLot(v) as MediaLot),
130130
}),
131131
);
132-
const cookieName = await getEnhancedCookieName(
132+
const cookieName = await getSearchEnhancedCookieName(
133133
`media.${action}.${lot}`,
134134
request,
135135
);

apps/frontend/app/routes/_dashboard.media.genre.$id._index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { MetadataDisplayItem } from "~/components/media";
2020
import { pageQueryParam } from "~/lib/common";
2121
import { useAppSearchParam } from "~/lib/hooks";
2222
import {
23-
getEnhancedCookieName,
23+
getSearchEnhancedCookieName,
2424
redirectToFirstPageIfOnInvalidPage,
2525
redirectUsingEnhancedCookieSearchParams,
2626
serverGqlService,
@@ -35,7 +35,10 @@ export type SearchParams = z.infer<typeof searchParamsSchema>;
3535

3636
export const loader = async ({ request, params }: Route.LoaderArgs) => {
3737
const { id: genreId } = parseParameters(params, z.object({ id: z.string() }));
38-
const cookieName = await getEnhancedCookieName(`genre.${genreId}`, request);
38+
const cookieName = await getSearchEnhancedCookieName(
39+
`genre.${genreId}`,
40+
request,
41+
);
3942
await redirectUsingEnhancedCookieSearchParams(request, cookieName);
4043
const query = parseSearchQuery(request, searchParamsSchema);
4144
const [{ genreDetails }] = await Promise.all([

0 commit comments

Comments
 (0)