diff --git a/packages/dnb-design-system-portal/src/docs/uilib/about-the-lib/releases/eufemia/v10-info.md b/packages/dnb-design-system-portal/src/docs/uilib/about-the-lib/releases/eufemia/v10-info.md index 6dee8fd5359..44e05b8418b 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/about-the-lib/releases/eufemia/v10-info.md +++ b/packages/dnb-design-system-portal/src/docs/uilib/about-the-lib/releases/eufemia/v10-info.md @@ -23,6 +23,11 @@ v10 of @dnb/eufemia contains _breaking changes_. As a migration process, you can 1. Find the `sticky_offset` property and replace it with `stickyOffset`. 1. Find the `/elements/Table` property and replace it with `/components/Table`. +### [Timeline](/uilib/components/timeline) + +1. Find the `name` property in your Timeline JSX syntax and replace it with `title`. +1. Find the `date` property in your Timeline JSX syntax and replace it with `subtitle`. + ## Install To upgrade to @dnb/eufemia v10 with NPM, use: diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/timeline/Examples.js b/packages/dnb-design-system-portal/src/docs/uilib/components/timeline/Examples.js index 4aae668ad96..81b7c241109 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/timeline/Examples.js +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/timeline/Examples.js @@ -16,7 +16,7 @@ export const TimelineSingleCompleted = () => ( ( ( ( () => { const events = [ { - name: "Completed event", - date: "10. september 2021", + title: "Completed event", + subtitle: "10. september 2021", state: "completed" }, { - name: "Current event", + title: "Current event", infoMessage: "Additional information about this step if needed.", state: "current", }, { - name: "Upcoming event", + title: "Upcoming event", state: "upcoming", }, ]; @@ -98,19 +98,19 @@ export const TimelineMultipleCompletedData = () => ( () => { const events = [ { - name: "Completed event#1", + title: "Completed event#1", infoMessage: "Additional information about this step if needed.", - date: "10. september 2021", + subtitle: "10. september 2021", state: "completed" }, { - name: "Completed event#2", + title: "Completed event#2", infoMessage: "Additional information about this step if needed.", state: "completed" }, { - name: "Completed event#3", - date: "10. september 2021", + title: "Completed event#3", + subtitle: "10. september 2021", state: "completed" }, ]; @@ -133,19 +133,19 @@ export const TimelineMultipleUpcomingData = () => ( () => { const events = [ { - name: "Upcoming event#1", + title: "Upcoming event#1", infoMessage: "Additional information about this step if needed.", - date: "10. september 2021", + subtitle: "10. september 2021", state: "upcoming" }, { - name: "Upcoming event#2", + title: "Upcoming event#2", infoMessage: "Additional information about this step if needed.", state: "upcoming" }, { - name: "Upcoming event#3", - date: "10. september 2021", + title: "Upcoming event#3", + subtitle: "10. september 2021", state: "upcoming" }, ]; @@ -168,19 +168,19 @@ export const TimelineMultipleCurrentData = () => ( () => { const events = [ { - name: "Current event#1", + title: "Current event#1", infoMessage: "Additional information about this step if needed.", - date: "10. september 2021", + subtitle: "10. september 2021", state: "current" }, { - name: "Current event#2", + title: "Current event#2", infoMessage: "Additional information about this step if needed.", state: "current" }, { - name: "Current event#3", - date: "10. september 2021", + title: "Current event#3", + subtitle: "10. september 2021", state: "current" }, ]; @@ -198,17 +198,17 @@ export const TimelineMultiple = () => ( {() => /* jsx */ ` @@ -226,20 +226,20 @@ export const TimelineStates = () => ( () => { const events = [ { - name: "Completed event", - date: "10. september 2021", + title: "Completed event", + subtitle: "10. september 2021", infoMessage: "Additional information about this step if needed.", state: "completed" }, { - name: "Current event", - date: "10. september 2021", + title: "Current event", + subtitle: "10. september 2021", infoMessage: "Additional information about this step if needed.", state: "current" }, { - name: "Upcoming event", - date: "10. september 2021", + title: "Upcoming event", + subtitle: "10. september 2021", infoMessage: "Additional information about this step if needed.", state: "upcoming" }, @@ -264,19 +264,19 @@ export const TimelineIcons = () => ( () => { const events = [ { - name: "Completed event", + title: "Completed event", state: "completed", icon: Confetti, iconAlt: "Celebration" }, { - name: "Current event", + title: "Current event", state: "current", icon: Card, iconAlt: "Bank card" }, { - name: "Upcoming event", + title: "Upcoming event", state: "upcoming", icon: AccountCard, iconAlt: "Money bag & card" @@ -298,18 +298,18 @@ export const TimelineSkeleton = () => ( skeleton data={[ { - name: "Upcoming", - date: "10. september 2021", + title: "Upcoming", + subtitle: "10. september 2021", state: "upcoming" }, { - name: "Current", - date: "11. september 2021", + title: "Current", + subtitle: "11. september 2021", state: "current" }, { - name: "Completed", - date: "12. september 2021", + title: "Completed", + subtitle: "12. september 2021", state: "completed" }, ]} @@ -323,18 +323,18 @@ export const TimelineAsChildrenSkeleton = () => ( {() => /* jsx */ ` @@ -348,14 +348,14 @@ export const TimelineItemSkeleton = () => ( { } = context // Extract additional props from global context + const allProps = usePropsWithContext( + localProps, + defaultProps, + context?.TimelineItem, + { skeleton: context?.skeleton } + ) + + // deprecated + if (allProps.name) { + delete allProps.name + allProps.title = allProps.name + } + // deprecated + if (allProps.date) { + delete allProps.date + allProps.subtitle = allProps.date + } + const { icon, iconAlt, - name, - date, + title, + subtitle, infoMessage, state, skeleton, ...props - } = usePropsWithContext( - localProps, - defaultProps, - context?.TimelineItem, - { skeleton: context?.skeleton } - ) + } = allProps const stateIsCompleted = state === 'completed' const stateIsCurrent = state === 'current' @@ -139,13 +162,13 @@ const TimelineItem = (localProps: TimelineItemProps) => { ) } - const TimelineItemName = () => { + const TimelineItemTitle = () => { return ( - {name} + {title} ) } @@ -154,37 +177,41 @@ const TimelineItem = (localProps: TimelineItemProps) => { return ( - + ) } - const getDate = () => { - const TimelineItemDate = ({ date }: { date: React.ReactNode }) => ( + const getSubtitle = () => { + const TimelineItemSubtitle = ({ + subtitle, + }: { + subtitle: React.ReactNode + }) => (
- {date} + {subtitle}
) - if (!date) { + if (!subtitle) { return null } - if (Array.isArray(date)) { - return date.map((date, i) => ( - + if (Array.isArray(subtitle)) { + return subtitle.map((subtitle, i) => ( + )) } - return + return } const TimelineItemContent = () => { return (
- {getDate()} + {getSubtitle()} {infoMessage && ( { ) @@ -34,9 +34,9 @@ describe('Timeline', () => { it('renders a timeline with multiple items by children', () => { render( - - - + + + ) @@ -48,11 +48,11 @@ describe('Timeline', () => { ) @@ -69,7 +69,7 @@ describe('Timeline', () => { { { }) describe('TimelineItem', () => { - it('renders name', () => { - const name = 'Completed' - render() + it('renders title', () => { + const title = 'Completed' + render() expect( - screen.queryByTestId('timeline-item-label-name').textContent - ).toBe(name) + screen.queryByTestId('timeline-item-label-title').textContent + ).toBe(title) }) - it('renders date', () => { - const date = '10. september 2021' + it('renders subtitle', () => { + const subtitle = '10. september 2021' render( - + ) expect( - screen.queryByTestId('timeline-item-content-date').textContent - ).toBe(date) + screen.queryByTestId('timeline-item-content-subtitle').textContent + ).toBe(subtitle) }) - it('renders dates', () => { - const dates = ['10. september 2021', '11. september 2021'] + it('renders subtitles', () => { + const subtitles = ['10. september 2021', '11. september 2021'] render( - + ) expect( - screen.queryAllByTestId('timeline-item-content-date') + screen.queryAllByTestId('timeline-item-content-subtitle') ).toHaveLength(2) expect( - screen.queryAllByTestId('timeline-item-content-date')[0] + screen.queryAllByTestId('timeline-item-content-subtitle')[0] .textContent - ).toBe(dates[0]) + ).toBe(subtitles[0]) expect( - screen.queryAllByTestId('timeline-item-content-date')[1] + screen.queryAllByTestId('timeline-item-content-subtitle')[1] .textContent - ).toBe(dates[1]) + ).toBe(subtitles[1]) }) it('renders info message', () => { @@ -151,7 +159,7 @@ describe('Timeline', () => { render( ) @@ -167,7 +175,7 @@ describe('Timeline', () => { render( ) @@ -181,7 +189,7 @@ describe('Timeline', () => { const iconAlt = 'custom_alt_label' render( @@ -194,7 +202,7 @@ describe('Timeline', () => { it('renders skeleton if skeleton is true', () => { const skeletonClassName = 'dnb-skeleton' - render() + render() expect(screen.queryByTestId('timeline-item').className).toMatch( skeletonClassName @@ -206,7 +214,7 @@ describe('Timeline', () => { render( - + ) @@ -217,42 +225,42 @@ describe('Timeline', () => { describe('renders default icon based on state property', () => { it('renders check icon when state is completed', () => { - render() + render() expect(screen.queryByRole('img').getAttribute('aria-label')).toBe( 'check icon' ) }) it('renders pin icon when state is current', () => { - render() + render() expect(screen.queryByRole('img').getAttribute('aria-label')).toBe( 'pin icon' ) }) it('renders calendar icon when state is upcoming', () => { - render() + render() expect(screen.queryByRole('img').getAttribute('aria-label')).toBe( 'calendar icon' ) }) - it('renders alt label Utført when state is completed', () => { - render() + it('renders alt label "Utfør"t when state is completed', () => { + render() expect(screen.queryByRole('img').getAttribute('alt')).toBe( 'Utført' ) }) - it('renders alt label Nåværende when state is current', () => { - render() + it('renders alt label "Nåværende" when state is current', () => { + render() expect(screen.queryByRole('img').getAttribute('alt')).toBe( 'Nåværende' ) }) - it('renders alt label Kommende when state is upcoming', () => { - render() + it('renders alt label "Kommende" when state is upcoming', () => { + render() expect(screen.queryByRole('img').getAttribute('alt')).toBe( 'Kommende' ) @@ -267,21 +275,21 @@ describe('Timeline aria', () => {