Files
frontend/src/infrastructure/EventSubscriber.tsx

45 lines
1.2 KiB
TypeScript
Raw Normal View History

import { useEffect } from 'react';
import { router } from 'expo-router';
import * as Haptics from 'expo-haptics';
import { eventBus, AppEvent } from '@/core/events/EventBus';
import { hrefVerificationGuide } from '@/navigation/hrefs';
let verificationModalShown = false;
export function EventSubscriber() {
useEffect(() => {
return eventBus.subscribe((event: AppEvent) => {
switch (event.type) {
case 'NAVIGATE':
router.push(event.payload.path);
break;
case 'NAVIGATE_BACK':
router.back();
break;
case 'SHOW_VERIFICATION_MODAL':
if (verificationModalShown) return;
verificationModalShown = true;
router.push(hrefVerificationGuide());
setTimeout(() => {
verificationModalShown = false;
}, 3000);
break;
case 'VIBRATE':
Haptics.notificationAsync(
event.payload.type === 'message'
? Haptics.NotificationFeedbackType.Success
: event.payload.type === 'group_message'
? Haptics.NotificationFeedbackType.Warning
: Haptics.NotificationFeedbackType.Error
).catch(() => {});
break;
}
});
}, []);
return null;
}