Files
minibits_wallet/src/models/UserSettingsStore.ts
T

92 lines
3.6 KiB
TypeScript

import {Instance, SnapshotOut, types, flow} from 'mobx-state-tree'
import {KeyChain, log} from '../services'
import {LogLevel} from '../services/log/logTypes'
import { CurrencyCode, MintUnit } from '../services/wallet/currency'
import { ThemeCode } from '../theme'
export type UserSettings = {
preferredUnit: MintUnit
exchangeCurrency: CurrencyCode
nextTheme: ThemeCode
isOnboarded: boolean
isAuthOn: boolean
isPOSAuthOn: boolean
isLocalBackupOn: boolean
isBatchClaimOn: boolean
isReceiveOnlyFromContactsOn: boolean // allow receiving over Nostr from unknown contacts
isLoggerOn: boolean
logLevel: LogLevel
}
export const UserSettingsStoreModel = types
.model('UserSettingsStore')
.props({
preferredUnit: types.optional(types.frozen<MintUnit>(), 'sat'),
exchangeCurrency: types.optional(types.frozen<CurrencyCode | null>(), CurrencyCode.USD),
nextTheme: types.optional(types.frozen<ThemeCode>(), ThemeCode.DEFAULT),
isOnboarded: types.optional(types.boolean, false),
isAuthOn: types.optional(types.boolean, false),
isPOSAuthOn: types.optional(types.boolean, false),
isBatchClaimOn: types.optional(types.boolean, true),
isReceiveOnlyFromContactsOn: types.optional(types.boolean, false),
isLoggerOn: types.optional(types.boolean, true),
logLevel: types.optional(types.frozen<LogLevel>(), LogLevel.ERROR)
})
.actions(self => ({
setPreferredUnit: (preferredUnit: MintUnit) => {
self.preferredUnit = preferredUnit
return preferredUnit
},
setExchangeCurrency: (exchangeCurrency: CurrencyCode | null) => {
self.exchangeCurrency = exchangeCurrency
return exchangeCurrency
},
setNextTheme: (theme: ThemeCode) => {
self.nextTheme = theme
return theme
},
setIsOnboarded: (isOnboarded: boolean) => {
self.isOnboarded = isOnboarded
return isOnboarded
},
setIsAuthOn: flow(function* setIsAuthOn(
isAuthOn: boolean,
) {
log.trace(`[setIsAuthOn] from ${self.isAuthOn} to ${isAuthOn}`)
if (self.isAuthOn !== isAuthOn) {
yield KeyChain.updateAuthSettings(isAuthOn)
self.isAuthOn = isAuthOn
// Auto-disable POS auth when biometric auth is turned off
if (!isAuthOn && self.isPOSAuthOn) {
self.isPOSAuthOn = false
}
}
return isAuthOn
}),
setIsPOSAuthOn: (isPOSAuthOn: boolean) => {
self.isPOSAuthOn = isPOSAuthOn
return isPOSAuthOn
},
setIsBatchClaimOn: (isBatchClaimOn: boolean) => {
self.isBatchClaimOn = isBatchClaimOn
return isBatchClaimOn
},
setIsReceiveOnlyFromContactsOn: (isReceiveOnlyFromContactsOn: boolean) => {
self.isReceiveOnlyFromContactsOn = isReceiveOnlyFromContactsOn
return isReceiveOnlyFromContactsOn
},
setIsLoggerOn: (isLoggerOn: boolean) => {
self.isLoggerOn = isLoggerOn
return isLoggerOn
},
setLogLevel: (logLevel: LogLevel) => {
self.logLevel = logLevel
return logLevel
},
}))
export interface UserSettingsStore
extends Instance<typeof UserSettingsStoreModel> {}
export interface UserSettingsStoreSnapshot
extends SnapshotOut<typeof UserSettingsStoreModel> {}