Skip to content

Commit

Permalink
delete FAq in Admin ManageFaq
Browse files Browse the repository at this point in the history
  • Loading branch information
SwayamRana808 committed May 21, 2024
1 parent 60fde3a commit 3c13683
Show file tree
Hide file tree
Showing 4 changed files with 212 additions and 128 deletions.
4 changes: 2 additions & 2 deletions frontend/src/pages/Admin/Admin.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const Admin = (props) => {
const closeMobileMenu = () => setIsMenuOpen(false);
const dispatch = useDispatch();
const firstName = localStorage.getItem("firstName");
const [qId,setQId] = useState("")
const [qId, setQId] = useState("");
const [adminData, setAdminData] = useState({});
const FetchAdminData = async () => {
try {
Expand Down Expand Up @@ -238,7 +238,7 @@ export const Admin = (props) => {
) : tab === 10 ? (
<AddFaq />
) : tab === 17 ? (
<ManageFaq />
<ManageFaq adminData={adminData} />
) : tab === 13 ? (
<ManageTeams />
) : tab === 14 ? (
Expand Down
19 changes: 10 additions & 9 deletions frontend/src/pages/Admin/Components/Faq/Faq.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import React from "react";
import style from "./faq.module.scss";
import { AiFillEdit } from "react-icons/ai";
import { AiOutlinePlus } from "react-icons/ai";
import { Link } from "react-router-dom";

export function Faq(props) {
return (
<div className={style["faq"]}>
Expand All @@ -12,17 +10,17 @@ export function Faq(props) {
<div className={style["card-item"]}>
<div className={style["clickable-card"]}>
<div className={style["card-title"]}>
<Link onClick={() => props.setTab(10)} style={{ color: "white" }}>
<p onClick={() => props.setTab(10)} style={{ color: "white" }}>
ADD FAQ
</Link>
</p>
<AiOutlinePlus className={style["add"]} />
</div>
<div className={style["card-content"]}>
<p style={{ textAlign: "left" }}>To add a new faq</p>
<p style={{ color: "red", cursor: "pointer", textAlign: "left" }}>
<Link onClick={() => props.setTab(10)} style={{ color: "red" }}>
<span onClick={() => props.setTab(10)} style={{ color: "red" }}>
CLICK HERE
</Link>
</span>
</p>
</div>
</div>
Expand All @@ -34,9 +32,9 @@ export function Faq(props) {
<AiFillEdit className={style["editt"]} />
</div>
<div className={style["card-content"]}>
<Link onClick={()=>props.setTab(17)} className={style["main-btn"]}>
<p onClick={() => props.setTab(17)} className={style["main-btn"]}>
Manage here
</Link>
</p>
</div>
</div>
</div>
Expand All @@ -47,7 +45,10 @@ export function Faq(props) {
<AiFillEdit className={style["editt"]} />
</div>
<div className={style["card-content"]}>
<div onClick={()=>props.setTab(18)} className={style["main-btn"]}>
<div
onClick={() => props.setTab(18)}
className={style["main-btn"]}
>
Manage here
</div>
</div>
Expand Down
224 changes: 152 additions & 72 deletions frontend/src/pages/Admin/Components/Faq/ManageFaq/ManageFaq.jsx
Original file line number Diff line number Diff line change
@@ -1,86 +1,166 @@
import React from "react"
import React from "react";
import { useEffect, useState } from "react";
import Accordion from "@material-ui/core/Accordion";
import AccordionDetails from "@material-ui/core/AccordionDetails";
import AccordionSummary from "@material-ui/core/AccordionSummary";
import Typography from "@material-ui/core/Typography";
import Button from "@material-ui/core/Button"
import { Edit, Delete } from "@material-ui/icons"
import Button from "@material-ui/core/Button";
import { Edit, Delete } from "@material-ui/icons";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
import { END_POINT } from "../../../../../config/api";
import Loader from "../../../../../components/util/Loader";
import style from "./manage-faq.module.scss"
export function ManageFaq() {
const [faqs, setFaqs] = useState([]);
const [expanded, setExpanded] = React.useState(false);
const [isFetching, setIsFetching] = useState(false)
const handleChange = (panel) => (event, isExpanded) => {
setExpanded(isExpanded ? panel : false);
import style from "./manage-faq.module.scss";
import { SimpleToast } from "../../../../../components/util/Toast";

export function ManageFaq(props) {
const [faqs, setFaqs] = useState([]);
const [expanded, setExpanded] = useState(false);
const [isFetching, setIsFetching] = useState(true);
const [loading, setLoading] = useState(false);
const [open, setOpenToast] = useState(false);
const [toastMessage, setToastMessage] = useState("");
const [severity, setSeverity] = useState("success");
const [reload, setReload] = useState(true);
const handleCloseToast = () => {
setTimeout(() => {
setOpenToast(false);
}, 500);
};
const handleChange = (panel) => (event, isExpanded) => {
setExpanded(isExpanded ? panel : false);
};
async function fetchAllFaq() {
try {
const response = await fetch(`${END_POINT}/getFaq`);
const data = await response.json();
console.log(data);
setFaqs(data.Faq);
setIsFetching(false);
} catch (err) {
console.log(err.message);
setIsFetching(false);
}
}

const deleteFaq = async (faqId) => {
setLoading(true);
const url = `${END_POINT}/deleteFaq`;
const body = {
userId: props.adminData._id,
faqId: faqId,
};
const headers = {
"Content-Type": "application/json",
};
async function fetchAllFaq() {
try {
const response = await fetch(`${END_POINT}/getFaq`);
const data = await response.json();
console.log(data)
setFaqs(data.Faq)
setIsFetching(false)
}
catch (err) {
console.log(err.message)
}
try {
const response = await fetch(url, {
method: "PUT",
headers: headers,
body: JSON.stringify(body),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
setToastMessage(data.message);
setOpenToast(true);
setSeverity("success");
setReload(!reload);
} catch (error) {
setToastMessage("Failed to delete Faq");
setOpenToast(true);
setSeverity("error");
} finally {
setLoading(false);
}
useEffect(() => {
setIsFetching(true)
fetchAllFaq()
}, [])
};
useEffect(() => {
fetchAllFaq();
}, [reload]);

return (
<div>
<h1 style={{ textAlign: "center" }}>Manage FAQ</h1>
<div className={style["faq"]}>
<div className={`${style["faq-block"]}`}>
{isFetching ? (
<Loader></Loader>
return (
<div>
<h1 style={{ textAlign: "center" }}>Manage FAQ</h1>
<div className={style["faq"]}>
<div className={`${style["faq-block"]}`}>
{isFetching ? (
<Loader />
) : (
faqs.map((faq) => (
<Accordion
key={faq._id}
className={style["accord-dark"]}
expanded={expanded === `panel1-${faq._id}`}
onChange={handleChange(`panel1-${faq._id}`)}
>
<AccordionSummary
style={{ color: "white" }}
expandIcon={
<ExpandMoreIcon
style={{ color: "white", fontSize: "27px" }}
/>
}
aria-controls="panel1a-content"
id="panel1a-header"
>
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
width: "100%",
}}
>
<h3 className={style["faq-question"]}>
<i
className="fa fa-question-circle"
aria-hidden="true"
></i>
&nbsp; &nbsp;{faq.question}
</h3>
</div>
</AccordionSummary>
<AccordionDetails className={style["accord-details"]}>
<Typography style={{ color: "white" }}>
{faq.answer}
</Typography>
<div className={style["btns-container"]}>
<Button
id={style["update-btn"]}
className={style["btns"]}
variant="contained"
endIcon={<Edit />}
>
UPDATE
</Button>
{loading ? (
<div className={style["data-loader"]}>
<Loader />
</div>
) : (
faqs.map((faq) => (
<Accordion
key={faq._id}
className={style["accord-dark"]}
expanded={expanded === `panel1-${faq._id}`}
onChange={handleChange(`panel1-${faq._id}`)}
>
<AccordionSummary
style={{ color: "white" }}
expandIcon={
<ExpandMoreIcon
style={{ color: "white", fontSize: "27px" }}
/>
}
aria-controls="panel1a-content"
id="panel1a-header"
>
<h3 className={style["faq-question"]}>
<i
className="fa fa-question-circle"
aria-hidden="true"
></i>
&nbsp; &nbsp;{faq.question}
</h3>
</AccordionSummary>
<AccordionDetails className={style["accord-details"]}>
<Typography style={{ color: "white" }}>
{faq.answer}
</Typography>
<div className={style["btns-container"]}>
<Button id={style["update-btn"]} className={style["btns"]} variant="contained" endIcon={<Edit />}>UPDATE</Button>
<Button id={style["delete-btn"]} className={style["btns"]} variant="contained" endIcon={<Delete />}>DELETE</Button>
</div>
</AccordionDetails>
</Accordion>
))
<Button
id={style["delete-btn"]}
className={style["btns"]}
variant="contained"
endIcon={<Delete />}
onClick={() => deleteFaq(faq._id)}
>
DELETE
</Button>
)}
</div>
</div>
</div>
</AccordionDetails>
</Accordion>
))
)}
</div>
);
}
</div>
<SimpleToast
open={open}
message={toastMessage}
severity={severity}
handleCloseToast={handleCloseToast}
/>
</div>
);
}
Loading

0 comments on commit 3c13683

Please sign in to comment.