banner: fix control config merge behaviour
This commit is contained in:
@@ -39,7 +39,7 @@
|
|||||||
| null;
|
| null;
|
||||||
dismiss?: Omit<BannerControlButton, 'framed'> | null;
|
dismiss?: Omit<BannerControlButton, 'framed'> | null;
|
||||||
/** if true, accept and decline buttons are swapped with more info */
|
/** if true, accept and decline buttons are swapped with more info */
|
||||||
swap?: boolean;
|
swap?: boolean | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultBannerControls: BannerControls = {
|
const defaultBannerControls: BannerControls = {
|
||||||
@@ -61,17 +61,34 @@
|
|||||||
|
|
||||||
const mergeBannerControls = (
|
const mergeBannerControls = (
|
||||||
defaults: BannerControls,
|
defaults: BannerControls,
|
||||||
overrides: BannerControls | null | undefined
|
overrides?: BannerControls | null
|
||||||
): BannerControls => {
|
): BannerControls => {
|
||||||
if (!overrides) return defaults;
|
if (overrides == null) return { ...defaults };
|
||||||
|
|
||||||
return {
|
const result: BannerControls = { ...defaults };
|
||||||
accept: overrides.accept ?? defaults.accept,
|
|
||||||
decline: overrides.decline ?? defaults.decline,
|
const keys: (keyof BannerControls)[] = ['accept', 'decline', 'moreInfo', 'dismiss', 'swap'];
|
||||||
moreInfo: overrides.moreInfo ?? defaults.moreInfo,
|
|
||||||
dismiss: overrides.dismiss ?? defaults.dismiss,
|
for (const key of keys) {
|
||||||
swap: overrides.swap ?? defaults.swap
|
const ov = overrides[key];
|
||||||
};
|
if (ov === null) {
|
||||||
|
// explicit disable
|
||||||
|
result[key] = null;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ov === undefined) continue; // keep default
|
||||||
|
if (key === 'swap') {
|
||||||
|
result.swap = ov as boolean;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// shallow merge individual control fields
|
||||||
|
result[key] = {
|
||||||
|
...(defaults[key] ?? {}),
|
||||||
|
...(ov as any)
|
||||||
|
} as any;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
title="Manage Cookies"
|
title="Manage Cookies"
|
||||||
controls={{
|
controls={{
|
||||||
moreInfo: { label: 'More Info', type: 'link', href: '#!' },
|
moreInfo: { label: 'More Info', type: 'link', href: '#!' },
|
||||||
|
dismiss: null,
|
||||||
swap: true
|
swap: true
|
||||||
}}
|
}}
|
||||||
onaccept={() => console.log('Cookies accepted!')}
|
onaccept={() => console.log('Cookies accepted!')}
|
||||||
|
|||||||
Reference in New Issue
Block a user