add push settings

This commit is contained in:
lendry
2026-07-07 13:58:01 +03:00
parent 1bd95fa99e
commit 57925fb2c4
25 changed files with 3036 additions and 1756 deletions

View File

@@ -0,0 +1,56 @@
'use client';
import { useEffect, useRef } from 'react';
import { useAuth } from '@/components/id/auth-provider';
import { usePublicSettings } from '@/components/id/public-settings-provider';
import { registerFirebasePush, subscribeFirebaseForegroundMessages } from '@/lib/firebase-push';
export function FirebasePushBridge() {
const { token, user, isPinLocked, isLoading, isContentReady } = useAuth();
const { firebaseConfig } = usePublicSettings();
const registeredRef = useRef(false);
useEffect(() => {
if (!token || !user?.id || isPinLocked || isLoading || !isContentReady || !firebaseConfig) {
registeredRef.current = false;
return;
}
if (registeredRef.current) return;
let cancelled = false;
const timer = window.setTimeout(() => {
void registerFirebasePush(token, firebaseConfig)
.then((fcmToken) => {
if (!cancelled && fcmToken) {
registeredRef.current = true;
}
})
.catch(() => undefined);
}, 1200);
return () => {
cancelled = true;
window.clearTimeout(timer);
};
}, [firebaseConfig, isContentReady, isLoading, isPinLocked, token, user?.id]);
useEffect(() => {
if (!firebaseConfig || !token || isPinLocked) return undefined;
const unsubscribe = subscribeFirebaseForegroundMessages((payload) => {
if (!('Notification' in window) || Notification.permission !== 'granted') return;
const notification = new Notification(payload.title, {
body: payload.message
});
notification.onclick = () => {
window.focus();
notification.close();
};
});
return unsubscribe;
}, [firebaseConfig, isPinLocked, token]);
return null;
}