EditInfoButton.jsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React from "react";
  2. import { useTranslation } from "react-i18next";
  3. import styled from "styled-components";
  4. import { Form } from "react-final-form";
  5. import Touch from "./ui/Touch";
  6. import Modal from "./ui/Modal";
  7. import AutoSave from "./ui/formUtils/AutoSave";
  8. import useBoardConfig from "./useBoardConfig";
  9. const BoardConfigForm = styled.div`
  10. display: flex;
  11. flex-direction: column;
  12. & .trash {
  13. float: right;
  14. }
  15. `;
  16. const BoardConfig = ({ BoardFormComponent }) => {
  17. const [, setBoardConfig] = useBoardConfig();
  18. const onSubmitHandler = React.useCallback(
  19. (data) => {
  20. setBoardConfig((prev) => ({
  21. ...prev,
  22. ...data,
  23. }));
  24. },
  25. [setBoardConfig]
  26. );
  27. return (
  28. <Form
  29. onSubmit={onSubmitHandler}
  30. render={() => (
  31. <BoardConfigForm>
  32. <AutoSave save={onSubmitHandler} />
  33. <BoardFormComponent />
  34. </BoardConfigForm>
  35. )}
  36. />
  37. );
  38. };
  39. const EditInfoButton = ({ BoardFormComponent }) => {
  40. const { t } = useTranslation();
  41. const [show, setShow] = React.useState(false);
  42. return (
  43. <>
  44. <Touch
  45. onClick={() => setShow((prev) => !prev)}
  46. alt={t("Edit game info")}
  47. title={t("Edit game info")}
  48. label={t("Edit game info")}
  49. icon={"cog"}
  50. />
  51. <Modal
  52. title={t("Edit game information")}
  53. setShow={setShow}
  54. show={show}
  55. position="left"
  56. >
  57. <section>
  58. <BoardConfig BoardFormComponent={BoardFormComponent} />
  59. </section>
  60. </Modal>
  61. </>
  62. );
  63. };
  64. export default EditInfoButton;