support IANA time zone names when importing DSV files using column mapping

This commit is contained in:
MaysWind
2025-12-24 23:09:33 +08:00
parent 59a138d417
commit f54c4998ef
20 changed files with 86 additions and 11 deletions
@@ -85,8 +85,7 @@
@click="parsedFileDataColumnMapping.timeFormat = ''">
<v-list-item-title class="cursor-pointer">
<span>{{ tt('Auto detect') }}</span>
<span class="ms-1" v-if="parsedFileAutoDetectedTimeFormat">({{ parsedFileAutoDetectedTimeFormat }})</span>
<span class="ms-1" v-if="!parsedFileAutoDetectedTimeFormat">({{ tt('Unknown') }})</span>
<span class="ms-1" v-if="parsedFileAutoDetectedTimeFormat">({{ parsedFileAutoDetectedTimeFormat || tt('Unknown') }})</span>
</v-list-item-title>
</v-list-item>
<v-list-item :key="dateTimeFormat.format"
@@ -103,7 +102,7 @@
<v-btn class="ms-2" color="secondary" density="compact" variant="outlined"
v-if="parsedFileDataColumnMapping && parsedFileDataColumnMapping.isColumnMappingSet(ImportTransactionColumnType.TransactionTimezone)">
<span>{{ tt('Timezone Format') }}</span>
<span class="ms-1" v-if="parsedFileDataColumnMapping && parsedFileDataColumnMapping.isColumnMappingSet(ImportTransactionColumnType.TransactionTimezone)">({{ KnownDateTimezoneFormat.valueOf(parsedFileDataColumnMapping.timezoneFormat || parsedFileAutoDetectedTimezoneFormat || '')?.name || tt('Unknown') }})</span>
<span class="ms-1" v-if="parsedFileDataColumnMapping && parsedFileDataColumnMapping.isColumnMappingSet(ImportTransactionColumnType.TransactionTimezone)">({{ displayFileCurrentTimezoneFormat }})</span>
<v-menu eager activator="parent" location="bottom" max-height="500">
<v-list>
<v-list-item key="auto"
@@ -111,8 +110,7 @@
@click="parsedFileDataColumnMapping.timezoneFormat = ''">
<v-list-item-title class="cursor-pointer">
<span>{{ tt('Auto detect') }}</span>
<span class="ms-1" v-if="parsedFileAutoDetectedTimezoneFormat && KnownDateTimezoneFormat.valueOf(parsedFileAutoDetectedTimezoneFormat || '')">({{ KnownDateTimezoneFormat.valueOf(parsedFileAutoDetectedTimezoneFormat || '')?.name }})</span>
<span class="ms-1" v-if="!parsedFileAutoDetectedTimezoneFormat || !KnownDateTimezoneFormat.valueOf(parsedFileAutoDetectedTimezoneFormat || '')">({{ tt('Unknown') }})</span>
<span class="ms-1">({{ displayFileAutoDetectedTimezoneFormat }})</span>
</v-list-item-title>
</v-list-item>
<v-list-item :key="timezoneFormat.value"
@@ -120,7 +118,7 @@
v-for="timezoneFormat in KnownDateTimezoneFormat.values()"
@click="parsedFileDataColumnMapping.timezoneFormat = timezoneFormat.value">
<v-list-item-title class="cursor-pointer">
{{ timezoneFormat.name }}
{{ ti(timezoneFormat.name, timezoneFormat.nameSupportedI18n) }}
</v-list-item-title>
</v-list-item>
</v-list>
@@ -137,8 +135,7 @@
@click="parsedFileDataColumnMapping.amountFormat = ''">
<v-list-item-title class="cursor-pointer">
<span>{{ tt('Auto detect') }}</span>
<span class="ms-1" v-if="parsedFileAutoDetectedAmountFormat && KnownAmountFormat.valueOf(parsedFileAutoDetectedAmountFormat || '')">({{ KnownAmountFormat.valueOf(parsedFileAutoDetectedAmountFormat || '')?.format }})</span>
<span class="ms-1" v-if="!parsedFileAutoDetectedAmountFormat || !KnownAmountFormat.valueOf(parsedFileAutoDetectedAmountFormat || '')">({{ tt('Unknown') }})</span>
<span class="ms-1">({{ displayFileAutoDetectedAmountFormat }})</span>
</v-list-item-title>
</v-list-item>
<v-list-item :key="amountFormat.type"
@@ -287,6 +284,7 @@ const props = defineProps<{
const {
tt,
ti,
getCurrentNumeralSystemType,
getAllImportTransactionColumnTypes
} = useI18n();
@@ -408,6 +406,48 @@ const parsedFileAutoDetectedTimeFormat = computed<string | undefined>(() => pars
const parsedFileAutoDetectedTimezoneFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedTimezoneFormat(props.parsedFileData));
const parsedFileAutoDetectedAmountFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedAmountFormat(props.parsedFileData));
const displayFileCurrentTimezoneFormat = computed<string>(() => {
const format = parsedFileDataColumnMapping.value.timezoneFormat || parsedFileAutoDetectedTimezoneFormat.value || '';
if (format) {
const knownFormat = KnownDateTimezoneFormat.valueOf(format);
if (knownFormat) {
return ti(knownFormat.name, knownFormat.nameSupportedI18n);
}
}
return tt('Unknown');
});
const displayFileAutoDetectedTimezoneFormat = computed<string>(() => {
const format = parsedFileAutoDetectedTimezoneFormat.value;
if (format) {
const knownFormat = KnownDateTimezoneFormat.valueOf(format);
if (knownFormat) {
return ti(knownFormat.name, knownFormat.nameSupportedI18n);
}
}
return tt('Unknown');
});
const displayFileAutoDetectedAmountFormat = computed<string>(() => {
const format = parsedFileAutoDetectedAmountFormat.value;
if (format) {
const knownFormat = KnownAmountFormat.valueOf(format);
if (knownFormat) {
return knownFormat.format;
}
}
return tt('Unknown');
});
function getDisplayCount(count: number): string {
return numeralSystem.value.formatNumber(count);
}