function decideArticleLogo()

in dotcom-rendering/src/components/Branding.importable.tsx [127:190]


function decideArticleLogo(
	branding: BrandingType,
	format: ArticleFormat,
	darkModeAvailable: boolean,
) {
	/** logoForDarkBackground is not required on branding,
	 *  so fallback to standard logo if not present */
	const maybeDarkLogo = branding.logoForDarkBackground ?? branding.logo;

	const useDarkColourScheme =
		(format.design === ArticleDesign.Video ||
			format.design === ArticleDesign.Audio ||
			format.design === ArticleDesign.Gallery ||
			format.design === ArticleDesign.Picture) &&
		format.theme !== ArticleSpecial.Labs;

	return (
		<picture>
			{/**
			 * For LiveBlogs, the background colour of the 'meta' section is light
			 * from desktop but dark below desktop. If the logo has a version designed for
			 * dark backgrounds, it should be shown on breakpoints below desktop.
			 */}
			{format.design === ArticleDesign.LiveBlog && (
				<source
					width={maybeDarkLogo.dimensions.width}
					height={maybeDarkLogo.dimensions.height}
					srcSet={encodeURI(maybeDarkLogo.src)}
					media={`(max-width: ${breakpoints.desktop - 1}px)`}
				/>
			)}
			{/** High contrast logo if dark mode available & dark mode logo exists for branding */}
			{darkModeAvailable && branding.logoForDarkBackground && (
				<source
					width={branding.logoForDarkBackground.dimensions.width}
					height={branding.logoForDarkBackground.dimensions.height}
					srcSet={encodeURI(branding.logoForDarkBackground.src)}
					media={'(prefers-color-scheme: dark)'}
				/>
			)}
			{/**
			 * Audio/Video articles have a dark background and need a logo designed for dark backgrounds,
			 * for everything else default to standard logo for light backgrounds
			 **/}
			{useDarkColourScheme && branding.logoForDarkBackground ? (
				<img
					width={branding.logoForDarkBackground.dimensions.width}
					height={branding.logoForDarkBackground.dimensions.height}
					src={encodeURI(branding.logoForDarkBackground.src)}
					alt={branding.sponsorName}
					css={imgStyles(branding.logo.dimensions.width)}
				/>
			) : (
				<img
					width={branding.logo.dimensions.width}
					height={branding.logo.dimensions.height}
					src={encodeURI(branding.logo.src)}
					alt={branding.sponsorName}
					css={imgStyles(branding.logo.dimensions.width)}
				/>
			)}
		</picture>
	);
}