@@ -85,22 +85,12 @@ export const HRQuerySourceBase: React.FunctionComponent<HRQuerySourceProps> = (p
8585 } else {
8686 let items : IFilterPart [ ] = children . map ( ( child , index ) => {
8787 const parts = child . filter . split ( ' ' ) ;
88- let value = '' ;
89- let andOr = '' ;
90- for ( let i = 2 ; i < parts . length ; i ++ ) {
91- const part = parts [ i ] . toLowerCase ( ) ;
92- if ( part === 'and' || part === 'or' ) {
93- andOr = parts [ i ] ;
94- value = parts . slice ( 2 , i ) . join ( ' ' ) ;
95- break ;
96- }
97- }
98- if ( andOr === '' ) { value = parts . slice ( 2 ) . join ( ' ' ) ; }
88+ var result = findValueAndOr ( parts ) ;
9989 const filterPart : IFilterPart = {
10090 attribute : parts [ 0 ] ,
10191 equalityOperator : parts [ 1 ] ,
102- value : value ,
103- andOr : andOr
92+ value : result . value ,
93+ andOr : result . andOr
10494 } ;
10595 return filterPart ;
10696 } ) ;
@@ -152,6 +142,22 @@ export const HRQuerySourceBase: React.FunctionComponent<HRQuerySourceProps> = (p
152142 }
153143 } , [ children ] ) ;
154144
145+ function findValueAndOr ( words : string [ ] ) : { andOr : string , value : string } {
146+ let value = '' ;
147+ let andOr = '' ;
148+ let startIndex = 2 ;
149+ for ( let i = startIndex ; i < words . length ; i ++ ) {
150+ const part = words [ i ] . toLowerCase ( ) ;
151+ if ( part === 'and' || part === 'or' ) {
152+ andOr = words [ i ] ;
153+ value = words . slice ( startIndex , i ) . join ( ' ' ) ;
154+ break ;
155+ }
156+ }
157+ if ( andOr === '' ) { value = words . slice ( startIndex ) . join ( ' ' ) ; }
158+ return { andOr, value } ;
159+ }
160+
155161function setItemsBasedOnGroups ( groups : Group [ ] ) {
156162 let items : IFilterPart [ ] = [ ] ;
157163 groups . forEach ( group => {
@@ -400,24 +406,14 @@ const checkType = (value: string, type: string | undefined): string => {
400406 let segments = props . source . filter ?. split ( regex ) ;
401407 let result = true ;
402408 if ( segments ) {
403- for ( let i = 0 ; i < segments . length ; i ++ ) {
404- const parts = segments [ i ] . trim ( ) . split ( ' ' ) ;
405- let value = '' ;
406- let andOr = '' ;
407- for ( let i = 2 ; i < parts . length ; i ++ ) {
408- const part = parts [ i ] . toLowerCase ( ) ;
409- if ( part === 'and' || part === 'or' ) {
410- andOr = parts [ i ] ;
411- value = parts . slice ( 2 , i ) . join ( ' ' ) ;
412- break ;
413- }
414- }
415- if ( andOr === '' ) { value = parts . slice ( 2 ) . join ( ' ' ) ; }
416- if ( parts [ 0 ] === "" || parts [ 1 ] === "" || value === "" || andOr === "" ) {
417- result = false ;
418- break ;
419- }
409+ for ( let i = 0 ; i < segments . length ; i ++ ) {
410+ const parts = segments [ i ] . trim ( ) . split ( ' ' ) ;
411+ var res = findValueAndOr ( parts ) ;
412+ if ( parts [ 0 ] === "" || parts [ 1 ] === "" || res . value === "" || res . andOr === "" ) {
413+ result = false ;
414+ break ;
420415 }
416+ }
421417 }
422418 if ( result || children . length === 0 ) {
423419 setChildren ( prevChildren => [ ...prevChildren , { filter : '' } ] ) ;
@@ -847,20 +843,10 @@ const checkType = (value: string, type: string | undefined): string => {
847843 words = segments [ index ] . trim ( ) . split ( ' ' ) ;
848844 }
849845 if ( words . length > 0 ) {
850- let value = '' ;
851- let andOr = '' ;
852- for ( let i = 2 ; i < words . length ; i ++ ) {
853- const part = words [ i ] . toLowerCase ( ) ;
854- if ( part === 'and' || part === 'or' ) {
855- andOr = words [ i ] ;
856- value = words . slice ( 2 , i ) . join ( ' ' ) ;
857- break ;
858- }
859- }
860- if ( andOr === '' ) { value = words . slice ( 2 ) . join ( ' ' ) ; }
846+ var result = findValueAndOr ( words ) ;
861847 words . splice ( 2 ) ;
862848 words . splice ( 2 , 0 , selectedValueAfterConversion || selectedValue ) ;
863- if ( andOr !== '' ) { words . push ( andOr + ' ' ) ; }
849+ if ( result . andOr !== '' ) { words . push ( result . andOr + ' ' ) ; }
864850 }
865851 segments [ index ] = words . join ( ' ' ) ;
866852 const updatedFilter = segments . join ( '' ) ;
@@ -927,20 +913,10 @@ const checkType = (value: string, type: string | undefined): string => {
927913 words = segments [ index ] . trim ( ) . split ( ' ' ) ;
928914 }
929915 if ( words . length > 0 ) {
930- let value = '' ;
931- let andOr = '' ;
932- for ( let i = 2 ; i < words . length ; i ++ ) {
933- const part = words [ i ] . toLowerCase ( ) ;
934- if ( part === 'and' || part === 'or' ) {
935- andOr = words [ i ] ;
936- value = words . slice ( 2 , i ) . join ( ' ' ) ;
937- break ;
938- }
939- }
940- if ( andOr === '' ) { value = words . slice ( 2 ) . join ( ' ' ) ; }
916+ var result = findValueAndOr ( words ) ;
941917 words . splice ( 2 ) ;
942918 words . splice ( 2 , 0 , selectedValueAfterConversion || selectedValue ) ;
943- if ( andOr !== '' ) { words . push ( andOr + ' ' ) ; }
919+ if ( result . andOr !== '' ) { words . push ( result . andOr + ' ' ) ; }
944920 }
945921 segments [ index ] = words . join ( ' ' ) ;
946922 const updatedFilter = segments . join ( '' ) ;
@@ -997,19 +973,8 @@ const checkType = (value: string, type: string | undefined): string => {
997973 words . pop ( ) ;
998974 }
999975 if ( words . length > 0 ) {
1000- let value = '' ;
1001- let andOr = '' ;
1002- let startIndex = 2 ;
1003- for ( let i = startIndex ; i < words . length ; i ++ ) {
1004- const part = words [ i ] . toLowerCase ( ) ;
1005- if ( part === 'and' || part === 'or' ) {
1006- andOr = words [ i ] ;
1007- value = words . slice ( startIndex , i ) . join ( ' ' ) ;
1008- break ;
1009- }
1010- }
1011- if ( andOr === '' ) { value = words . slice ( startIndex ) . join ( ' ' ) ; }
1012- const indexAfterValue = startIndex + value . split ( ' ' ) . length ;
976+ var result = findValueAndOr ( words ) ;
977+ const indexAfterValue = 2 + result . value . split ( ' ' ) . length ;
1013978 words . splice ( indexAfterValue ) ;
1014979 words . splice ( indexAfterValue , 0 , item . text ) ;
1015980 }
0 commit comments