From d3ea51cc01610182441d8a2e94f8a1fd67d4d91d Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Thu, 10 Apr 2025 10:56:05 +0500 Subject: [PATCH 1/3] web: add delete data option for not logged in user Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- .../src/dialogs/settings/profile-settings.ts | 24 +++++++++++++++++++ packages/intl/src/strings.ts | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/apps/web/src/dialogs/settings/profile-settings.ts b/apps/web/src/dialogs/settings/profile-settings.ts index 41ea73096..3cf13727a 100644 --- a/apps/web/src/dialogs/settings/profile-settings.ts +++ b/apps/web/src/dialogs/settings/profile-settings.ts @@ -35,6 +35,7 @@ import { EmailChangeDialog } from "../email-change-dialog"; import { RecoveryKeyDialog } from "../recovery-key-dialog"; import { UserProfile } from "./components/user-profile"; import { SettingsGroup } from "./types"; +import Config from "../../utils/config"; export const ProfileSettings: SettingsGroup[] = [ { @@ -90,6 +91,29 @@ export const ProfileSettings: SettingsGroup[] = [ } ] }, + { + key: "delete-data-for-not-logged-in-user", + title: strings.deleteData(), + description: strings.deleteAccountDesc(), + keywords: [ + strings.deleteData(), + strings.deleteAccount(), + strings.clear() + ], + isHidden: () => Boolean(useUserStore.getState().isLoggedIn), + components: [ + { + type: "button", + variant: "error", + title: strings.deleteData(), + action: async () => { + Config.clear(); + await db.reset(); + window.location.reload(); + } + } + ] + }, { key: "account-removal", title: strings.deleteAccount(), diff --git a/packages/intl/src/strings.ts b/packages/intl/src/strings.ts index d05967901..a31841975 100644 --- a/packages/intl/src/strings.ts +++ b/packages/intl/src/strings.ts @@ -2632,5 +2632,6 @@ Use this if changes from other devices are not appearing on this device. This wi expiryDate: () => t`Expiry date`, exportCsv: () => t`Export CSV`, importCsv: () => t`Import CSV`, - noContent: () => t`This note is empty` + noContent: () => t`This note is empty`, + deleteData: () => t`Delete data` }; From 86f3f90143b78033fabe6fe27fc9bd0c31e9a7a7 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Mon, 19 Jan 2026 14:24:21 +0500 Subject: [PATCH 2/3] mobile: delete all data option in settings --- apps/mobile/app/hooks/use-app-events.tsx | 2 + .../app/screens/settings/settings-data.tsx | 47 ++++++++++++++++++- packages/intl/locale/en.po | 4 ++ packages/intl/locale/pseudo-LOCALE.po | 4 ++ 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/apps/mobile/app/hooks/use-app-events.tsx b/apps/mobile/app/hooks/use-app-events.tsx index 4dba33602..dce2bb366 100644 --- a/apps/mobile/app/hooks/use-app-events.tsx +++ b/apps/mobile/app/hooks/use-app-events.tsx @@ -94,6 +94,7 @@ import { SyncStatus, useUserStore } from "../stores/use-user-store"; import { updateStatusBarColor } from "../utils/colors"; import { BETA } from "../utils/constants"; import { + eAfterSync, eCloseSheet, eEditorReset, eLoginSessionExpired, @@ -332,6 +333,7 @@ const onLogout = async (reason: string) => { SettingsService.resetSettings(); useUserStore.getState().setUser(null); useUserStore.getState().setSyncing(false); + eSendEvent(eAfterSync); }; async function checkForShareExtensionLaunchedInBackground() { diff --git a/apps/mobile/app/screens/settings/settings-data.tsx b/apps/mobile/app/screens/settings/settings-data.tsx index 4cb8ebe2b..34a506918 100644 --- a/apps/mobile/app/screens/settings/settings-data.tsx +++ b/apps/mobile/app/screens/settings/settings-data.tsx @@ -62,7 +62,11 @@ import SettingsService from "../../services/settings"; import Sync from "../../services/sync"; import { useThemeStore } from "../../stores/use-theme-store"; import { useUserStore } from "../../stores/use-user-store"; -import { eCloseSheet, eOpenRecoveryKeyDialog } from "../../utils/events"; +import { + eAfterSync, + eCloseSheet, + eOpenRecoveryKeyDialog +} from "../../utils/events"; import { NotesnookModule } from "../../utils/notesnook-module"; import { sleep } from "../../utils/time"; import { MFARecoveryCodes, MFASheet } from "./2fa"; @@ -72,8 +76,49 @@ import { logoutUser } from "./logout"; import { SettingSection } from "./types"; import { getTimeLeft } from "./user-section"; import { EDITOR_LINE_HEIGHT } from "../../utils/constants"; +import { MMKV } from "../../common/database/mmkv"; +import { resetTabStore } from "../editor/tiptap/use-tab-store"; +import { clearAllStores } from "../../stores"; +import { refreshAllStores } from "../../stores/create-db-collection-store"; export const settingsGroups: SettingSection[] = [ + { + id: "account-local", + name: strings.account(), + useHook: () => useUserStore((state) => state.user), + hidden: (current) => !!current, + sections: [ + { + id: "delete-data", + name: strings.deleteData(), + description: strings.deleteAccountDesc(), + modifer: () => { + presentDialog({ + title: strings.deleteData(), + paragraph: strings.irreverisibleAction(), + positiveType: "errorShade", + positiveText: "Delete data", + positivePress: async () => { + await PremiumService.setPremiumStatus(); + await BiometricService.resetCredentials(); + MMKV.clearStore(); + resetTabStore(); + clearAllStores(); + Navigation.queueRoutesForUpdate(); + SettingsService.resetSettings(); + db.reset(); + + setImmediate(() => { + refreshAllStores(); + eSendEvent(eAfterSync); + }); + return true; + } + }); + } + } + ] + }, { id: "account", name: strings.account(), diff --git a/packages/intl/locale/en.po b/packages/intl/locale/en.po index 6d1b90942..6536d15cb 100644 --- a/packages/intl/locale/en.po +++ b/packages/intl/locale/en.po @@ -2129,6 +2129,10 @@ msgstr "Delete collapsed section" msgid "Delete column" msgstr "Delete column" +#: src/strings.ts:2636 +msgid "Delete data" +msgstr "Delete data" + #: src/strings.ts:1314 msgid "Delete group" msgstr "Delete group" diff --git a/packages/intl/locale/pseudo-LOCALE.po b/packages/intl/locale/pseudo-LOCALE.po index f6e75c1d1..e192f891d 100644 --- a/packages/intl/locale/pseudo-LOCALE.po +++ b/packages/intl/locale/pseudo-LOCALE.po @@ -2118,6 +2118,10 @@ msgstr "" msgid "Delete column" msgstr "" +#: src/strings.ts:2636 +msgid "Delete data" +msgstr "" + #: src/strings.ts:1314 msgid "Delete group" msgstr "" From afe57e41ce1c7ea6fcc18a956afcc73f717e1321 Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:18:29 +0500 Subject: [PATCH 3/3] web: add confirmation dialog for delete data option Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- apps/web/src/dialogs/settings/profile-settings.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/web/src/dialogs/settings/profile-settings.ts b/apps/web/src/dialogs/settings/profile-settings.ts index 3cf13727a..830d17982 100644 --- a/apps/web/src/dialogs/settings/profile-settings.ts +++ b/apps/web/src/dialogs/settings/profile-settings.ts @@ -107,9 +107,17 @@ export const ProfileSettings: SettingsGroup[] = [ variant: "error", title: strings.deleteData(), action: async () => { - Config.clear(); - await db.reset(); - window.location.reload(); + const ok = await ConfirmDialog.show({ + title: strings.deleteData(), + message: strings.deleteAccountDesc(), + positiveButtonText: strings.yes(), + negativeButtonText: strings.no() + }); + if (ok) { + Config.clear(); + await db.reset(); + window.location.reload(); + } } } ]