UserConfig.jsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React from "react";
  2. import { SketchPicker } from "react-color";
  3. import { useTranslation } from "react-i18next";
  4. import styled from "styled-components";
  5. import Modal from "../ui/Modal";
  6. import UserCircle from "./UserCircle";
  7. const StyledInputName = styled.input`
  8. &:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="color"]):not([type="button"]):not([type="reset"]) {
  9. width: 12em;
  10. }
  11. `;
  12. const emptyStyle = {};
  13. const emptyColors = [];
  14. const UserConfig = ({ user, setUser, editable, index }) => {
  15. const { t } = useTranslation();
  16. const [name, setName] = React.useState(user.name);
  17. const [color, setColor] = React.useState(user.color);
  18. const [showDetails, setShowDetails] = React.useState(false);
  19. const handleChange = React.useCallback(
  20. (e) => {
  21. setName(e.target.value);
  22. setUser((prevUser) => ({ ...prevUser, name: e.target.value }));
  23. },
  24. [setUser]
  25. );
  26. const handleChangecolor = React.useCallback((newColor) => {
  27. setColor(newColor.hex);
  28. }, []);
  29. const handleChangecolorComplete = React.useCallback(
  30. (newColor) => {
  31. setColor(newColor.hex);
  32. setUser((prevUser) => ({ ...prevUser, color: newColor.hex }));
  33. },
  34. [setUser]
  35. );
  36. return (
  37. <>
  38. <UserCircle
  39. color={user.color}
  40. onClick={() => editable && setShowDetails(true)}
  41. title={user.name}
  42. name={user.name || `${index}`}
  43. isSelf={editable}
  44. />
  45. <Modal
  46. title={t("User details")}
  47. show={showDetails}
  48. setShow={setShowDetails}
  49. >
  50. <label>{t("Username")}</label>
  51. <StyledInputName value={name} onChange={handleChange} />
  52. <label>{t("Color")}</label>
  53. <SketchPicker
  54. disableAlpha
  55. presetColors={emptyColors}
  56. color={color}
  57. onChange={handleChangecolor}
  58. onChangeComplete={handleChangecolorComplete}
  59. styles={emptyStyle}
  60. width={160}
  61. />
  62. </Modal>
  63. </>
  64. );
  65. };
  66. export default UserConfig;