set up right side bar for filter globally
This commit is contained in:
parent
d580ca0a15
commit
ba4cf6ad86
52
src/components/common/GlobalOffcanvas.jsx
Normal file
52
src/components/common/GlobalOffcanvas.jsx
Normal file
@ -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 (
|
||||||
|
<div
|
||||||
|
className="offcanvas offcanvas-end"
|
||||||
|
tabIndex="-1"
|
||||||
|
id="globalOffcanvas"
|
||||||
|
ref={offcanvasRef}
|
||||||
|
aria-labelledby="offcanvasLabel"
|
||||||
|
data-bs-backdrop="false"
|
||||||
|
data-bs-scroll="true"
|
||||||
|
>
|
||||||
|
<div className="offcanvas-header">
|
||||||
|
<h5 className="offcanvas-title" id="offcanvasLabel">
|
||||||
|
{offcanvas.title}
|
||||||
|
</h5>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="btn-close text-reset"
|
||||||
|
data-bs-dismiss="offcanvas"
|
||||||
|
aria-label="Close"
|
||||||
|
></button>
|
||||||
|
</div>
|
||||||
|
<div className="offcanvas-body mx-0 py-1 flex-grow-0">
|
||||||
|
{offcanvas.content || <p>No content</p>}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default GlobalOffcanvas;
|
||||||
26
src/components/common/OffcanvasTrigger.jsx
Normal file
26
src/components/common/OffcanvasTrigger.jsx
Normal file
@ -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 = (
|
||||||
|
<i
|
||||||
|
className="bx bx-slider-alt position-fixed p-2 bg-primary text-white rounded-start"
|
||||||
|
onClick={() => openOffcanvas(offcanvas.title, offcanvas.content)}
|
||||||
|
role="button"
|
||||||
|
style={{
|
||||||
|
top: "25%",
|
||||||
|
right: "0%",
|
||||||
|
cursor: "pointer",
|
||||||
|
zIndex: 1056,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
return createPortal(btn, document.body);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default OffcanvasTrigger;
|
||||||
@ -7,6 +7,8 @@ import Footer from "../components/Layout/Footer";
|
|||||||
import FloatingMenu from "../components/common/FloatingMenu";
|
import FloatingMenu from "../components/common/FloatingMenu";
|
||||||
import { FabProvider } from "../Context/FabContext";
|
import { FabProvider } from "../Context/FabContext";
|
||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
|
import OffcanvasTrigger from "../components/common/OffcanvasTrigger";
|
||||||
|
import GlobalOffcanvas from "../components/common/GlobalOffcanvas";
|
||||||
|
|
||||||
const HomeLayout = () => {
|
const HomeLayout = () => {
|
||||||
const loggedUser = useSelector((store) => store.globalVariables.loginUser);
|
const loggedUser = useSelector((store) => store.globalVariables.loginUser);
|
||||||
@ -34,9 +36,11 @@ const HomeLayout = () => {
|
|||||||
<Footer />
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<OffcanvasTrigger />
|
||||||
<FloatingMenu />
|
<FloatingMenu />
|
||||||
<div className="layout-overlay layout-menu-toggle"></div>
|
<div className="layout-overlay layout-menu-toggle"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<GlobalOffcanvas />
|
||||||
</div>
|
</div>
|
||||||
</FabProvider>
|
</FabProvider>
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user