|
1 | 1 | <script lang="ts">
|
2 | 2 | import { createEventDispatcher } from 'svelte';
|
3 |
| - import { format as dateFormat, isWithinInterval } from 'date-fns'; |
| 3 | + import { isWithinInterval } from 'date-fns'; |
4 | 4 |
|
5 | 5 | import Button from './Button.svelte';
|
6 |
| - import { getDateFuncsByPeriodType, PeriodType } from '../utils/date'; |
| 6 | + import { DateToken, getDateFuncsByPeriodType, PeriodType } from '../utils/date'; |
7 | 7 | import type { SelectedDate } from '../utils/date';
|
8 | 8 | import { cls } from '../utils/styles';
|
9 | 9 | import { getComponentTheme } from './theme';
|
| 10 | + import { format as format_ux } from '../utils'; |
10 | 11 |
|
11 | 12 | const dispatch = createEventDispatcher();
|
12 | 13 |
|
|
16 | 17 | export let selected: SelectedDate;
|
17 | 18 | export let hidden: boolean = false;
|
18 | 19 | export let fade: boolean = false;
|
19 |
| - export let format = getDefaultFormat(periodType); |
| 20 | + export let format = getCustomFormat(periodType); |
20 | 21 |
|
21 | 22 | const theme = getComponentTheme('DateButton');
|
22 | 23 |
|
23 |
| - function getDefaultFormat(periodType: PeriodType) { |
| 24 | + function getCustomFormat(periodType: PeriodType) { |
24 | 25 | switch (periodType) {
|
25 |
| - case PeriodType.CalendarYear: |
26 |
| - case PeriodType.FiscalYearOctober: |
27 |
| - return 'yyyy'; |
28 |
| - case PeriodType.Month: |
29 |
| - return 'MMM'; |
30 | 26 | case PeriodType.Day:
|
31 |
| - return 'd'; |
| 27 | + return DateToken.DayOfMonth_numeric; |
32 | 28 | default:
|
33 |
| - return 'MM/dd/yyyy'; |
| 29 | + // returning undefined will use the default format of PeriodType |
| 30 | + return undefined; |
34 | 31 | }
|
35 | 32 | }
|
36 | 33 |
|
|
40 | 37 | selected instanceof Date
|
41 | 38 | ? isSame(date, selected)
|
42 | 39 | : selected instanceof Array
|
43 |
| - ? selected.some((d) => isSame(date, d)) |
44 |
| - : selected instanceof Object |
45 |
| - ? selected.from |
46 |
| - ? isWithinInterval(date, { |
47 |
| - start: start(selected.from), |
48 |
| - end: end(selected.to ?? selected.from), |
49 |
| - }) |
50 |
| - : false |
51 |
| - : false; |
| 40 | + ? selected.some((d) => isSame(date, d)) |
| 41 | + : selected instanceof Object |
| 42 | + ? selected.from |
| 43 | + ? isWithinInterval(date, { |
| 44 | + start: start(selected.from), |
| 45 | + end: end(selected.to ?? selected.from), |
| 46 | + }) |
| 47 | + : false |
| 48 | + : false; |
52 | 49 |
|
53 | 50 | $: isSelectedStart =
|
54 | 51 | selected instanceof Date
|
55 | 52 | ? isSame(date, selected)
|
56 | 53 | : selected instanceof Array
|
57 |
| - ? selected.some((d) => isSame(date, d)) |
58 |
| - : selected instanceof Object |
59 |
| - ? isSame(date, selected.from ?? selected.to) |
60 |
| - : false; |
| 54 | + ? selected.some((d) => isSame(date, d)) |
| 55 | + : selected instanceof Object |
| 56 | + ? isSame(date, selected.from ?? selected.to) |
| 57 | + : false; |
61 | 58 |
|
62 | 59 | $: isSelectedEnd =
|
63 | 60 | selected instanceof Date
|
64 | 61 | ? isSame(date, selected)
|
65 | 62 | : selected instanceof Array
|
66 |
| - ? selected.some((d) => isSame(date, d)) |
67 |
| - : selected instanceof Object |
68 |
| - ? isSame(date, selected.to ?? selected.from) |
69 |
| - : false; |
| 63 | + ? selected.some((d) => isSame(date, d)) |
| 64 | + : selected instanceof Object |
| 65 | + ? isSame(date, selected.to ?? selected.from) |
| 66 | + : false; |
70 | 67 |
|
71 | 68 | $: isCurrent = isSame(date, new Date());
|
72 | 69 |
|
|
107 | 104 | dispatch('dateChange', date);
|
108 | 105 | }}
|
109 | 106 | >
|
110 |
| - {dateFormat(date, format)} |
| 107 | + {format_ux(date, periodType, { custom: format })} |
111 | 108 | </Button>
|
112 | 109 | </div>
|
0 commit comments