snippet.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { useState } from "react";
  2. import Editor from "./editor";
  3. import { actionSnippetAdd } from "../actions";
  4. import { connect } from "react-redux";
  5. const SnippetHome = ({onSave}) => {
  6. const [files, setFiles] = useState([
  7. { type: "html" },
  8. { type: "css"},
  9. { type: "javascript" },
  10. ]);
  11. const [name, setName] = useState("");
  12. const [title, setTitle] = useState("");
  13. const [description, setDescription] = useState("");
  14. return (
  15. <div>
  16. {files.map((data, index) => (
  17. <>
  18. <Editor
  19. onDelete={() => setFiles(files.filter((item) => item != data))}
  20. data={data}
  21. onChange={({ type, name, text }) =>
  22. setFiles([
  23. ...files.slice(0, index),
  24. { type, name, text },
  25. ...files.slice(index + 1),
  26. ])
  27. }
  28. />
  29. </>
  30. ))}
  31. <br />
  32. <div
  33. style={{
  34. alignItems: "center",
  35. textAlign: "center",
  36. marginBottom: "10px",
  37. }}
  38. >
  39. <div>
  40. <button
  41. className="btn btn-primary"
  42. onClick={() => setFiles([...files, { type: "html" }])}
  43. key={files}
  44. >
  45. Add editor
  46. </button>
  47. </div>
  48. <div className="input-group mb-3 mt-5 ml-auto mr-auto w-25">
  49. <div className="input-group-prepend">
  50. <span className="input-group-text" id="basic-addon1">
  51. Name of your project
  52. </span>
  53. </div>
  54. <input
  55. value={title}
  56. onChange={(e) => setTitle(e.target.value)}
  57. type="text"
  58. className="form-control"
  59. placeholder="Name of project"
  60. aria-label="Name of project"
  61. aria-describedby="basic-addon1"
  62. />
  63. </div>
  64. <div className="input-group ml-auto mr-auto w-50">
  65. <div className="input-group-prepend">
  66. <span className="input-group-text ">Description</span>
  67. </div>
  68. <textarea
  69. value={description}
  70. onChange={(e) => setDescription(e.target.value)}
  71. className="form-control "
  72. aria-label="With textarea"
  73. placeholder="Your description"
  74. ></textarea>
  75. </div>
  76. <button className="btn btn-success float-right mr-5 mb-5" onClick = {() => onSave(title , description , files)}>
  77. Save project
  78. </button>
  79. </div>
  80. </div>
  81. );
  82. };
  83. const ConnectedSnippetHome = connect(null,{ onSave: actionSnippetAdd })(SnippetHome);
  84. export default ConnectedSnippetHome