From 3b53cdc6bf85cd11dfc6f44f2d5dbb6b972aa62e Mon Sep 17 00:00:00 2001 From: JYC Date: Thu, 11 Jan 2024 17:24:59 +0100 Subject: [PATCH] Feat/date range weekstarton (#208) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add fr translation & use the "week" to fit the weekstartOn * range & fr & reactivity * adding more translation * internal var name * typeHelpers * fix my typo 🙈 --- .../src/lib/components/DateButton.svelte | 4 +- .../src/lib/components/DatePickerField.svelte | 6 +- .../src/lib/components/DateRange.svelte | 30 +- .../lib/components/DateRangeDisplay.svelte | 7 +- .../src/lib/components/DateRangeField.svelte | 23 +- .../svelte-ux/src/lib/types/typeHelpers.ts | 18 + packages/svelte-ux/src/lib/utils/date.test.ts | 16 + packages/svelte-ux/src/lib/utils/date.ts | 268 ++++++------ packages/svelte-ux/src/lib/utils/dateRange.ts | 407 +++++------------- .../svelte-ux/src/lib/utils/dictionary.ts | 21 + packages/svelte-ux/src/lib/utils/locale.ts | 43 ++ packages/svelte-ux/src/routes/+layout.svelte | 50 +++ .../docs/components/DateField/+page.svelte | 11 +- .../docs/components/DateRange/+page.svelte | 35 +- 14 files changed, 454 insertions(+), 485 deletions(-) diff --git a/packages/svelte-ux/src/lib/components/DateButton.svelte b/packages/svelte-ux/src/lib/components/DateButton.svelte index 8c4f6786b..94ac20538 100644 --- a/packages/svelte-ux/src/lib/components/DateButton.svelte +++ b/packages/svelte-ux/src/lib/components/DateButton.svelte @@ -19,7 +19,7 @@ export let fade: boolean = false; export let format = getCustomFormat(periodType); - const { format: format_ux } = getSettings(); + const { format: format_ux, localeSettings } = getSettings(); const settingsClasses = getComponentClasses('DateButton'); function getCustomFormat(periodType: PeriodType) { @@ -32,7 +32,7 @@ } } - const { start, end, isSame } = getDateFuncsByPeriodType(periodType); + const { start, end, isSame } = getDateFuncsByPeriodType($localeSettings, periodType); $: isSelected = selected instanceof Date diff --git a/packages/svelte-ux/src/lib/components/DatePickerField.svelte b/packages/svelte-ux/src/lib/components/DatePickerField.svelte index bc795f9b6..e0a48ca8b 100644 --- a/packages/svelte-ux/src/lib/components/DatePickerField.svelte +++ b/packages/svelte-ux/src/lib/components/DatePickerField.svelte @@ -32,7 +32,7 @@ export let center = false; const settingsClasses = getComponentClasses('DatePickerField'); - const { format } = getSettings(); + const { format, localeSettings } = getSettings(); $: dictionary = $format.settings.dictionary; let open: boolean = false; @@ -83,7 +83,7 @@ class="p-2" on:click={() => { if (value && periodType) { - const { add } = getDateFuncsByPeriodType(periodType); + const { add } = getDateFuncsByPeriodType($localeSettings, periodType); value = add(value, -1); dispatch('change', value); } @@ -121,7 +121,7 @@ class="p-2" on:click={() => { if (value && periodType) { - const { add } = getDateFuncsByPeriodType(periodType); + const { add } = getDateFuncsByPeriodType($localeSettings, periodType); value = add(value, 1); dispatch('change', value); } diff --git a/packages/svelte-ux/src/lib/components/DateRange.svelte b/packages/svelte-ux/src/lib/components/DateRange.svelte index 53458a214..7d253f6ba 100644 --- a/packages/svelte-ux/src/lib/components/DateRange.svelte +++ b/packages/svelte-ux/src/lib/components/DateRange.svelte @@ -26,8 +26,8 @@ /** Period types to show */ export let periodTypes: PeriodType[] = [ PeriodType.Day, - PeriodType.WeekSun, - PeriodType.BiWeek1Sun, + PeriodType.Week, + PeriodType.BiWeek1, // PeriodType.BiWeek2Sun, PeriodType.Month, PeriodType.Quarter, @@ -37,7 +37,7 @@ export let getPeriodTypePresets = getDateRangePresets; const settingsClasses = getComponentClasses('DateRange'); - const { format } = getSettings(); + const { format, localeSettings } = getSettings(); let selectedPeriodType = selected?.periodType ?? periodTypes[0]; let selectedPreset: string | null = null; @@ -53,7 +53,7 @@ }; }); - $: presetOptions = getPeriodTypePresets(selectedPeriodType).map((preset) => { + $: presetOptions = getPeriodTypePresets($localeSettings, selectedPeriodType).map((preset) => { return { label: preset.label, value: getDateRangeStr(preset.value), @@ -70,7 +70,7 @@ // Apply date-fns function based on type and from/to. let newSelected = { ...selected, periodType: selectedPeriodType }; - const { start, end } = getDateFuncsByPeriodType(selectedPeriodType); + const { start, end } = getDateFuncsByPeriodType($localeSettings, selectedPeriodType); let newActiveDate: typeof activeDate = activeDate === 'from' ? 'to' : 'from'; @@ -95,7 +95,7 @@ // Expand selection range to match period type (day => month, etc) function onPeriodTypeChange(periodType: PeriodType) { - const { start, end } = getDateFuncsByPeriodType(periodType); + const { start, end } = getDateFuncsByPeriodType($localeSettings, periodType); if (selected!.from) { selected!.from = start(selected!.from); } @@ -121,7 +121,9 @@ // Attempt to maintain selected preset if labels match if (selected?.from && selected?.to && selected.periodType) { - const prevPeriodTypePreset = [...getPeriodTypePresets(selected.periodType)].find( + const prevPeriodTypePreset = [ + ...getPeriodTypePresets($localeSettings, selected.periodType), + ].find( (x) => x.value.from && isSameDay(x.value.from, selected!.from!) && @@ -130,9 +132,9 @@ ); if (prevPeriodTypePreset && newPeriodType) { - const newPeriodTypePreset = [...getPeriodTypePresets(newPeriodType)].find( - (x) => x.label === prevPeriodTypePreset.label - ); + const newPeriodTypePreset = [ + ...getPeriodTypePresets($localeSettings, newPeriodType), + ].find((x) => x.label === prevPeriodTypePreset.label); if (newPeriodTypePreset) { newSelected.from = newPeriodTypePreset.value.from; @@ -171,11 +173,11 @@
-
Start
+
{$localeSettings.dictionary.Date.Start}
{#if selected?.from}
{$format(selected.from, PeriodType.Day)}
{:else} -
Empty
+
{$localeSettings.dictionary.Date.Empty}
{/if}