CEMROS_hauler_pti_app/rn/app/src/hooks/useHardwareBackPress.js

56 lines
1.7 KiB
JavaScript

/*
Предрейсовые осмотры - мобильное приложение
Хук обработки аппаратной кнопки "Назад" (Android)
*/
//---------------------
//Подключение библиотек
//---------------------
const React = require('react'); //React и хуки
const { BackHandler, Platform } = require('react-native'); //BackHandler и платформа
//-----------
//Тело модуля
//-----------
//Хук обработки аппаратной кнопки "Назад"
const useHardwareBackPress = handler => {
//Ref для хранения актуального обработчика
const handlerRef = React.useRef(handler);
//Обновление ref при изменении обработчика
React.useEffect(() => {
handlerRef.current = handler;
}, [handler]);
React.useEffect(() => {
//BackHandler работает только на Android
if (Platform.OS !== 'android') {
return;
}
//Обработчик нажатия кнопки "Назад"
const backHandler = () => {
if (typeof handlerRef.current === 'function') {
return handlerRef.current();
}
return false;
};
//Подписка на событие
const subscription = BackHandler.addEventListener('hardwareBackPress', backHandler);
//Отписка при размонтировании
return () => {
subscription.remove();
};
}, []);
};
//----------------
//Интерфейс модуля
//----------------
module.exports = useHardwareBackPress;