diff --git a/packages/pdf/src/templates/azurill/AzurillPage.tsx b/packages/pdf/src/templates/azurill/AzurillPage.tsx index 65719e2a4..de189063d 100644 --- a/packages/pdf/src/templates/azurill/AzurillPage.tsx +++ b/packages/pdf/src/templates/azurill/AzurillPage.tsx @@ -11,13 +11,19 @@ import { Fragment, useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight, resolvePlacementColor } from "../shared/styles"; @@ -108,24 +114,9 @@ const Header = ({ styles }: AzurillHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/bronzor/BronzorPage.tsx b/packages/pdf/src/templates/bronzor/BronzorPage.tsx index 82b27211d..b4f679468 100644 --- a/packages/pdf/src/templates/bronzor/BronzorPage.tsx +++ b/packages/pdf/src/templates/bronzor/BronzorPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -105,24 +111,9 @@ const Header = ({ styles }: BronzorHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/chikorita/ChikoritaPage.tsx b/packages/pdf/src/templates/chikorita/ChikoritaPage.tsx index 71a6e5dfd..42f290f65 100644 --- a/packages/pdf/src/templates/chikorita/ChikoritaPage.tsx +++ b/packages/pdf/src/templates/chikorita/ChikoritaPage.tsx @@ -5,13 +5,19 @@ import { Fragment, useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight, resolvePlacementColor } from "../shared/styles"; @@ -111,24 +117,9 @@ const Header = ({ styles }: ChikoritaHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + diff --git a/packages/pdf/src/templates/ditgar/DitgarPage.tsx b/packages/pdf/src/templates/ditgar/DitgarPage.tsx index 8e6161deb..c78b3ae50 100644 --- a/packages/pdf/src/templates/ditgar/DitgarPage.tsx +++ b/packages/pdf/src/templates/ditgar/DitgarPage.tsx @@ -6,14 +6,20 @@ import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; import { getPrimaryTint } from "../shared/color-helpers"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { getFeaturedSummaryLayout } from "../shared/featured-summary"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight, resolvePlacementColor } from "../shared/styles"; @@ -124,24 +130,25 @@ const Header = ({ styles, colors }: DitgarHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/gengar/GengarPage.tsx b/packages/pdf/src/templates/gengar/GengarPage.tsx index c38989abd..ae8aa0a05 100644 --- a/packages/pdf/src/templates/gengar/GengarPage.tsx +++ b/packages/pdf/src/templates/gengar/GengarPage.tsx @@ -6,14 +6,20 @@ import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; import { getPrimaryTint } from "../shared/color-helpers"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { getFeaturedSummaryLayout } from "../shared/featured-summary"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight, resolvePlacementColor } from "../shared/styles"; @@ -121,24 +127,24 @@ const Header = ({ styles, colors }: GengarHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/kakuna/KakunaPage.tsx b/packages/pdf/src/templates/kakuna/KakunaPage.tsx index 1ce94a747..585883c78 100644 --- a/packages/pdf/src/templates/kakuna/KakunaPage.tsx +++ b/packages/pdf/src/templates/kakuna/KakunaPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -87,24 +93,9 @@ const Header = ({ styles }: KakunaHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/lapras/LaprasPage.tsx b/packages/pdf/src/templates/lapras/LaprasPage.tsx index d5904d0f3..a2de62405 100644 --- a/packages/pdf/src/templates/lapras/LaprasPage.tsx +++ b/packages/pdf/src/templates/lapras/LaprasPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -86,24 +92,9 @@ const Header = ({ styles }: LaprasHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/leafish/LeafishPage.tsx b/packages/pdf/src/templates/leafish/LeafishPage.tsx index 05c887606..094b75143 100644 --- a/packages/pdf/src/templates/leafish/LeafishPage.tsx +++ b/packages/pdf/src/templates/leafish/LeafishPage.tsx @@ -6,13 +6,19 @@ import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; import { getPrimaryTint as getPrimaryAlpha } from "../shared/color-helpers"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -107,24 +113,9 @@ const Header = ({ styles }: LeafishHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/meowth/MeowthPage.tsx b/packages/pdf/src/templates/meowth/MeowthPage.tsx index 19557388a..f48d19916 100644 --- a/packages/pdf/src/templates/meowth/MeowthPage.tsx +++ b/packages/pdf/src/templates/meowth/MeowthPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -89,24 +95,9 @@ const Header = ({ styles }: MeowthHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/onyx/OnyxPage.tsx b/packages/pdf/src/templates/onyx/OnyxPage.tsx index 43a19030d..9978febb0 100644 --- a/packages/pdf/src/templates/onyx/OnyxPage.tsx +++ b/packages/pdf/src/templates/onyx/OnyxPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -86,24 +92,9 @@ const Header = ({ styles }: OnyxHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/pikachu/PikachuPage.tsx b/packages/pdf/src/templates/pikachu/PikachuPage.tsx index 0d07e742f..5806b3400 100644 --- a/packages/pdf/src/templates/pikachu/PikachuPage.tsx +++ b/packages/pdf/src/templates/pikachu/PikachuPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight, resolvePlacementColor } from "../shared/styles"; @@ -114,24 +120,24 @@ const Header = ({ styles, colors }: PikachuHeaderProps) => { - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} - {basics.location && ( - - - {basics.location} - - )} + + + { if (basics.email) { contactItems.push({ id: "email", - content: ( - - - {basics.email} - - ), + content: , }); } - if (basics.phone) { contactItems.push({ id: "phone", - content: ( - - - {basics.phone} - - ), + content: , }); } - if (basics.location) { contactItems.push({ id: "location", - content: ( - - - {basics.location} - - ), + content: , }); } diff --git a/packages/pdf/src/templates/scizor/ScizorPage.tsx b/packages/pdf/src/templates/scizor/ScizorPage.tsx index f3e5f72b9..55d996ffb 100644 --- a/packages/pdf/src/templates/scizor/ScizorPage.tsx +++ b/packages/pdf/src/templates/scizor/ScizorPage.tsx @@ -5,13 +5,19 @@ import { useMemo } from "react"; import { rgbaStringToHex } from "@reactive-resume/utils/color"; import { Image, Page, StyleSheet, View } from "#react-pdf-renderer"; import { useRender } from "../../context"; -import { CustomFieldContactItem, WebsiteContactItem } from "../shared/contact-item"; +import { + CustomFieldContactItem, + EmailContactItem, + LocationContactItem, + PhoneContactItem, + WebsiteContactItem, +} from "../shared/contact-item"; import { TemplateProvider } from "../shared/context"; import { filterSections } from "../shared/filtering"; import { getTemplateMetrics } from "../shared/metrics"; import { getTemplatePageMinHeightStyle, getTemplatePageSize } from "../shared/page-size"; import { hasTemplatePicture } from "../shared/picture"; -import { Heading, Icon, Link, Text } from "../shared/primitives"; +import { Heading, Text } from "../shared/primitives"; import { createRtlStyleHelpers } from "../shared/rtl"; import { Section } from "../shared/sections"; import { composeStyles, headerNameLineHeight } from "../shared/styles"; @@ -77,24 +83,9 @@ const Header = ({ styles }: ScizorHeaderProps) => { {basics.headline && {basics.headline}} - {basics.location && ( - - - {basics.location} - - )} - {basics.email && ( - - - {basics.email} - - )} - {basics.phone && ( - - - {basics.phone} - - )} + + + {basics.customFields.map((field) => ( diff --git a/packages/pdf/src/templates/shared/contact-item.tsx b/packages/pdf/src/templates/shared/contact-item.tsx index 1ba94b5dd..15ee4c637 100644 --- a/packages/pdf/src/templates/shared/contact-item.tsx +++ b/packages/pdf/src/templates/shared/contact-item.tsx @@ -5,13 +5,13 @@ import { View } from "#react-pdf-renderer"; import { getCustomFieldLinkUrl, getWebsiteDisplayText } from "./contact"; import { Icon, Link, Text } from "./primitives"; +type ContactStyle = Style | Style[]; + type WebsiteDisplay = { url: string; label?: string | undefined; }; -type ContactStyle = Style | Style[]; - type WebsiteContactItemProps = { website: WebsiteDisplay; style?: ContactStyle; @@ -56,3 +56,62 @@ export const CustomFieldContactItem = ({ field, style, textStyle, iconColor }: C return {children}; }; + +type EmailContactItemProps = { + email: string; + style?: ContactStyle; + textStyle?: ContactStyle; + iconColor?: string; + /** Override icon; defaults to "envelope". ditgar uses "at". */ + iconName?: IconName; +}; + +export const EmailContactItem = ({ + email, + style, + textStyle, + iconColor, + iconName = "envelope", +}: EmailContactItemProps) => { + if (!email) return null; + return ( + + + {email} + + ); +}; + +type PhoneContactItemProps = { + phone: string; + style?: ContactStyle; + textStyle?: ContactStyle; + iconColor?: string; +}; + +export const PhoneContactItem = ({ phone, style, textStyle, iconColor }: PhoneContactItemProps) => { + if (!phone) return null; + return ( + + + {phone} + + ); +}; + +type LocationContactItemProps = { + location: string; + style?: ContactStyle; + textStyle?: ContactStyle; + iconColor?: string; +}; + +export const LocationContactItem = ({ location, style, textStyle, iconColor }: LocationContactItemProps) => { + if (!location) return null; + return ( + + + {location} + + ); +};