File tree Expand file tree Collapse file tree 3 files changed +47
-1
lines changed Expand file tree Collapse file tree 3 files changed +47
-1
lines changed Original file line number Diff line number Diff line change @@ -205,8 +205,10 @@ describe('NeoDash E2E Tests', () => {
205205
206206    cy . get ( 'main .react-grid-item:eq(2) button[aria-label="run"]' ) . scrollIntoView ( ) . should ( 'be.visible' ) . click ( ) ; 
207207    cy . wait ( 500 ) ; 
208+     cy . get ( '#form-submit' ) . should ( 'be.disabled' ) ; 
208209    cy . get ( '#autocomplete' ) . type ( 'The Matrix' ) ; 
209210    cy . get ( '#autocomplete-option-0' ) . click ( ) ; 
211+     cy . get ( '#form-submit' ) . should ( 'not.be.disabled' ) ; 
210212    cy . get ( '#form-submit' ) . click ( ) ; 
211213    cy . wait ( 500 ) ; 
212214    cy . get ( '.form-submitted-message' ) . should ( 'have.text' ,  'Form Submitted.Reset Form' ) ; 
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import { REPORT_LOADING_ICON } from '../../../report/Report';
77import  debounce  from  'lodash/debounce' ; 
88import  {  RUN_QUERY_DELAY_MS  }  from  '../../../config/ReportConfig' ; 
99import  NeoParameterSelectionChart  from  '../../../chart/parameter/ParameterSelectionChart' ; 
10+ import  {  checkParametersNameInGlobalParameter ,  extractAllParameterNames  }  from  '../../../utils/parameterUtils' ; 
1011
1112enum  FormStatus  { 
1213  DATA_ENTRY  =  0 ,  // The user is filling in the form. 
@@ -42,6 +43,14 @@ const NeoForm = (props: ChartProps) => {
4243    } ) ; 
4344  } 
4445
46+   const  isParametersDefined  =  ( cypherQuery : string  |  undefined )  =>  { 
47+     const  parameterNames  =  extractAllParameterNames ( cypherQuery ) ; 
48+     if  ( props . parameters )  { 
49+       return  checkParametersNameInGlobalParameter ( parameterNames ,  props . parameters ) ; 
50+     } 
51+     return  false ; 
52+   } ; 
53+ 
4554  useEffect ( ( )  =>  { 
4655    // If the parameters change after the form is completed, reset it, as there might be another submission. 
4756    if  ( status  ==  FormStatus . SUBMITTED )  { 
@@ -77,7 +86,7 @@ const NeoForm = (props: ChartProps) => {
7786          < Button 
7887            style = { {  marginLeft : 15  } } 
7988            id = 'form-submit' 
80-             disabled = { ! submitButtonActive } 
89+             disabled = { ! submitButtonActive   ||   isParametersDefined ( props . query ) } 
8190            onClick = { ( )  =>  { 
8291              if  ( ! props . query  ||  ! props . query . trim ( ) )  { 
8392                props . createNotification ( 
Original file line number Diff line number Diff line change 1+ /** 
2+  * Extracts all parameter names from a given Cypher query string. 
3+  * 
4+  * @param  {string } cypherQuery The Cypher query string to extract parameter names from. 
5+  * @returns  {string[] } An array containing all extracted parameter names. 
6+  */ 
7+ export  const  extractAllParameterNames  =  ( cypherQuery : string ) : string [ ]  =>  { 
8+     // A regular expression pattern to match parameter names following '$' 
9+     const  pattern  =  / \$ ( [ A - Z a - z _ ] \w * ) / g; 
10+ 
11+     const  parameterNames : string [ ]  =  [ ] ; 
12+     let  match : any ; 
13+ 
14+     while  ( ( match  =  pattern . exec ( cypherQuery ) )  !==  null )  { 
15+         parameterNames . push ( match [ 1 ] ) ; 
16+     } 
17+ 
18+     return  parameterNames ; 
19+ } 
20+ 
21+ /** 
22+  * Checks if all parameter names are present in the global parameter names. 
23+  *  
24+  * @param  {string[] } parameterNames An array of parameter names to be checked. 
25+  * @param  {object } globalParameterNames The object containing global parameter names to compare against. 
26+  * @returns  {boolean } A boolean indicating whether all parameters are present in the global parameters. 
27+  */ 
28+ export  const  checkParametersNameInGlobalParameter  =  ( parameterNames : string [ ] ,  globalParameterNames : any ) : boolean  =>  { 
29+     for  ( const  key  of  parameterNames )  { 
30+         if  ( ! globalParameterNames [ key ]  ||  ( Array . isArray ( globalParameterNames [ key ] )  &&  globalParameterNames [ key ] . length  ===  0 )  ||  globalParameterNames [ key ]  ===  '' )  { 
31+             return  true ; 
32+         } 
33+     } 
34+     return  false ; 
35+ } 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments