From ba4cf6ad8607f5975ae6f1e32308b211cdb353e7 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Tue, 5 Aug 2025 23:59:27 +0530 Subject: [PATCH] set up right side bar for filter globally --- src/components/common/GlobalOffcanvas.jsx | 52 ++++++++++++++++++++++ src/components/common/OffcanvasTrigger.jsx | 26 +++++++++++ src/layouts/HomeLayout.jsx | 4 ++ 3 files changed, 82 insertions(+) create mode 100644 src/components/common/GlobalOffcanvas.jsx create mode 100644 src/components/common/OffcanvasTrigger.jsx diff --git a/src/components/common/GlobalOffcanvas.jsx b/src/components/common/GlobalOffcanvas.jsx new file mode 100644 index 00000000..bcca92bb --- /dev/null +++ b/src/components/common/GlobalOffcanvas.jsx @@ -0,0 +1,52 @@ +import React, { useEffect, useRef } from "react"; +import { useFab } from "../../Context/FabContext"; + +const GlobalOffcanvas = () => { + const { offcanvas, setIsOffcanvasOpen } = useFab(); + const offcanvasRef = useRef(); + + useEffect(() => { + const el = offcanvasRef.current; + const bsOffcanvas = new bootstrap.Offcanvas(el); + + const handleShow = () => setIsOffcanvasOpen(true); + const handleHide = () => setIsOffcanvasOpen(false); + + el.addEventListener("show.bs.offcanvas", handleShow); + el.addEventListener("hidden.bs.offcanvas", handleHide); + + return () => { + el.removeEventListener("show.bs.offcanvas", handleShow); + el.removeEventListener("hidden.bs.offcanvas", handleHide); + }; + }, []); + + return ( +
+
+
+ {offcanvas.title} +
+ +
+
+ {offcanvas.content ||

No content

} +
+
+ ); +}; + +export default GlobalOffcanvas; diff --git a/src/components/common/OffcanvasTrigger.jsx b/src/components/common/OffcanvasTrigger.jsx new file mode 100644 index 00000000..3c74fb14 --- /dev/null +++ b/src/components/common/OffcanvasTrigger.jsx @@ -0,0 +1,26 @@ +import { createPortal } from "react-dom"; +import { useFab } from "../../Context/FabContext"; + +const OffcanvasTrigger = () => { + const { openOffcanvas, offcanvas, showTrigger } = useFab(); + + if (!showTrigger || !offcanvas.content) return null; + + const btn = ( + openOffcanvas(offcanvas.title, offcanvas.content)} + role="button" + style={{ + top: "25%", + right: "0%", + cursor: "pointer", + zIndex: 1056, + }} + /> + ); + + return createPortal(btn, document.body); +}; + +export default OffcanvasTrigger; diff --git a/src/layouts/HomeLayout.jsx b/src/layouts/HomeLayout.jsx index 34639ee0..d43de172 100644 --- a/src/layouts/HomeLayout.jsx +++ b/src/layouts/HomeLayout.jsx @@ -7,6 +7,8 @@ import Footer from "../components/Layout/Footer"; import FloatingMenu from "../components/common/FloatingMenu"; import { FabProvider } from "../Context/FabContext"; import { useSelector } from "react-redux"; +import OffcanvasTrigger from "../components/common/OffcanvasTrigger"; +import GlobalOffcanvas from "../components/common/GlobalOffcanvas"; const HomeLayout = () => { const loggedUser = useSelector((store) => store.globalVariables.loginUser); @@ -34,9 +36,11 @@ const HomeLayout = () => {