UserConfig.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React from "react";
  2. import { BlockPicker } from "react-color";
  3. const UserConfig = ({ user, setUser, editable }) => {
  4. const [name, setName] = React.useState(user.name);
  5. const [showPicker, setShowPicker] = React.useState(false);
  6. const handleChange = (e) => {
  7. setName(e.target.value);
  8. setUser({ ...user, name: e.target.value });
  9. };
  10. const handleChangecolor = (newColor) => {
  11. setUser({ ...user, color: newColor.hex });
  12. setShowPicker(false);
  13. };
  14. const showColorPicker = () => {
  15. if (editable) {
  16. setShowPicker((prev) => !prev);
  17. }
  18. };
  19. return (
  20. <>
  21. <span
  22. style={{
  23. backgroundColor: user.color,
  24. width: "20px",
  25. height: "20px",
  26. margin: "5px",
  27. cursor: editable ? "pointer" : "auto",
  28. }}
  29. onClick={showColorPicker}
  30. ></span>
  31. {showPicker && (
  32. <div
  33. style={{
  34. position: "absolute",
  35. top: "38px ",
  36. left: "-53px",
  37. zIndex: 1000,
  38. }}
  39. >
  40. <BlockPicker
  41. color={user.color}
  42. onChangeComplete={handleChangecolor}
  43. />
  44. </div>
  45. )}
  46. {editable && (
  47. <input
  48. style={{
  49. border: "none",
  50. padding: "2px",
  51. paddingLeft: "0.5em",
  52. backgroundColor: "#CCC",
  53. width: "7em",
  54. }}
  55. value={name}
  56. onChange={handleChange}
  57. />
  58. )}
  59. {!editable && (
  60. <span style={{ lineHeight: "30px", paddingLeft: "0.5em" }}>
  61. {user.name}
  62. </span>
  63. )}
  64. </>
  65. );
  66. };
  67. export default UserConfig;