function FaqList({ data, setData, adminmode }) {
const [selected, setSelected] = useState(null);
const toggle = (idx) => {
if (selected === idx) {
return setSelected(null);
}
setSelected(idx);
};
const deleteContent = async (id) => {
if (window.confirm("정말 삭제하시겠습니까?")) {
await deleteDoc(doc(db, "FAQList", id));
setData(data.filter((_, idx) => idx !== selected));
setSelected(null);
}
};
return (
<Accordion>
{data.map((question, idx) => (
<div className="item" key={idx}>
<div className="title" onClick={() => toggle(idx)}>
<div>{question.question}</div>
<span>
{selected === idx ? (
<AiOutlineMinusCircle />
) : (
<AiOutlinePlusCircle />
)}
</span>
</div>
<div className={selected === idx ? "content show" : "content"}>
<RichEditorReadonly data={question.answer} />
{adminmode && (
<BtnBox>
<Link to={`/admin/faq/edit/${question.id}`}>
<button className="btn btn-edit">수정</button>
</Link>
<button
className="btn btn-cancel"
onClick={() => deleteContent(question.id)}
>
삭제
</button>
</BtnBox>
)}
</div>
</div>
))}
</Accordion>
);
}
export default FaqList;
const Accordion = styled.div`
margin-top: 2rem;
width: 60%;
.item {
background-color: var(--gray-1);
margin-bottom: 1rem;
padding: 1rem;
box-shadow: 0px 1.6px 3.6px rgb(0 0 0 / 13%), 0px 0px 2.9px rgb(0 0 0 / 11%);
}
.title {
color: var(--gray-8);
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
font-size: 1.25rem;
}
.content {
color: var(--gray-7);
max-height: 0;
overflow: hidden;
transition: all 0.5s cubic-bezier(0, 1, 0, 1);
}
.content.show {
margin-top: 1rem;
font-size: 1.5rem;
height: auto;
max-height: 999px;
transition: all 0.5s cubic-bezier(0, 1, 0, 1);
}
`;
const BtnBox = styled.div`
.btn {
padding: 0.5rem 1rem;
background-color: var(--gray-5);
border-radius: 10px;
font-size: 0.9rem;
&:hover {
color: #fff;
background-color: #869aa0;
}
}
.btn-edit {
margin-right: 0.5rem;
}
`;