import { css } from '@emotion/css'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material'; import { alpha } from '@mui/material'; import { Theme } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import { useMemo } from 'react'; import Markdown from '@/components/shared/Markdown'; import { useAppSelector } from '@/store/hooks'; import DataDisplay from '@/templates/shared/DataDisplay'; import { formatDateString } from '@/utils/date'; import getProfileIcon from '@/utils/getProfileIcon'; import { getContrastColor } from '@/utils/styles'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; export const MastheadSidebar: React.FC = () => { const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format')); const { name, headline, photo, email, phone, birthdate, website, location, profiles } = useAppSelector( (state) => state.resume.basics ); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const contrast = useMemo(() => getContrastColor(theme.primary), [theme.primary]); const iconColor = useMemo(() => (contrast === 'dark' ? theme.text : theme.background), [theme, contrast]); return (
{photo.visible && !isEmpty(photo.url) && ( {name} )}

{name}

{headline}

} className="!gap-2 text-xs"> {formatLocation(location)} } className="!gap-2 text-xs"> {formatDateString(birthdate, dateFormat)} } className="!gap-2 text-xs" link={`mailto:${email}`}> {email} } className="!gap-2 text-xs" link={`tel:${phone}`}> {phone} } link={website && addHttp(website)} className="!gap-2 text-xs"> {website} {profiles.map(({ id, username, network, url }) => ( {username} ))}
); }; export const MastheadMain: React.FC = () => { const primaryColor: string = useAppSelector((state) => get(state.resume, 'metadata.theme.primary')); const backgroundColor: string = useMemo(() => alpha(primaryColor, 0.15), [primaryColor]); const { summary } = useAppSelector((state) => state.resume.basics); return (
{summary}
); };