@transcend-io/consent-manager-ui
Version:
Transcend Consent Manager reference consent UI
45 lines (39 loc) • 1.53 kB
text/typescript
import { ConsentSelection } from '../types';
import { useMemo } from 'preact/hooks';
import { DefinedMessage } from '@transcend-io/internationalization';
const PURPOSE_MESSAGE_PREFIX = 'purpose.trackingType';
export const useGetInvertedPurposeMessageKeys = ({
consentSelection,
defaultPurposeToMessageKey,
}: {
/** The configured airgap purpose types */
consentSelection: ConsentSelection;
/** The lookup of messages for default purpose types */
defaultPurposeToMessageKey: Record<string, DefinedMessage>;
}): Record<string, DefinedMessage> => {
const purposeToMessageKey: Record<string, DefinedMessage> = useMemo(
() =>
// the purpose type is unique for the bundle
[...Object.keys(consentSelection ?? {}), 'Essential'].reduce(
(allMessages, purposeType) => {
if (allMessages[purposeType]) {
return allMessages;
}
const purposeMessageLabel = `${PURPOSE_MESSAGE_PREFIX}.${purposeType}.title`;
return {
...allMessages,
[purposeType]: {
id: purposeMessageLabel,
defaultMessage:
defaultPurposeToMessageKey[purposeType]?.defaultMessage ||
purposeType,
description: `Translatable name for purpose '${purposeType}'`,
} as DefinedMessage,
};
},
defaultPurposeToMessageKey as Record<string, DefinedMessage>,
),
[consentSelection, defaultPurposeToMessageKey],
);
return purposeToMessageKey;
};