|
56 | 56 | </template> |
57 | 57 |
|
58 | 58 | <script lang="ts"> |
59 | | - import { computed, defineComponent, PropType, ref, toRef } from 'vue'; |
| 59 | + import { computed, defineComponent, onMounted, PropType, ref, toRef } from 'vue'; |
60 | 60 | import { ChevronUpIcon, ChevronDownIcon, ClockIcon } from '../Icons'; |
61 | 61 | import { IDateFilter, IDefaultSelect, ITimeRange, TimeInputProps } from '../../interfaces'; |
62 | 62 | import { getArrayInArray, hoursToAmPmHours } from '../../utils/util'; |
|
91 | 91 | const minutes = toRef(props, 'minutes'); |
92 | 92 | const amPm = ref('AM'); |
93 | 93 |
|
| 94 | + onMounted(() => { |
| 95 | + checkMinMaxHours(); |
| 96 | + }); |
| 97 | +
|
94 | 98 | const hourDisplay = computed((): string => { |
95 | 99 | const hour = convert24ToAmPm(hours.value); |
96 | 100 | return hour < 10 ? `0${hour}` : `${hour}`; |
|
127 | 131 | minuteOverlay.value = !minuteOverlay.value; |
128 | 132 | }; |
129 | 133 |
|
| 134 | + const checkMinMaxHours = (): void => { |
| 135 | + if (Object.keys(props.maxTime).length) { |
| 136 | + if (props.maxTime.hours && hours.value > props.maxTime.hours) { |
| 137 | + emit('update:hours', +props.maxTime.hours); |
| 138 | + } |
| 139 | + if (props.maxTime.minutes && minutes.value > props.maxTime.minutes) { |
| 140 | + emit('update:minutes', +props.maxTime.minutes); |
| 141 | + } |
| 142 | + } |
| 143 | + if (Object.keys(props.minTime).length) { |
| 144 | + if (props.minTime.hours && hours.value < props.minTime.hours) { |
| 145 | + emit('update:hours', +props.minTime.hours); |
| 146 | + } |
| 147 | + if (props.minTime.minutes && minutes.value < props.minTime.minutes) { |
| 148 | + emit('update:minutes', +props.minTime.minutes); |
| 149 | + } |
| 150 | + } |
| 151 | + }; |
| 152 | +
|
130 | 153 | const handleHours = (type: string): void => { |
131 | 154 | if (type === 'increment') { |
132 | 155 | if (props.maxTime.hours) { |
133 | 156 | if (hours.value + +props.hoursIncrement > +props.maxTime.hours) { |
134 | 157 | return; |
135 | 158 | } |
136 | 159 | } |
| 160 | + if (props.minTime.hours) { |
| 161 | + if (hours.value + +props.hoursIncrement < +props.minTime.hours) { |
| 162 | + return; |
| 163 | + } |
| 164 | + } |
137 | 165 | if ( |
138 | 166 | (props.is24 && hours.value + +props.hoursIncrement >= 24) || |
139 | 167 | (!props.is24 && hours.value + +props.hoursIncrement >= 12) |
|
148 | 176 | return; |
149 | 177 | } |
150 | 178 | } |
| 179 | + if (props.maxTime.hours) { |
| 180 | + if (hours.value - +props.hoursIncrement > +props.maxTime.hours) { |
| 181 | + return; |
| 182 | + } |
| 183 | + } |
151 | 184 | if (hours.value - +props.hoursIncrement < 0) { |
152 | 185 | emit('update:hours', props.is24 ? 24 - +props.hoursIncrement : 12 - -+props.hoursIncrement); |
153 | 186 | } else { |
|
163 | 196 | return; |
164 | 197 | } |
165 | 198 | } |
| 199 | + if (props.minTime.minutes) { |
| 200 | + if (minutes.value + +props.minutesIncrement < +props.minTime.minutes) { |
| 201 | + return; |
| 202 | + } |
| 203 | + } |
166 | 204 | if (minutes.value + +props.minutesIncrement >= 60) { |
167 | 205 | emit('update:minutes', 0); |
168 | 206 | } else { |
|
174 | 212 | return; |
175 | 213 | } |
176 | 214 | } |
| 215 | + if (props.maxTime.minutes) { |
| 216 | + if (minutes.value + +props.minutesIncrement > +props.maxTime.minutes) { |
| 217 | + return; |
| 218 | + } |
| 219 | + } |
177 | 220 | if (minutes.value - +props.minutesIncrement < 0) { |
178 | 221 | emit('update:minutes', 60 - +props.minutesIncrement); |
179 | 222 | } else { |
|
0 commit comments