@transcend-io/consent-manager-ui
Version:
Transcend Consent Manager reference consent UI
51 lines (44 loc) • 1.93 kB
text/typescript
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<string, DefinedMessage>;
/** Airgap purposes data */
airgapPurposes: TrackingPurposesTypes;
}): Record<string, DefinedMessage> => {
const purposeToDescriptionKey: Record<string, DefinedMessage> = 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<string, DefinedMessage>,
),
// eslint-disable-next-line react-hooks/exhaustive-deps
[consentSelection, defaultPurposeToDescriptionKey],
);
return purposeToDescriptionKey;
};