@@ -35,28 +35,31 @@ const dialogRef = useTemplateRef('dialogRef')
3535let  dialog:  Modal  |  undefined ;
3636type  CheckboxFilter  =  ' Not' |  ' Single' |  ' Multi' 
3737interface  Filter  {
38-     service:  FilterItem  
39-     method:  FilterItem  &  { custom? :  string } 
38+     service:  MultiFilterItem  
39+     method:  MultiFilterItem  &  { custom? :  string } 
40+     url:  FilterItem  
4041} 
4142interface  FilterItem  {
43+     checkbox:  boolean  
44+     value:  any  
45+ } 
46+ interface  MultiFilterItem  {
4247    checkbox:  boolean  
4348    state:  CheckboxFilter  
4449    value:  string [] 
4550} 
4651const =  reactive <Filter >({
4752    service: { state: ' Not' false , value: [] }, 
48-     method: { state: ' Not' false , value: [' GET'  
53+     method: { state: ' Not' false , value: [' GET'  
54+     url: { checkbox: false , value: null } 
4955}) 
5056
5157onMounted (() =>  {
5258    dialog  =  Modal .getOrCreateInstance (dialogRef .value ! ); 
5359    const =  localStorage .getItem (` http-requests-${getFilterCacheKey ()} ` ) 
54-     console .log (' load ' + props .serviceName ) 
55-     console .log (s ) 
5660    if  (s  &&  s  !==  ' '  
5761        const =  JSON .parse (s ) 
5862        Object .assign (filter , saved ) 
59-         console .log (filter ) 
6063    } 
6164}) 
6265
@@ -113,6 +116,12 @@ const events = computed<ServiceEvent[]>(() => {
113116                return  false ; 
114117            }) 
115118    } 
119+     if  (filter .url .value  &&  filter .url .value [' test'  
120+         result  =  result .filter (x  =>  { 
121+             const =  x .data  as  HttpEventData  
122+             return  filter .url .value .test (data .request .url ) 
123+         }) 
124+     } 
116125    return  result  
117126}) 
118127
@@ -183,7 +192,7 @@ onUnmounted(() => {
183192function  showDialog() {
184193    dialog ?.show () 
185194} 
186- function  changeCheckbox(fi :  FilterItem ) {
195+ function  changeCheckbox(fi :  MultiFilterItem ) {
187196    switch  (fi .state ) { 
188197        case  ' Not'  
189198            fi .state  =  ' Single'  
@@ -210,6 +219,10 @@ const activeFiltersCount = computed(() => {
210219    if  (filter .method .state  !==  ' Not'  
211220        counter ++ ; 
212221    } 
222+     if  (filter .url .checkbox  &&  filter .url .value ) { 
223+         console .log (filter .url .value ) 
224+         counter ++ ; 
225+     } 
213226    return  counter ; 
214227}) 
215228function  getFilterCacheKey() {
@@ -221,6 +234,31 @@ function getFilterCacheKey() {
221234    } 
222235    return  ` filter-${props .serviceName }-${props .path }-${props .method } `  
223236} 
237+ const =  ref (' ' 
238+ const =  ref <any >(null )
239+ let  debounceTimer:  number  |  null  =  null 
240+ watch (regexInput , (value ) =>  {
241+     if  (debounceTimer ) { 
242+         clearTimeout (debounceTimer ) 
243+     } 
244+ 
245+     try  { 
246+         const =  value .trim (); 
247+         if  (! v ) { 
248+             filter .url .value  =  null  
249+             regexError .value  =  null  
250+             return  
251+         } 
252+         filter .url .value  =  new  RegExp (v ) 
253+         regexError .value  =  null  
254+     } catch  (error ) { 
255+         debounceTimer  =  setTimeout (() =>  { 
256+             regexError .value  =  error  
257+             filter .url .value  =  null  
258+         }, 1500 ) 
259+     } 
260+      
261+ }) 
224262script >
225263
226264<template >
@@ -326,6 +364,25 @@ function getFilterCacheKey() {
326364                        </div >
327365                    </div >
328366
367+                     <div  class =" row" 
368+                         <div  class =" col" 
369+                             <div  class =" form-check" 
370+                                 <input  class =" form-check-input" type =" checkbox" v-model =" filter.url.checkbox" id =" url" 
371+                                 <label  class =" form-check-label" for =" url" label >
372+                             </div >
373+                         </div >
374+                         <div  class =" col" 
375+                             <div  class =" row me-0" v-if =" filter.url.checkbox" 
376+                                 <input  type =" text" class =" form-control form-control-sm" id =" method-custom" v-model =" regexInput" placeholder =" Regex" :class =" { 'is-invalid': regexError }" 
377+                             </div >
378+                         </div >
379+                     </div >
380+                     <div  class =" row mb-3" 
381+                         <div  class =" invalid-feedback" v-if =" regexError" style =" display inline ;" 
382+                             Invalid regular expression: {{ regexError }}
383+                         </div >
384+                     </div >
385+ 
329386                </div >
330387            </div >
331388        </div >
0 commit comments