56 lines
1.7 KiB
JavaScript
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;
|