diff --git a/apps/mobile/app/components/launcher/index.js b/apps/mobile/app/components/launcher/index.js index 696c94461..81aa2b548 100644 --- a/apps/mobile/app/components/launcher/index.js +++ b/apps/mobile/app/components/launcher/index.js @@ -102,7 +102,8 @@ const Launcher = React.memo( if (db.migrations.required() && !verifyUser) { presentSheet({ component: , - onClose: () => { + onClose: async () => { + await db.init(); loadNotes(); }, disableClosing: true @@ -117,10 +118,6 @@ const Launcher = React.memo( } }, [loadNotes, verifyUser]); - // useEffect(() => { - // hideSplashScreen(); - // }, [verifyUser]); - useEffect(() => { if (!loading) { doAppLoadActions(); diff --git a/apps/mobile/app/components/sheets/migrate/index.tsx b/apps/mobile/app/components/sheets/migrate/index.tsx index 80de17231..0d2370720 100644 --- a/apps/mobile/app/components/sheets/migrate/index.tsx +++ b/apps/mobile/app/components/sheets/migrate/index.tsx @@ -20,22 +20,92 @@ along with this program. If not, see . import React, { useState } from "react"; import { View } from "react-native"; import { db } from "../../../common/database"; +import { MMKV } from "../../../common/database/mmkv"; import BackupService from "../../../services/backup"; -import { eSendEvent, ToastEvent } from "../../../services/event-manager"; +import { + eSendEvent, + presentSheet, + ToastEvent +} from "../../../services/event-manager"; import { useThemeStore } from "../../../stores/use-theme-store"; import { eCloseProgressDialog } from "../../../utils/events"; import { sleep } from "../../../utils/time"; import { Dialog } from "../../dialog"; import DialogHeader from "../../dialog/dialog-header"; import { presentDialog } from "../../dialog/functions"; +import SheetProvider from "../../sheet-provider"; import { Button } from "../../ui/button"; import { Notice } from "../../ui/notice"; import Seperator from "../../ui/seperator"; import { ProgressBarComponent } from "../../ui/svg/lazy"; import Paragraph from "../../ui/typography/paragraph"; +import { Issue } from "../github/issue"; + +const alertMessage = `Read carefully before continuing: + +It is required that you download and save a backup of your data. + +Some merge conflicts in your notes after a migration are expected. It is recommended that you resolve them carefully. But if you are feeling reckless and want to risk losing some data, you can logout log back in. + +If you face any other issues or are unsure about what to do, feel free to reach out to us via https://discord.com/invite/zQBK97EE22 or email us at support@streetwriters.co`; + +export const makeError = ( + stack: string, + component: string +) => `Please let us know what happened. What steps we can take to reproduce the issue here. + +_______________________________ +Stacktrace: In ${component}::${stack}`; + export default function Migrate() { const colors = useThemeStore((state) => state.colors); const [loading, setLoading] = useState(false); + const [_error, _setError] = useState(); + const [reset, setReset] = useState(false); + + const reportError = (error: Error) => { + _setError(error); + presentSheet({ + context: "local", + component: ( + + ) + }); + }; + + const startMigration = async () => { + try { + setLoading(true); + const backupSaved = await BackupService.run(false, "local"); + if (!backupSaved) { + ToastEvent.show({ + heading: "Migration failed", + message: "You must download a backup of your data before migrating.", + context: "local" + }); + setLoading(false); + return; + } + await db.migrations?.migrate(); + eSendEvent(eCloseProgressDialog); + setLoading(false); + await sleep(500); + presentDialog({ + title: "Migration successful", + paragraph: + "Your data has been migrated. If you face any issues after the migration please reach out to us via email or Discord.", + context: "global", + negativeText: "Ok" + }); + } catch (e) { + setLoading(false); + reportError(e as Error); + } + }; return ( - + {loading ? ( <> @@ -94,35 +154,51 @@ If you face any other issues or are unsure about what to do, feel free to reach + ) : _error ? ( + <> + + An error occured while migrating your data. You can logout of your + account and try to relogin. However this is not recommended as it + may result in some data loss if your data was not synced. + + + {reset ? ( + + App data has been cleared. Kindly relaunch the app to login again. + + ) : ( +