From 426b691b79787add35f729c52d94442c99021130 Mon Sep 17 00:00:00 2001 From: Gethin Webster Date: Fri, 20 Mar 2026 15:51:30 +0100 Subject: [PATCH] feat: Add ability to control first month shown in date range picker --- package-lock.json | 1 + pages/date-range-picker/common.tsx | 20 +++ .../month-calendar-permutations.page.tsx | 6 + .../date-range-picker/range-calendar.page.tsx | 1 + .../year-calendar-permutations.page.tsx | 6 +- .../__snapshots__/documenter.test.ts.snap | 16 +++ .../date-range-picker-absolute.test.tsx | 65 ++++++++++ .../calendar/__tests__/utils.test.ts | 119 +++++++++++++++--- src/date-range-picker/calendar/index.tsx | 3 +- src/date-range-picker/calendar/interfaces.ts | 1 + src/date-range-picker/calendar/utils.ts | 34 ++++- src/date-range-picker/dropdown.tsx | 5 +- src/date-range-picker/index.tsx | 2 + src/date-range-picker/interfaces.ts | 8 ++ 14 files changed, 260 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a1eea1340..807a0d6b64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "@cloudscape-design/components", "version": "3.0.0", + "hasInstallScript": true, "dependencies": { "@cloudscape-design/collection-hooks": "^1.0.0", "@cloudscape-design/component-toolkit": "^1.0.0-beta", diff --git a/pages/date-range-picker/common.tsx b/pages/date-range-picker/common.tsx index 91dc392584..6b3e4f7760 100644 --- a/pages/date-range-picker/common.tsx +++ b/pages/date-range-picker/common.tsx @@ -27,6 +27,7 @@ interface DateRangePickerPageSettings { disabledDates?: DisabledDate; showDisabledReason?: boolean; hasValue?: boolean; + absoluteMultiGridStartPeriod?: DateRangePickerProps.StartPeriod; } const defaultSettings: Required = { @@ -45,6 +46,7 @@ const defaultSettings: Required = { disabledDates: 'none', showDisabledReason: true, hasValue: true, + absoluteMultiGridStartPeriod: 'current', }; export function useDateRangePickerSettings( @@ -89,6 +91,7 @@ export function useDateRangePickerSettings( const disabledDates = urlParams.disabledDates ?? def('disabledDates'); const showDisabledReason = parseBoolean(def('showDisabledReason'), urlParams.showDisabledReason); const hasValue = parseBoolean(def('hasValue'), urlParams.hasValue); + const absoluteMultiGridStartPeriod = urlParams.absoluteMultiGridStartPeriod ?? def('absoluteMultiGridStartPeriod'); const settings: Required = { dateOnly, monthOnly, @@ -105,6 +108,7 @@ export function useDateRangePickerSettings( disabledDates, showDisabledReason, hasValue, + absoluteMultiGridStartPeriod, }; const setSettings = (settings: DateRangePickerPageSettings) => setUrlParams(settings); @@ -256,6 +260,7 @@ export function Settings({ disabledDates, showDisabledReason, hasValue, + absoluteMultiGridStartPeriod, }, setSettings, }: { @@ -274,6 +279,7 @@ export function Settings({ const dateFormatOptions = [{ value: 'iso' }, { value: 'slashed' }, { value: 'long-localized' }]; const inputDateFormat = [{ value: 'iso' }, { value: 'slashed' }]; const timeFormatOptions = [{ value: 'hh:mm:ss' }, { value: 'hh:mm' }, { value: 'hh' }]; + const absoluteMultiGridStartPeriodOptions = [{ value: 'current' }, { value: 'previous' }]; return ( @@ -332,6 +338,20 @@ export function Settings({ /> + +