mirror of
https://github.com/minibits-cash/minibits_wallet.git
synced 2026-08-11 08:59:18 +00:00
92 lines
3.6 KiB
TypeScript
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> {}
|