diff --git a/packages/desktop-client/src/components/Modals.tsx b/packages/desktop-client/src/components/Modals.tsx index 59af5cd24a..f5e3dec940 100644 --- a/packages/desktop-client/src/components/Modals.tsx +++ b/packages/desktop-client/src/components/Modals.tsx @@ -51,6 +51,7 @@ import { ImportYNAB5Modal } from './modals/manager/ImportYNAB5Modal'; import { ManageRulesModal } from './modals/ManageRulesModal'; import { MergeUnusedPayeesModal } from './modals/MergeUnusedPayeesModal'; import { NotesModal } from './modals/NotesModal'; +import { OutOfSyncMigrationsModal } from './modals/OutOfSyncMigrationsModal'; import { PayeeAutocompleteModal } from './modals/PayeeAutocompleteModal'; import { ScheduledTransactionMenuModal } from './modals/ScheduledTransactionMenuModal'; import { SelectLinkedAccountsModal } from './modals/SelectLinkedAccountsModal'; @@ -591,15 +592,8 @@ export function Modals() { return ; case 'import-actual': return ; - case 'manager-load-backup': - return ( - - ); + case 'out-of-sync-migrations': + return ; default: throw new Error('Unknown modal'); diff --git a/packages/desktop-client/src/components/modals/OutOfSyncMigrationsModal.tsx b/packages/desktop-client/src/components/modals/OutOfSyncMigrationsModal.tsx new file mode 100644 index 0000000000..60bd9fc054 --- /dev/null +++ b/packages/desktop-client/src/components/modals/OutOfSyncMigrationsModal.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { Trans, useTranslation } from 'react-i18next'; +import { useDispatch } from 'react-redux'; + +import { closeBudget } from 'loot-core/client/actions'; + +import { Button } from '../common/Button2'; +import { Link } from '../common/Link'; +import { Modal, ModalHeader, ModalTitle } from '../common/Modal'; +import { Paragraph } from '../common/Paragraph'; +import { Text } from '../common/Text'; +import { View } from '../common/View'; + +export function OutOfSyncMigrationsModal() { + const dispatch = useDispatch(); + + const { t } = useTranslation(); + + const closeBudgetAndModal = (close: () => void) => { + dispatch(closeBudget()); + close(); + }; + + return ( + + {({ state: { close } }) => ( + <> + } + /> + + + + + It looks like you're using an outdated version of the + Actual client. Your budget data has been updated by another + client, but this client is still on the old verison. For the + best experience, please update Actual to the latest version. + + + + + + + If you can't update Actual at this time you can find the + latest release at{' '} + + app.actualbudget.org + + . You can use it until your client is updated. + + + + + + + + + )} + + ); +} diff --git a/packages/loot-core/src/client/actions/budgets.ts b/packages/loot-core/src/client/actions/budgets.ts index 0fdcd5dafa..96dc92434a 100644 --- a/packages/loot-core/src/client/actions/budgets.ts +++ b/packages/loot-core/src/client/actions/budgets.ts @@ -57,7 +57,9 @@ export function loadBudget(id: string, options = {}) { if (error) { const message = getSyncError(error, id); - if (error === 'out-of-sync-migrations' || error === 'out-of-sync-data') { + if (error === 'out-of-sync-migrations') { + dispatch(pushModal('out-of-sync-migrations')); + } else if (error === 'out-of-sync-data') { // confirm is not available on iOS if (typeof window.confirm !== 'undefined') { const showBackups = window.confirm( diff --git a/packages/loot-core/src/client/state-types/modals.d.ts b/packages/loot-core/src/client/state-types/modals.d.ts index c7ccf14f23..3cdbd3819f 100644 --- a/packages/loot-core/src/client/state-types/modals.d.ts +++ b/packages/loot-core/src/client/state-types/modals.d.ts @@ -86,6 +86,8 @@ type FinanceModals = { 'import-actual': null; + 'out-of-sync-migrations': null; + 'files-settings': null; 'confirm-change-document-dir': { diff --git a/upcoming-release-notes/3600.md b/upcoming-release-notes/3600.md new file mode 100644 index 0000000000..70cf5dbf62 --- /dev/null +++ b/upcoming-release-notes/3600.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [MikesGlitch] +--- + +Add a guidance modal for when migrations are out of sync