|
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