pasting date time from clipboard supports current language date time format
This commit is contained in:
@@ -88,6 +88,7 @@ import { type TimePickerValue, useDateTimeSelectionBase } from '@/components/bas
|
||||
import { ThemeType } from '@/core/theme.ts';
|
||||
import { NumeralSystem } from '@/core/numeral.ts';
|
||||
import {
|
||||
type DateTime,
|
||||
MeridiemIndicator,
|
||||
KnownDateTimeFormat
|
||||
} from '@/core/datetime.ts';
|
||||
@@ -121,6 +122,8 @@ const theme = useTheme();
|
||||
const {
|
||||
tt,
|
||||
getCurrentNumeralSystemType,
|
||||
parseDateTimeFromLongDateTime,
|
||||
parseDateTimeFromShortDateTime,
|
||||
formatUnixTimeToLongDateTime
|
||||
} = useI18n();
|
||||
|
||||
@@ -233,21 +236,42 @@ function onPaste(event: ClipboardEvent): void {
|
||||
return;
|
||||
}
|
||||
|
||||
const text = event.clipboardData.getData('Text');
|
||||
let text = event.clipboardData.getData('Text');
|
||||
|
||||
if (!text) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const formats = KnownDateTimeFormat.detect(text);
|
||||
text = text.trim();
|
||||
|
||||
if (!formats || formats.length !== 1) {
|
||||
event.preventDefault();
|
||||
const formats = KnownDateTimeFormat.detect(text);
|
||||
let dt: DateTime | undefined = undefined;
|
||||
|
||||
if (formats && formats.length === 1) {
|
||||
dt = parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat);
|
||||
|
||||
if (dt) {
|
||||
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(dt.getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
dt = parseDateTimeFromLongDateTime(text);
|
||||
|
||||
if (dt) {
|
||||
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(dt.getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
return;
|
||||
}
|
||||
|
||||
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat).getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
dt = parseDateTimeFromShortDateTime(text);
|
||||
|
||||
if (dt) {
|
||||
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(dt.getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
return;
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function onFocused(input: VAutocomplete | null | undefined, focused: boolean): void {
|
||||
|
||||
+18
-2
@@ -558,8 +558,24 @@ 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 parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime | undefined {
|
||||
const m = moment(dateTime, format.format);
|
||||
|
||||
if (!m.isValid()) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return MomentDateTime.of(m);
|
||||
}
|
||||
|
||||
export function parseDateTimeFromString(dateTime: string, format: string): DateTime | undefined {
|
||||
const m = moment(dateTime, format);
|
||||
|
||||
if (!m.isValid()) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return MomentDateTime.of(m);
|
||||
}
|
||||
|
||||
export function formatUnixTime(unixTime: number, format: string, options: DateTimeFormatOptions, utcOffset?: number, currentUtcOffset?: number): string {
|
||||
|
||||
@@ -188,6 +188,7 @@ import {
|
||||
getCurrentUnixTime,
|
||||
getYearMonthDayDateTime,
|
||||
parseDateTimeFromUnixTime,
|
||||
parseDateTimeFromString,
|
||||
getGregorianCalendarYearMonthDays,
|
||||
getDateTimeFormatType,
|
||||
getFiscalYearTimeRangeFromUnixTime,
|
||||
@@ -2361,6 +2362,8 @@ export function useI18n() {
|
||||
getCalendarDisplayShortMonthFromUnixTime: (unixTime: number, numeralSystem?: NumeralSystem, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, 'MMM', getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem }), utcOffset, currentUtcOffset),
|
||||
getCalendarDisplayDayOfMonthFromUnixTime: (unixTime: number, numeralSystem?: NumeralSystem, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedShortDayFormat(), getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem }), utcOffset, currentUtcOffset),
|
||||
// format date time (by date display type) functions
|
||||
parseDateTimeFromLongDateTime: (dateTime: string) => parseDateTimeFromString(dateTime, getLocalizedLongDateFormat() + ' ' + getLocalizedLongTimeFormat()),
|
||||
parseDateTimeFromShortDateTime: (dateTime: string) => parseDateTimeFromString(dateTime, getLocalizedShortDateFormat() + ' ' + getLocalizedShortTimeFormat()),
|
||||
formatUnixTimeToLongDateTime: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedLongDateFormat() + ' ' + getLocalizedLongTimeFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
||||
formatUnixTimeToShortDateTime: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedShortDateFormat() + ' ' + getLocalizedShortTimeFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
||||
formatUnixTimeToLongDate: (unixTime: number, utcOffset?: number, currentUtcOffset?: number) => formatUnixTime(unixTime, getLocalizedLongDateFormat(), getDateTimeFormatOptions(), utcOffset, currentUtcOffset),
|
||||
|
||||
Reference in New Issue
Block a user