diff --git a/packages/ffe-datepicker-react/src/datepicker/Datepicker.stories.tsx b/packages/ffe-datepicker-react/src/datepicker/Datepicker.stories.tsx index d3511b6926..99750b07d9 100644 --- a/packages/ffe-datepicker-react/src/datepicker/Datepicker.stories.tsx +++ b/packages/ffe-datepicker-react/src/datepicker/Datepicker.stories.tsx @@ -1,7 +1,8 @@ -import React, { useState } from 'react'; +import { SecondaryButton } from '@sb1/ffe-buttons-react'; +import { Input, InputGroup } from '@sb1/ffe-form-react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { default as React, useState } from 'react'; import { Datepicker, DatepickerProps } from './Datepicker'; -import type { StoryObj, Meta } from '@storybook/react'; -import { InputGroup } from '@sb1/ffe-form-react'; const meta: Meta = { title: 'Komponenter/Datepicker/Datepicker', @@ -102,3 +103,98 @@ export const CalendarAbove: Story = { ); }, }; + +export const TwoWayControlledComponent: Story = { + args: { + ...Standard.args, + }, + render: function Render({ ...args }: DatepickerProps) { + const [date, setDate] = useState('01.12.2024'); + const [lastUpdateSource, setLastUpdateSource] = useState('initiell'); + + const handleDateChange = (newDate: string) => { + setDate(newDate); + setLastUpdateSource('datepicker'); + }; + + const predefinedDates = [ + { + label: 'I dag', + value: () => { + const today = new Date(); + return `${String(today.getDate()).padStart(2, '0')}.${String(today.getMonth() + 1).padStart(2, '0')}.${today.getFullYear()}`; + }, + }, + { label: 'Begynnelsen av året', value: '01.01.2024' }, + { label: 'Slutten av året', value: '31.12.2024' }, + { label: 'Midten av året', value: '01.07.2024' }, + ]; + + return ( +
+ + + + +
+
Kontroller datepicker eksternt:
+
+ {predefinedDates.map((presetDate, index) => ( + { + const newValue = + typeof presetDate.value === 'function' + ? presetDate.value() + : presetDate.value; + setDate(newValue); + setLastUpdateSource('ekstern'); + }} + > + {presetDate.label} + + ))} +
+ +
+
Manuell ekstern input:
+
+ { + setDate(e.target.value); + setLastUpdateSource('manuell'); + }} + placeholder="dd.mm.åååå" + /> +
+
+ +
+
Nåværende tilstand:
+
Dato: {date}
+
Sist oppdatert av: {lastUpdateSource}
+
+
+
+ ); + }, +}; diff --git a/packages/ffe-datepicker-react/src/datepicker/Datepicker.tsx b/packages/ffe-datepicker-react/src/datepicker/Datepicker.tsx index 19e0e0f3fb..8f8d34b599 100644 --- a/packages/ffe-datepicker-react/src/datepicker/Datepicker.tsx +++ b/packages/ffe-datepicker-react/src/datepicker/Datepicker.tsx @@ -9,6 +9,7 @@ export interface DatepickerProps extends DatepickerCompProps { /** Hack that changes InputGroups label to a span to be wcag complient */ setInputGroupLabelAsSpan?: () => void; } + export const Datepicker: React.FC = ({ locale = 'nb' as const, value, diff --git a/packages/ffe-datepicker-react/src/datepicker/DatepickerContext.tsx b/packages/ffe-datepicker-react/src/datepicker/DatepickerContext.tsx index 9141f6682a..4c51305015 100644 --- a/packages/ffe-datepicker-react/src/datepicker/DatepickerContext.tsx +++ b/packages/ffe-datepicker-react/src/datepicker/DatepickerContext.tsx @@ -1,7 +1,7 @@ import React, { createContext, useEffect, useState } from 'react'; +import { getSimpleDateFromString } from '../datelogic/simpledate'; import { Locale } from '../datelogic/types'; import { validateDate } from '../util/dateUtil'; -import { getSimpleDateFromString } from '../datelogic/simpledate'; import { toNumber } from './toNumber'; interface DatepickerContextInterface {