import type { TrackingPurposesTypes } from '@transcend-io/airgap.js-types'; import { ConsentSelection } from '../types'; import { useMemo } from 'preact/hooks'; import { DefinedMessage } from '@transcend-io/internationalization'; const PURPOSE_MESSAGE_PREFIX = 'purpose.trackingType'; export const useGetPurposeDescriptionKeys = ({ consentSelection, defaultPurposeToDescriptionKey, airgapPurposes, }: { /** The configured airgap purpose types */ consentSelection: ConsentSelection; /** The lookup of messages for default purpose types */ defaultPurposeToDescriptionKey: Record; /** Airgap purposes data */ airgapPurposes: TrackingPurposesTypes; }): Record => { const purposeToDescriptionKey: Record = useMemo( () => // hard-coding Essential since it's not provided by consentSelection [...Object.keys(consentSelection ?? {}), 'Essential'].reduce( (allMessages, purposeType) => { // making sure default message for Essential is not overwritten // by missing Essential message from airgap if (airgapPurposes[purposeType]?.description) { const purposeMessageDescriptionId = `${PURPOSE_MESSAGE_PREFIX}.${purposeType}.description`; return { ...allMessages, [purposeType]: { id: purposeMessageDescriptionId, defaultMessage: airgapPurposes[purposeType]?.description, description: `Translatable description for purpose '${purposeType}'`, } as DefinedMessage, }; } return { ...allMessages }; }, defaultPurposeToDescriptionKey as Record, ), // eslint-disable-next-line react-hooks/exhaustive-deps [consentSelection, defaultPurposeToDescriptionKey], ); return purposeToDescriptionKey; };