From 6d3581886f78add09b1634cc6b11c6297fa3ab9e Mon Sep 17 00:00:00 2001 From: elise Date: Wed, 7 Aug 2024 21:21:02 +0200 Subject: [PATCH] event page progress, make separate details component and move some stuff around --- web/src/app/arrangementer/[slug]/page.tsx | 4 +- web/src/components/events/DateList.tsx | 5 +- web/src/components/events/EventDetails.tsx | 68 +++++++++++++++++ web/src/components/events/EventHeader.tsx | 75 +++---------------- .../components/events/dateList.module.scss | 15 +--- .../events/eventDetails.module.scss | 36 +++++++++ .../components/events/eventHeader.module.scss | 67 ++++------------- .../events/organizerList.module.scss | 1 - web/src/css/base.scss | 13 ++++ web/src/css/variables.scss | 1 + 10 files changed, 150 insertions(+), 135 deletions(-) create mode 100644 web/src/components/events/EventDetails.tsx create mode 100644 web/src/components/events/eventDetails.module.scss diff --git a/web/src/app/arrangementer/[slug]/page.tsx b/web/src/app/arrangementer/[slug]/page.tsx index 4cf09b0..30a0510 100644 --- a/web/src/app/arrangementer/[slug]/page.tsx +++ b/web/src/app/arrangementer/[slug]/page.tsx @@ -1,6 +1,6 @@ import { getClient } from "@/app/client"; import { Blocks } from "@/components/blocks/Blocks"; -import { DateList } from "@/components/events/DateList"; +import { EventDetails } from "@/components/events/EventDetails"; import { EventHeader } from "@/components/events/EventHeader"; import { BgPig } from "@/components/general/BgPig"; import { graphql } from "@/gql"; @@ -54,8 +54,8 @@ export default async function Page({ params }: { params: { slug: string } }) { <>
+
-
diff --git a/web/src/components/events/DateList.tsx b/web/src/components/events/DateList.tsx index 6b98ebe..4c99404 100644 --- a/web/src/components/events/DateList.tsx +++ b/web/src/components/events/DateList.tsx @@ -54,10 +54,7 @@ export const DateList = ({ event }: { event: EventFragment }) => { return (
-

- - - +

Kommende datoer{" "} ({futureOccurrences.length})

diff --git a/web/src/components/events/EventDetails.tsx b/web/src/components/events/EventDetails.tsx new file mode 100644 index 0000000..4272fd5 --- /dev/null +++ b/web/src/components/events/EventDetails.tsx @@ -0,0 +1,68 @@ +import { EventFragment } from "@/lib/event"; +import styles from "./eventDetails.module.scss"; +import { OrganizerList } from "./OrganizerList"; +import Icon from "../general/Icon"; +import { DateList } from "./DateList"; + +function formatPrice(price: number): string { + if (price === null) { + // should not happen + return "?"; + } + if (price === 0) { + return "Gratis"; + } + return `${price} kr`; +} + +export const EventDetails = ({ event }: { event: EventFragment }) => { + const featuredImage: any = event.featuredImage; + + return ( +
+
+
+ Pris +
    + {event.free && ( +
  • + Gratis +
  • + )} + {typeof event.priceRegular === "number" && ( +
  • + Ordinær{" "} + {formatPrice(event.priceRegular)} +
  • + )} + {typeof event.priceStudent === "number" && ( +
  • + Student{" "} + {formatPrice(event.priceStudent)} +
  • + )} + {typeof event.priceMember === "number" && ( +
  • + Medlem{" "} + {formatPrice(event.priceMember)} +
  • + )} +
+
+ {event.organizers && ( +
+
Arrangeres av
{" "} + +
+ )} + {event.facebookUrl && ( + + Gå til Facebook-event + + + )} +
+ +
+ ); +}; diff --git a/web/src/components/events/EventHeader.tsx b/web/src/components/events/EventHeader.tsx index bd038b6..6f674f0 100644 --- a/web/src/components/events/EventHeader.tsx +++ b/web/src/components/events/EventHeader.tsx @@ -1,21 +1,8 @@ import { EventFragment } from "@/lib/event"; import styles from "./eventHeader.module.scss"; import { Image } from "@/components/general/Image"; -import Link from "next/link"; -import { OrganizerList } from "./OrganizerList"; -import Icon from "../general/Icon"; import { Breadcrumb } from "../general/Breadcrumb"; - -function formatPrice(price: number): string { - if (price === null) { - // should not happen - return "?"; - } - if (price === 0) { - return "Gratis"; - } - return `${price} kr`; -} +import Icon from "../general/Icon"; export const EventHeader = ({ event }: { event: EventFragment }) => { // TODO: where should we show image attribution for the featured image? @@ -24,63 +11,23 @@ export const EventHeader = ({ event }: { event: EventFragment }) => { return (
-
- -

{event.title}

-
-
- Pris: -
    - {event.free && ( -
  • - Gratis -
  • - )} - {typeof event.priceRegular === "number" && ( -
  • - Ordinær:{" "} - {formatPrice(event.priceRegular)} -
  • - )} - {typeof event.priceStudent === "number" && ( -
  • - Student:{" "} - {formatPrice(event.priceStudent)} -
  • - )} - {typeof event.priceMember === "number" && ( -
  • - Medlem:{" "} - {formatPrice(event.priceMember)} -
  • - )} -
+
+ {/**/} + {event.categories.length > 0 && ( +
+ {event.categories.map(category => ( +
{category.name}
+ ))}
- {event.categories.length > 0 && ( -
- Kategorier:{" "} - {event.categories.map((x) => x.name).join(", ")} -
- )} - {event.organizers && ( -
- Arrangeres av:{" "} - -
- )} -
+ )} +

{event.title}

+

Evt. andre detaljer

{event.ticketUrl && ( Kjøp billetter )} - {event.facebookUrl && ( - - Gå til Facebook-event - - - )}
{featuredImage && ( diff --git a/web/src/components/events/dateList.module.scss b/web/src/components/events/dateList.module.scss index 2df0124..ce87665 100644 --- a/web/src/components/events/dateList.module.scss +++ b/web/src/components/events/dateList.module.scss @@ -1,26 +1,19 @@ .dateWrapper { - background: var(--color-background-secondary); - margin: 0 calc(var(--spacing-sitepadding-inline)*-1) var(--spacing-sitepadding-block); - padding: var(--spacing-s) var(--spacing-sitepadding-inline) var(--spacing-m); + margin-top: var(--spacing-m); } .dateList { list-style: none; - display: flex; - gap: var(--spacing-s); + margin-top: var(--spacing-xs); } .date { + display: inline-block; font-family: var(--font-serif); font-size: var(--font-size-body); position: relative; line-height: 1.2; - border-right: var(--border); - padding-right: var(--spacing-s); - - &:last-child { - border: none; - } + margin: 0 2rem 1rem 0; } .time { diff --git a/web/src/components/events/eventDetails.module.scss b/web/src/components/events/eventDetails.module.scss new file mode 100644 index 0000000..b33e51e --- /dev/null +++ b/web/src/components/events/eventDetails.module.scss @@ -0,0 +1,36 @@ +.eventDetails { + background: var(--color-background-secondary); + margin: 0 calc(var(--spacing-sitepadding-inline)*-1) var(--spacing-sitepadding-block); + padding: var(--spacing-s) var(--spacing-sitepadding-inline) var(--spacing-m); +} + +.content { + display: grid; + grid-template-columns: repeat(4, 1fr); + column-gap: var(--spacing-gap-column); + margin-bottom: var(--spacing-gap-row); + align-items: flex-start; +} + +.priceList { + list-style: none; + max-width: 10rem; +} + +.priceItem { + position: relative; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + text-align: right; +} + +.priceLabel { + display: block; + text-align: left; +} + +.label { + font-weight: 600; + width: 7rem; +} \ No newline at end of file diff --git a/web/src/components/events/eventHeader.module.scss b/web/src/components/events/eventHeader.module.scss index bf3d6de..453f376 100644 --- a/web/src/components/events/eventHeader.module.scss +++ b/web/src/components/events/eventHeader.module.scss @@ -3,8 +3,14 @@ display: grid; grid-template-columns: repeat(3, 1fr); column-gap: var(--spacing-gap-column); - align-items: flex-end; + row-gap: var(--spacing-gap-row); + align-items: center; padding: 0; + margin: calc(var(--spacing-sitepadding-block)*-1) auto 0; +} + +.categories { + margin: 0 0 var(--spacing-m); } .title { @@ -13,7 +19,6 @@ .image { grid-column: span 2; - margin-top: calc(var(--spacing-sitepadding-block)*-2); img { max-width: 100%; @@ -22,58 +27,14 @@ } } -.text { - padding-bottom: var(--spacing-m); +.details { + font-size: var(--font-size-h2); + font-family: var(--font-serif); + margin: var(--spacing-xs) 0 var(--spacing-l); } -.eventDetails { - font-size: var(--font-size-caption); - margin: var(--spacing-m) 0; - - >div { - padding: var(--spacing-xs) 0; - border-bottom: var(--border); - display: flex; +@media (max-width: 800px) { + .eventHeader { + grid-template-columns: 1fr; } -} - -.prices { - padding: var(--spacing-xs) 0 0; - border-top: var(--border); - display: flex; -} - -.priceList { - list-style: none; - //flex-grow: 1; -} - -.priceItem { - position: relative; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1rem; - /*padding: var(--spacing-xs) 0; - border-bottom: var(--border); - - &:first-child { - padding-top: 0; - } - - &:last-child { - border-bottom: 0; - padding-bottom: 0; - }*/ -} - -.priceLabel { - display: block; -} - -.label { - font-weight: 600; -} - -.label { - width: 7rem; } \ No newline at end of file diff --git a/web/src/components/events/organizerList.module.scss b/web/src/components/events/organizerList.module.scss index 8c1f3a5..02315c9 100644 --- a/web/src/components/events/organizerList.module.scss +++ b/web/src/components/events/organizerList.module.scss @@ -4,6 +4,5 @@ li { display: inline; - font-size: var(--font-size-caption); } } \ No newline at end of file diff --git a/web/src/css/base.scss b/web/src/css/base.scss index eb34b96..1a2bd83 100644 --- a/web/src/css/base.scss +++ b/web/src/css/base.scss @@ -327,4 +327,17 @@ select { .page-header-small { max-width: var(--size-width-p); margin: 0 auto 1rem; +} + +.tag { + display: inline-block; + border-radius: 10rem; + background: var(--color-goldenBeige); + color: var(--color-deepBrick); + padding: 0 .7em; + margin: 0 .4em var(--spacing-s) 0; + font-family: var(--font-main); + font-size: var(--font-size-caption); + font-weight: 500; + text-decoration: none; } \ No newline at end of file diff --git a/web/src/css/variables.scss b/web/src/css/variables.scss index cd34434..304bbf1 100644 --- a/web/src/css/variables.scss +++ b/web/src/css/variables.scss @@ -62,6 +62,7 @@ // sizes --size-width-p: 36rem; --size-width-lead: 48rem; + --size-width-pageheader: 54rem; --size-icon: 1em; --size-icon-circle: 2.4rem; --size-icon-large: 3.4rem;