@@ -3,15 +3,7 @@ import Editor from "@monaco-editor/react";
33import axios from "axios" ;
44import { Button } from "@/components/ui/button" ;
55import { Input } from "@/components/ui/input" ;
6- import {
7- Select ,
8- SelectContent ,
9- SelectGroup ,
10- SelectItem ,
11- SelectLabel ,
12- SelectTrigger ,
13- SelectValue ,
14- } from "@/components/ui/select" ;
6+ import { Combobox } from "@/components/bc_ui/combobox" ;
157import {
168 ContextMenu ,
179 ContextMenuContent ,
@@ -32,119 +24,10 @@ import { useTranslation } from "next-i18next";
3224import JavaScriptConsole from "@/components/JSConsole" ;
3325import { generateAIName } from "@/utils/aiName" ;
3426import { translateCodeAI } from "@/utils/aiTranslate" ;
27+ import codeLangOptions from "@/utils/codeLangs" ;
3528
3629const DEFAULT_LANGUAGE = "html" ;
3730
38- const languageOptions = [
39- "auto" ,
40- "html" ,
41- "javascript" ,
42- "typescript" ,
43- "python" ,
44- "java" ,
45- "c" ,
46- "cpp" ,
47- "csharp" ,
48- "php" ,
49- "css" ,
50- "scss" ,
51- "less" ,
52- "markdown" ,
53- "json" ,
54- "yaml" ,
55- "xml" ,
56- "bash" ,
57- "sql" ,
58- "go" ,
59- "rust" ,
60- "dart" ,
61- "kotlin" ,
62- "swift" ,
63- "ruby" ,
64- "objective-c" ,
65- "perl" ,
66- "powershell" ,
67- "r" ,
68- "scala" ,
69- "shellscript" ,
70- "vb" ,
71- "lua" ,
72- "fsharp" ,
73- "groovy" ,
74- "ini" ,
75- "latex" ,
76- "matlab" ,
77- "pascal" ,
78- "plaintext" ,
79- "pug" ,
80- "restructuredtext" ,
81- "vhdl" ,
82- "vue" ,
83- "coffeescript" ,
84- "dockerfile" ,
85- "graphql" ,
86- "handlebars" ,
87- "mips" ,
88- "razor" ,
89- "redis" ,
90- "solidity" ,
91- ] ;
92-
93- const langIndex : { [ key : string ] : string } = {
94- auto : "Auto" ,
95- html : "HTML" ,
96- javascript : "JavaScript" ,
97- python : "Python" ,
98- java : "Java" ,
99- c : "C" ,
100- cpp : "C++" ,
101- csharp : "C#" ,
102- php : "PHP" ,
103- css : "CSS" ,
104- scss : "SCSS" ,
105- less : "LESS" ,
106- markdown : "Markdown" ,
107- json : "JSON" ,
108- yaml : "YAML" ,
109- xml : "XML" ,
110- bash : "Bash" ,
111- sql : "SQL" ,
112- go : "Go" ,
113- rust : "Rust" ,
114- dart : "Dart" ,
115- kotlin : "Kotlin" ,
116- swift : "Swift" ,
117- ruby : "Ruby" ,
118- "objective-c" : "Objective-C" ,
119- perl : "Perl" ,
120- powershell : "PowerShell" ,
121- r : "R" ,
122- scala : "Scala" ,
123- shellscript : "ShellScript" ,
124- vb : "VB" ,
125- lua : "Lua" ,
126- fsharp : "F#" ,
127- groovy : "Groovy" ,
128- ini : "INI" ,
129- latex : "LaTeX" ,
130- matlab : "MATLAB" ,
131- pascal : "Pascal" ,
132- plaintext : "Plain Text" ,
133- pug : "Pug" ,
134- restructuredtext : "reStructuredText" ,
135- vhdl : "VHDL" ,
136- vue : "Vue" ,
137- coffeescript : "CoffeeScript" ,
138- dockerfile : "Dockerfile" ,
139- graphql : "GraphQL" ,
140- handlebars : "Handlebars" ,
141- mips : "MIPS" ,
142- razor : "Razor" ,
143- redis : "Redis" ,
144- solidity : "Solidity" ,
145- typescript : "TypeScript" ,
146- } ;
147-
14831const getStoredDefaultLanguage = ( ) => {
14932 if ( typeof window === "undefined" || ! localStorage . getItem ( "defaultLanguage" ) )
15033 return "javascript" ;
@@ -166,7 +49,7 @@ const CodeEditor = ({
16649 const [ defaultLanguage , setDefaultLanguage ] = useState (
16750 getStoredDefaultLanguage ( )
16851 ) ;
169- const [ language , setLanguage ] = useState ( DEFAULT_LANGUAGE ) ;
52+ const [ codeLanguage , setCodeLanguage ] = useState ( DEFAULT_LANGUAGE ) ;
17053 const [ name , setName ] = useState ( `${ t ( "untitled" ) || "Untitled" } ` ) ;
17154 const [ showPreview , setShowPreview ] = useState ( true ) ;
17255 const [ saveSuccess , setSaveSuccess ] = useState ( "" ) ;
@@ -191,15 +74,15 @@ const CodeEditor = ({
19174 . then ( ( response ) => {
19275 const project = response . data ;
19376 setCode ( project . code ) ;
194- setLanguage ( project . language ) ;
77+ setCodeLanguage ( project . language ) ;
19578 setName ( project ?. name || `${ t ( "untitled" ) } ` ) ;
19679 } )
19780 . finally ( ( ) => {
19881 setIsLoading ( false ) ;
19982 } ) ;
20083 } else {
20184 setCode ( "" ) ;
202- setLanguage ( defaultLanguage ) ;
85+ setCodeLanguage ( defaultLanguage ) ;
20386 setName ( `${ t ( "untitled" ) } ` ) ;
20487 }
20588 } , [ selectedProject , defaultLanguage , t ] ) ;
@@ -249,17 +132,17 @@ const CodeEditor = ({
249132 await axios . put ( `/api/projects/${ selectedProject . id } ` , {
250133 name,
251134 code,
252- language,
135+ language : codeLanguage ,
253136 } ) ;
254137 } else {
255138 const response = await axios . post ( "/api/projects" , {
256139 name,
257140 code,
258- language,
141+ language : codeLanguage ,
259142 } ) ;
260143 const project = await response . data ;
261144 if ( ! project ) return ;
262- setSelectedProject ( { ...project , code, language, name } ) ;
145+ setSelectedProject ( { ...project , code, language : codeLanguage , name } ) ;
263146 }
264147 refreshProjects ( ) ;
265148 setSaveSuccess ( "Saved" ) ;
@@ -361,33 +244,17 @@ const CodeEditor = ({
361244 </ ContextMenuContent >
362245 </ ContextMenu >
363246 </ div >
364- < Select
365- value = { language }
366- onValueChange = { ( value ) => setLanguage ( value ) }
247+ < Combobox
248+ value = { codeLanguage }
249+ onValueChange = { ( value ) => setCodeLanguage ( value ) }
367250 disabled = { isLoading }
368- >
369- < SelectTrigger className = "w-fit text-black dark:text-white dark:border-gray-700 dark:bg-gray-800" >
370- < SelectValue placeholder = "Language" />
371- </ SelectTrigger >
372- < SelectContent className = "dark:bg-gray-800 dark:border-gray-700" >
373- < SelectGroup >
374- < SelectLabel className = "dark:text-white dark:bg-gray-800" >
375- { t ( "language" ) }
376- </ SelectLabel >
377- { languageOptions . map ( ( lang ) => (
378- < SelectItem
379- className = "dark:text-white dark:bg-gray-800 dark:hover:bg-gray-700 dark:hover:text-white"
380- key = { lang }
381- value = { lang }
382- >
383- { langIndex [ lang ] || lang }
384- </ SelectItem >
385- ) ) }
386- </ SelectGroup >
387- </ SelectContent >
388- </ Select >
251+ placeholder = "Language"
252+ options = { codeLangOptions }
253+ className = "w-fit text-black dark:text-white dark:border-gray-700 dark:bg-gray-800"
254+ label = "Language"
255+ />
389256
390- { /* <Button
257+ { /* <Button
391258 onClick={translateProject}
392259 size={"icon"}
393260 disabled={isSaving || isLoading}
@@ -436,11 +303,11 @@ const CodeEditor = ({
436303 < Button
437304 onClick = { ( ) => setShowPreview ( ! showPreview ) }
438305 disabled = {
439- ( language !== "html" && language !== "javascript" ) || isLoading
306+ ( codeLanguage !== "html" && codeLanguage !== "javascript" ) || isLoading
440307 }
441308 className = "w-10 p-2 sm:w-fit sm:p-4"
442309 >
443- { language === "html" || language === "javascript" ? (
310+ { codeLanguage === "html" || codeLanguage === "javascript" ? (
444311 showPreview ? (
445312 < >
446313 < EyeOff className = "inline-block" /> { " " }
@@ -478,25 +345,25 @@ const CodeEditor = ({
478345 < Editor
479346 height = {
480347 showPreview &&
481- ( language === "html" || language === "javascript" )
348+ ( codeLanguage === "html" || codeLanguage === "javascript" )
482349 ? "50%"
483350 : "100%"
484351 }
485352 className = "dark:invert"
486353 width = "100%"
487- language = { language }
354+ language = { codeLanguage }
488355 value = { code }
489356 onChange = { ( value ) => setCode ( value || "" ) }
490357 //theme={(darkMode ? "vs-dark" : "vs-light") as any}
491358 theme = "vs-light"
492359 />
493- { showPreview && language === "html" && (
360+ { showPreview && codeLanguage === "html" && (
494361 < iframe
495362 srcDoc = { code }
496363 className = "w-full h-1/2 border-t dark:border-gray-700"
497364 />
498365 ) }
499- { showPreview && language === "javascript" && (
366+ { showPreview && codeLanguage === "javascript" && (
500367 < JavaScriptConsole code = { code } />
501368 ) }
502369 </ >
0 commit comments