Skip to content

Commit 1c35ad1

Browse files
authored
fix: skem dynamic loading fix (#748)
1 parent 71e08c0 commit 1c35ad1

3 files changed

Lines changed: 62 additions & 43 deletions

File tree

packages/components/src/components/footer/Footer.tsx

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import { Footer, Link, Logo, logoFi, logoSv } from 'hds-react';
22
import dynamic from 'next/dynamic';
3-
import { useRouter } from 'next/router';
43
import type { FunctionComponent } from 'react';
54
import type { Menu } from 'react-helsinki-headless-cms';
65
import { useMenuQuery } from 'react-helsinki-headless-cms/apollo';
7-
import useAskemContext from '../../components/askem/useAskemContext';
86
import { DEFAULT_FOOTER_MENU_NAME } from '../../constants';
9-
import { useCookieConfigurationContext } from '../../cookieConfigurationProvider';
107
import { useCommonTranslation, useResilientTranslation } from '../../hooks';
118
import useLocale from '../../hooks/useLocale';
129

@@ -32,15 +29,6 @@ const FooterSection: FunctionComponent<FooterSectionProps> = ({
3229
const { t: commonT } = useCommonTranslation();
3330
const { resilientT } = useResilientTranslation();
3431
const locale = useLocale();
35-
const { asPath } = useRouter();
36-
const { cookieDomain, askemConfiguration: askemConfigurationInput } =
37-
useCookieConfigurationContext();
38-
39-
const { askemInstance, handleConsentGiven } = useAskemContext({
40-
cookieDomain,
41-
asPath,
42-
askemConfigurationInput,
43-
});
4432

4533
const { data: footerMenuData } = useMenuQuery({
4634
skip: !!menu,
@@ -57,43 +45,23 @@ const FooterSection: FunctionComponent<FooterSectionProps> = ({
5745
document.querySelector<HTMLDivElement>(`#${resetFocusId}`)?.focus();
5846
};
5947

60-
const AskemProvider = dynamic(
61-
() => import('../../components/askem').then((mod) => mod.AskemProvider),
62-
{
63-
ssr: false,
64-
}
65-
);
66-
67-
const AskemFeedbackContainer = dynamic(
48+
const UserTrackingFeatures = dynamic(
6849
() =>
69-
import('../../components/askem').then(
70-
(mod) => mod.AskemFeedbackContainer
71-
),
50+
import('../widgets/UserTrackingFeatures').then((mod) => mod),
7251
{
7352
ssr: false,
7453
}
7554
);
7655

77-
const EventsCookieConsent = dynamic(
78-
() => import('../../components/eventsCookieConsent/EventsCookieConsent'),
79-
{ ssr: false }
80-
);
81-
8256
return (
83-
<AskemProvider value={askemInstance}>
84-
{hasFeedBack && (
85-
<AskemFeedbackContainer
86-
withPadding={feedbackWithPadding}
87-
consentUrl={consentUrl}
88-
/>
89-
)}
90-
{isModalConsent && (
91-
<EventsCookieConsent
92-
onConsentGiven={handleConsentGiven}
93-
allowLanguageSwitch={false}
94-
appName={appName}
95-
/>
96-
)}
57+
<>
58+
<UserTrackingFeatures
59+
appName={appName}
60+
hasFeedBack={hasFeedBack}
61+
feedbackWithPadding={feedbackWithPadding}
62+
consentUrl={consentUrl}
63+
isModalConsent={isModalConsent}
64+
/>
9765
<Footer title={appName} className={styles.footer}>
9866
<Footer.Base
9967
copyrightHolder={resilientT('footer:copyright')}
@@ -119,7 +87,7 @@ const FooterSection: FunctionComponent<FooterSectionProps> = ({
11987
))}
12088
</Footer.Base>
12189
</Footer>
122-
</AskemProvider>
90+
</>
12391
);
12492
};
12593

packages/components/src/components/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@ export { default as EventClosedHero } from './eventClosedHero/EventClosedHero';
7171
export { default as EventHero } from './eventHero/EventHero';
7272
export { default as EventPageMeta } from './eventPageMeta/EventPageMeta';
7373
export { default as PreviewNotification } from './previewNotification/PreviewNotification';
74+
export { default as UserTrackingFeatures } from './widgets/UserTrackingFeatures';
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { useRouter } from 'next/router';
2+
import { AskemFeedbackContainer, AskemProvider } from '../askem';
3+
import useAskemContext from '../askem/useAskemContext';
4+
import EventsCookieConsent from '../eventsCookieConsent/EventsCookieConsent';
5+
import { useCookieConfigurationContext } from '../../cookieConfigurationProvider';
6+
7+
type UserTrackingFeaturesProps = {
8+
appName: string;
9+
hasFeedBack: boolean;
10+
feedbackWithPadding: boolean;
11+
consentUrl: string;
12+
isModalConsent: boolean;
13+
children?: React.ReactNode[];
14+
};
15+
16+
export default function UserTrackingFeatures({
17+
appName,
18+
hasFeedBack,
19+
feedbackWithPadding,
20+
consentUrl,
21+
isModalConsent,
22+
}: UserTrackingFeaturesProps) {
23+
const { asPath } = useRouter();
24+
const { cookieDomain, askemConfiguration: askemConfigurationInput } =
25+
useCookieConfigurationContext();
26+
27+
const { askemInstance, handleConsentGiven } = useAskemContext({
28+
cookieDomain,
29+
asPath,
30+
askemConfigurationInput,
31+
});
32+
33+
return (
34+
<AskemProvider value={askemInstance}>
35+
{hasFeedBack && (
36+
<AskemFeedbackContainer
37+
withPadding={feedbackWithPadding}
38+
consentUrl={consentUrl}
39+
/>
40+
)}
41+
{isModalConsent && (
42+
<EventsCookieConsent
43+
onConsentGiven={handleConsentGiven}
44+
allowLanguageSwitch={false}
45+
appName={appName}
46+
/>
47+
)}
48+
</AskemProvider>
49+
);
50+
}

0 commit comments

Comments
 (0)