|
23 | 23 | } |
24 | 24 | } |
25 | 25 |
|
| 26 | + function setValueDate(d: Date) { |
| 27 | + if (d.getTime() !== value?.getTime()) { |
| 28 | + browseDate = clampDate(d, min, max) |
| 29 | + value = cloneDate(browseDate) |
| 30 | + } |
| 31 | + } |
| 32 | +
|
26 | 33 | /** Set the browseDate */ |
27 | 34 | function browse(d: Date) { |
28 | | - browseDate = clamp(d, min, max) |
| 35 | + browseDate = clampDate(d, min, max) |
29 | 36 | if (!browseWithoutSelecting && value) { |
30 | 37 | setValue(browseDate) |
31 | 38 | } |
|
64 | 71 | return cloneDate(d) |
65 | 72 | } |
66 | 73 | } |
| 74 | + function clampDate(d: Date, min: Date, max: Date) { |
| 75 | + const limit = clamp(d, min, max) |
| 76 | + if (limit.getTime() !== d.getTime()) { |
| 77 | + d = new Date( |
| 78 | + limit.getFullYear(), |
| 79 | + limit.getMonth(), |
| 80 | + limit.getDate(), |
| 81 | + d.getHours(), |
| 82 | + d.getMinutes(), |
| 83 | + d.getSeconds(), |
| 84 | + d.getMilliseconds(), |
| 85 | + ) |
| 86 | + d = clamp(d, min, max) |
| 87 | + } |
| 88 | + return d |
| 89 | + } |
67 | 90 |
|
68 | 91 | /** The date shown in the popup when none is selected */ |
69 | | - let browseDate = value ? cloneDate(value) : cloneDate(clamp(defaultDate, min, max)) |
| 92 | + let browseDate = value ? cloneDate(value) : cloneDate(clampDate(defaultDate, min, max)) |
70 | 93 | $: setBrowseDate(value) |
71 | 94 | function setBrowseDate(value: Date | null) { |
72 | 95 | if (browseDate.getTime() !== value?.getTime()) { |
|
132 | 155 | browseDate.setFullYear(calendarDay.year) |
133 | 156 | browseDate.setMonth(calendarDay.month) |
134 | 157 | browseDate.setDate(calendarDay.number) |
135 | | - setValue(browseDate) |
| 158 | + setValueDate(browseDate) |
136 | 159 | dispatch('select', cloneDate(browseDate)) |
137 | 160 | } |
138 | 161 | } |
|
205 | 228 | return |
206 | 229 | } else if (e.key === 'ArrowUp') { |
207 | 230 | browseDate.setDate(browseDate.getDate() - 7) |
208 | | - setValue(browseDate) |
| 231 | + setValueDate(browseDate) |
209 | 232 | } else if (e.key === 'ArrowDown') { |
210 | 233 | browseDate.setDate(browseDate.getDate() + 7) |
211 | | - setValue(browseDate) |
| 234 | + setValueDate(browseDate) |
212 | 235 | } else if (e.key === 'ArrowLeft') { |
213 | 236 | browseDate.setDate(browseDate.getDate() - 1) |
214 | | - setValue(browseDate) |
| 237 | + setValueDate(browseDate) |
215 | 238 | } else if (e.key === 'ArrowRight') { |
216 | 239 | browseDate.setDate(browseDate.getDate() + 1) |
217 | | - setValue(browseDate) |
| 240 | + setValueDate(browseDate) |
218 | 241 | } else if (e.key === 'Enter') { |
219 | 242 | setValue(browseDate) |
220 | 243 | dispatch('select', cloneDate(browseDate)) |
|
0 commit comments