From 9557ae85c04677a8e245f29829e886b083a53759 Mon Sep 17 00:00:00 2001 From: Terje Karlsen Date: Mon, 14 Apr 2025 12:55:57 +0200 Subject: [PATCH 1/8] Fikser issues med navning etc i ContentMapper og FragmentComponent --- Dockerfile | 4 ++-- packages/nextjs/playwright/screenshot.spec.ts | 2 +- packages/nextjs/src/components/ContentMapper.tsx | 2 +- packages/nextjs/src/components/FragmentComponent.tsx | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7d96330b3d..d3ac1fe126 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM node:20-bullseye-slim -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs WORKDIR /app diff --git a/packages/nextjs/playwright/screenshot.spec.ts b/packages/nextjs/playwright/screenshot.spec.ts index cf7b9e89fd..c5d55a195c 100644 --- a/packages/nextjs/playwright/screenshot.spec.ts +++ b/packages/nextjs/playwright/screenshot.spec.ts @@ -28,7 +28,7 @@ for (const story of stories) { } ); } catch (error) { - return; + throw new Error(`Error taking screenshot for ${story.title} ${story.name}: ${error}`); } }); } diff --git a/packages/nextjs/src/components/ContentMapper.tsx b/packages/nextjs/src/components/ContentMapper.tsx index 31065a4f72..c3f4984404 100644 --- a/packages/nextjs/src/components/ContentMapper.tsx +++ b/packages/nextjs/src/components/ContentMapper.tsx @@ -94,7 +94,7 @@ type Props = { }; export const ContentMapper = ({ content }: Props) => { - const Component = contentToReactComponent[content.type] || ContentTypeNotSupportedPage; + const Component = contentToReactComponent[content.type] ?? ContentTypeNotSupportedPage; // @ts-ignore return ; diff --git a/packages/nextjs/src/components/FragmentComponent.tsx b/packages/nextjs/src/components/FragmentComponent.tsx index 558ae9218e..1f73c8055c 100644 --- a/packages/nextjs/src/components/FragmentComponent.tsx +++ b/packages/nextjs/src/components/FragmentComponent.tsx @@ -10,7 +10,7 @@ type Props = { editorProps?: ComponentEditorProps; }; -const _FragmentComponent = ({ componentProps, pageProps }: Props) => { +const NestedFragmentComponent = ({ componentProps, pageProps }: Props) => { if (!componentProps.fragment?.type) { return ( - <_FragmentComponent pageProps={pageProps} componentProps={componentProps} /> + ); } - return <_FragmentComponent pageProps={pageProps} componentProps={componentProps} />; + return ; }; From ad197fd0d1dd6b9d32c1bcd9703c2f290af9a987 Mon Sep 17 00:00:00 2001 From: Terje Karlsen Date: Mon, 14 Apr 2025 13:19:29 +0200 Subject: [PATCH 2/8] Bytter ut diverse || med ?? --- packages/nextjs/src/components/PageBase.tsx | 2 +- .../src/components/_common/accordion/Accordion.tsx | 2 +- .../alternativeAudience/AlternativeAudience.tsx | 2 +- .../src/components/_common/calculator/Calculator.tsx | 4 ++-- .../calculator/calculatorField/CalculatorField.tsx | 4 ++-- .../components/_common/card/MicroCard/MicroCards.tsx | 4 ++-- .../nextjs/src/components/_common/card/card-utils.ts | 6 +++--- .../_common/contact-option/CallOption/CallOption.tsx | 6 +++--- .../_common/contact-option/ChatOption/ChatOption.tsx | 4 ++-- .../_common/contact-option/DefaultOption.tsx | 10 +++++----- .../_common/contact-option/WriteOption/WriteOption.tsx | 6 +++--- .../openingInfo/helpers/processOpeningHours.ts | 2 +- .../components/_common/content-list/ContentList.tsx | 2 +- 13 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/nextjs/src/components/PageBase.tsx b/packages/nextjs/src/components/PageBase.tsx index f165671485..94396de9f9 100644 --- a/packages/nextjs/src/components/PageBase.tsx +++ b/packages/nextjs/src/components/PageBase.tsx @@ -12,7 +12,7 @@ export type PageProps = { export const PageBase = (props: PageProps) => { const content = - props?.content || makeErrorProps('www.nav.no', 'Ukjent feil - kunne ikke laste innhold'); + props?.content ?? makeErrorProps('www.nav.no', 'Ukjent feil - kunne ikke laste innhold'); return ( diff --git a/packages/nextjs/src/components/_common/accordion/Accordion.tsx b/packages/nextjs/src/components/_common/accordion/Accordion.tsx index 1886e1ba4b..8e00cae35e 100644 --- a/packages/nextjs/src/components/_common/accordion/Accordion.tsx +++ b/packages/nextjs/src/components/_common/accordion/Accordion.tsx @@ -60,7 +60,7 @@ export const Accordion = ({ accordion }: AccordionProps) => { const isValid = validatePanel(item); return ( handleOpenChange(open, item.title, index)} diff --git a/packages/nextjs/src/components/_common/alternativeAudience/AlternativeAudience.tsx b/packages/nextjs/src/components/_common/alternativeAudience/AlternativeAudience.tsx index f3a772d2da..566df79706 100644 --- a/packages/nextjs/src/components/_common/alternativeAudience/AlternativeAudience.tsx +++ b/packages/nextjs/src/components/_common/alternativeAudience/AlternativeAudience.tsx @@ -92,7 +92,7 @@ export const AlternativeAudience = () => { {getRelatedString('relatedAudience').replace('{name}', productName)}{' '} {audienceLinks.map((link, index) => ( - + {link.title} diff --git a/packages/nextjs/src/components/_common/calculator/Calculator.tsx b/packages/nextjs/src/components/_common/calculator/Calculator.tsx index 13c14342a5..d0d20f86d9 100644 --- a/packages/nextjs/src/components/_common/calculator/Calculator.tsx +++ b/packages/nextjs/src/components/_common/calculator/Calculator.tsx @@ -50,7 +50,7 @@ const populateDefaultValues = (fields: CalculatorFieldData[]) => { return collection; } - const fieldWithUserInput = inputField || dropdownField; + const fieldWithUserInput = inputField ?? dropdownField; if (fieldWithUserInput) { const { variableName } = fieldWithUserInput; @@ -139,7 +139,7 @@ export const Calculator = ({ header, calculatorData }: Props) => { {fields .filter((field) => !field.globalValue) .map((field) => { - const fieldKey = (field.dropdownField?.variableName || + const fieldKey = (field.dropdownField?.variableName ?? field.inputField?.variableName) as string; return ( diff --git a/packages/nextjs/src/components/_common/calculator/calculatorField/CalculatorField.tsx b/packages/nextjs/src/components/_common/calculator/calculatorField/CalculatorField.tsx index 65ff85a8d2..e87869c3bd 100644 --- a/packages/nextjs/src/components/_common/calculator/calculatorField/CalculatorField.tsx +++ b/packages/nextjs/src/components/_common/calculator/calculatorField/CalculatorField.tsx @@ -33,7 +33,7 @@ export const CalculatorField = (props: Props) => { name={field.inputField.variableName} label={field.inputField.label} type="number" - value={value?.toString() || ''} + value={value?.toString() ?? ''} onChange={(e) => onChange(field.inputField.variableName, e.currentTarget.value)} autoComplete={autoComplete ? 'on' : 'off'} /> @@ -45,7 +45,7 @@ export const CalculatorField = (props: Props) => { onChange={(e) => onChange(field.dropdownField.variableName, e.currentTarget.value) } - value={value || ''} + value={value ?? ''} autoComplete={autoComplete ? 'on' : 'off'} > {field.dropdownField.optionItems.map((option) => ( diff --git a/packages/nextjs/src/components/_common/card/MicroCard/MicroCards.tsx b/packages/nextjs/src/components/_common/card/MicroCard/MicroCards.tsx index e8acb448f6..d3fb630abe 100644 --- a/packages/nextjs/src/components/_common/card/MicroCard/MicroCards.tsx +++ b/packages/nextjs/src/components/_common/card/MicroCard/MicroCards.tsx @@ -36,8 +36,8 @@ export const MicroCards = ({ header, card_list }: Props) => { )}
- {cardProps.map((card, index) => ( - + {cardProps.map((card) => ( + ))}
diff --git a/packages/nextjs/src/components/_common/card/card-utils.ts b/packages/nextjs/src/components/_common/card/card-utils.ts index fb514fc844..8a50ed52ca 100644 --- a/packages/nextjs/src/components/_common/card/card-utils.ts +++ b/packages/nextjs/src/components/_common/card/card-utils.ts @@ -51,8 +51,8 @@ export const getCardProps = ( const { title, ingress, illustration, externalProductUrl } = data; const cardType = cardTypeMap[type]; - const cardUrl = externalProductUrl || _path; - const cardTitle = title || displayName; + const cardUrl = externalProductUrl ?? _path; + const cardTitle = title ?? displayName; const link = { url: cardUrl, @@ -60,7 +60,7 @@ export const getCardProps = ( }; const tagline = getContentTagline(targetContent, language); - const description = ingressOverride || ingress; + const description = ingressOverride ?? ingress; return { type: cardType, diff --git a/packages/nextjs/src/components/_common/contact-option/CallOption/CallOption.tsx b/packages/nextjs/src/components/_common/contact-option/CallOption/CallOption.tsx index 0fb0ab2fc0..fd47f3a3f4 100644 --- a/packages/nextjs/src/components/_common/contact-option/CallOption/CallOption.tsx +++ b/packages/nextjs/src/components/_common/contact-option/CallOption/CallOption.tsx @@ -79,7 +79,7 @@ export const CallOption = ({ analyticsComponent={'Kontakt-oss kanal'} > - {title || callTranslations.title} + {title ?? callTranslations.title} {alertText && ( @@ -89,7 +89,7 @@ export const CallOption = ({ )} {!alertText && regularOpeningHours && specialOpeningHours && ( @@ -107,7 +107,7 @@ export const CallOption = ({ {sharedTranslations.seeMoreOptions} )} - + ); }; diff --git a/packages/nextjs/src/components/_common/contact-option/ChatOption/ChatOption.tsx b/packages/nextjs/src/components/_common/contact-option/ChatOption/ChatOption.tsx index f1d07866ca..7b6efaa64d 100644 --- a/packages/nextjs/src/components/_common/contact-option/ChatOption/ChatOption.tsx +++ b/packages/nextjs/src/components/_common/contact-option/ChatOption/ChatOption.tsx @@ -40,7 +40,7 @@ export const ChatOption = (props: ChatData) => { className={sharedStyle.link} > - {title || translations.title} + {title ?? translations.title} {alertText && ( @@ -49,7 +49,7 @@ export const ChatOption = (props: ChatData) => { )} - + {!alertText && ( { ): Partial> & { href: string } => { if (channel === 'write') { return { - href: url || Config.urls.skrivTilOss, + href: url ?? Config.urls.skrivTilOss, }; } @@ -72,7 +72,7 @@ export const DefaultOption = (props: Props) => { if (channel === 'custom') { return { - href: url || '#', + href: url ?? '#', target: '_blank', analyticsEvent: AnalyticsEvents.NAVIGATION, }; @@ -81,12 +81,12 @@ export const DefaultOption = (props: Props) => { return { href: '#' }; }; - const titleActual = title || (channel !== 'custom' ? getTranslations(channel).title : null); + const titleActual = title ?? (channel !== 'custom' ? getTranslations(channel).title : null); const ingressActual = - ingress || (channel !== 'custom' ? getTranslations(channel).ingress : null); + ingress ?? (channel !== 'custom' ? getTranslations(channel).ingress : null); - const iconName = icon || 'place'; + const iconName = icon ?? 'place'; return (
diff --git a/packages/nextjs/src/components/_common/contact-option/WriteOption/WriteOption.tsx b/packages/nextjs/src/components/_common/contact-option/WriteOption/WriteOption.tsx index 43af8303f2..ebff402ee3 100644 --- a/packages/nextjs/src/components/_common/contact-option/WriteOption/WriteOption.tsx +++ b/packages/nextjs/src/components/_common/contact-option/WriteOption/WriteOption.tsx @@ -25,13 +25,13 @@ export const WriteOption = ({ ingress, url, alertText, title }: Props) => {
- {title || translations.title} + {title ?? translations.title} {alertText && ( @@ -40,7 +40,7 @@ export const WriteOption = ({ ingress, url, alertText, title }: Props) => { )} - +
diff --git a/packages/nextjs/src/components/_common/contact-option/openingInfo/helpers/processOpeningHours.ts b/packages/nextjs/src/components/_common/contact-option/openingInfo/helpers/processOpeningHours.ts index 0bc74de43a..b3ca67b24e 100644 --- a/packages/nextjs/src/components/_common/contact-option/openingInfo/helpers/processOpeningHours.ts +++ b/packages/nextjs/src/components/_common/contact-option/openingInfo/helpers/processOpeningHours.ts @@ -61,7 +61,7 @@ export const processOpeningHours = ( const dayToCheck = now.add(i, 'day'); const openingHour = - getSpecialOpeningHour(specialOpeningHours, dayToCheck) || + getSpecialOpeningHour(specialOpeningHours, dayToCheck) ?? getRegularOpeningHour(regularOpeningHours, dayToCheck); openingHours.push(transformOpeningHour({ openingHour, day: dayToCheck })); diff --git a/packages/nextjs/src/components/_common/content-list/ContentList.tsx b/packages/nextjs/src/components/_common/content-list/ContentList.tsx index af419cd4b5..70ac8615a4 100644 --- a/packages/nextjs/src/components/_common/content-list/ContentList.tsx +++ b/packages/nextjs/src/components/_common/content-list/ContentList.tsx @@ -39,7 +39,7 @@ export const ContentList = ({ const lenkeData = sectionContents.reduce((acc, scContent) => { const url = getUrlFromContent(scContent); - const text = scContent.data?.title || scContent.displayName; + const text = scContent.data?.title ?? scContent.displayName; if (url && text) { acc.push({ From 8e1f757f3c901a87977de443d2a4f8479d7cd33a Mon Sep 17 00:00:00 2001 From: Terje Karlsen Date: Mon, 14 Apr 2025 14:39:20 +0200 Subject: [PATCH 3/8] Endrer logical operator --- packages/nextjs/src/components/PageWrapper.tsx | 2 +- .../nextjs/src/components/_common/button/Button.tsx | 2 +- .../components/_common/content-list/ContentList.tsx | 2 +- .../src/components/_common/expandable/Expandable.tsx | 4 ++-- .../nextjs/src/components/_common/headers/Header.tsx | 11 ++++++++--- .../headers/featuredHeader/FeaturedHeader.tsx | 2 +- .../headers/generalPageHeader/GeneralPageHeader.tsx | 2 +- .../generalPageHeader/GeneralPageHeaderTagLine.tsx | 4 ++-- .../headers/themedPageHeader/ThemedPageHeader.tsx | 4 ++-- .../src/components/_common/image/NextImage.tsx | 2 +- .../nextjs/src/components/_common/image/XpImage.tsx | 2 +- .../components/_common/lenke/lenkeBase/LenkeBase.tsx | 6 +++--- .../lenke/lenkeStandalone/LenkeStandalone.tsx | 2 +- .../components/_common/metatags/HeadWithMetatags.tsx | 4 ++-- .../SectionNavigation/SectionNavigation.tsx | 2 +- .../src/components/_common/parsedHtml/ParsedHtml.tsx | 2 +- .../components/_common/payoutDates/PayoutDates.tsx | 2 +- .../_common/press-landing/PressTopSection.tsx | 2 +- .../_common/qbrick-video/utils/videoHelpers.ts | 4 ++-- .../_common/relatedSituations/RelatedSituations.tsx | 12 +++++------- .../_common/section-navigation/SectionNavigation.tsx | 2 +- .../_common/user-tests/variants/UserTestVariant.tsx | 4 ++-- .../auto-refresh-disable/AutoReloadDisableHack.tsx | 2 +- .../references-info/result/ReferencesInfoResult.tsx | 2 +- .../content-item/SiteInfoPublishInfoItem.tsx | 2 +- .../version-history/selector/VersionSelector.tsx | 4 ++-- .../published-datetime/VersionSelectorPublished.tsx | 2 +- .../version-history/selector/versionSelectorUtils.ts | 4 ++-- .../front-page/FrontPageAreaNavigation.tsx | 2 +- .../src/components/macros/button/MacroButton.tsx | 4 ++-- .../MacroChevronLinkInternal.tsx | 2 +- .../header-with-anchor/MacroHeaderWithAnchor.tsx | 6 +++--- .../src/components/macros/video/MacroVideo.tsx | 2 +- .../src/components/pages/error-page/ErrorPage.tsx | 2 +- .../pages/forms-overview-page/FormsOverviewPage.tsx | 2 +- .../pages/global-values-page/GlobalValuesPage.tsx | 2 +- .../components/messages/GVMessages.tsx | 2 +- .../office-details/phonePoster/PhonePoster.tsx | 4 ++-- .../pages/office-page/office-details/utils.ts | 2 +- .../MainArticleChapterNavigationLegacyPart.tsx | 4 ++-- .../parts/_legacy/main-article/komponenter/Bilde.tsx | 2 +- .../main-article/komponenter/SosialeMedier.tsx | 2 +- .../_legacy/main-panels/MainPanelsLegacyPart.tsx | 4 ++-- .../parts/_legacy/menu-list/MenuListLegacyPart.tsx | 2 +- .../office-information/reception/OpeningHours.tsx | 2 +- .../office-information/reception/Reception.tsx | 2 +- .../_legacy/page-heading/PageHeadingLegacyPart.tsx | 2 +- .../parts/_legacy/page-list/PageListLegacyPart.tsx | 2 +- .../src/components/parts/alert-box/AlertBoxPart.tsx | 2 +- .../AreapageSituationCardPart.tsx | 2 +- .../parts/contact-option/ContactOptionPart.tsx | 4 ++-- .../parts/contact-step-page/ContactStepPage.tsx | 0 .../parts/filters-menu/FiltersMenuPart.tsx | 4 ++-- .../parts/frontpage-contact/FrontpageContactPart.tsx | 10 +++++----- .../frontpage-shortcuts/FrontpageShortcutsPart.tsx | 6 +++--- .../src/components/parts/header/HeaderPart.tsx | 2 +- packages/nextjs/src/pages/_document.tsx | 2 +- packages/nextjs/src/pages/_error.tsx | 4 ++-- packages/nextjs/src/pages/api/rss.ts | 2 +- packages/nextjs/src/pages/api/sitemap.ts | 2 +- .../src/pages/archive/[[...archiveRouter]].tsx | 2 +- .../nextjs/src/pages/draft/[[...draftRouter]].tsx | 2 +- packages/nextjs/src/store/slices/filteredContent.ts | 12 ++++++------ packages/nextjs/src/types/component-props/_mixins.ts | 2 +- packages/nextjs/src/utils/datetime.ts | 2 +- packages/nextjs/src/utils/decorator-utils.ts | 6 +++--- .../nextjs/src/utils/fetch/fetch-cache-content.ts | 2 +- packages/nextjs/src/utils/languages.ts | 2 +- packages/nextjs/src/utils/links-from-content.ts | 2 +- packages/nextjs/src/utils/make-error-props.ts | 2 +- packages/nextjs/src/utils/sort.ts | 2 +- packages/server/src/cache/image-cache-handler.ts | 2 +- .../server/src/cache/revalidator-proxy-heartbeat.ts | 2 +- packages/server/src/server.ts | 2 +- packages/shared/src/decorator-utils-serverside.ts | 2 +- 75 files changed, 117 insertions(+), 114 deletions(-) create mode 100644 packages/nextjs/src/components/parts/contact-step-page/ContactStepPage.tsx diff --git a/packages/nextjs/src/components/PageWrapper.tsx b/packages/nextjs/src/components/PageWrapper.tsx index 188ff426cd..2a6f314f81 100644 --- a/packages/nextjs/src/components/PageWrapper.tsx +++ b/packages/nextjs/src/components/PageWrapper.tsx @@ -111,7 +111,7 @@ export const PageWrapper = (props: Props) => { ); } - document.documentElement.lang = content.language || 'no'; + document.documentElement.lang = content.language ?? 'no'; }, [content, router]); return ( diff --git a/packages/nextjs/src/components/_common/button/Button.tsx b/packages/nextjs/src/components/_common/button/Button.tsx index c4bcf5f930..1a9d867cf4 100644 --- a/packages/nextjs/src/components/_common/button/Button.tsx +++ b/packages/nextjs/src/components/_common/button/Button.tsx @@ -39,7 +39,7 @@ export const Button = ({ return ( { if (!href) { diff --git a/packages/nextjs/src/components/_common/content-list/ContentList.tsx b/packages/nextjs/src/components/_common/content-list/ContentList.tsx index 70ac8615a4..ed7f06c2c5 100644 --- a/packages/nextjs/src/components/_common/content-list/ContentList.tsx +++ b/packages/nextjs/src/components/_common/content-list/ContentList.tsx @@ -61,7 +61,7 @@ export const ContentList = ({ return ( diff --git a/packages/nextjs/src/components/_common/expandable/Expandable.tsx b/packages/nextjs/src/components/_common/expandable/Expandable.tsx index 6b1a3076bf..ff8395b03b 100644 --- a/packages/nextjs/src/components/_common/expandable/Expandable.tsx +++ b/packages/nextjs/src/components/_common/expandable/Expandable.tsx @@ -46,7 +46,7 @@ export const Expandable = ({ handleStickyScrollOffset(isOpening, accordionRef.current); logAnalyticsEvent(isOpening ? AnalyticsEvents.ACC_EXPAND : AnalyticsEvents.ACC_COLLAPSE, { tittel, - opprinnelse: analyticsOriginTag || 'utvidbar tekst', + opprinnelse: analyticsOriginTag ?? 'utvidbar tekst', komponent: 'Expandable', målgruppe: context, innholdstype: innholdsTypeMap[contentProps.type], @@ -80,7 +80,7 @@ export const Expandable = ({ ref={accordionRef} onToggle={(isOpen) => toggleExpandCollapse(isOpen, title)} open={isOpen} - aria-label={ariaLabel || title} + aria-label={ariaLabel ?? title} tabIndex={-1} > diff --git a/packages/nextjs/src/components/_common/headers/Header.tsx b/packages/nextjs/src/components/_common/headers/Header.tsx index 64385533e8..b2d548827c 100644 --- a/packages/nextjs/src/components/_common/headers/Header.tsx +++ b/packages/nextjs/src/components/_common/headers/Header.tsx @@ -16,10 +16,15 @@ type Props = { export const Header = ({ children, size, level, anchorId, className }: Props) => { const anchor = anchorId ? (anchorId.startsWith('#') ? anchorId : `#${anchorId}`) : undefined; - const fallbackSizeByLevel = levelToSize[level] || 'large'; + const fallbackSizeByLevel = levelToSize[level] ?? 'large'; - return ( - + return ( + {anchor && (level === '2' || level === '3') ? ( {children} diff --git a/packages/nextjs/src/components/_common/headers/featuredHeader/FeaturedHeader.tsx b/packages/nextjs/src/components/_common/headers/featuredHeader/FeaturedHeader.tsx index c756be9933..804beb25bc 100644 --- a/packages/nextjs/src/components/_common/headers/featuredHeader/FeaturedHeader.tsx +++ b/packages/nextjs/src/components/_common/headers/featuredHeader/FeaturedHeader.tsx @@ -19,7 +19,7 @@ type Props = { export const FeaturedHeader = ({ contentProps }: Props) => { const { displayName, data, publish, modifiedTime, createdTime } = contentProps; const { language } = usePageContentProps(); - const pageTitle = data.title || displayName; + const pageTitle = data.title ?? displayName; const getFeaturedTranslations = translator('currentTopic', language); diff --git a/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeader.tsx b/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeader.tsx index 12409b9bff..bb19ae4a8d 100644 --- a/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeader.tsx +++ b/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeader.tsx @@ -27,7 +27,7 @@ type Props = { export const GeneralPageHeader = (props: Props) => { const { pageProps } = props; const { illustration, ingress, hideIngress } = pageProps.data; - const title = pageProps.data.title || pageProps.displayName; + const title = pageProps.data.title ?? pageProps.displayName; const tagLine = getContentTagline(pageProps); const isSituationPage = pageProps.type === ContentType.SituationPage; diff --git a/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeaderTagLine.tsx b/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeaderTagLine.tsx index 822dbe1179..ac4c9022b4 100644 --- a/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeaderTagLine.tsx +++ b/packages/nextjs/src/components/_common/headers/generalPageHeader/GeneralPageHeaderTagLine.tsx @@ -43,7 +43,7 @@ export const GeneralPageHeaderTagLine = (props: Props) => { } const currentAudienceLabel = getAudienceLabel(currentAudienceKey); - const providerTypes = getProviderTypes(currentAudience) || []; + const providerTypes = getProviderTypes(currentAudience) ?? []; const providerTypesString = joinWithConjunction( providerTypes.map((type) => getProviderAudienceLabel(type)), language @@ -53,7 +53,7 @@ export const GeneralPageHeaderTagLine = (props: Props) => { 'for' ).slice(1)}`; - return `${forString} ${providerTypesString || currentAudienceLabel}`; + return `${forString} ${providerTypesString ?? currentAudienceLabel}`; }; const audienceAffirmation = buildAudienceAffirmation(); diff --git a/packages/nextjs/src/components/_common/headers/themedPageHeader/ThemedPageHeader.tsx b/packages/nextjs/src/components/_common/headers/themedPageHeader/ThemedPageHeader.tsx index 27e8dd4b9c..a55e94d1bb 100644 --- a/packages/nextjs/src/components/_common/headers/themedPageHeader/ThemedPageHeader.tsx +++ b/packages/nextjs/src/components/_common/headers/themedPageHeader/ThemedPageHeader.tsx @@ -48,9 +48,9 @@ export const ThemedPageHeader = ({ contentProps, showTimeStamp = true }: Props)
- {title || displayName} + {title ?? displayName}
- {(subTitle || modified) && ( + {(subTitle ?? modified) && (
{subTitle && ( diff --git a/packages/nextjs/src/components/_common/image/NextImage.tsx b/packages/nextjs/src/components/_common/image/NextImage.tsx index 30abeb8f84..ca67a9d973 100644 --- a/packages/nextjs/src/components/_common/image/NextImage.tsx +++ b/packages/nextjs/src/components/_common/image/NextImage.tsx @@ -41,7 +41,7 @@ export const buildImageCacheUrl = ({ maxWidth, quality, }: { src: string; isEditorView: boolean } & NextImageProps) => { - if (isEditorView || !isValidImageUrl(src)) { + if (isEditorView ?? !isValidImageUrl(src)) { return src; } diff --git a/packages/nextjs/src/components/_common/image/XpImage.tsx b/packages/nextjs/src/components/_common/image/XpImage.tsx index 3a8126460b..ea171d4405 100644 --- a/packages/nextjs/src/components/_common/image/XpImage.tsx +++ b/packages/nextjs/src/components/_common/image/XpImage.tsx @@ -18,5 +18,5 @@ export const XpImage = ({ imageProps, alt, ...rest }: Props) => { return null; } - return ; + return ; }; diff --git a/packages/nextjs/src/components/_common/lenke/lenkeBase/LenkeBase.tsx b/packages/nextjs/src/components/_common/lenke/lenkeBase/LenkeBase.tsx index fdf382b912..05aed83769 100644 --- a/packages/nextjs/src/components/_common/lenke/lenkeBase/LenkeBase.tsx +++ b/packages/nextjs/src/components/_common/lenke/lenkeBase/LenkeBase.tsx @@ -56,9 +56,9 @@ export const LenkeBase = ({ const analyticsData = { komponent: analyticsComponent, lenkegruppe: analyticsLinkGroup, - seksjon: analyticsLinkGroup || layoutConfig.title, + seksjon: analyticsLinkGroup ?? layoutConfig.title, destinasjon: url, - lenketekst: analyticsLabel || onlyText(children), + lenketekst: analyticsLabel ?? onlyText(children), målgruppe: context, innholdstype: innholdsTypeMap[contentProps.type], }; @@ -80,7 +80,7 @@ export const LenkeBase = ({ {...rest} href={url} onClick={(e) => { - logAnalyticsEvent(analyticsEvent || AnalyticsEvents.NAVIGATION, analyticsData); + logAnalyticsEvent(analyticsEvent ?? AnalyticsEvents.NAVIGATION, analyticsData); onClick?.(e); }} shallow={shallow} diff --git a/packages/nextjs/src/components/_common/lenke/lenkeStandalone/LenkeStandalone.tsx b/packages/nextjs/src/components/_common/lenke/lenkeStandalone/LenkeStandalone.tsx index 196c30a1eb..da83f19cdf 100644 --- a/packages/nextjs/src/components/_common/lenke/lenkeStandalone/LenkeStandalone.tsx +++ b/packages/nextjs/src/components/_common/lenke/lenkeStandalone/LenkeStandalone.tsx @@ -35,7 +35,7 @@ export const LenkeStandalone = ({ className={classNames(style.navnoLenke, withChevron && style.withChevron, className)} analyticsComponent={component} analyticsLinkGroup={linkGroup} - analyticsLabel={analyticsLabel || (typeof children === 'string' ? children : undefined)} + analyticsLabel={analyticsLabel ?? (typeof children === 'string' ? children : undefined)} > {withChevron && ( diff --git a/packages/nextjs/src/components/_common/metatags/HeadWithMetatags.tsx b/packages/nextjs/src/components/_common/metatags/HeadWithMetatags.tsx index b5c0451df1..eb3e5bf982 100644 --- a/packages/nextjs/src/components/_common/metatags/HeadWithMetatags.tsx +++ b/packages/nextjs/src/components/_common/metatags/HeadWithMetatags.tsx @@ -33,11 +33,11 @@ const isNoIndex = (content: ContentProps) => content.isPagePreview || contentTypesWithNoIndex.has(content.type) || content.data?.noindex; const getCanonicalUrl = (content: ContentProps) => { - return content.data?.canonicalUrl || `${appOrigin}${getPublicPathname(content)}`; + return content.data?.canonicalUrl ?? `${appOrigin}${getPublicPathname(content)}`; }; export const getPageTitle = (content: ContentProps) => - `${content.data?.title || content.displayName} - nav.no`; + `${content.data?.title ?? content.displayName} - nav.no`; export const HeadWithMetatags = ({ content, children }: Props) => { const title = getPageTitle(content); diff --git a/packages/nextjs/src/components/_common/pageNavigationMenu/SectionNavigation/SectionNavigation.tsx b/packages/nextjs/src/components/_common/pageNavigationMenu/SectionNavigation/SectionNavigation.tsx index 689932bcac..48db62a2fc 100644 --- a/packages/nextjs/src/components/_common/pageNavigationMenu/SectionNavigation/SectionNavigation.tsx +++ b/packages/nextjs/src/components/_common/pageNavigationMenu/SectionNavigation/SectionNavigation.tsx @@ -32,7 +32,7 @@ const getAnchorsFromComponents = (language: Language, region?: RegionProps) => { } if (component.descriptor === PartType.RelatedSituations) { - const actualTitle = component.config?.title || defaultTitle; + const actualTitle = component.config?.title ?? defaultTitle; return [ ...acc, { diff --git a/packages/nextjs/src/components/_common/parsedHtml/ParsedHtml.tsx b/packages/nextjs/src/components/_common/parsedHtml/ParsedHtml.tsx index a34b26cec6..5b160870b8 100644 --- a/packages/nextjs/src/components/_common/parsedHtml/ParsedHtml.tsx +++ b/packages/nextjs/src/components/_common/parsedHtml/ParsedHtml.tsx @@ -128,7 +128,7 @@ export const ParsedHtml = ({ htmlProps }: Props) => { return ( ); diff --git a/packages/nextjs/src/components/_common/payoutDates/PayoutDates.tsx b/packages/nextjs/src/components/_common/payoutDates/PayoutDates.tsx index 53ac9d2ceb..59f7a353cd 100644 --- a/packages/nextjs/src/components/_common/payoutDates/PayoutDates.tsx +++ b/packages/nextjs/src/components/_common/payoutDates/PayoutDates.tsx @@ -36,7 +36,7 @@ export const PayoutDates = ({ payoutDatesData, className }: Props) => { {formatDate({ - datetime: `${month} ${day} ${year || ''}`, + datetime: `${month} ${day} ${year ?? ''}`, language, short: true, })} diff --git a/packages/nextjs/src/components/_common/press-landing/PressTopSection.tsx b/packages/nextjs/src/components/_common/press-landing/PressTopSection.tsx index 4414bf539c..7fab9352c9 100644 --- a/packages/nextjs/src/components/_common/press-landing/PressTopSection.tsx +++ b/packages/nextjs/src/components/_common/press-landing/PressTopSection.tsx @@ -16,7 +16,7 @@ export const PressTopSection = (props: PressTopSectionProps) => {
- {title || displayName} + {title ?? displayName} {pressCall && (
diff --git a/packages/nextjs/src/components/_common/qbrick-video/utils/videoHelpers.ts b/packages/nextjs/src/components/_common/qbrick-video/utils/videoHelpers.ts index f36dc6814c..155c0407c2 100644 --- a/packages/nextjs/src/components/_common/qbrick-video/utils/videoHelpers.ts +++ b/packages/nextjs/src/components/_common/qbrick-video/utils/videoHelpers.ts @@ -24,7 +24,7 @@ const findImageUrlFromVideoMeta = (qbrickMediaData: QbrickMeta) => { const imageHref = selectedImage.renditions[0]?.links[0]?.href; - return imageHref || undefined; + return imageHref ?? undefined; }; const findVideoDurationFromMeta = (qbrickMediaData: QbrickMeta) => { @@ -37,7 +37,7 @@ const findVideoDurationFromMeta = (qbrickMediaData: QbrickMeta) => { const firstFoundVideo = firstFoundResource && firstFoundResource.renditions[0]?.videos; const duration = firstFoundVideo && firstFoundVideo[0]?.duration; - return duration || 0; + return duration ?? 0; }; export const getTimestampFromDuration = (duration: number) => { diff --git a/packages/nextjs/src/components/_common/relatedSituations/RelatedSituations.tsx b/packages/nextjs/src/components/_common/relatedSituations/RelatedSituations.tsx index 1fe13ab662..9d35928238 100644 --- a/packages/nextjs/src/components/_common/relatedSituations/RelatedSituations.tsx +++ b/packages/nextjs/src/components/_common/relatedSituations/RelatedSituations.tsx @@ -30,23 +30,21 @@ export const RelatedSituations = ({ relatedSituations, title, description }: Pro const { language, editorView, page } = usePageContentProps(); const getStringPart = translator('related', language); const defaultTitle = getStringPart('otherOffers'); - const actualTitle = (title || defaultTitle).trim(); //Redaktører legger inn et mellomrom hvis de ikke vil ha tittel - const actualDescription = description || getStringPart('moreInformation'); + const actualTitle = (title ?? defaultTitle).trim(); //Redaktører legger inn et mellomrom hvis de ikke vil ha tittel + const actualDescription = description ?? getStringPart('moreInformation'); return (