Skip to content

Commit 70ff338

Browse files
committed
feat: refactor account provider; add TS
1 parent 16cfb3e commit 70ff338

File tree

7 files changed

+57
-36
lines changed

7 files changed

+57
-36
lines changed

src/app/contexts/AccountContext/idcta/isSignedIn.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/app/contexts/AccountContext/index.tsx

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
import React, { createContext, use, useEffect, useMemo, useState } from 'react';
22
import { ServiceContext } from '#app/contexts/ServiceContext';
3-
import { isSignedIn } from './idcta/isSignedIn';
4-
import appendCtaQueryParams from './idcta/appendCtaQueryParams';
5-
6-
export type AccountContextProps = {
7-
isSignInAvailable: boolean;
8-
accountUrl: string;
9-
signInUrl: string;
10-
registerUrl: string;
11-
isSignedIn: boolean;
12-
};
3+
import Cookie from 'js-cookie';
4+
import onClient from '#app/lib/utilities/onClient';
5+
import { AccountContextProps, IdctaConfig } from '#app/models/types/account';
6+
import appendCtaQueryParams from '#app/lib/idcta/appendCtaQueryParams';
137

148
export const AccountContext = createContext<AccountContextProps>(
159
{} as AccountContextProps,
1610
);
1711

12+
const getSignedInCookie = (cookieName = 'ckns_id') => {
13+
return onClient() ? Cookie.get(cookieName) : false;
14+
};
15+
1816
export const AccountProvider = ({
1917
children,
20-
initialConfig = null,
18+
initialConfig,
2119
}: {
2220
children: React.ReactNode;
23-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
24-
initialConfig: any;
21+
initialConfig: IdctaConfig | null;
2522
}) => {
2623
const { locale } = use(ServiceContext);
2724

@@ -47,19 +44,29 @@ export const AccountProvider = ({
4744
? initialConfig.foryou_url
4845
: unavailableUrl;
4946

50-
const isUserSignedIn = signInAvailability ? isSignedIn() : false;
47+
// Todo: use settings_url
48+
// Todo: use privacy_settings_url
49+
50+
const cookieName = initialConfig?.identity.idSignedInCookieName;
51+
const isSignedIn = signInAvailability
52+
? Boolean(getSignedInCookie(cookieName))
53+
: false;
5154

5255
const value = useMemo(
5356
() => ({
5457
isSignInAvailable: signInAvailability,
5558
signInUrl,
5659
registerUrl,
5760
accountUrl,
58-
isSignedIn: isUserSignedIn,
61+
isSignedIn,
5962
}),
60-
[accountUrl, isUserSignedIn, registerUrl, signInAvailability, signInUrl],
63+
[accountUrl, isSignedIn, registerUrl, signInAvailability, signInUrl],
6164
);
6265

66+
if (!initialConfig) {
67+
return children;
68+
}
69+
6370
return (
6471
<AccountContext.Provider value={value}>{children}</AccountContext.Provider>
6572
);
File renamed without changes.

src/app/contexts/AccountContext/idcta/fetchIdctaConfig.ts renamed to src/app/lib/idcta/fetchIdctaConfig.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ import { IDCTA_FETCH_ERROR } from '#app/lib/logger.const';
22
import nodeLogger from '#app/lib/logger.node';
33
import getToggleDefinitions from '#app/lib/utilities/getToggleDefinition';
44
import isLocal from '#app/lib/utilities/isLocal';
5+
import { IdctaConfig } from '#app/models/types/account';
56
import { Toggles, Services } from '#app/models/types/global';
67
import { getIdctaConfigUrl } from './getIdctaBaseUrl';
78

89
const logger = nodeLogger(__filename);
910

10-
// TODO: Add types
11-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
12-
type IdctaConfig = any;
13-
1411
export default async function fetchIdctaConfig(
1512
toggles: Toggles,
1613
service: Services,
@@ -36,8 +33,7 @@ export default async function fetchIdctaConfig(
3633

3734
if (!response.ok) {
3835
logger.error(IDCTA_FETCH_ERROR, {
39-
url: idctaConfigUrl,
40-
service,
36+
url: response.url,
4137
status: response.status,
4238
statusText: response.statusText,
4339
});
@@ -48,7 +44,6 @@ export default async function fetchIdctaConfig(
4844
} catch (error) {
4945
logger.error(IDCTA_FETCH_ERROR, {
5046
url: idctaConfigUrl,
51-
service,
5247
error,
5348
});
5449
return null;
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import isLive from '../../../lib/utilities/isLive';
1+
import isLive from '#app/lib/utilities/isLive';
22

33
export const getIdctaBaseUrl = (): string => {
44
return isLive()
@@ -7,4 +7,3 @@ export const getIdctaBaseUrl = (): string => {
77
};
88

99
export const getIdctaConfigUrl = (): string => `${getIdctaBaseUrl()}/config`;
10-
export const getIdctaInitUrl = (): string => `${getIdctaBaseUrl()}/init`;

src/app/models/types/account.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/* eslint-disable camelcase */
2+
type FlagpoleStatus = 'GREEN' | 'RED';
3+
4+
// Partial IDCTA Config. Add additional types if needed;
5+
export type IdctaConfig = {
6+
availability: {
7+
signin: FlagpoleStatus;
8+
};
9+
'foryou-flagpole': FlagpoleStatus;
10+
unavailable_url: string;
11+
signin_url: string;
12+
register_url: string;
13+
foryou_url: string;
14+
settings_url: string;
15+
identity: {
16+
accessTokenCookieName: string;
17+
cookieAgeDays: number;
18+
idSignedInCookieName: string;
19+
};
20+
};
21+
22+
export type AccountContextProps = {
23+
isSignInAvailable: boolean;
24+
isSignedIn: boolean;
25+
accountUrl?: string;
26+
signInUrl?: string;
27+
registerUrl?: string;
28+
};

ws-nextjs-app/pages/_app.page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import addOnionLocationHeader from '#nextjs/utilities/addOnionLocationHeader';
2727
import addVaryHeader from '#nextjs/utilities/addVaryHeader';
2828
import addLinkHeader from '#nextjs/utilities/addLinkHeader';
2929
import { AccountProvider } from '#app/contexts/AccountContext';
30-
import fetchIdctaConfig from '#app/contexts/AccountContext/idcta/fetchIdctaConfig';
30+
import fetchIdctaConfig from '#app/lib/idcta/fetchIdctaConfig';
31+
import { IdctaConfig } from '#app/models/types/account';
3132

3233
interface Props {
3334
pageProps: {
@@ -57,7 +58,7 @@ interface Props {
5758
variant?: Variants;
5859
isUK?: boolean;
5960
country?: string | null;
60-
idctaConfig?: unknown | null;
61+
idctaConfig: IdctaConfig | null;
6162
};
6263
}
6364

0 commit comments

Comments
 (0)