|
16 | 16 |
|
17 | 17 | function setValue(d: Date) { |
18 | 18 | if (d.getTime() !== value?.getTime()) { |
19 | | - value = cloneDate(d) |
20 | | - clamp(min, max) |
| 19 | + browseDate = clamp(d, min, max) |
| 20 | + value = cloneDate(browseDate) |
21 | 21 | } |
22 | 22 | } |
23 | 23 | function browse(d: Date) { |
24 | | - browseDate = value ? cloneDate(d) : cloneDate(defaultDate) |
25 | | - clamp(min, max) |
| 24 | + browseDate = clamp(d, min, max) |
26 | 25 | if (!browseWithoutSelecting) { |
27 | 26 | setValue(browseDate) |
28 | 27 | } |
|
38 | 37 | export let min = new Date(defaultDate.getFullYear() - 20, 0, 1) |
39 | 38 | /** The latest year the user can select */ |
40 | 39 | export let max = new Date(defaultDate.getFullYear(), 11, 31, 23, 59, 59, 999) |
41 | | - function clamp(min: Date, max: Date) { |
| 40 | + $: if (value && value > max) { |
| 41 | + value = cloneDate(max) |
| 42 | + } else if (value && value < min) { |
| 43 | + value = cloneDate(min) |
| 44 | + } |
| 45 | + function clamp(d: Date, min: Date, max: Date) { |
42 | 46 | if (browseDate > max) { |
43 | | - browseDate = cloneDate(max) |
| 47 | + return cloneDate(max) |
44 | 48 | } else if (browseDate < min) { |
45 | | - browseDate = cloneDate(min) |
| 49 | + return cloneDate(min) |
| 50 | + } else { |
| 51 | + return cloneDate(d) |
46 | 52 | } |
47 | 53 | } |
48 | 54 |
|
49 | | - $: if (value) { |
50 | | - clamp(min, max) |
51 | | - browseDate = cloneDate(value) |
52 | | - } |
53 | | -
|
54 | 55 | let years = getYears(min, max) |
55 | 56 | $: years = getYears(min, max) |
56 | 57 | function getYears(min: Date, max: Date) { |
|
68 | 69 | export let browseWithoutSelecting = false |
69 | 70 |
|
70 | 71 | let browseYear = browseDate.getFullYear() |
71 | | - function getBrowseYear(tmpPickerDate: Date) { |
72 | | - browseMonth = tmpPickerDate.getMonth() |
| 72 | + function getBrowseYear(d: Date) { |
| 73 | + browseYear = d.getFullYear() |
73 | 74 | } |
74 | 75 | $: getBrowseYear(browseDate) |
75 | 76 | function setYear(newYear: number) { |
76 | 77 | browseDate.setFullYear(newYear) |
77 | 78 | browseDate = browseDate |
78 | | - if (value) { |
79 | | - browse(browseDate) |
80 | | - } |
| 79 | + browse(browseDate) |
81 | 80 | } |
82 | 81 | $: setYear(browseYear) |
83 | 82 |
|
|
98 | 97 |
|
99 | 98 | const maxDate = getMonthLength(newYear, newMonth) |
100 | 99 | const newDate = Math.min(browseDate.getDate(), maxDate) |
101 | | - browseDate = new Date( |
102 | | - newYear, |
103 | | - newMonth, |
104 | | - newDate, |
105 | | - browseDate.getHours(), |
106 | | - browseDate.getMinutes(), |
107 | | - browseDate.getSeconds(), |
108 | | - browseDate.getMilliseconds() |
| 100 | + browse( |
| 101 | + new Date( |
| 102 | + newYear, |
| 103 | + newMonth, |
| 104 | + newDate, |
| 105 | + browseDate.getHours(), |
| 106 | + browseDate.getMinutes(), |
| 107 | + browseDate.getSeconds(), |
| 108 | + browseDate.getMilliseconds() |
| 109 | + ) |
109 | 110 | ) |
110 | | - browse(browseDate) |
111 | 111 | } |
112 | 112 | $: setMonth(browseMonth) |
113 | 113 |
|
|
0 commit comments