add button to reset preferences in dev mode
parent
52a8879754
commit
b561a51ed9
|
@ -63,6 +63,11 @@ export class PreferencesModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The function hydrates an object with properties related to content languages, labels, saved feeds,
|
||||||
|
* and pinned feeds that it gets from the parameter `v` (probably local storage)
|
||||||
|
* @param {unknown} v - the data object to hydrate from
|
||||||
|
*/
|
||||||
hydrate(v: unknown) {
|
hydrate(v: unknown) {
|
||||||
if (isObj(v)) {
|
if (isObj(v)) {
|
||||||
if (
|
if (
|
||||||
|
@ -95,6 +100,9 @@ export class PreferencesModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function fetches preferences and sets defaults for missing items.
|
||||||
|
*/
|
||||||
async sync() {
|
async sync() {
|
||||||
// fetch preferences
|
// fetch preferences
|
||||||
let hasSavedFeedsPref = false
|
let hasSavedFeedsPref = false
|
||||||
|
@ -153,6 +161,15 @@ export class PreferencesModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function updates the preferences of a user and allows for a callback function to be executed
|
||||||
|
* before the update.
|
||||||
|
* @param cb - cb is a callback function that takes in a single parameter of type
|
||||||
|
* AppBskyActorDefs.Preferences and returns either a boolean or void. This callback function is used to
|
||||||
|
* update the preferences of the user. The function is called with the current preferences as an
|
||||||
|
* argument and if the callback returns false, the preferences are not updated.
|
||||||
|
* @returns void
|
||||||
|
*/
|
||||||
async update(cb: (prefs: AppBskyActorDefs.Preferences) => boolean | void) {
|
async update(cb: (prefs: AppBskyActorDefs.Preferences) => boolean | void) {
|
||||||
const res = await this.rootStore.agent.app.bsky.actor.getPreferences({})
|
const res = await this.rootStore.agent.app.bsky.actor.getPreferences({})
|
||||||
if (cb(res.data.preferences) === false) {
|
if (cb(res.data.preferences) === false) {
|
||||||
|
@ -163,6 +180,21 @@ export class PreferencesModel {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function resets the preferences to an empty array of no preferences.
|
||||||
|
*/
|
||||||
|
async reset() {
|
||||||
|
runInAction(() => {
|
||||||
|
this.contentLabels = new LabelPreferencesModel()
|
||||||
|
this.contentLanguages = deviceLocales.map(locale => locale.languageCode)
|
||||||
|
this.savedFeeds = []
|
||||||
|
this.pinnedFeeds = []
|
||||||
|
})
|
||||||
|
await this.rootStore.agent.app.bsky.actor.putPreferences({
|
||||||
|
preferences: [],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
hasContentLanguage(code2: string) {
|
hasContentLanguage(code2: string) {
|
||||||
return this.contentLanguages.includes(code2)
|
return this.contentLanguages.includes(code2)
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,6 +141,11 @@ export const SettingsScreen = withAuthRequired(
|
||||||
store.shell.openModal({name: 'delete-account'})
|
store.shell.openModal({name: 'delete-account'})
|
||||||
}, [store])
|
}, [store])
|
||||||
|
|
||||||
|
const onPressResetPreferences = React.useCallback(async () => {
|
||||||
|
await store.preferences.reset()
|
||||||
|
Toast.show('Preferences reset')
|
||||||
|
}, [store])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={[s.hContentRegion]} testID="settingsScreen">
|
<View style={[s.hContentRegion]} testID="settingsScreen">
|
||||||
<ViewHeader title="Settings" />
|
<ViewHeader title="Settings" />
|
||||||
|
@ -393,6 +398,16 @@ export const SettingsScreen = withAuthRequired(
|
||||||
Storybook
|
Storybook
|
||||||
</Text>
|
</Text>
|
||||||
</Link>
|
</Link>
|
||||||
|
{__DEV__ ? (
|
||||||
|
<Link
|
||||||
|
style={[pal.view, styles.linkCardNoIcon]}
|
||||||
|
onPress={onPressResetPreferences}
|
||||||
|
title="Debug tools">
|
||||||
|
<Text type="lg" style={pal.text}>
|
||||||
|
Reset preferences state
|
||||||
|
</Text>
|
||||||
|
</Link>
|
||||||
|
) : null}
|
||||||
<Text type="sm" style={[styles.buildInfo, pal.textLight]}>
|
<Text type="sm" style={[styles.buildInfo, pal.textLight]}>
|
||||||
Build version {AppInfo.appVersion} ({AppInfo.buildVersion})
|
Build version {AppInfo.appVersion} ({AppInfo.buildVersion})
|
||||||
</Text>
|
</Text>
|
||||||
|
|
Loading…
Reference in New Issue