classify web

This commit is contained in:
Husanjonazamov
2026-02-24 12:52:49 +05:00
commit 64af77101f
310 changed files with 45449 additions and 0 deletions

121
utils/Firebase.js Normal file
View File

@@ -0,0 +1,121 @@
"use client";
import { initializeApp, getApps, getApp } from "firebase/app";
import {
getMessaging,
getToken,
onMessage,
isSupported,
} from "firebase/messaging";
import firebase from "firebase/compat/app";
import { getAuth } from "firebase/auth";
import { toast } from "sonner";
import { createStickyNote, t } from ".";
import { getFcmToken } from "@/redux/reducer/settingSlice";
const FirebaseData = () => {
let firebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_API_KEY,
authDomain: process.env.NEXT_PUBLIC_AUTH_DOMAIN,
projectId: process.env.NEXT_PUBLIC_PROJECT_ID,
storageBucket: process.env.NEXT_PUBLIC_STORAGE_BUCKET,
messagingSenderId: process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID,
appId: process.env.NEXT_PUBLIC_APP_ID,
measurementId: process.env.NEXT_PUBLIC_MEASUREMENT_ID,
};
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}
const app = initializeApp(firebaseConfig);
const authentication = getAuth(app);
const firebaseApp = !getApps().length
? initializeApp(firebaseConfig)
: getApp();
const messagingInstance = async () => {
try {
const isSupportedBrowser = await isSupported();
if (isSupportedBrowser) {
return getMessaging(firebaseApp);
} else {
createStickyNote();
return null;
}
} catch (err) {
console.error("Error checking messaging support:", err);
return null;
}
};
const fetchToken = async (setFcmToken) => {
try {
if (typeof window !== "undefined" && "serviceWorker" in navigator) {
const messaging = await messagingInstance();
if (!messaging) {
console.error("Messaging not supported.");
return;
}
const permission = await Notification.requestPermission();
if (permission === "granted") {
getToken(messaging, {
vapidKey: process.env.NEXT_PUBLIC_VAPID_KEY,
})
.then((currentToken) => {
if (currentToken) {
getFcmToken(currentToken);
setFcmToken(currentToken);
} else {
console.error("No token found");
toast.error(t("permissionRequired"));
}
})
.catch((err) => {
console.error("Error retrieving token:", err);
// If the error is "no active Service Worker", try to register the service worker again
if (err.message.includes("no active Service Worker")) {
registerServiceWorker();
}
});
} else {
console.error("Permission not granted");
}
}
} catch (err) {
console.error("Error requesting notification permission:", err);
}
};
const registerServiceWorker = () => {
if ("serviceWorker" in navigator) {
navigator.serviceWorker
.register("/firebase-messaging-sw.js")
.then((registration) => {
console.log(
"Service Worker registration successful with scope: ",
registration.scope
);
// After successful registration, try to fetch the token again
fetchToken();
})
.catch((err) => {
console.log("Service Worker registration failed: ", err);
});
}
};
const onMessageListener = async (callback) => {
const messaging = await messagingInstance();
if (messaging) {
return onMessage(messaging, callback);
} else {
console.error("Messaging not supported.");
return null;
}
};
const signOut = () => {
return authentication.signOut();
};
return { firebase, authentication, fetchToken, onMessageListener, signOut };
};
export default FirebaseData;