From 0ec6d58d6a6e1703ddd55927a60b0d8f02d5cb6f Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Wed, 29 May 2024 15:36:19 +0200 Subject: [PATCH] feat: sync design of header with current web --- .../BookingButton/bookingButton.module.css | 42 +++++++++++++++++++ .../Current/Header/BookingButton/index.tsx | 11 +++++ components/Current/Header/MainMenu/index.tsx | 9 ++-- .../Header/MainMenu/mainMenu.module.css | 11 +++-- components/Current/Header/TopMenu/index.tsx | 18 +++++++- .../Current/Header/TopMenu/topMenu.module.css | 17 +++++++- components/Current/Header/index.tsx | 3 +- .../Header/Hamburger/hamburger.module.css | 16 ------- components/Header/Hamburger/index.tsx | 11 ----- components/Header/LanguageSwitcher/index.tsx | 17 -------- .../LanguageSwitcher/language.module.css | 15 ------- components/Header/Logo/index.tsx | 15 ------- components/Header/Logo/logo.module.css | 4 -- components/Header/header.module.css | 25 ----------- components/Header/index.tsx | 35 ---------------- lib/graphql/Query/Header.graphql | 32 -------------- server/routers/contentstack/config/input.ts | 9 ++++ server/routers/contentstack/config/query.ts | 8 ++-- types/components/current/header/mainMenu.ts | 7 +++- types/components/current/header/topMenu.ts | 3 +- types/requests/currentHeader.ts | 4 +- types/requests/header.ts | 35 ---------------- 22 files changed, 122 insertions(+), 225 deletions(-) create mode 100644 components/Current/Header/BookingButton/bookingButton.module.css create mode 100644 components/Current/Header/BookingButton/index.tsx delete mode 100644 components/Header/Hamburger/hamburger.module.css delete mode 100644 components/Header/Hamburger/index.tsx delete mode 100644 components/Header/LanguageSwitcher/index.tsx delete mode 100644 components/Header/LanguageSwitcher/language.module.css delete mode 100644 components/Header/Logo/index.tsx delete mode 100644 components/Header/Logo/logo.module.css delete mode 100644 components/Header/header.module.css delete mode 100644 components/Header/index.tsx delete mode 100644 lib/graphql/Query/Header.graphql create mode 100644 server/routers/contentstack/config/input.ts delete mode 100644 types/requests/header.ts diff --git a/components/Current/Header/BookingButton/bookingButton.module.css b/components/Current/Header/BookingButton/bookingButton.module.css new file mode 100644 index 000000000..c19ba0855 --- /dev/null +++ b/components/Current/Header/BookingButton/bookingButton.module.css @@ -0,0 +1,42 @@ +.button { + background-color: #02838e; + color: #fff; + padding: 5px 15px; + display: inline-block; + line-height: 20px; + border: 1px solid transparent; + border-radius: 50px; + height: 32px; + line-height: 20px; + font-size: 14px; + font-family: Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 16px; + cursor: pointer; + text-decoration: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +.button:hover { + text-decoration: underline; +} + +.button:focus, +.button:active { + box-shadow: 0 0 1px 2px #b4defa; + outline: none; + border: 1px solid hsl(0, 0%, 80%); + text-decoration: underline; +} + +@media screen and (min-width: 950px) { + .button { + font-weight: 600; + font-size: 16px; + line-height: 24px; + height: auto; + padding: 12px 32px; + } +} diff --git a/components/Current/Header/BookingButton/index.tsx b/components/Current/Header/BookingButton/index.tsx new file mode 100644 index 000000000..431c9b5cc --- /dev/null +++ b/components/Current/Header/BookingButton/index.tsx @@ -0,0 +1,11 @@ +import "@scandic-hotels/design-system/current/style.css" + +import styles from "./bookingButton.module.css" + +export default function BookingButton() { + return ( + + Book + + ) +} diff --git a/components/Current/Header/MainMenu/index.tsx b/components/Current/Header/MainMenu/index.tsx index 6dffd92ea..f63b43093 100644 --- a/components/Current/Header/MainMenu/index.tsx +++ b/components/Current/Header/MainMenu/index.tsx @@ -2,7 +2,8 @@ import { useState } from "react" import Image from "@/components/Image" -import Button from "@/components/TempDesignSystem/Button" + +import BookingButton from "../BookingButton" import styles from "./mainMenu.module.css" @@ -82,9 +83,9 @@ export function MainMenu({
  • {languageSwitcher}
  • ) : null} - {/*
    - -
    */} +
    + +
    diff --git a/components/Current/Header/MainMenu/mainMenu.module.css b/components/Current/Header/MainMenu/mainMenu.module.css index e7b6637eb..257bf0e8e 100644 --- a/components/Current/Header/MainMenu/mainMenu.module.css +++ b/components/Current/Header/MainMenu/mainMenu.module.css @@ -25,7 +25,7 @@ .navBar { display: grid; grid-template-columns: 1fr 80px 1fr; - padding-bottom: 1.5px; + height: 52.39px; } .expanderBtn { @@ -33,8 +33,7 @@ border: none; cursor: pointer; justify-self: flex-start; - left: 0; - padding: 12px 8px 16px; + padding: 11px 8px 16px; transition: 0.3s; user-select: none; } @@ -45,7 +44,7 @@ background: #757575; border-radius: 2.3px; display: inline-block; - height: 4.6px; + height: 5px; position: relative; transition: 0.3s; width: 32px; @@ -178,6 +177,8 @@ .buttonContainer { display: flex; justify-content: flex-end; + align-items: center; + margin-right: 8px; } @media screen and (min-width: 1367px) { @@ -200,6 +201,7 @@ .navBar { grid-template-columns: 132.18px 1fr auto; align-content: center; + height: 85.09px; } .expanderBtn { @@ -261,6 +263,7 @@ @media (min-width: 1200px) { .navBar { grid-template-columns: 140px auto 1fr; + height: 82.4px; } .logoLink { diff --git a/components/Current/Header/TopMenu/index.tsx b/components/Current/Header/TopMenu/index.tsx index 4a9ce1dd6..0589f410e 100644 --- a/components/Current/Header/TopMenu/index.tsx +++ b/components/Current/Header/TopMenu/index.tsx @@ -1,13 +1,18 @@ +import { auth } from "@/auth" + import styles from "./topMenu.module.css" import type { TopMenuProps } from "@/types/components/current/header/topMenu" -export default function TopMenu({ +export default async function TopMenu({ frontpageLinkText, homeHref, links, languageSwitcher, + lang, }: TopMenuProps) { + const session = await auth() + return (
    @@ -25,6 +30,17 @@ export default function TopMenu({ ))} +
  • + {session ? ( + + Log out + + ) : ( + + Log in + + )} +
  • diff --git a/components/Current/Header/TopMenu/topMenu.module.css b/components/Current/Header/TopMenu/topMenu.module.css index 9382fa966..e9adcd825 100644 --- a/components/Current/Header/TopMenu/topMenu.module.css +++ b/components/Current/Header/TopMenu/topMenu.module.css @@ -37,12 +37,15 @@ Arial, sans-serif; font-size: 13px; + font-weight: 400; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; } .langSwitcher { text-align: center; position: relative; display: block; - padding: 3px 15px; } @media screen and (min-width: 768px) { @@ -63,6 +66,16 @@ .link { padding-top: 4px; padding-bottom: 4px; - font-weight: 300; + } + + .loginContainer { + margin-left: 10px; + background-color: #f3f2f1; + } + + .loginLink { + padding-left: 30px; + padding-right: 30px; + color: #000; } } diff --git a/components/Current/Header/index.tsx b/components/Current/Header/index.tsx index ec9da40f9..a6248ee0a 100644 --- a/components/Current/Header/index.tsx +++ b/components/Current/Header/index.tsx @@ -14,7 +14,7 @@ export default async function Header({ lang, languageSwitcher, }: LangParams & { languageSwitcher: React.ReactNode }) { - const data = await serverClient().contentstack.config.header() + const data = await serverClient().contentstack.config.header({ lang }) const homeHref = homeHrefs[env.NODE_ENV][lang] const { frontpage_link_text, logo, menu, top_menu } = data @@ -31,6 +31,7 @@ export default async function Header({ homeHref={homeHref} links={top_menu.links} languageSwitcher={languageSwitcher} + lang={lang} /> -
    -
    -
    - - ) -} diff --git a/components/Header/LanguageSwitcher/index.tsx b/components/Header/LanguageSwitcher/index.tsx deleted file mode 100644 index 11424a243..000000000 --- a/components/Header/LanguageSwitcher/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import Image from "@/components/Image" - -import styles from "./language.module.css" - -export default function LanguageSwitcher() { - return ( -
    - Swedish flag - SV / SEK -
    - ) -} diff --git a/components/Header/LanguageSwitcher/language.module.css b/components/Header/LanguageSwitcher/language.module.css deleted file mode 100644 index f5d108e99..000000000 --- a/components/Header/LanguageSwitcher/language.module.css +++ /dev/null @@ -1,15 +0,0 @@ -.switcher { - align-items: center; - display: none; - font-family: var(--typography-Body-Regular-fontFamily); - font-size: 1.4rem; - font-weight: 400; - gap: 0.6rem; - line-height: 1.6rem; -} - -@media screen and (min-width: 1367px) { - .switcher { - display: flex; - } -} diff --git a/components/Header/Logo/index.tsx b/components/Header/Logo/index.tsx deleted file mode 100644 index a1d6dd285..000000000 --- a/components/Header/Logo/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import Link from "next/link" - -import Image from "@/components/Image" - -import styles from "./logo.module.css" - -import { LogoProps } from "@/types/components/header/logo" - -export default async function Logo({ title, height, width, src }: LogoProps) { - return ( - - {title} - - ) -} diff --git a/components/Header/Logo/logo.module.css b/components/Header/Logo/logo.module.css deleted file mode 100644 index cdb897b61..000000000 --- a/components/Header/Logo/logo.module.css +++ /dev/null @@ -1,4 +0,0 @@ -.link { - cursor: pointer; - display: block; -} diff --git a/components/Header/header.module.css b/components/Header/header.module.css deleted file mode 100644 index fd189767f..000000000 --- a/components/Header/header.module.css +++ /dev/null @@ -1,25 +0,0 @@ -.header { - align-items: center; - background-color: var(--some-white-color, #fff); - box-shadow: 0px 1.0006656646728516px 1.0006656646728516px 0px #0000000d; - display: grid; - gap: 3rem; - grid-template-columns: 1fr auto auto; - height: var(--header-height); - - padding: 0 2rem; - position: sticky; - top: 0; - z-index: 999; -} - -@media screen and (min-width: 1367px) { - .header { - background-color: var(--some-grey-color, #ececec); - border-bottom: 0.1rem solid var(--some-grey-color, #ccc); - box-shadow: none; - gap: 3.2rem; - grid-template-columns: 1fr 19rem auto auto; - padding: 0 2.4rem; - } -} diff --git a/components/Header/index.tsx b/components/Header/index.tsx deleted file mode 100644 index 37f25583a..000000000 --- a/components/Header/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { GetHeader } from "@/lib/graphql/Query/Header.graphql" -import { request } from "@/lib/graphql/request" - -import Logo from "./Logo" - -import styles from "./header.module.css" - -import type { LangParams } from "@/types/params" -import { HeaderQueryData } from "@/types/requests/header" - -export default async function Header({ lang }: LangParams) { - const { data } = await request(GetHeader, { - locale: lang, - }) - - if ( - !data.all_header.items.length || - !data.all_header.items?.[0].logoConnection.totalCount - ) { - return null - } - - const logo = data.all_header.items[0].logoConnection.edges[0] - - return ( -
    - -
    - ) -} diff --git a/lib/graphql/Query/Header.graphql b/lib/graphql/Query/Header.graphql deleted file mode 100644 index e546f88af..000000000 --- a/lib/graphql/Query/Header.graphql +++ /dev/null @@ -1,32 +0,0 @@ -#import "../Fragments/Image.graphql" - -query GetHeader($locale: String!) { - all_header(limit: 1, locale: $locale) { - items { - frontpage_link_text - logoConnection { - edges { - node { - ...Image - } - } - } - menu { - links { - href - title - } - } - top_menu { - links { - link { - href - title - } - show_on_mobile - sort_order_mobile - } - } - } - } -} diff --git a/server/routers/contentstack/config/input.ts b/server/routers/contentstack/config/input.ts new file mode 100644 index 000000000..c1223b25b --- /dev/null +++ b/server/routers/contentstack/config/input.ts @@ -0,0 +1,9 @@ +import z from "zod" + +import { Lang } from "@/constants/languages" + +export const headerInput = z + .object({ + lang: z.nativeEnum(Lang), + }) + .optional() diff --git a/server/routers/contentstack/config/query.ts b/server/routers/contentstack/config/query.ts index 286d89524..ee3098b25 100644 --- a/server/routers/contentstack/config/query.ts +++ b/server/routers/contentstack/config/query.ts @@ -4,6 +4,7 @@ import { request } from "@/lib/graphql/request" import { internalServerError, notFound } from "@/server/errors/trpc" import { contentstackProcedure, publicProcedure, router } from "@/server/trpc" +import { headerInput } from "./input" import { type ContactConfigData, HeaderData, @@ -34,11 +35,12 @@ export const configQueryRouter = router({ return validatedContactConfigConfig.data.all_contact_config.items[0] }), - header: publicProcedure.query(async ({ ctx }) => { + header: publicProcedure.input(headerInput).query(async ({ input, ctx }) => { + const locale = input?.lang || ctx.lang const response = await request( GetCurrentHeader, - { locale: ctx.lang }, - { next: { tags: [`header-${ctx.lang}`] } } + { locale }, + { next: { tags: [`header-${locale}`] } } ) if (!response.data) { diff --git a/types/components/current/header/mainMenu.ts b/types/components/current/header/mainMenu.ts index d0189500a..4b8ad0e95 100644 --- a/types/components/current/header/mainMenu.ts +++ b/types/components/current/header/mainMenu.ts @@ -1,10 +1,13 @@ import type { Image } from "@/types/image" -import type { HeaderLink, TopMenuHeaderLink } from "@/types/requests/header" +import type { + CurrentHeaderLink, + TopMenuHeaderLink, +} from "@/types/requests/currentHeader" export type MainMenuProps = { frontpageLinkText: string homeHref: string - links: HeaderLink[] + links: CurrentHeaderLink[] logo: Image topMenuMobileLinks: TopMenuHeaderLink[] languageSwitcher: React.ReactNode diff --git a/types/components/current/header/topMenu.ts b/types/components/current/header/topMenu.ts index b0a6e4ec3..3545ef8d8 100644 --- a/types/components/current/header/topMenu.ts +++ b/types/components/current/header/topMenu.ts @@ -1,8 +1,9 @@ -import type { TopMenuHeaderLink } from "@/types/requests/header" +import type { TopMenuHeaderLink } from "@/types/requests/currentHeader" export type TopMenuProps = { frontpageLinkText: string homeHref: string links: TopMenuHeaderLink[] languageSwitcher: React.ReactNode + lang: string } diff --git a/types/requests/currentHeader.ts b/types/requests/currentHeader.ts index 3f876885d..10218b347 100644 --- a/types/requests/currentHeader.ts +++ b/types/requests/currentHeader.ts @@ -7,7 +7,7 @@ export type CurrentHeaderLink = { title: string } -export type TopMenuCurrentHeaderLink = { +export type TopMenuHeaderLink = { link: { href: string title: string @@ -21,7 +21,7 @@ export type CurrentHeaderLinks = { } export type TopMenuCurrentHeaderLinks = { - links: TopMenuCurrentHeaderLink[] + links: TopMenuHeaderLink[] } export type CurrentHeader = { diff --git a/types/requests/header.ts b/types/requests/header.ts deleted file mode 100644 index 20a9be1cd..000000000 --- a/types/requests/header.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { Image } from "../image" -import type { EdgesWithTotalCount } from "./utils/edges" - -export type HeaderLink = { - href: string - title: string -} - -export type TopMenuHeaderLink = { - link: { - href: string - title: string - } - show_on_mobile: boolean - sort_order_mobile: number -} - -export type HeaderLinks = { - links: HeaderLink[] -} - -export type TopMenuHeaderLinks = { - links: TopMenuHeaderLink[] -} - -export type HeaderQueryData = { - all_header: { - items: { - frontpage_link_text: string - logoConnection: EdgesWithTotalCount - menu: HeaderLinks - top_menu: TopMenuHeaderLinks - }[] - } -}