A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
ciphermask/app/scripts/controllers/onboarding.js

74 lines
2.3 KiB

import { ObservableStore } from '@metamask/obs-store';
import log from 'loglevel';
/**
* @typedef {Object} InitState
* @property {Boolean} seedPhraseBackedUp Indicates whether the user has completed the seed phrase backup challenge
*/
/**
* @typedef {Object} OnboardingOptions
* @property {InitState} initState The initial controller state
* @property {PreferencesController} preferencesController Controller for managing user perferences
*/
/**
* Controller responsible for maintaining
* state related to onboarding
*/
export default class OnboardingController {
/**
* Creates a new controller instance
*
* @param {OnboardingOptions} [opts] Controller configuration parameters
*/
constructor(opts = {}) {
const initialTransientState = {
onboardingTabs: {},
};
const initState = {
seedPhraseBackedUp: null,
...opts.initState,
...initialTransientState,
};
this.store = new ObservableStore(initState);
this.preferencesController = opts.preferencesController;
this.completedOnboarding = this.preferencesController.store.getState().completedOnboarding;
this.preferencesController.store.subscribe(({ completedOnboarding }) => {
if (completedOnboarding !== this.completedOnboarding) {
this.completedOnboarding = completedOnboarding;
if (completedOnboarding) {
this.store.updateState(initialTransientState);
}
}
});
}
setSeedPhraseBackedUp(newSeedPhraseBackUpState) {
this.store.updateState({
seedPhraseBackedUp: newSeedPhraseBackUpState,
});
}
/**
* Registering a site as having initiated onboarding
*
* @param {string} location - The location of the site registering
* @param {string} tabId - The id of the tab registering
*/
registerOnboarding = async (location, tabId) => {
if (this.completedOnboarding) {
log.debug('Ignoring registerOnboarding; user already onboarded');
return;
}
const onboardingTabs = { ...this.store.getState().onboardingTabs };
if (!onboardingTabs[location] || onboardingTabs[location] !== tabId) {
log.debug(
`Registering onboarding tab at location '${location}' with tabId '${tabId}'`,
);
onboardingTabs[location] = tabId;
this.store.updateState({ onboardingTabs });
}
};
}