From 55d4736258d6d89499fe9c12d5e853d1df72bc7e Mon Sep 17 00:00:00 2001 From: cv <34649812+cpvalente@users.noreply.github.com> Date: Mon, 19 Apr 2021 22:55:16 +0200 Subject: [PATCH] feat: settings modal --- client/src/features/modals/SettingsModal.jsx | 179 +++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 client/src/features/modals/SettingsModal.jsx diff --git a/client/src/features/modals/SettingsModal.jsx b/client/src/features/modals/SettingsModal.jsx new file mode 100644 index 000000000..b19e3aecf --- /dev/null +++ b/client/src/features/modals/SettingsModal.jsx @@ -0,0 +1,179 @@ +import { + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, +} from '@chakra-ui/modal'; +import { + FormLabel, + FormControl, + Input, + Button, + Textarea, +} from '@chakra-ui/react'; +import { + fetchSettings, + postSettings, + settingsNamespace, +} from '../../app/api/settingsApi'; +import { useQuery } from 'react-query'; +import { useEffect, useState } from 'react'; + +export default function SettingsModal(props) { + const { data, status, isError } = useQuery(settingsNamespace, fetchSettings); + const [formData, setFormData] = useState({ + title: '', + url: '', + publicInfo: '', + backstageInfo: '', + }); + const [submitting, setSubmitting] = useState(false); + const { isOpen, onClose } = props; + + useEffect(() => { + if (data == null) return; + + setFormData({ + title: data.title, + url: data.url, + publicInfo: data.publicInfo, + backstageInfo: data.backstageInfo, + }); + }, [data]); + + const submitHandler = async (event) => { + event.preventDefault(); + setSubmitting(true); + + await postSettings(formData).then(setSubmitting(false)).then(onClose); + }; + + return ( + + + +
+ Event Main Info + + + {status === 'success' && ( + <> + + + Event Title + + + setFormData({ ...formData, title: event.target.value }) + } + isDisabled={submitting} + /> + + + + + Event URL + + + setFormData({ ...formData, url: event.target.value }) + } + isDisabled={submitting} + /> + + + + + Public Info + +