fix: validate time and date before setting
This commit is contained in:
parent
02da09633d
commit
f73fbcafdd
@ -32,28 +32,32 @@
|
|||||||
<DurationIcon class="h-4 w-4 text-ink-gray-5" />
|
<DurationIcon class="h-4 w-4 text-ink-gray-5" />
|
||||||
<DatePicker
|
<DatePicker
|
||||||
class="max-w-28"
|
class="max-w-28"
|
||||||
v-model="_event.fromDate"
|
:value="_event.fromDate"
|
||||||
:formatter="(date) => getFormat(date, 'MMM D, YYYY')"
|
:formatter="(date) => getFormat(date, 'MMM D, YYYY')"
|
||||||
:placeholder="__('Start Date')"
|
:placeholder="__('Start Date')"
|
||||||
|
@update:modelValue="(date) => updateDate(date, true)"
|
||||||
/>
|
/>
|
||||||
<TimePicker
|
<TimePicker
|
||||||
v-if="!_event.isFullDay"
|
v-if="!_event.isFullDay"
|
||||||
class="max-w-20"
|
class="max-w-20"
|
||||||
v-model="_event.fromTime"
|
:value="_event.fromTime"
|
||||||
:placeholder="__('Start Time')"
|
:placeholder="__('Start Time')"
|
||||||
|
@update:modelValue="(time) => updateTime(time, true)"
|
||||||
/>
|
/>
|
||||||
<div class="text-base text-ink-gray-6">-</div>
|
<div class="text-base text-ink-gray-6">-</div>
|
||||||
<TimePicker
|
<TimePicker
|
||||||
v-if="!_event.isFullDay"
|
v-if="!_event.isFullDay"
|
||||||
class="max-w-20"
|
class="max-w-20"
|
||||||
v-model="_event.toTime"
|
:value="_event.toTime"
|
||||||
:placeholder="__('End Time')"
|
:placeholder="__('End Time')"
|
||||||
|
@update:modelValue="(time) => updateTime(time)"
|
||||||
/>
|
/>
|
||||||
<DatePicker
|
<DatePicker
|
||||||
class="max-w-28"
|
class="max-w-28"
|
||||||
v-model="_event.toDate"
|
:value="_event.toDate"
|
||||||
:formatter="(date) => getFormat(date, 'MMM D, YYYY')"
|
:formatter="(date) => getFormat(date, 'MMM D, YYYY')"
|
||||||
:placeholder="__('End Date')"
|
:placeholder="__('End Date')"
|
||||||
|
@update:modelValue="(date) => updateDate(date)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Switch
|
<Switch
|
||||||
@ -116,6 +120,7 @@ import {
|
|||||||
DatePicker,
|
DatePicker,
|
||||||
ColorPicker,
|
ColorPicker,
|
||||||
TimePicker,
|
TimePicker,
|
||||||
|
dayjs,
|
||||||
} from 'frappe-ui'
|
} from 'frappe-ui'
|
||||||
import { getFormat } from '@/utils'
|
import { getFormat } from '@/utils'
|
||||||
import { ref, nextTick, watch } from 'vue'
|
import { ref, nextTick, watch } from 'vue'
|
||||||
@ -130,6 +135,62 @@ const title = ref(null)
|
|||||||
|
|
||||||
let _event = ref({})
|
let _event = ref({})
|
||||||
|
|
||||||
|
function updateDate(d, fromDate = false) {
|
||||||
|
error.value = null
|
||||||
|
let oldTo = _event.value.toDate || _event.value.fromDate
|
||||||
|
|
||||||
|
if (fromDate) {
|
||||||
|
_event.value.fromDate = d
|
||||||
|
if (!_event.value.toDate) {
|
||||||
|
_event.value.toDate = d
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_event.value.toDate = d
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_event.value.toDate && _event.value.fromDate) {
|
||||||
|
const diff = dayjs(_event.value.toDate).diff(
|
||||||
|
dayjs(_event.value.fromDate),
|
||||||
|
'day',
|
||||||
|
)
|
||||||
|
|
||||||
|
if (diff < 0) {
|
||||||
|
_event.value.toDate = oldTo
|
||||||
|
error.value = __('End date should be after start date')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateTime(t, fromTime = false) {
|
||||||
|
error.value = null
|
||||||
|
let oldTo = _event.value.toTime || _event.value.fromTime
|
||||||
|
|
||||||
|
if (fromTime) {
|
||||||
|
_event.value.fromTime = t
|
||||||
|
if (!_event.value.toTime) {
|
||||||
|
const hour = parseInt(t.split(':')[0])
|
||||||
|
const minute = parseInt(t.split(':')[1])
|
||||||
|
_event.value.toTime = `${hour + 1}:${minute}`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_event.value.toTime = t
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_event.value.toTime && _event.value.fromTime) {
|
||||||
|
const diff = dayjs(_event.value.toDate + ' ' + _event.value.toTime).diff(
|
||||||
|
dayjs(_event.value.fromDate + ' ' + _event.value.fromTime),
|
||||||
|
'minute',
|
||||||
|
)
|
||||||
|
|
||||||
|
if (diff < 0) {
|
||||||
|
_event.value.toTime = oldTo
|
||||||
|
error.value = __('End time should be after start time')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function updateEventType() {
|
function updateEventType() {
|
||||||
if (_event.value.eventType == 'Private') {
|
if (_event.value.eventType == 'Private') {
|
||||||
_event.value.eventType = 'Public'
|
_event.value.eventType = 'Public'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user