From 2f3833488a7d91bf08a9cbd9391787c60e7d093f Mon Sep 17 00:00:00 2001 From: YourivHDenHaag Date: Tue, 24 Oct 2023 15:24:44 +0200 Subject: [PATCH] feat: finished first version of refactored contact timelines, converted react story to tsx, added component to casedetail template --- .storybook/@types/icons.d.ts | 5 + .../templates/CaseDetail-page.stories.mdx | 76 +++++ components/ContactTimeline/README.md | 210 +++++++++++++- components/ContactTimeline/package.json | 1 + .../ContactTimeline/src/ContactTimeline.tsx | 39 +-- .../src/_ContactTimelineHeader.scss | 2 +- .../src/_ContactTimelineItemSender.scss | 2 +- .../src/_ContactTimelineMetaSeparator.scss | 2 +- .../src/_ContactTimelineStep.scss | 2 +- .../_ContactTimelineStepMarkerConnector.scss | 3 +- .../src/stories/react.stories.mdx | 259 ------------------ .../src/stories/react.stories.tsx | 236 ++++++++++++++++ pnpm-lock.yaml | 3 + 13 files changed, 556 insertions(+), 284 deletions(-) delete mode 100644 components/ContactTimeline/src/stories/react.stories.mdx create mode 100644 components/ContactTimeline/src/stories/react.stories.tsx diff --git a/.storybook/@types/icons.d.ts b/.storybook/@types/icons.d.ts index 10243c1f95..c6acee9281 100644 --- a/.storybook/@types/icons.d.ts +++ b/.storybook/@types/icons.d.ts @@ -8,3 +8,8 @@ declare module '*.json' { const content: string; export default content; } + +declare module '*.md?raw' { + const content: string; + export default content; +} diff --git a/.storybook/stories/templates/CaseDetail-page.stories.mdx b/.storybook/stories/templates/CaseDetail-page.stories.mdx index e6d377a606..ae15a459d3 100644 --- a/.storybook/stories/templates/CaseDetail-page.stories.mdx +++ b/.storybook/stories/templates/CaseDetail-page.stories.mdx @@ -27,6 +27,7 @@ import { Sheet, SheetCloseButton, SheetOverlay, SheetContainer } from "../../../ import IconButton from "../../../components/IconButton/src"; import { Status } from "../../../components/ProcessSteps/src"; import { File } from "../../../components/File/src"; +import ContactTimeline from "../../../components/ContactTimeline/src"; import { Action } from "../../../components/Action/src"; import { Button } from "../../../components/Button/src"; import { ButtonLink } from "@utrecht/component-library-react"; @@ -158,6 +159,79 @@ export const progressStepsData = { ], }; +export const contactTimelineData = { + todayLabel: "vandaag", + collapsible: true, + items: [ + { + id: "1", + title: "Herinnering: Geef informatie", + channel: "mail", + isoDate: new Date().toISOString(), + description: "Hier komt de uitgebreide beschrijving", + sender: "Gemeente Den Haag", + }, + { + id: "2", + title: "Geef informatie", + channel: "mail", + isoDate: "2023-01-23T09:17:03.137Z", + description: "Hier komt de uitgebreide beschrijving", + sender: "Gemeente Den Haag", + }, + { + id: "3", + title: "Tip: u heeft recht op extra subsidie, zie hier een extra lange regel", + channel: "mail", + isoDate: "2023-01-06T09:17:03.137Z", + description: + "Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving. Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving.", + sender: "Gemeente Den Haag", + }, + { + id: "4", + title: "Status is veranderd", + channel: "mail", + isoDate: "2022-12-01T09:17:03.137Z", + description: "Hier komt de uitgebreide beschrijving", + sender: "Gemeente Den Haag", + file: ( + + ), + }, + { + id: "5", + title: "Mijn vraag", + channel: "vraag", + isoDate: "2022-11-29T09:17:03.137Z", + description: "Hier komt de uitgebreide beschrijving", + sender: "A. Klap", + }, + { + id: "6", + title: "Gesprek over afspraak met adviseur", + channel: "telefoon", + isoDate: "2022-11-12T09:17:03.137Z", + description: "Hier komt de uitgebreide beschrijving", + sender: "Gemeente Den Haag", + }, + { + id: "7", + title: "Kosten onderzoek en verbeteringen", + channel: "brief", + isoDate: "2022-11-10T09:17:03.137Z", + description: "Hier komt de uitgebreide beschrijving", + sender: "Gemeente Den Haag", + }, + ], +}; + export const taskDateTime = "2023-09-30T19:47:36.593Z"; export const taskNow = "2023-09-28T19:47:36.593Z"; @@ -262,6 +336,8 @@ export const copyright = "© 2022 Gemeente Den Haag"; Documenten + Eerdere contactmomenten + void); @@ -113,7 +116,7 @@ export const formatContactTimelineDate = ({ return format(date, 'd-M-yyyy', { locale }); }; -const ContactTimelineListItem: React.FC = ({ +const ContactTimelineListItem: React.FC = ({ id, title, description, @@ -131,13 +134,13 @@ const ContactTimelineListItem: React.FC = ({ - {date ? ( - date - ) : ( - - {formatContactTimelineDate({ dateTime: isoDate, todayLabel: todayLabel })} - - )} + {date + ? date + : isoDate && ( + + {formatContactTimelineDate({ dateTime: isoDate, todayLabel: todayLabel })} + + )} @@ -157,13 +160,13 @@ const ContactTimelineListItem: React.FC = ({ {title} )} - {date ? ( - date - ) : ( - - {formatContactTimelineDate({ dateTime: isoDate, todayLabel: todayLabel })} - - )} + {date + ? date + : isoDate && ( + + {formatContactTimelineDate({ dateTime: isoDate, todayLabel: todayLabel })} + + )} {channel} diff --git a/components/ContactTimeline/src/_ContactTimelineHeader.scss b/components/ContactTimeline/src/_ContactTimelineHeader.scss index 003c062446..38e9ca0308 100644 --- a/components/ContactTimeline/src/_ContactTimelineHeader.scss +++ b/components/ContactTimeline/src/_ContactTimelineHeader.scss @@ -5,4 +5,4 @@ --denhaag-step-marker-margin: calc( (var(--denhaag-contact-timeline-step-header-line-height) - var(--denhaag-step-marker-nested-size)) / 2 ); -} \ No newline at end of file +} diff --git a/components/ContactTimeline/src/_ContactTimelineItemSender.scss b/components/ContactTimeline/src/_ContactTimelineItemSender.scss index 6e8669058e..a8d5f44f76 100644 --- a/components/ContactTimeline/src/_ContactTimelineItemSender.scss +++ b/components/ContactTimeline/src/_ContactTimelineItemSender.scss @@ -2,4 +2,4 @@ font-size: var(--denhaag-contact-timeline-step-details-sender-font-size); font-weight: var(--denhaag-contact-timeline-step-details-sender-font-weight); margin-block-start: var(--denhaag-contact-timeline-step-details-sender-margin-block-start); -} \ No newline at end of file +} diff --git a/components/ContactTimeline/src/_ContactTimelineMetaSeparator.scss b/components/ContactTimeline/src/_ContactTimelineMetaSeparator.scss index f86f0f9387..17ef6a595d 100644 --- a/components/ContactTimeline/src/_ContactTimelineMetaSeparator.scss +++ b/components/ContactTimeline/src/_ContactTimelineMetaSeparator.scss @@ -3,4 +3,4 @@ height: var(--denhaag-contact-timeline-step-meta-marker-size); background-color: var(--denhaag-contact-timeline-step-meta-marker-color); border-radius: 50%; -} \ No newline at end of file +} diff --git a/components/ContactTimeline/src/_ContactTimelineStep.scss b/components/ContactTimeline/src/_ContactTimelineStep.scss index 1c63ae4bc9..b50123c402 100644 --- a/components/ContactTimeline/src/_ContactTimelineStep.scss +++ b/components/ContactTimeline/src/_ContactTimelineStep.scss @@ -1,3 +1,3 @@ .denhaag-contact-timeline__step { padding-block-end: var(--denhaag-contact-timeline-step-padding-block-end); -} \ No newline at end of file +} diff --git a/components/ContactTimeline/src/_ContactTimelineStepMarkerConnector.scss b/components/ContactTimeline/src/_ContactTimelineStepMarkerConnector.scss index ed509ef94b..e936ce7f14 100644 --- a/components/ContactTimeline/src/_ContactTimelineStepMarkerConnector.scss +++ b/components/ContactTimeline/src/_ContactTimelineStepMarkerConnector.scss @@ -2,9 +2,8 @@ &.denhaag-contact-timeline__step-marker-connector { top: calc(var(--denhaag-step-marker-size) / 2); bottom: var(--denhaag-contact-timeline-step-marker-connector-bottom); - margin-inline-start: var(--denhaag-contact-timeline-step-marker-connector-desktop-margin-inline-start); - + @media (width <= 767px) { margin-inline-start: var(--denhaag-contact-timeline-step-marker-connector-mobile-margin-inline-start); } diff --git a/components/ContactTimeline/src/stories/react.stories.mdx b/components/ContactTimeline/src/stories/react.stories.mdx deleted file mode 100644 index 466bd7d0dd..0000000000 --- a/components/ContactTimeline/src/stories/react.stories.mdx +++ /dev/null @@ -1,259 +0,0 @@ -import { Canvas, Meta, Story } from "@storybook/addon-docs"; -import { File } from "../../../File"; -import ContactTimeline from "../index"; -import pkg from "../../package.json"; - -export const exampleArgs = { - todayLabel: "vandaag", - items: [ - { - id: "1", - title: "Herinnering: Geef informatie", - channel: "mail", - isoDate: new Date().toISOString(), - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - { - id: "2", - title: "Geef informatie", - channel: "mail", - isoDate: "2023-01-23T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - { - id: "3", - title: "Tip: u heeft recht op extra subsidie, zie hier een extra lange regel", - channel: "mail", - isoDate: "2023-01-06T09:17:03.137Z", - description: - "Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving. Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving.", - sender: "Gemeente Den Haag", - }, - { - id: "4", - title: "Status is veranderd", - channel: "mail", - isoDate: "2022-12-01T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - { - id: "5", - title: "Mijn vraag", - channel: "vraag", - isoDate: "2022-11-29T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Anna Klap", - }, - { - id: "6", - title: "Gesprek over afspraak met adviseur", - channel: "telefoon", - isoDate: "2022-11-12T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - { - id: "7", - title: "Kosten onderzoek en verbeteringen", - channel: "brief", - isoDate: "2022-11-10T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - ], -}; - -export const Template = (args) => { - return ; -}; - - - -# Contact Timeline - -## Default - - - - {Template.bind({})} - - - -## Collapsible - - - - {Template.bind({})} - - - -## Collapsible with expanded item - - - - {Template.bind({})} - - - -## Without sender - - - - {Template.bind({})} - - - -## With file - - - - ), - }, - { - id: "5", - title: "Mijn vraag", - channel: "vraag", - isoDate: "2022-11-29T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Anna Klap", - }, - { - id: "6", - title: "Gesprek over afspraak met adviseur", - channel: "telefoon", - isoDate: "2022-11-12T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - { - id: "7", - title: "Kosten onderzoek en verbeteringen", - channel: "brief", - isoDate: "2022-11-10T09:17:03.137Z", - description: "Hier komt de uitgebreide beschrijving", - sender: "Gemeente Den Haag", - }, - ], - }} - > - {Template.bind({})} - - diff --git a/components/ContactTimeline/src/stories/react.stories.tsx b/components/ContactTimeline/src/stories/react.stories.tsx new file mode 100644 index 0000000000..6e54c7c0bf --- /dev/null +++ b/components/ContactTimeline/src/stories/react.stories.tsx @@ -0,0 +1,236 @@ +import React from 'react'; +import { Meta, StoryObj } from '@storybook/react'; +import { File } from '@gemeente-denhaag/file'; +import readme from '../../README.md?raw'; +import ContactTimeline from '../index'; +import { ContactTimelineProps } from '../ContactTimeline'; + +const exampleArgs: ContactTimelineProps = { + todayLabel: 'vandaag', + items: [ + { + id: '1', + title: 'Herinnering: Geef informatie', + channel: 'mail', + isoDate: new Date().toISOString(), + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '2', + title: 'Geef informatie', + channel: 'mail', + isoDate: '2023-01-23T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '3', + title: 'Tip: u heeft recht op extra subsidie, zie hier een extra lange regel', + channel: 'mail', + isoDate: '2023-01-06T09:17:03.137Z', + description: + 'Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving. Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving.', + sender: 'Gemeente Den Haag', + }, + { + id: '4', + title: 'Status is veranderd', + channel: 'mail', + isoDate: '2022-12-01T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '5', + title: 'Mijn vraag', + channel: 'vraag', + isoDate: '2022-11-29T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Anna Klap', + }, + { + id: '6', + title: 'Gesprek over afspraak met adviseur', + channel: 'telefoon', + isoDate: '2022-11-12T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '7', + title: 'Kosten onderzoek en verbeteringen', + channel: 'brief', + isoDate: '2022-11-10T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + ], +}; + +const exampleArgsWithoutSender: ContactTimelineProps = { + todayLabel: 'vandaag', + collapsible: true, + expandedItems: ['4'], + items: [ + { + id: '1', + title: 'Herinnering: Geef informatie', + channel: 'mail', + isoDate: new Date().toISOString(), + description: 'Hier komt de uitgebreide beschrijving', + }, + { + id: '2', + title: 'Geef informatie', + channel: 'mail', + isoDate: '2023-01-23T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + }, + { + id: '3', + title: 'Tip: u heeft recht op extra subsidie, zie hier een extra lange regel', + channel: 'mail', + isoDate: '2023-01-06T09:17:03.137Z', + description: + 'Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving. Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving.', + }, + { + id: '4', + title: 'Status is veranderd', + channel: 'mail', + isoDate: '2022-12-01T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + }, + { + id: '5', + title: 'Mijn vraag', + channel: 'vraag', + isoDate: '2022-11-29T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + }, + { + id: '6', + title: 'Gesprek over afspraak met adviseur', + channel: 'telefoon', + isoDate: '2022-11-12T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + }, + { + id: '7', + title: 'Kosten onderzoek en verbeteringen', + channel: 'brief', + isoDate: '2022-11-10T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + }, + ], +}; + +const exampleArgsWithFile: ContactTimelineProps = { + todayLabel: 'vandaag', + collapsible: true, + expandedItems: ['4'], + items: [ + { + id: '1', + title: 'Herinnering: Geef informatie', + channel: 'mail', + isoDate: new Date().toISOString(), + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '2', + title: 'Geef informatie', + channel: 'mail', + isoDate: '2023-01-23T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '3', + title: 'Tip: u heeft recht op extra subsidie, zie hier een extra lange regel', + channel: 'mail', + isoDate: '2023-01-06T09:17:03.137Z', + description: + 'Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving. Hier komt de uitgebreide beschrijving, en hier een extra lange uitgebreide beschrijving.', + sender: 'Gemeente Den Haag', + }, + { + id: '4', + title: 'Status is veranderd', + channel: 'mail', + isoDate: '2022-12-01T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + file: ( + + ), + }, + { + id: '5', + title: 'Mijn vraag', + channel: 'vraag', + isoDate: '2022-11-29T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Anna Klap', + }, + { + id: '6', + title: 'Gesprek over afspraak met adviseur', + channel: 'telefoon', + isoDate: '2022-11-12T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + { + id: '7', + title: 'Kosten onderzoek en verbeteringen', + channel: 'brief', + isoDate: '2022-11-10T09:17:03.137Z', + description: 'Hier komt de uitgebreide beschrijving', + sender: 'Gemeente Den Haag', + }, + ], +}; + +const meta = { + title: 'React/Process Steps/Contact Timeline', + id: 'react-contact-timeline', + component: ContactTimeline, + args: exampleArgs, + parameters: { + docs: { + description: { + component: readme, + }, + }, + }, +} as Meta; + +export default meta; + +type Story = StoryObj; +export const Default: Story = {}; + +export const Collapsible: Story = { + args: { ...Default.args, collapsible: true }, +}; + +export const CollapsibleWithExpandedItem: Story = { + args: { ...Default.args, collapsible: true, expandedItems: ['3'] }, +}; + +export const WithoutSender: Story = { + args: exampleArgsWithoutSender, +}; + +export const WithFile: Story = { + args: exampleArgsWithFile, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89f286d29b..e515a37942 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -528,6 +528,9 @@ importers: components/ContactTimeline: dependencies: + '@gemeente-denhaag/file': + specifier: workspace:* + version: link:../File '@gemeente-denhaag/icons': specifier: workspace:* version: link:../Icons