11import {
2+ Alert ,
23 Button ,
34 Divider ,
45 FormControlLabel ,
@@ -15,19 +16,21 @@ import useViewModel, {
1516import { AgGridSolidRef } from "ag-grid-solid" ;
1617import { GridOptions } from "ag-grid-community" ;
1718import { Accessor , For , Show } from "solid-js" ;
18- import { Select } from "@thisbeyond/solid-select" ;
19+ import { Select , createOptions } from "@thisbeyond/solid-select" ;
1920import { IconButton } from "@suid/material" ;
2021import AddIcon from "@suid/icons-material/Add" ;
2122import RemoveIcon from "@suid/icons-material/Remove" ;
2223import comparer from "@al/services/comparer" ;
2324import { GroupedMsg } from "@al/models/logData" ;
2425import GroupedMsgGrid from "../groupedMsgGrid" ;
26+ import timesUtils from "@al/utils/times" ;
2527
2628const texts = {
2729 and : "AND" ,
2830 or : "OR" ,
2931 contains : "Contains" ,
3032 notContains : "Not Contains" ,
33+ allFields : "All Fields" ,
3134} ;
3235
3336interface GridsOptions {
@@ -114,16 +117,14 @@ function Filters(props: FiltersProps) {
114117 } ,
115118 } ;
116119
117- function handleEnterKey ( e : KeyboardEvent ) {
120+ function handleFiltersEnterKey ( e : KeyboardEvent ) {
118121 if ( e . key === "Enter" ) {
119122 handleFiltersChange ( ) ;
120123 }
121124 }
122125
123- function handleNLogsEnter ( e : KeyboardEvent ) {
124- if ( e . key === "Enter" ) {
125- handleLogsSelectionChanged ( gridsRefs ) ;
126- }
126+ function handleNLogsKeyDown ( e : KeyboardEvent ) {
127+ timesUtils . debounce ( handleLogsSelectionChanged , 600 ) ( gridsRefs ) ;
127128 }
128129
129130 function getSimpleSearchHTML ( term : SearchTerm , i : Accessor < number > ) {
@@ -143,13 +144,26 @@ function Filters(props: FiltersProps) {
143144 setFilters ( "terms" , i ( ) , "contains" , val === texts . contains )
144145 }
145146 />
147+ < Select
148+ class = "app-select"
149+ initialValue = { texts . allFields }
150+ { ...createOptions ( [ texts . allFields , ...comparer . last ( ) . keys ] ) }
151+ onChange = { ( val ) =>
152+ setFilters (
153+ "terms" ,
154+ i ( ) ,
155+ "field" ,
156+ val === texts . allFields ? "" : val
157+ )
158+ }
159+ />
146160 < TextField
147161 label = "Search"
148162 value = { term . value }
149163 onChange = { ( _ , val ) =>
150164 setFilters ( "terms" , i ( ) , "value" , val . toLowerCase ( ) )
151165 }
152- onKeyDown = { handleEnterKey }
166+ onKeyDown = { handleFiltersEnterKey }
153167 />
154168 </ >
155169 ) ;
@@ -163,19 +177,19 @@ function Filters(props: FiltersProps) {
163177 label = "Start Time(Inclusive)"
164178 value = { filters . startTime }
165179 onChange = { ( _ , val ) => setFilters ( "startTime" , val ) }
166- onKeyDown = { handleEnterKey }
180+ onKeyDown = { handleFiltersEnterKey }
167181 />
168182 < TextField
169183 label = "End Time(Exclusive)"
170184 value = { filters . endTime }
171185 onChange = { ( _ , val ) => setFilters ( "endTime" , val ) }
172- onKeyDown = { handleEnterKey }
186+ onKeyDown = { handleFiltersEnterKey }
173187 />
174188 < TextField
175189 label = "Regex Search"
176190 value = { filters . regex }
177191 onChange = { ( _ , val ) => setFilters ( "regex" , val ) }
178- onKeyDown = { handleEnterKey }
192+ onKeyDown = { handleFiltersEnterKey }
179193 />
180194 < For each = { filters . terms } > { getSimpleSearchHTML } </ For >
181195 < IconButton color = "primary" onClick = { ( ) => handleNewSearchTerm ( true ) } >
@@ -220,16 +234,19 @@ function Filters(props: FiltersProps) {
220234 onChange = { ( _ , val ) =>
221235 setFilters ( "firstN" , isNaN ( + val ) || + val < 0 ? 0 : + val )
222236 }
223- onKeyDown = { handleNLogsEnter }
237+ onKeyDown = { handleNLogsKeyDown }
224238 />
225239 < TextField
226240 label = "Last N Logs"
227241 value = { filters . lastN }
228242 onChange = { ( _ , val ) =>
229243 setFilters ( "lastN" , isNaN ( + val ) || + val < 0 ? 0 : + val )
230244 }
231- onKeyDown = { handleNLogsEnter }
245+ onKeyDown = { handleNLogsKeyDown }
232246 />
247+ < Alert severity = "info" >
248+ N-Logs works only with the below "selection" filters.
249+ </ Alert >
233250 </ Stack >
234251 </ Grid >
235252 < Grid item xs = { 12 } container spacing = { 2 } >
0 commit comments