import { FC, useEffect, useState } from 'react'; import { Element, Color, ColorBitmap, ElementState, ElementSuggestion, ColorCode, } from '../types'; import toast from 'react-hot-toast'; import ElementView from './ElementView'; import { userStore } from '../stores'; interface ElementCreatorProps { firstElementId: number | undefined; secondElementId: number | undefined; closeDialog: () => void; } const ElementCreator: FC = ({ firstElementId, secondElementId, closeDialog, }) => { const [elementName, setElementName] = useState(''); const [color, setColor] = useState(Color.Air); const [firstElement, setFirstElement] = useState(null); const [secondElement, setSecondElement] = useState(null); const setUser = userStore((store) => store.setUser); const fetchElement = async (elementId: number): Promise => { const elementResponse = await fetch(`/api/element/${elementId}`); return await elementResponse.json(); }; useEffect(() => { if (firstElementId == undefined || secondElementId == undefined) { return; } setElementName(''); setColor(Color.Air); fetchElement(firstElementId).then((elem) => { setFirstElement(elem); }); fetchElement(secondElementId).then((elem) => { setSecondElement(elem); }); }, [firstElementId, secondElementId]); const handleNameChange = (e: React.ChangeEvent) => { setElementName(e.target.value); }; const createHandleColorClick = (color: Color) => { return (e: React.MouseEvent) => { e.preventDefault(); setColor(color); }; }; const handleSubmitButton = async (e: React.MouseEvent) => { e.preventDefault(); if (elementName == '') { toast.error('No name selected'); return; } if (!(color in Color)) { toast.error('Bad color value'); return; } const request: ElementSuggestion = { name: elementName, iconBitmap: ColorBitmap[color], firstElementId: firstElementId!, secondElementId: secondElementId!, }; console.log(request); const createVoteResponse = await fetch(`/api/suggestion/create`, { method: 'POST', credentials: 'include', body: JSON.stringify(request), headers: { 'Content-Type': 'application/json', }, }); if (createVoteResponse.status == 401) { console.log('Session expired'); toast.error('Your authorization has expired. You have to log in again.'); localStorage.removeItem('user'); setUser(undefined); return; } console.log(createVoteResponse.status); console.log('Vote started'); closeDialog(); }; return (
{firstElement != null && secondElement != null && ( <> {}} isPreview={false} interactive={false} /> {}} isPreview={false} interactive={false} /> )} {}} isPreview={true} interactive={false} />
{(Object.keys(Color) as Array) .filter((color) => Number.isNaN(Number(color))) .map((color) => { return ( ); })}
); }; export default ElementCreator;