editor.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { useState } from "react";
  2. import SelectLang from "./select";
  3. import AceEditor from "react-ace";
  4. import "ace-builds/src-noconflict/mode-html";
  5. import "ace-builds/src-noconflict/mode-css";
  6. import "ace-builds/src-noconflict/mode-javascript";
  7. import "ace-builds/src-noconflict/mode-java";
  8. import "ace-builds/src-noconflict/mode-python";
  9. import "ace-builds/src-noconflict/mode-xml";
  10. import "ace-builds/src-noconflict/mode-sass";
  11. import "ace-builds/src-noconflict/mode-ruby";
  12. import "ace-builds/src-noconflict/mode-markdown";
  13. import "ace-builds/src-noconflict/mode-mysql";
  14. import "ace-builds/src-noconflict/mode-json";
  15. import "ace-builds/src-noconflict/mode-handlebars";
  16. import "ace-builds/src-noconflict/mode-golang";
  17. import "ace-builds/src-noconflict/mode-csharp";
  18. import "ace-builds/src-noconflict/mode-elixir";
  19. import "ace-builds/src-noconflict/mode-typescript";
  20. import "ace-builds/src-noconflict/theme-monokai";
  21. import "ace-builds/src-noconflict/ext-language_tools";
  22. import { edit } from "ace-builds";
  23. const Editor = ({
  24. data = { type: "html", text: "", name: "" },
  25. onChange,
  26. onDelete,
  27. }) => {
  28. return (
  29. <div
  30. style={{
  31. display: "inline-block",
  32. width: "calc(100% / 3)",
  33. marginBottom: "10px",
  34. }}
  35. >
  36. <SelectLang
  37. onChange={(type) =>
  38. onChange({ type, text: data.text, name: data.name })
  39. }
  40. value={data.type}
  41. />{" "}
  42. <br />
  43. <div className="input-group ml-4">
  44. <div className="input-group-prepend">
  45. <span className="input-group-text" id="basic-addon1">
  46. Name of file
  47. </span>
  48. </div>
  49. <input
  50. type="text"
  51. className="form-control w-25"
  52. placeholder="Name of file"
  53. aria-label="Name of file"
  54. aria-describedby="basic-addon1"
  55. value={data.name}
  56. onChange={(e) =>
  57. onChange({ type: data.type, text: data.text, name: e.target.value })
  58. }
  59. />
  60. </div>
  61. <button
  62. type="button"
  63. className="close mr-4"
  64. aria-label="Close"
  65. onClick={onDelete}
  66. >
  67. <span className="text-danger" aria-hidden="true">
  68. &times;
  69. </span>
  70. </button>
  71. <AceEditor
  72. className="editor"
  73. value={data.text}
  74. onChange={(text) =>
  75. onChange({ type: data.type, text, name: data.name })
  76. }
  77. placeholder="Your Code"
  78. mode={data.type}
  79. theme="monokai"
  80. name="blah2"
  81. fontSize={14}
  82. showPrintMargin={true}
  83. showGutter={true}
  84. highlightActiveLine={true}
  85. setOptions={{
  86. enableBasicAutocompletion: true,
  87. enableLiveAutocompletion: true,
  88. enableSnippets: false,
  89. showLineNumbers: true,
  90. tabSize: 2,
  91. }}
  92. />
  93. </div>
  94. );
  95. };
  96. export default Editor;