@sonic-equipment/ui 195.0.0 → 197.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@
2
2
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
3
  import { useMemo, useEffect } from 'react';
4
4
  import { logger } from '../logging/logger.js';
5
+ import { useCookiebot } from '../shared/hooks/use-cookiebot.js';
5
6
  import { useDisclosure } from '../shared/hooks/use-disclosure.js';
6
7
  import { CountrySelectorDialog } from './country-selector-dialog/country-selector-dialog.js';
7
8
  import { CountrySelectorTrigger } from './country-selector-trigger/country-selector-trigger.js';
@@ -13,14 +14,24 @@ function ConnectedCountrySelector({ defaultCountryCode, defaultLanguageCode, onC
13
14
  defaultCountryCode,
14
15
  defaultLanguageCode,
15
16
  });
17
+ const { hasResponse: hasCookiebotResponse, isDialogOpen: isCookiebotDialogOpen, } = useCookiebot();
16
18
  const isCountryLanguageSelected = useMemo(() => selectedCountry !== undefined && selectedLanguage !== undefined, [selectedCountry, selectedLanguage]);
17
19
  const isDismissable = isCountryLanguageSelected;
18
20
  useEffect(() => {
19
- if (isOpen)
21
+ if (isOpen && !isCookiebotDialogOpen)
20
22
  return;
21
- setIsOpen(!isFetching && !isCountryLanguageSelected);
23
+ setIsOpen(!isFetching &&
24
+ !isCountryLanguageSelected &&
25
+ hasCookiebotResponse &&
26
+ !isCookiebotDialogOpen);
22
27
  // eslint-disable-next-line react-hooks/exhaustive-deps
23
- }, [isFetching, isCountryLanguageSelected, isOpen]);
28
+ }, [
29
+ isFetching,
30
+ isCountryLanguageSelected,
31
+ isOpen,
32
+ hasCookiebotResponse,
33
+ isCookiebotDialogOpen,
34
+ ]);
24
35
  if (isFetching)
25
36
  return null;
26
37
  if (error !== undefined) {
package/dist/exports.d.ts CHANGED
@@ -369,6 +369,7 @@ export * from './shared/ga/types';
369
369
  export * from './shared/ga/use-data-layer';
370
370
  export * from './shared/hooks/use-breakpoint';
371
371
  export * from './shared/hooks/use-cookie';
372
+ export * from './shared/hooks/use-cookiebot';
372
373
  export * from './shared/hooks/use-css-link';
373
374
  export * from './shared/hooks/use-debounced-callback';
374
375
  export * from './shared/hooks/use-disclosure';
package/dist/index.js CHANGED
@@ -370,6 +370,7 @@ export { isGAEvent } from './shared/ga/types.js';
370
370
  export { useDataLayer } from './shared/ga/use-data-layer.js';
371
371
  export { useBreakpoint } from './shared/hooks/use-breakpoint.js';
372
372
  export { defaultCookieOptions, useCookie } from './shared/hooks/use-cookie.js';
373
+ export { useCookiebot } from './shared/hooks/use-cookiebot.js';
373
374
  export { useCSSLink } from './shared/hooks/use-css-link.js';
374
375
  export { useDebouncedCallback } from './shared/hooks/use-debounced-callback.js';
375
376
  export { useDisclosure } from './shared/hooks/use-disclosure.js';
@@ -0,0 +1,16 @@
1
+ declare global {
2
+ interface Window {
3
+ Cookiebot?: {
4
+ consent: {
5
+ marketing: boolean;
6
+ necessary: boolean;
7
+ statistics: boolean;
8
+ };
9
+ hasResponse: boolean;
10
+ };
11
+ }
12
+ }
13
+ export declare function useCookiebot(): {
14
+ hasResponse: boolean;
15
+ isDialogOpen: boolean;
16
+ };
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { useState, useEffect } from 'react';
3
+
4
+ // https://www.cookiebot.com/en/developer/
5
+ function useCookiebot() {
6
+ const [hasResponse, setHasResponse] = useState(Boolean(window?.Cookiebot?.hasResponse));
7
+ const [isDialogOpen, setIsDialogOpen] = useState(false);
8
+ const handleDialogDisplay = () => {
9
+ setIsDialogOpen(true);
10
+ };
11
+ const handleAcceptDecline = () => {
12
+ setHasResponse(Boolean(window?.Cookiebot?.hasResponse));
13
+ setIsDialogOpen(false);
14
+ };
15
+ useEffect(() => {
16
+ window?.addEventListener('CookiebotOnDialogDisplay', handleDialogDisplay);
17
+ window?.addEventListener('CookiebotOnAccept', handleAcceptDecline);
18
+ window?.addEventListener('CookiebotOnDecline', handleAcceptDecline);
19
+ return () => {
20
+ window?.removeEventListener('CookiebotOnDialogDisplay', handleDialogDisplay);
21
+ window?.removeEventListener('CookiebotOnAccept', handleAcceptDecline);
22
+ window?.removeEventListener('CookiebotOnDecline', handleAcceptDecline);
23
+ };
24
+ }, []);
25
+ return {
26
+ hasResponse,
27
+ isDialogOpen,
28
+ };
29
+ }
30
+
31
+ export { useCookiebot };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sonic-equipment/ui",
3
- "version": "195.0.0",
3
+ "version": "197.0.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "engines": {