Skip to content

Commit fda24c4

Browse files
committed
Next 15 support #395 #305
1 parent 310f1e3 commit fda24c4

File tree

3 files changed

+31
-46
lines changed

3 files changed

+31
-46
lines changed

src/next-appdir/DsfrProvider.tsx

+12-4
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@ import type { ReactNode } from "react";
55
import { isBrowser } from "../tools/isBrowser";
66
import { SsrIsDarkProvider } from "../useIsDark/server";
77
import { dsfrEffect } from "./zz_internal/start";
8-
import { getDefaultColorSchemeClientSide } from "./zz_internal/defaultColorScheme";
8+
import type { DefaultColorScheme } from "./zz_internal/defaultColorScheme";
99
import { setUseLang } from "../i18n";
10+
import { setLink } from "../link";
1011

1112
export type DsfrProviderProps = {
1213
children: ReactNode;
1314
lang?: string;
15+
/** Default: <a /> */
16+
Link?: Function;
17+
defaultColorScheme: DefaultColorScheme;
1418
};
1519

1620
export function DsfrProvider(props: DsfrProviderProps) {
17-
const { children, lang } = props;
21+
const { children, lang, Link, defaultColorScheme } = props;
1822

1923
useEffect(() => {
2024
dsfrEffect();
@@ -28,12 +32,16 @@ export function DsfrProvider(props: DsfrProviderProps) {
2832
setUseLang({ "useLang": () => lang });
2933
}, [lang]);
3034

35+
useMemo(() => {
36+
if (Link !== undefined) {
37+
setLink({ "Link": Link as any });
38+
}
39+
}, [Link]);
40+
3141
if (isBrowser) {
3242
return <>{children}</>;
3343
}
3444

35-
const defaultColorScheme = getDefaultColorSchemeClientSide();
36-
3745
const isDark = defaultColorScheme === "dark" ? true : false;
3846

3947
return <SsrIsDarkProvider value={isDark}>{children}</SsrIsDarkProvider>;

src/next-appdir/zz_internal/defaultColorScheme.ts

-15
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,3 @@ export function setDefaultColorSchemeServerSide(params: {
1818

1919
defaultColorSchemeServerSide = defaultColorScheme;
2020
}
21-
22-
let defaultColorSchemeClientSide: DefaultColorScheme | undefined = undefined;
23-
24-
export function getDefaultColorSchemeClientSide(): DefaultColorScheme {
25-
assert(defaultColorSchemeClientSide !== undefined);
26-
return defaultColorSchemeClientSide;
27-
}
28-
29-
export function setDefaultColorSchemeClientSide(params: {
30-
defaultColorScheme: DefaultColorScheme;
31-
}): void {
32-
const { defaultColorScheme } = params;
33-
34-
defaultColorSchemeClientSide = defaultColorScheme;
35-
}

src/next-appdir/zz_internal/start.ts

+19-27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { start } from "../../start";
2-
import { setLink } from "../../link";
3-
import { type DefaultColorScheme, setDefaultColorSchemeClientSide } from "./defaultColorScheme";
2+
import type { DefaultColorScheme } from "./defaultColorScheme";
43
import { isBrowser } from "../../tools/isBrowser";
54
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in doc
65
import { type DsfrHead } from "../DsfrHead";
@@ -12,8 +11,6 @@ export function startReactDsfr(params: {
1211
defaultColorScheme: DefaultColorScheme;
1312
/** Default: false */
1413
verbose?: boolean;
15-
/** Default: <a /> */
16-
Link?: Function;
1714
/**
1815
* When true, the nonce of the script tag will be checked, fetched from {@link DsfrHead} component and injected in react-dsfr scripts.
1916
*
@@ -42,38 +39,33 @@ export function startReactDsfr(params: {
4239
*/
4340
trustedTypesPolicyName?: string;
4441
}) {
42+
if (!isBrowser) {
43+
return;
44+
}
45+
4546
const {
4647
defaultColorScheme,
4748
verbose = false,
48-
Link,
4949
doCheckNonce = false,
5050
trustedTypesPolicyName = "react-dsfr"
5151
} = params;
5252

53-
setDefaultColorSchemeClientSide({ defaultColorScheme });
54-
55-
if (Link !== undefined) {
56-
setLink({ "Link": Link as any });
57-
}
58-
59-
if (isBrowser) {
60-
start({
61-
defaultColorScheme,
62-
verbose,
63-
doCheckNonce,
64-
trustedTypesPolicyName,
65-
"nextParams": {
66-
"doPersistDarkModePreferenceWithCookie": false,
67-
"registerEffectAction": action => {
68-
if (isAfterFirstEffect) {
69-
action();
70-
} else {
71-
actions.push(action);
72-
}
53+
start({
54+
defaultColorScheme,
55+
verbose,
56+
doCheckNonce,
57+
trustedTypesPolicyName,
58+
"nextParams": {
59+
"doPersistDarkModePreferenceWithCookie": false,
60+
"registerEffectAction": action => {
61+
if (isAfterFirstEffect) {
62+
action();
63+
} else {
64+
actions.push(action);
7365
}
7466
}
75-
});
76-
}
67+
}
68+
});
7769
}
7870

7971
export function dsfrEffect(): void {

0 commit comments

Comments
 (0)