From 71b59021b9e2cea7241622ef7ae51fbd2bd687f9 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 21 Nov 2023 10:16:22 -0600 Subject: Add dev-only button to clear storage (#1965) * Add dev-only button to clear storage * Add legacy storage clearing too * Use try/catch --- src/state/persisted/legacy.ts | 12 ++++++++++++ src/state/persisted/store.ts | 9 +++++++++ src/view/screens/Settings.tsx | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) (limited to 'src') diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts index 79e8810b3..655409aed 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -130,6 +130,8 @@ export async function migrate() { const newData = transform(legacyData) await write(newData) logger.debug('persisted state: migrated legacy storage') + } else { + logger.debug('persisted state: no migration needed') } } catch (e) { logger.error('persisted state: error migrating legacy storage', { @@ -137,3 +139,13 @@ export async function migrate() { }) } } + +export async function clearLegacyStorage() { + try { + await AsyncStorage.removeItem(DEPRECATED_ROOT_STATE_STORAGE_KEY) + } catch (e: any) { + logger.error(`persisted legacy store: failed to clear`, { + error: e.toString(), + }) + } +} diff --git a/src/state/persisted/store.ts b/src/state/persisted/store.ts index 2b03bec20..04858fe5b 100644 --- a/src/state/persisted/store.ts +++ b/src/state/persisted/store.ts @@ -1,6 +1,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage' import {Schema, schema} from '#/state/persisted/schema' +import {logger} from '#/logger' const BSKY_STORAGE = 'BSKY_STORAGE' @@ -16,3 +17,11 @@ export async function read(): Promise { return objData } } + +export async function clear() { + try { + await AsyncStorage.removeItem(BSKY_STORAGE) + } catch (e: any) { + logger.error(`persisted store: failed to clear`, {error: e.toString()}) + } +} diff --git a/src/view/screens/Settings.tsx b/src/view/screens/Settings.tsx index 1f7623440..cc4348fff 100644 --- a/src/view/screens/Settings.tsx +++ b/src/view/screens/Settings.tsx @@ -64,6 +64,8 @@ import { import {useProfileQuery} from '#/state/queries/profile' import {useClearPreferencesMutation} from '#/state/queries/preferences' import {useInviteCodesQuery} from '#/state/queries/invites' +import {clear as clearStorage} from '#/state/persisted/store' +import {clearLegacyStorage} from '#/state/persisted/legacy' // TEMPORARY (APP-700) // remove after backend testing finishes @@ -266,6 +268,15 @@ export const SettingsScreen = withAuthRequired(function Settings({}: Props) { Linking.openURL(STATUS_PAGE_URL) }, []) + const clearAllStorage = React.useCallback(async () => { + await clearStorage() + Toast.show(`Storage cleared, you need to restart the app now.`) + }, []) + const clearAllLegacyStorage = React.useCallback(async () => { + await clearLegacyStorage() + Toast.show(`Legacy storage cleared, you need to restart the app now.`) + }, []) + return ( @@ -671,6 +682,28 @@ export const SettingsScreen = withAuthRequired(function Settings({}: Props) { Reset onboarding state + + + + Clear all legacy storage data (restart after this) + + + + + + Clear all storage data (restart after this) + + ) : null} -- cgit 1.4.1