/** * External dependencies */ import type { AdvancedSettings, CookieSettings, TimeValue, } from '@nelio/popups/types'; /** * Internal dependencies */ import { DEFAULT_POPUP_METAS } from '../defaults'; import { extract } from '../functions'; export function parseAdvancedSettings( value?: Partial< AdvancedSettings > ): AdvancedSettings { const def = DEFAULT_POPUP_METAS.advanced; if ( ! value ) { return def; } return { isBodyScrollLocked: def.isBodyScrollLocked, closeOnEscPressed: def.closeOnEscPressed, closeOnOverlayClicked: def.closeOnOverlayClicked, ...value, popupOpenedCookie: parseCookieSettings( def.popupOpenedCookie, value.popupOpenedCookie ), }; } // ======= // HELPERS // ======= function parseCookieSettings( def: CookieSettings, value: Partial< CookieSettings > | undefined ): CookieSettings { if ( ! value ) { return def; } if ( ! value.isEnabled ) { return { isEnabled: false, }; } if ( value.isSession ) { return { isEnabled: true, name: value.name ?? '', isSession: true, }; } const time: TimeValue = { unit: 'days', value: 2 }; const expiration: TimeValue = false === value.isSession ? value.expiration ?? time : time; return { isEnabled: true, name: value.name ?? '', isSession: false, expiration: { ...extract( 'unit', time, expiration ), ...extract( 'value', time, expiration ), }, }; }