@@ -20,6 +20,29 @@ import { parseGenomicRegion } from "./parsegenomicregion"
2020//https://mui.com/material-ui/react-text-field/#integration-with-3rd-party-input-libraries
2121//For formatting the start/end as it's being entered.
2222
23+ //TODO: Better catch errors in input so that invalid values are not passed to api
24+ function generateURL (
25+ value : string ,
26+ inputType : string ,
27+ assembly : "mm10" | "GRCh38" ,
28+ chromosome : string ,
29+ start : string ,
30+ end : string ,
31+ error : boolean
32+ ) : string {
33+ if ( inputType === "Separated" ) {
34+ return `/search?assembly=${ assembly } &chromosome=${ "chr" + chromosome } &start=${ start . replace ( new RegExp ( "," , "g" ) , "" ) ?? "53380176" } &end=${ end . replace ( new RegExp ( "," , "g" ) , "" ) ?? "53416446" } `
35+ } else {
36+ if ( ! value ) {
37+ return `/search?assembly=${ assembly } &chromosome=chr12&start=53380176&end=53416446`
38+ }
39+ if ( ! error ) {
40+ const region = parseGenomicRegion ( value )
41+ return `/search?assembly=${ assembly } &chromosome=${ region . chromosome } &start=${ region . start } &end=${ region . end } `
42+ }
43+ }
44+ }
45+
2346const GenomicRegion = ( props : { assembly : "mm10" | "GRCh38" ; header ?: boolean } ) => {
2447 const [ value , setValue ] = useState ( "" )
2548 const [ chromosome , setChromosome ] = useState ( "12" )
@@ -162,42 +185,15 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
162185 // eslint-disable-next-line react-hooks/exhaustive-deps
163186 } , [ chromosome , end , props . assembly , start , value ] )
164187
165- //TODO: Better catch errors in input so that invalid values are not passed to api
166- function generateURL (
167- value : string ,
168- inputType : string ,
169- assembly : "mm10" | "GRCh38" ,
170- chromosome : string ,
171- start : string ,
172- end : string
173- ) : string {
174- if ( inputType === "Separated" ) {
175- return `/search?assembly=${ assembly } &chromosome=${ "chr" + chromosome } &start=${ start . replace ( new RegExp ( "," , "g" ) , "" ) ?? "53380176" } &end=${ end . replace ( new RegExp ( "," , "g" ) , "" ) ?? "53416446" } `
176- } else {
177- if ( ! value ) {
178- return `/search?assembly=${ assembly } &chromosome=chr12&start=53380176&end=53416446`
179- }
180- try {
181- const region = parseGenomicRegion ( value )
182- // setError(false)
183- return `/search?assembly=${ assembly } &chromosome=${ region . chromosome } &start=${ region . start } &end=${ region . end } `
184- } catch ( error ) {
185- //If function can't parse input
186- // setError(true)
187- }
188- }
189- }
190-
191188 const url = useMemo ( ( ) => {
192- return generateURL ( value , inputType , props . assembly , chromosome , start , end )
193- } , [ value , inputType , props . assembly , chromosome , start , end ] )
189+ return generateURL ( value , inputType , props . assembly , chromosome , start , end , error )
190+ } , [ value , inputType , props . assembly , chromosome , start , end , error ] )
194191
195192 return (
196193 < Grid container spacing = { 2 } >
197194 { ! props . header && (
198195 < Grid pt = { 0 } size = { 12 } >
199196 < FormControl >
200- { /* <FormLabel id="demo-row-radio-buttons-group-label">Input Format</FormLabel> */ }
201197 < RadioGroup
202198 row
203199 aria-labelledby = "input-format"
@@ -259,7 +255,7 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
259255 </ Typography >
260256 < TextField
261257 variant = "outlined"
262- slotProps = { { inputLabel : { shrink : true } } }
258+ slotProps = { { inputLabel : { shrink : true } } }
263259 label = "Start"
264260 placeholder = "53380176"
265261 value = { start }
@@ -269,7 +265,7 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
269265 } }
270266 onKeyDown = { ( event ) => {
271267 if ( event . key === "Enter" ) {
272- window . open ( url , " _self" )
268+ window . open ( url , ' _self' )
273269 }
274270 if ( event . key === "Tab" && ! start ) {
275271 setStart ( "53380176" )
@@ -278,25 +274,25 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
278274 sx = {
279275 props . header
280276 ? {
281- mr : "0.5rem" ,
282- ml : "0.5rem" ,
283- fieldset : sepErrStart ? { borderColor : "red" } : { borderColor : "white" } ,
284- maxWidth : "7rem" ,
285- }
277+ mr : "0.5rem" ,
278+ ml : "0.5rem" ,
279+ fieldset : sepErrStart ? { borderColor : "red" } : { borderColor : "white" } ,
280+ maxWidth : "7rem" ,
281+ }
286282 : {
287- mr : "0.5rem" ,
288- ml : "0.5rem" ,
289- fieldset : sepErrStart ? { borderColor : "red" } : { borderColor : "black" } ,
290- maxWidth : "7rem" ,
291- }
283+ mr : "0.5rem" ,
284+ ml : "0.5rem" ,
285+ fieldset : sepErrStart ? { borderColor : "red" } : { borderColor : "black" } ,
286+ maxWidth : "7rem" ,
287+ }
292288 }
293289 size = { props . header ? "small" : "medium" }
294290 error = { sepErrStart }
295291 />
296292 < Typography sx = { { justifySelf : "center" } } > –</ Typography >
297293 < TextField
298294 variant = "outlined"
299- slotProps = { { inputLabel : { shrink : true } } }
295+ slotProps = { { inputLabel : { shrink : true } } }
300296 label = "End"
301297 placeholder = "53416446"
302298 value = { end }
@@ -306,7 +302,7 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
306302 } }
307303 onKeyDown = { ( event ) => {
308304 if ( event . key === "Enter" ) {
309- window . open ( url , " _self" )
305+ window . open ( url , ' _self' )
310306 }
311307 if ( event . key === "Tab" && ! end ) {
312308 setEnd ( "53416446" )
@@ -315,17 +311,17 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
315311 sx = {
316312 props . header
317313 ? {
318- mr : "1rem" ,
319- ml : "0.5rem" ,
320- fieldset : sepErrEnd ? { borderColor : "red" } : { borderColor : "white" } ,
321- maxWidth : "7rem" ,
322- }
314+ mr : "1rem" ,
315+ ml : "0.5rem" ,
316+ fieldset : sepErrEnd ? { borderColor : "red" } : { borderColor : "white" } ,
317+ maxWidth : "7rem" ,
318+ }
323319 : {
324- mr : { xs : "0rem" , sm : "1rem" } ,
325- ml : "0.5rem" ,
326- fieldset : sepErrEnd ? { borderColor : "red" } : { borderColor : "black" } ,
327- maxWidth : "7rem" ,
328- }
320+ mr : { xs : "0rem" , sm : "1rem" } ,
321+ ml : "0.5rem" ,
322+ fieldset : sepErrEnd ? { borderColor : "red" } : { borderColor : "black" } ,
323+ maxWidth : "7rem" ,
324+ }
329325 }
330326 size = { props . header ? "small" : "medium" }
331327 error = { sepErrEnd }
@@ -351,7 +347,7 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
351347 onKeyDown = { ( event ) => {
352348 if ( event . key === "Enter" ) {
353349 if ( ! error ) {
354- window . open ( url , " _self" )
350+ window . open ( url , ' _self' )
355351 }
356352 }
357353 if ( event . key === "Tab" && ! value ) {
@@ -383,7 +379,7 @@ const GenomicRegion = (props: { assembly: "mm10" | "GRCh38"; header?: boolean })
383379 sx = { { color : `${ props . header ? "white" : "black" } ` , maxHeight : "100%" } }
384380 onClick = { ( ) => {
385381 if ( ( inputType !== "Separated" && ! error ) || ( inputType === "Separated" && ! sepErrStart && ! sepErrEnd ) ) {
386- window . open ( url , " _self" )
382+ window . open ( url , ' _self' )
387383 }
388384 } }
389385 >
0 commit comments