Files
inji-wallet/screens/PasscodeScreenController.ts

66 lines
1.9 KiB
TypeScript

import {useSelector} from '@xstate/react';
import {useContext, useEffect, useState} from 'react';
import {
AuthEvents,
selectAuthorized,
selectPasscode,
selectPasscodeSalt,
selectIsBiometricToggleFromSettings,
} from '../machines/auth';
import {PasscodeRouteProps} from '../routes';
import {GlobalContext} from '../shared/GlobalContext';
import {
getEndEventData,
getEventType,
sendEndEvent,
} from '../shared/telemetry/TelemetryUtils';
import {TelemetryConstants} from '../shared/telemetry/TelemetryConstants';
import { SettingsEvents } from '../machines/settings';
export function usePasscodeScreen(props: PasscodeRouteProps) {
const {appService} = useContext(GlobalContext);
const authService = appService.children.get('auth');
const settingsService = appService.children.get('settings');
const isAuthorized = useSelector(authService, selectAuthorized);
const isPasscodeSet = () => !!passcode;
const [passcode, setPasscode] = useState('');
const [error, setError] = useState('');
useEffect(() => {
if (isAuthorized) {
sendEndEvent(
getEndEventData(
getEventType(props.route.params?.setup),
TelemetryConstants.EndEventStatus.success,
),
);
props.navigation.reset({
index: 0,
routes: [{name: 'Main'}],
});
}
}, [isAuthorized]);
return {
isPasscodeSet,
passcode,
setPasscode,
error,
setError,
storedPasscode: useSelector(authService, selectPasscode),
toggleUnlock: useSelector(authService, selectIsBiometricToggleFromSettings),
LOGIN: () => {
authService.send(AuthEvents.LOGIN());
},
SETUP_PASSCODE: () => {
authService.send(AuthEvents.SETUP_PASSCODE(passcode));
settingsService?.send(SettingsEvents.TOGGLE_BIOMETRIC_UNLOCK(false,true))
},
storedSalt: useSelector(authService, selectPasscodeSalt),
};
}