import {ChangeEvent, useContext, useState} from 'react'; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import {faPlus, faTrash, faWarning,} from '@fortawesome/free-solid-svg-icons'; import {Issue} from '@/lib/models/Book'; import System from '@/lib/models/System'; import {BookContext} from '@/context/BookContext'; import {SessionContext} from '@/context/SessionContext'; import {AlertContext} from '@/context/AlertContext'; import CollapsableArea from "@/components/CollapsableArea"; import {useTranslations} from "next-intl"; import {LangContext, LangContextProps} from "@/context/LangContext"; interface IssuesProps { issues: Issue[]; setIssues: React.Dispatch>; } export default function Issues({issues, setIssues}: IssuesProps) { const t = useTranslations(); const {lang} = useContext(LangContext); const {book} = useContext(BookContext); const {session} = useContext(SessionContext); const {errorMessage} = useContext(AlertContext); const bookId: string | undefined = book?.bookId; const token: string = session.accessToken; const [newIssueName, setNewIssueName] = useState(''); async function addNewIssue(): Promise { if (newIssueName.trim() === '') { errorMessage(t("issues.errorEmptyName")); return; } try { const issueId: string = await System.authPostToServer('book/issue/add', { bookId, name: newIssueName, }, token, lang); if (!issueId) { errorMessage(t("issues.errorAdd")); return; } const newIssue: Issue = { name: newIssueName, id: issueId, }; setIssues([...issues, newIssue]); setNewIssueName(''); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t("issues.errorUnknownAdd")); } } } async function deleteIssue(issueId: string): Promise { if (issueId === undefined) { errorMessage(t("issues.errorInvalidId")); } try { const response: boolean = await System.authDeleteToServer( 'book/issue/remove', { bookId, issueId, }, token, lang ); if (response) { const updatedIssues: Issue[] = issues.filter((issue: Issue): boolean => issue.id !== issueId,); setIssues(updatedIssues); } else { errorMessage(t("issues.errorDelete")); } } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t("issues.errorUnknownDelete")); } } } function updateIssueName(issueId: string, name: string): void { const updatedIssues: Issue[] = issues.map((issue: Issue): Issue => { if (issue.id === issueId) { return {...issue, name}; } return issue; }); setIssues(updatedIssues); } return ( {issues && issues.length > 0 ? ( issues.map((item: Issue) => (
updateIssueName(item.id, e.target.value)} placeholder={t("issues.issueNamePlaceholder")} />
)) ) : (

{t("issues.noIssue")}

)}
) => setNewIssueName(e.target.value)} placeholder={t("issues.newIssuePlaceholder")} />
} icon={faWarning}/> ); }