support pasting date time into the date-time picker on the desktop version
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
:label="label"
|
||||
:menu-props="{ contentClass: 'date-time-select-menu' }"
|
||||
v-model="dateTime"
|
||||
@paste="onPaste"
|
||||
>
|
||||
<template #selection>
|
||||
<span class="text-truncate cursor-pointer">{{ displayTime }}</span>
|
||||
@@ -86,14 +87,19 @@ import { type TimePickerValue, useDateTimeSelectionBase } from '@/components/bas
|
||||
|
||||
import { ThemeType } from '@/core/theme.ts';
|
||||
import { NumeralSystem } from '@/core/numeral.ts';
|
||||
import { MeridiemIndicator } from '@/core/datetime.ts';
|
||||
import {
|
||||
MeridiemIndicator,
|
||||
KnownDateTimeFormat
|
||||
} from '@/core/datetime.ts';
|
||||
import {
|
||||
getHourIn12HourFormat,
|
||||
getTimezoneOffsetMinutes,
|
||||
getBrowserTimezoneOffsetMinutes,
|
||||
getLocalDatetimeFromUnixTime,
|
||||
getActualUnixTimeForStore,
|
||||
getUnixTimeFromLocalDatetime,
|
||||
getActualUnixTimeForStore,
|
||||
getDummyUnixTimeForLocalUsage,
|
||||
parseDateTimeFromKnownDateTimeFormat,
|
||||
getAMOrPM,
|
||||
getCombinedDateAndTimeValues
|
||||
} from '@/lib/datetime.ts';
|
||||
@@ -221,6 +227,29 @@ function toggleMeridiemIndicator(): void {
|
||||
}
|
||||
}
|
||||
|
||||
function onPaste(event: ClipboardEvent): void {
|
||||
if (!event.clipboardData || props.readonly || props.disabled) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const text = event.clipboardData.getData('Text');
|
||||
|
||||
if (!text) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const formats = KnownDateTimeFormat.detect(text);
|
||||
|
||||
if (!formats || formats.length !== 1) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat).getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
}
|
||||
|
||||
function onFocused(input: VAutocomplete | null | undefined, focused: boolean): void {
|
||||
if (input && focused) {
|
||||
nextTick(() => {
|
||||
|
||||
@@ -35,6 +35,7 @@ import {
|
||||
YearMonthDayUnixTime,
|
||||
WeekDay,
|
||||
MeridiemIndicator,
|
||||
KnownDateTimeFormat,
|
||||
DateRangeScene,
|
||||
DateRange,
|
||||
LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE
|
||||
@@ -557,6 +558,10 @@ export function parseDateTimeFromUnixTime(unixTime: number, utcOffset?: number,
|
||||
return MomentDateTime.of(moment.unix(unixTime));
|
||||
}
|
||||
|
||||
export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime {
|
||||
return MomentDateTime.of(moment(dateTime, format.format));
|
||||
}
|
||||
|
||||
export function formatUnixTime(unixTime: number, format: string, options: DateTimeFormatOptions, utcOffset?: number, currentUtcOffset?: number): string {
|
||||
return parseDateTimeFromUnixTime(unixTime, utcOffset, currentUtcOffset).format(format, options);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user