96 lines
2.0 KiB
JavaScript
96 lines
2.0 KiB
JavaScript
import template from '%/lock-screen.pug';
|
|
import {
|
|
APP_STATE_EVENT_WINDOW_DID_FOCUS
|
|
} from '@/state';
|
|
|
|
const ELEMENT_ID_PASSCODE_INPUT = 'passcode-input';
|
|
|
|
class LockScreenCtrl {
|
|
|
|
/* @ngInject */
|
|
constructor(
|
|
$scope,
|
|
alertManager,
|
|
application,
|
|
appState
|
|
) {
|
|
this.$scope = $scope;
|
|
this.alertManager = alertManager;
|
|
this.application = application;
|
|
this.appState = appState;
|
|
this.formData = {};
|
|
this.addVisibilityObserver();
|
|
this.addDestroyHandler();
|
|
}
|
|
|
|
get passcodeInput() {
|
|
return document.getElementById(
|
|
ELEMENT_ID_PASSCODE_INPUT
|
|
);
|
|
}
|
|
|
|
addDestroyHandler() {
|
|
this.$scope.$on('$destroy', () => {
|
|
this.unregisterObserver();
|
|
});
|
|
}
|
|
|
|
addVisibilityObserver() {
|
|
this.unregisterObserver = this.appState.addObserver((eventName, data) => {
|
|
if (eventName === APP_STATE_EVENT_WINDOW_DID_FOCUS) {
|
|
const input = this.passcodeInput;
|
|
if(input) {
|
|
input.focus();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
async submitPasscodeForm($event) {
|
|
if(
|
|
!this.formData.passcode ||
|
|
this.formData.passcode.length === 0
|
|
) {
|
|
return;
|
|
}
|
|
this.passcodeInput.blur();
|
|
const success = await this.onValue()(this.formData.passcode);
|
|
if(!success) {
|
|
this.alertManager.alert({
|
|
text: "Invalid passcode. Please try again.",
|
|
onClose: () => {
|
|
this.passcodeInput.focus();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
forgotPasscode() {
|
|
this.formData.showRecovery = true;
|
|
}
|
|
|
|
beginDeleteData() {
|
|
this.alertManager.confirm({
|
|
text: "Are you sure you want to clear all local data?",
|
|
destructive: true,
|
|
onConfirm: async () => {
|
|
await this.application.signOut();
|
|
await this.application.restart();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
export class LockScreen {
|
|
constructor() {
|
|
this.restrict = 'E';
|
|
this.template = template;
|
|
this.controller = LockScreenCtrl;
|
|
this.controllerAs = 'ctrl';
|
|
this.bindToController = true;
|
|
this.scope = {
|
|
onValue: '&',
|
|
};
|
|
}
|
|
}
|