mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-19 09:14:27 +08:00
support "Add Another" in transaction add page / dialog (#471)
This commit is contained in:
@@ -53,6 +53,7 @@ export const ALL_APPLICATION_CLOUD_SETTINGS: CategorizedApplicationCloudSettingI
|
||||
{
|
||||
categoryName: 'Transaction Edit Page',
|
||||
items: [
|
||||
{ settingKey: 'quickAddButtonActionInMobileTransactionEditPage', settingName: 'Quick Add Button Action', mobile: true, desktop: false },
|
||||
{ settingKey: 'autoSaveTransactionDraft', settingName: 'Automatically Save Draft', mobile: true, desktop: true },
|
||||
{ settingKey: 'autoGetCurrentGeoLocation', settingName: 'Automatically Add Geolocation', mobile: true, desktop: true },
|
||||
{ settingKey: 'alwaysShowTransactionPicturesInMobileTransactionEditPage', settingName: 'Always Show Transaction Pictures', mobile: true, desktop: false }
|
||||
|
||||
@@ -13,7 +13,7 @@ import { useExchangeRatesStore } from '@/stores/exchangeRates.ts';
|
||||
import type { NumeralSystem } from '@/core/numeral.ts';
|
||||
import type { WeekDayValue } from '@/core/datetime.ts';
|
||||
import type { LocalizedTimezoneInfo } from '@/core/timezone.ts';
|
||||
import { TransactionType } from '@/core/transaction.ts';
|
||||
import { TransactionType, TransactionQuickAddButtonActionType } from '@/core/transaction.ts';
|
||||
import { TemplateType } from '@/core/template.ts';
|
||||
import { DISPLAY_HIDDEN_AMOUNT } from '@/consts/numeral.ts';
|
||||
import { TRANSACTION_MAX_PICTURE_COUNT } from '@/consts/transaction.ts';
|
||||
@@ -64,6 +64,12 @@ export enum GeoLocationStatus {
|
||||
Error = 'error'
|
||||
}
|
||||
|
||||
export enum AfterSaveAction {
|
||||
GoBack = 'goBack',
|
||||
StayWithNewTransaction = 'stayWithNewTransaction',
|
||||
StayWithCurrentTransaction = 'stayWithCurrentTransaction'
|
||||
}
|
||||
|
||||
export function useTransactionEditPageBase(type: TransactionEditPageType, initMode?: TransactionEditPageMode, transactionDefaultType?: number) {
|
||||
const {
|
||||
tt,
|
||||
@@ -93,6 +99,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
|
||||
const clientSessionId = ref<string>('');
|
||||
const loading = ref<boolean>(true);
|
||||
const submitting = ref<boolean>(false);
|
||||
const submitted = ref<boolean>(false);
|
||||
const uploadingPicture = ref<boolean>(false);
|
||||
const geoLocationStatus = ref<GeoLocationStatus | null>(null);
|
||||
const setGeoLocationByClickMap = ref<boolean>(false);
|
||||
@@ -170,6 +177,20 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
|
||||
}
|
||||
});
|
||||
|
||||
const quickSaveButtonTitle = computed<string>(() => {
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
const quickAddActionType = TransactionQuickAddButtonActionType.valueOf(settingsStore.appSettings.quickAddButtonActionInMobileTransactionEditPage);
|
||||
|
||||
if (quickAddActionType && quickAddActionType.type !== TransactionQuickAddButtonActionType.OpenMenu.type) {
|
||||
return quickAddActionType.name;
|
||||
} else {
|
||||
return 'Add';
|
||||
}
|
||||
} else {
|
||||
return 'Save';
|
||||
}
|
||||
});
|
||||
|
||||
const cancelButtonTitle = computed<string>(() => {
|
||||
if (mode.value === TransactionEditPageMode.View) {
|
||||
return 'Close';
|
||||
@@ -395,6 +416,16 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
|
||||
);
|
||||
}
|
||||
|
||||
function updateTransactionModelByAfterSaveAction(afterSaveAction: AfterSaveAction, initOptions?: SetTransactionOptions): void {
|
||||
if (afterSaveAction === AfterSaveAction.StayWithNewTransaction) {
|
||||
transaction.value = createNewTransactionModel(transactionDefaultType);
|
||||
setTransactionModel(null, initOptions, true);
|
||||
geoLocationStatus.value = null;
|
||||
} else if (afterSaveAction === AfterSaveAction.StayWithCurrentTransaction) {
|
||||
transaction.value.clearPictures();
|
||||
}
|
||||
}
|
||||
|
||||
function updateTransactionTime(newTime: number): void {
|
||||
transaction.value.time = newTime;
|
||||
updateTransactionTimezone(transaction.value.timeZone ?? '');
|
||||
@@ -489,6 +520,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
|
||||
clientSessionId,
|
||||
loading,
|
||||
submitting,
|
||||
submitted,
|
||||
uploadingPicture,
|
||||
geoLocationStatus,
|
||||
setGeoLocationByClickMap,
|
||||
@@ -516,6 +548,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
|
||||
canAddTransactionPicture,
|
||||
title,
|
||||
saveButtonTitle,
|
||||
quickSaveButtonTitle,
|
||||
cancelButtonTitle,
|
||||
sourceAmountName,
|
||||
sourceAmountTitle,
|
||||
@@ -533,6 +566,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
|
||||
// functions
|
||||
createNewTransactionModel,
|
||||
setTransactionModel,
|
||||
updateTransactionModelByAfterSaveAction,
|
||||
updateTransactionTime,
|
||||
updateTransactionTimezone,
|
||||
swapTransactionData,
|
||||
|
||||
@@ -414,11 +414,25 @@
|
||||
<v-tooltip :disabled="!inputIsEmpty" :text="inputEmptyProblemMessage ? tt(inputEmptyProblemMessage) : ''">
|
||||
<template v-slot:activator="{ props }">
|
||||
<div v-bind="props" class="d-inline-block">
|
||||
<v-btn :disabled="inputIsEmpty || loading || submitting"
|
||||
v-if="mode !== TransactionEditPageMode.View" @click="save">
|
||||
{{ tt(saveButtonTitle) }}
|
||||
<v-progress-circular indeterminate size="22" class="ms-2" v-if="submitting"></v-progress-circular>
|
||||
</v-btn>
|
||||
<v-btn-group density="comfortable" v-if="mode === TransactionEditPageMode.Add || mode === TransactionEditPageMode.Edit">
|
||||
<v-btn color="primary" :disabled="inputIsEmpty || loading || submitting" @click="save(AfterSaveAction.GoBack)">
|
||||
{{ tt(saveButtonTitle) }}
|
||||
<v-progress-circular indeterminate size="22" class="ms-2" v-if="submitting"></v-progress-circular>
|
||||
</v-btn>
|
||||
<v-btn color="primary" density="compact"
|
||||
:disabled="inputIsEmpty || loading || submitting" :icon="true"
|
||||
v-if="type === TransactionEditPageType.Transaction && mode === TransactionEditPageMode.Add">
|
||||
<v-icon :icon="mdiMenuDown" size="24" />
|
||||
<v-menu activator="parent">
|
||||
<v-list>
|
||||
<v-list-item :title="tt(TransactionQuickAddButtonActionType.SaveAndAddNewTransaction.name)"
|
||||
@click="save(AfterSaveAction.StayWithNewTransaction)"></v-list-item>
|
||||
<v-list-item :title="tt(TransactionQuickAddButtonActionType.SaveAndKeepCurrentData.name)"
|
||||
@click="save(AfterSaveAction.StayWithCurrentTransaction)"></v-list-item>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
</v-btn>
|
||||
</v-btn-group>
|
||||
</div>
|
||||
</template>
|
||||
</v-tooltip>
|
||||
@@ -474,6 +488,7 @@ import {
|
||||
TransactionEditPageMode,
|
||||
TransactionEditPageType,
|
||||
GeoLocationStatus,
|
||||
AfterSaveAction,
|
||||
useTransactionEditPageBase
|
||||
} from '@/views/base/transactions/TransactionEditPageBase.ts';
|
||||
|
||||
@@ -487,7 +502,7 @@ import { useTransactionTemplatesStore } from '@/stores/transactionTemplate.ts';
|
||||
|
||||
import type { Coordinate } from '@/core/coordinate.ts';
|
||||
import { CategoryType } from '@/core/category.ts';
|
||||
import { TransactionType, TransactionEditScopeType } from '@/core/transaction.ts';
|
||||
import { TransactionType, TransactionEditScopeType, TransactionQuickAddButtonActionType } from '@/core/transaction.ts';
|
||||
import { TemplateType, ScheduledTemplateFrequencyType } from '@/core/template.ts';
|
||||
import { KnownErrorCode } from '@/consts/api.ts';
|
||||
import { SUPPORTED_IMAGE_EXTENSIONS } from '@/consts/file.ts';
|
||||
@@ -563,6 +578,7 @@ const {
|
||||
clientSessionId,
|
||||
loading,
|
||||
submitting,
|
||||
submitted,
|
||||
uploadingPicture,
|
||||
geoLocationStatus,
|
||||
setGeoLocationByClickMap,
|
||||
@@ -596,6 +612,7 @@ const {
|
||||
inputIsEmpty,
|
||||
createNewTransactionModel,
|
||||
setTransactionModel,
|
||||
updateTransactionModelByAfterSaveAction,
|
||||
updateTransactionTime,
|
||||
updateTransactionTimezone,
|
||||
swapTransactionData,
|
||||
@@ -656,6 +673,7 @@ function open(options: TransactionEditOptions): Promise<TransactionEditResponse
|
||||
activeTab.value = 'basicInfo';
|
||||
loading.value = true;
|
||||
submitting.value = false;
|
||||
submitted.value = false;
|
||||
geoLocationStatus.value = null;
|
||||
setGeoLocationByClickMap.value = false;
|
||||
originalTransactionEditable.value = false;
|
||||
@@ -791,7 +809,7 @@ function open(options: TransactionEditOptions): Promise<TransactionEditResponse
|
||||
});
|
||||
}
|
||||
|
||||
function save(): void {
|
||||
function save(afterAction: AfterSaveAction): void {
|
||||
const problemMessage = inputEmptyProblemMessage.value;
|
||||
|
||||
if (problemMessage) {
|
||||
@@ -810,24 +828,31 @@ function save(): void {
|
||||
clientSessionId: clientSessionId.value
|
||||
}).then(() => {
|
||||
submitting.value = false;
|
||||
|
||||
if (resolveFunc) {
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
resolveFunc({
|
||||
message: 'You have added a new transaction'
|
||||
});
|
||||
} else if (mode.value === TransactionEditPageMode.Edit) {
|
||||
resolveFunc({
|
||||
message: 'You have saved this transaction'
|
||||
});
|
||||
}
|
||||
}
|
||||
submitted.value = true;
|
||||
|
||||
if (mode.value === TransactionEditPageMode.Add && !noTransactionDraft.value && !addByTemplateId.value && !duplicateFromId.value) {
|
||||
transactionsStore.clearTransactionDraft();
|
||||
}
|
||||
|
||||
showState.value = false;
|
||||
if (mode.value === TransactionEditPageMode.Add && (afterAction === AfterSaveAction.StayWithNewTransaction || afterAction === AfterSaveAction.StayWithCurrentTransaction)) {
|
||||
snackbar.value?.showMessage('You have added a new transaction');
|
||||
updateTransactionModelByAfterSaveAction(afterAction, initOptions.value);
|
||||
clientSessionId.value = generateRandomUUID();
|
||||
} else {
|
||||
if (resolveFunc) {
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
resolveFunc({
|
||||
message: 'You have added a new transaction'
|
||||
});
|
||||
} else if (mode.value === TransactionEditPageMode.Edit) {
|
||||
resolveFunc({
|
||||
message: 'You have saved this transaction'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
showState.value = false;
|
||||
}
|
||||
}).catch(error => {
|
||||
submitting.value = false;
|
||||
|
||||
@@ -903,6 +928,7 @@ function duplicate(withTime?: boolean, withGeoLocation?: boolean): void {
|
||||
editId.value = null;
|
||||
duplicateFromId.value = transaction.value.id;
|
||||
clientSessionId.value = generateRandomUUID();
|
||||
submitted.value = false;
|
||||
activeTab.value = 'basicInfo';
|
||||
transaction.value.id = '';
|
||||
|
||||
@@ -958,7 +984,11 @@ function remove(): void {
|
||||
|
||||
function cancel(): void {
|
||||
const doClose = function () {
|
||||
if (rejectFunc) {
|
||||
if (props.type === TransactionEditPageType.Transaction && mode.value === TransactionEditPageMode.Add && submitted.value && resolveFunc) {
|
||||
resolveFunc({
|
||||
message: 'You have added a new transaction'
|
||||
});
|
||||
} else if (rejectFunc) {
|
||||
rejectFunc();
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
</f7-list>
|
||||
|
||||
<f7-block-title>{{ tt('Transaction List Page') }}</f7-block-title>
|
||||
<f7-list strong inset dividers>
|
||||
<f7-list strong inset dividers class="settings-list">
|
||||
<f7-list-item>
|
||||
<template #after-title>
|
||||
{{ tt('Show Monthly Total Amount') }}
|
||||
@@ -91,7 +91,33 @@
|
||||
</f7-list>
|
||||
|
||||
<f7-block-title>{{ tt('Transaction Edit Page') }}</f7-block-title>
|
||||
<f7-list strong inset dividers>
|
||||
<f7-list strong inset dividers class="settings-list">
|
||||
<f7-list-item
|
||||
class="item-truncate-after-text"
|
||||
link="#"
|
||||
@click="showQuickAddButtonActionInMobileTransactionEditPagePopup = true"
|
||||
>
|
||||
<template #after-title>
|
||||
<div class="item-actual-title">
|
||||
<span>{{ tt('Quick Add Button Action') }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #after>
|
||||
{{ findDisplayNameByType(allTransactionQuickAddButtonActionTypes, quickAddButtonActionInMobileTransactionEditPage) }}
|
||||
</template>
|
||||
<list-item-selection-popup value-type="item"
|
||||
key-field="type" value-field="type"
|
||||
title-field="displayName"
|
||||
:title="tt('Quick Add Button Action')"
|
||||
:enable-filter="true"
|
||||
:filter-placeholder="tt('Quick Add Button Action')"
|
||||
:filter-no-items-text="tt('No results')"
|
||||
:items="allTransactionQuickAddButtonActionTypes"
|
||||
v-model:show="showQuickAddButtonActionInMobileTransactionEditPagePopup"
|
||||
v-model="quickAddButtonActionInMobileTransactionEditPage">
|
||||
</list-item-selection-popup>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item
|
||||
class="item-truncate-after-text"
|
||||
link="#"
|
||||
@@ -138,7 +164,7 @@
|
||||
</f7-list>
|
||||
|
||||
<f7-block-title>{{ tt('Account List Page') }}</f7-block-title>
|
||||
<f7-list strong inset dividers>
|
||||
<f7-list strong inset dividers class="settings-list">
|
||||
<f7-list-item
|
||||
class="item-truncate-after-text"
|
||||
link="/settings/filter/account?type=accountListTotalAmount"
|
||||
@@ -168,7 +194,7 @@
|
||||
</f7-list>
|
||||
|
||||
<f7-block-title>{{ tt('Exchange Rates Data Page') }}</f7-block-title>
|
||||
<f7-list strong inset dividers>
|
||||
<f7-list strong inset dividers class="settings-list">
|
||||
<f7-list-item
|
||||
class="item-truncate-after-text"
|
||||
link="#"
|
||||
@@ -209,11 +235,12 @@ import { useSettingsStore } from '@/stores/setting.ts';
|
||||
import { useAccountsStore } from '@/stores/account.ts';
|
||||
import { useTransactionCategoriesStore } from '@/stores/transactionCategory.ts';
|
||||
|
||||
import type { TypeAndDisplayName } from '@/core/base.ts';
|
||||
import { CategoryType } from '@/core/category.ts';
|
||||
|
||||
import { findNameByValue, findDisplayNameByType } from '@/lib/common.ts';
|
||||
|
||||
const { tt } = useI18n();
|
||||
const { tt, getAllTransactionQuickAddButtonActionTypes } = useI18n();
|
||||
const { showToast } = useI18nUIComponents();
|
||||
const {
|
||||
loadingAccounts,
|
||||
@@ -242,9 +269,17 @@ const accountsStore = useAccountsStore();
|
||||
const transactionCategoriesStore = useTransactionCategoriesStore();
|
||||
|
||||
const showTimezoneUsedForStatisticsInHomePagePopup = ref<boolean>(false);
|
||||
const showQuickAddButtonActionInMobileTransactionEditPagePopup = ref<boolean>(false);
|
||||
const showAutoSaveTransactionDraftPopup = ref<boolean>(false);
|
||||
const showCurrencySortByInExchangeRatesPagePopup = ref<boolean>(false);
|
||||
|
||||
const allTransactionQuickAddButtonActionTypes = computed<TypeAndDisplayName[]>(() => getAllTransactionQuickAddButtonActionTypes());
|
||||
|
||||
const quickAddButtonActionInMobileTransactionEditPage = computed<number>({
|
||||
get: () => settingsStore.appSettings.quickAddButtonActionInMobileTransactionEditPage,
|
||||
set: (value) => settingsStore.setQuickAddButtonActionInMobileTransactionEditPage(value)
|
||||
});
|
||||
|
||||
const alwaysShowTransactionPicturesInMobileTransactionEditPage = computed<boolean>({
|
||||
get: () => settingsStore.appSettings.alwaysShowTransactionPicturesInMobileTransactionEditPage,
|
||||
set: (value) => settingsStore.setAlwaysShowTransactionPicturesInMobileTransactionEditPage(value)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<f7-nav-title :title="tt(title)"></f7-nav-title>
|
||||
<f7-nav-right :class="{ 'navbar-compact-icons': true, 'disabled': loading }" v-if="mode !== TransactionEditPageMode.View || transaction.type !== TransactionType.ModifyBalance">
|
||||
<f7-link icon-f7="ellipsis" @click="showMoreActionSheet = true"></f7-link>
|
||||
<f7-link icon-f7="checkmark_alt" :class="{ 'disabled': inputIsEmpty || submitting }" @click="save" v-if="mode !== TransactionEditPageMode.View"></f7-link>
|
||||
<f7-link icon-f7="checkmark_alt" :class="{ 'disabled': inputIsEmpty || submitting }" @click="save(AfterSaveAction.GoBack)" v-if="mode !== TransactionEditPageMode.View"></f7-link>
|
||||
</f7-nav-right>
|
||||
</f7-navbar>
|
||||
|
||||
@@ -470,12 +470,27 @@
|
||||
</f7-actions>
|
||||
|
||||
<template #fixed>
|
||||
<f7-fab position="right-bottom" :class="{ 'disabled': inputIsEmpty || submitting }"
|
||||
:text="tt(saveButtonTitle)"
|
||||
@click="save" v-if="mode !== TransactionEditPageMode.View">
|
||||
<f7-fab id="quick-save-fab" position="right-bottom" :class="{ 'disabled': inputIsEmpty || submitting }"
|
||||
:text="tt(quickSaveButtonTitle)"
|
||||
@click="quickSave" v-if="mode !== TransactionEditPageMode.View">
|
||||
</f7-fab>
|
||||
</template>
|
||||
|
||||
<f7-popover class="quick-save-popover" target-el="#quick-save-fab"
|
||||
v-model:opened="showQuickSavePopover">
|
||||
<f7-list>
|
||||
<f7-list-item link="#" no-chevron popover-close
|
||||
:title="tt(TransactionQuickAddButtonActionType.SaveAndGoBack.name)"
|
||||
@click="save(AfterSaveAction.GoBack)"></f7-list-item>
|
||||
<f7-list-item link="#" no-chevron popover-close
|
||||
:title="tt(TransactionQuickAddButtonActionType.SaveAndAddNewTransaction.name)"
|
||||
@click="save(AfterSaveAction.StayWithNewTransaction)"></f7-list-item>
|
||||
<f7-list-item link="#" no-chevron popover-close
|
||||
:title="tt(TransactionQuickAddButtonActionType.SaveAndKeepCurrentData.name)"
|
||||
@click="save(AfterSaveAction.StayWithCurrentTransaction)"></f7-list-item>
|
||||
</f7-list>
|
||||
</f7-popover>
|
||||
|
||||
<f7-photo-browser ref="pictureBrowser" type="popup" navbar-of-text="/"
|
||||
:navbar-show-count="true" :exposition="false"
|
||||
:photos="transactionPictures" :thumbs="transactionThumbs" />
|
||||
@@ -493,6 +508,7 @@ import {
|
||||
TransactionEditPageMode,
|
||||
TransactionEditPageType,
|
||||
GeoLocationStatus,
|
||||
AfterSaveAction,
|
||||
useTransactionEditPageBase
|
||||
} from '@/views/base/transactions/TransactionEditPageBase.ts';
|
||||
|
||||
@@ -505,7 +521,7 @@ import { useTransactionsStore } from '@/stores/transaction.ts';
|
||||
import { useTransactionTemplatesStore } from '@/stores/transactionTemplate.ts';
|
||||
|
||||
import { CategoryType } from '@/core/category.ts';
|
||||
import { TransactionEditScopeType, TransactionType } from '@/core/transaction.ts';
|
||||
import { TransactionType, TransactionEditScopeType, TransactionQuickAddButtonActionType } from '@/core/transaction.ts';
|
||||
import { ScheduledTemplateFrequencyType, TemplateType } from '@/core/template.ts';
|
||||
import { TRANSACTION_MAX_AMOUNT, TRANSACTION_MIN_AMOUNT } from '@/consts/transaction.ts';
|
||||
import { KnownErrorCode } from '@/consts/api.ts';
|
||||
@@ -523,6 +539,7 @@ import {
|
||||
import { formatCoordinate } from '@/lib/coordinate.ts';
|
||||
import { generateRandomUUID } from '@/lib/misc.ts';
|
||||
import { getTransactionPrimaryCategoryName, getTransactionSecondaryCategoryName } from '@/lib/category.ts';
|
||||
import { type SetTransactionOptions } from '@/lib/transaction.ts';
|
||||
import { getMapProvider, isTransactionPicturesEnabled } from '@/lib/server_settings.ts';
|
||||
import logger from '@/lib/logger.ts';
|
||||
|
||||
@@ -554,6 +571,7 @@ const {
|
||||
clientSessionId,
|
||||
loading,
|
||||
submitting,
|
||||
submitted,
|
||||
uploadingPicture,
|
||||
geoLocationStatus,
|
||||
setGeoLocationByClickMap,
|
||||
@@ -574,7 +592,7 @@ const {
|
||||
hasVisibleTransferCategories,
|
||||
canAddTransactionPicture,
|
||||
title,
|
||||
saveButtonTitle,
|
||||
quickSaveButtonTitle,
|
||||
sourceAmountTitle,
|
||||
sourceAccountTitle,
|
||||
transferInAmountTitle,
|
||||
@@ -588,6 +606,7 @@ const {
|
||||
inputEmptyProblemMessage,
|
||||
inputIsEmpty,
|
||||
setTransactionModel,
|
||||
updateTransactionModelByAfterSaveAction,
|
||||
updateTransactionTime,
|
||||
updateTransactionTimezone,
|
||||
swapTransactionData,
|
||||
@@ -609,10 +628,10 @@ const pictureInput = useTemplateRef<HTMLInputElement>('pictureInput');
|
||||
const isSupportClipboard = !!navigator.clipboard;
|
||||
|
||||
const loadingError = ref<unknown | null>(null);
|
||||
const submitted = ref<boolean>(false);
|
||||
const removingPictureId = ref<string | null>(null);
|
||||
const transactionDateTimeSheetMode = ref<string>('time');
|
||||
const showTimeInDefaultTimezone = ref<boolean>(false);
|
||||
const showQuickSavePopover = ref<boolean>(false);
|
||||
const showTimezonePopup = ref<boolean>(false);
|
||||
const showGeoLocationActionSheet = ref<boolean>(false);
|
||||
const showMoreActionSheet = ref<boolean>(false);
|
||||
@@ -825,6 +844,20 @@ function getFontClassByAmount(amount: number): string {
|
||||
}
|
||||
}
|
||||
|
||||
function getQueryTransactionOptions(): SetTransactionOptions {
|
||||
return {
|
||||
time: query['time'] ? parseInt(query['time']) : undefined,
|
||||
type: query['type'] ? parseInt(query['type']) : 0,
|
||||
categoryId: query['categoryId'],
|
||||
accountId: query['accountId'],
|
||||
destinationAccountId: query['destinationAccountId'],
|
||||
amount: query['amount'] ? parseInt(query['amount']) : undefined,
|
||||
destinationAmount: query['destinationAmount'] ? parseInt(query['destinationAmount']) : undefined,
|
||||
tagIds: query['tagIds'],
|
||||
comment: query['comment']
|
||||
};
|
||||
}
|
||||
|
||||
function init(): void {
|
||||
if (!pageTypeAndMode) {
|
||||
showToast('Parameter Invalid');
|
||||
@@ -875,16 +908,16 @@ function init(): void {
|
||||
}
|
||||
}
|
||||
|
||||
const queryType = query['type'] ? parseInt(query['type']) : 0;
|
||||
const initOptions = getQueryTransactionOptions();
|
||||
|
||||
if (queryType &&
|
||||
queryType >= TransactionType.Income &&
|
||||
queryType <= TransactionType.Transfer) {
|
||||
transaction.value.type = queryType;
|
||||
} else if (queryType === TransactionType.ModifyBalance &&
|
||||
if (initOptions.type &&
|
||||
initOptions.type >= TransactionType.Income &&
|
||||
initOptions.type <= TransactionType.Transfer) {
|
||||
transaction.value.type = initOptions.type;
|
||||
} else if (initOptions.type === TransactionType.ModifyBalance &&
|
||||
pageTypeAndMode.type === TransactionEditPageType.Transaction &&
|
||||
mode.value === TransactionEditPageMode.View) {
|
||||
transaction.value.type = queryType;
|
||||
transaction.value.type = initOptions.type;
|
||||
}
|
||||
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
@@ -926,17 +959,7 @@ function init(): void {
|
||||
|
||||
setTransactionModel(
|
||||
fromTransaction,
|
||||
{
|
||||
time: query['time'] ? parseInt(query['time']) : undefined,
|
||||
type: queryType,
|
||||
categoryId: query['categoryId'],
|
||||
accountId: query['accountId'],
|
||||
destinationAccountId: query['destinationAccountId'],
|
||||
amount: query['amount'] ? parseInt(query['amount']) : undefined,
|
||||
destinationAmount: query['destinationAmount'] ? parseInt(query['destinationAmount']) : undefined,
|
||||
tagIds: query['tagIds'],
|
||||
comment: query['comment']
|
||||
},
|
||||
initOptions,
|
||||
pageTypeAndMode.type === TransactionEditPageType.Transaction && (mode.value === TransactionEditPageMode.Edit || mode.value === TransactionEditPageMode.View)
|
||||
);
|
||||
|
||||
@@ -974,7 +997,7 @@ function init(): void {
|
||||
});
|
||||
}
|
||||
|
||||
function save(): void {
|
||||
function save(afterAction: AfterSaveAction): void {
|
||||
const router = props.f7router;
|
||||
|
||||
if (mode.value === TransactionEditPageMode.View) {
|
||||
@@ -1000,20 +1023,26 @@ function save(): void {
|
||||
clientSessionId: clientSessionId.value
|
||||
}).then(() => {
|
||||
submitting.value = false;
|
||||
submitted.value = true;
|
||||
hideLoading();
|
||||
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
showToast('You have added a new transaction');
|
||||
} else if (mode.value === TransactionEditPageMode.Edit) {
|
||||
showToast('You have saved this transaction');
|
||||
}
|
||||
|
||||
if (mode.value === TransactionEditPageMode.Add && query['noTransactionDraft'] !== 'true' && !addByTemplateId.value && !duplicateFromId.value) {
|
||||
transactionsStore.clearTransactionDraft();
|
||||
}
|
||||
|
||||
submitted.value = true;
|
||||
router.back();
|
||||
if (mode.value === TransactionEditPageMode.Add && (afterAction === AfterSaveAction.StayWithNewTransaction || afterAction === AfterSaveAction.StayWithCurrentTransaction)) {
|
||||
showToast('You have added a new transaction');
|
||||
updateTransactionModelByAfterSaveAction(afterAction, getQueryTransactionOptions());
|
||||
clientSessionId.value = generateRandomUUID();
|
||||
} else {
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
showToast('You have added a new transaction');
|
||||
} else if (mode.value === TransactionEditPageMode.Edit) {
|
||||
showToast('You have saved this transaction');
|
||||
}
|
||||
|
||||
router.back();
|
||||
}
|
||||
}).catch(error => {
|
||||
submitting.value = false;
|
||||
hideLoading();
|
||||
@@ -1062,6 +1091,7 @@ function save(): void {
|
||||
clientSessionId: clientSessionId.value
|
||||
}).then(() => {
|
||||
submitting.value = false;
|
||||
submitted.value = true;
|
||||
hideLoading();
|
||||
|
||||
if (mode.value === TransactionEditPageMode.Add) {
|
||||
@@ -1070,7 +1100,6 @@ function save(): void {
|
||||
showToast('You have saved this template');
|
||||
}
|
||||
|
||||
submitted.value = true;
|
||||
router.back();
|
||||
}).catch(error => {
|
||||
submitting.value = false;
|
||||
@@ -1083,6 +1112,29 @@ function save(): void {
|
||||
}
|
||||
}
|
||||
|
||||
function quickSave(): void {
|
||||
if (mode.value === TransactionEditPageMode.View) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pageTypeAndMode?.type === TransactionEditPageType.Transaction && mode.value === TransactionEditPageMode.Add) {
|
||||
const quickAddActionType = settingsStore.appSettings.quickAddButtonActionInMobileTransactionEditPage;
|
||||
|
||||
if (quickAddActionType === TransactionQuickAddButtonActionType.OpenMenu.type) {
|
||||
showQuickSavePopover.value = true;
|
||||
return;
|
||||
} else if (quickAddActionType === TransactionQuickAddButtonActionType.SaveAndAddNewTransaction.type) {
|
||||
save(AfterSaveAction.StayWithNewTransaction);
|
||||
return;
|
||||
} else if (quickAddActionType === TransactionQuickAddButtonActionType.SaveAndKeepCurrentData.type) {
|
||||
save(AfterSaveAction.StayWithCurrentTransaction);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
save(AfterSaveAction.GoBack);
|
||||
}
|
||||
|
||||
function pasteAmount(type: 'sourceAmount' | 'destinationAmount'): void {
|
||||
if (mode.value === TransactionEditPageMode.View || !isSupportClipboard) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user