1
1
import MonacoEditor from 'react-monaco-editor' ;
2
2
import React from 'react' ;
3
+ import randomColor from 'randomcolor' ;
4
+ import sortBy from 'lodash/sortBy' ;
3
5
import xhr from 'xhr' ;
4
6
5
7
import { codeToName , getApiUrl } from './utils' ;
@@ -55,11 +57,18 @@ export default class EditorMain extends React.Component {
55
57
56
58
const program = this . _selectedProgram ( this . state . selectedProgramNumber ) ;
57
59
if ( program ) {
58
- xhr . get ( program . debugUrl , { json : true } , ( error , response ) => {
60
+ const { editorId } = this . props . editorConfig ;
61
+ xhr . post ( program . claimUrl , { json : { editorId } } , ( error , response ) => {
59
62
if ( error ) {
60
63
console . error ( error ) ; // eslint-disable-line no-console
64
+ } else if ( response . statusCode === 400 ) {
65
+ this . setState ( {
66
+ selectedProgramNumber : '' ,
67
+ code : '' ,
68
+ debugInfo : { } ,
69
+ } ) ;
61
70
} else {
62
- this . setState ( { debugInfo : response . body } ) ;
71
+ this . setState ( { debugInfo : response . body . debugInfo } ) ;
63
72
}
64
73
done ( ) ;
65
74
} ) ;
@@ -128,6 +137,10 @@ export default class EditorMain extends React.Component {
128
137
) ;
129
138
} ;
130
139
140
+ _editorColor = ( ) => {
141
+ return randomColor ( { seed : this . props . editorConfig . editorId } ) ;
142
+ } ;
143
+
131
144
render ( ) {
132
145
const selectedProgram = this . _selectedProgram ( this . state . selectedProgramNumber ) ;
133
146
const isMac = navigator . platform . toUpperCase ( ) . indexOf ( 'MAC' ) >= 0 ;
@@ -151,6 +164,11 @@ export default class EditorMain extends React.Component {
151
164
</ div >
152
165
) }
153
166
< div className = { styles . sidebar } >
167
+ < div className = { styles . sidebarSection } >
168
+ editor color{ ' ' }
169
+ < div className = { styles . editorColor } style = { { background : this . _editorColor ( ) } } />
170
+ </ div >
171
+
154
172
< div className = { styles . sidebarSection } >
155
173
< select
156
174
value = { this . state . selectedProgramNumber }
@@ -170,12 +188,23 @@ export default class EditorMain extends React.Component {
170
188
} }
171
189
>
172
190
< option value = { '' } > - select program -</ option >
173
- { this . state . spaceData . programs . map ( program => (
174
- < option key = { program . number } value = { program . number } >
175
- #{ program . number } { codeToName ( program . currentCode ) }
176
- { program . printed ? '' : ' (queued to print)' }
177
- </ option >
178
- ) ) }
191
+ { sortBy ( this . state . spaceData . programs , 'number' ) . map ( program => {
192
+ const beingEditedBySomeoneElse =
193
+ program . editorInfo . claimed &&
194
+ program . editorInfo . editorId !== this . props . editorConfig . editorId ;
195
+
196
+ return (
197
+ < option
198
+ key = { program . number }
199
+ value = { program . number }
200
+ disabled = { beingEditedBySomeoneElse }
201
+ >
202
+ #{ program . number } { codeToName ( program . currentCode ) }
203
+ { program . printed ? '' : ' (queued to print)' }
204
+ { beingEditedBySomeoneElse ? ' (being edited)' : '' }
205
+ </ option >
206
+ ) ;
207
+ } ) }
179
208
</ select >
180
209
</ div >
181
210
@@ -191,8 +220,8 @@ export default class EditorMain extends React.Component {
191
220
errors . length > 0 && (
192
221
< div className = { styles . sidebarSection } >
193
222
errors:{ ' ' }
194
- { errors . map ( error => (
195
- < div className = { styles . logline } >
223
+ { errors . map ( ( error , index ) => (
224
+ < div key = { index } className = { styles . logline } >
196
225
< strong >
197
226
error[{ error . filename } :{ error . lineNumber } :{ error . columnNumber } ]:
198
227
</ strong > { ' ' }
@@ -206,8 +235,8 @@ export default class EditorMain extends React.Component {
206
235
logs . length > 0 && (
207
236
< div className = { styles . sidebarSection } >
208
237
console:{ ' ' }
209
- { logs . map ( logLine => (
210
- < div className = { styles . logline } >
238
+ { logs . map ( ( logLine , index ) => (
239
+ < div key = { index } className = { styles . logline } >
211
240
< strong >
212
241
{ logLine . name } [program:{ logLine . lineNumber } :{ logLine . columnNumber } ]:
213
242
</ strong > { ' ' }
0 commit comments