|
65 | 65 | </script> |
66 | 66 |
|
67 | 67 | <form onsubmit={handleSubmit} class="qf"> |
68 | | - {#if filtersExpanded} |
| 68 | + {#if !isGrpc} |
| 69 | + <!-- Row 1: time range, pagination, sort (REST only) --> |
69 | 70 | <div class="qf-bar qf-filters"> |
70 | | - <label class="qf-inline qf-sm"><span>Verb</span> |
71 | | - <select bind:value={queryForm.verb} onchange={handleFieldChange} name="verb"> |
72 | | - <option value="">All</option> |
73 | | - <option value="GET">GET</option> |
74 | | - <option value="POST">POST</option> |
75 | | - <option value="PUT">PUT</option> |
76 | | - <option value="DELETE">DEL</option> |
77 | | - <option value="PATCH">PATCH</option> |
78 | | - </select> |
| 71 | + <label class="qf-inline"><span>From</span> |
| 72 | + <input type="datetime-local" bind:value={queryForm.from_date} onblur={handleFieldChange} onchange={handleFieldChange} step="1" name="from_date" /> |
79 | 73 | </label> |
80 | | - <label class="qf-inline qf-sm"><span>Code</span> |
81 | | - <select bind:value={queryForm.http_status_code} onchange={handleFieldChange} name="http_status_code"> |
82 | | - <option value="">All</option> |
83 | | - <option value="200">200</option> |
84 | | - <option value="201">201</option> |
85 | | - <option value="204">204</option> |
86 | | - <option value="400">400</option> |
87 | | - <option value="401">401</option> |
88 | | - <option value="403">403</option> |
89 | | - <option value="404">404</option> |
90 | | - <option value="500">500</option> |
91 | | - <option value="502">502</option> |
92 | | - <option value="503">503</option> |
93 | | - </select> |
| 74 | + <label class="qf-inline"><span>To</span> |
| 75 | + <input type="datetime-local" bind:value={queryForm.to_date} onblur={handleFieldChange} onchange={handleFieldChange} step="1" name="to_date" /> |
94 | 76 | </label> |
95 | | - <label class="qf-inline"><span>Consumer</span> |
96 | | - <input type="text" bind:value={queryForm.consumer_id} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ID" name="consumer_id" /> |
| 77 | + <label class="qf-inline qf-xs"><span>Limit</span> |
| 78 | + <input type="number" bind:value={queryForm.limit} min="1" max="10000" onblur={handleFieldChange} onchange={handleFieldChange} name="limit" /> |
97 | 79 | </label> |
98 | | - <label class="qf-inline"><span>App</span> |
99 | | - <input type="text" bind:value={queryForm.app_name} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="name" name="app_name" /> |
| 80 | + <label class="qf-inline qf-xs"><span>Offset</span> |
| 81 | + <input type="number" bind:value={queryForm.offset} min="0" onblur={handleFieldChange} onchange={handleFieldChange} name="offset" /> |
100 | 82 | </label> |
101 | | - <label class="qf-inline" title={isGrpc ? grpcUnsupported : ""}><span>Apps</span> |
102 | | - <input type="text" bind:value={queryForm.include_app_names} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="csv" name="include_app_names" disabled={isGrpc} /> |
| 83 | + <label class="qf-inline qf-sm"><span>Sort</span> |
| 84 | + <select bind:value={queryForm.sort_by} onchange={handleFieldChange} name="sort_by"> |
| 85 | + <option value="date">Date</option> |
| 86 | + <option value="url">URL</option> |
| 87 | + <option value="username">User</option> |
| 88 | + <option value="app_name">App</option> |
| 89 | + <option value="verb">Method</option> |
| 90 | + <option value="developer_email">Dev Email</option> |
| 91 | + <option value="consumer_id">Consumer</option> |
| 92 | + <option value="implemented_by_partial_function">Fn</option> |
| 93 | + <option value="implemented_in_version">Ver</option> |
| 94 | + </select> |
103 | 95 | </label> |
104 | | - <label class="qf-inline" title={isGrpc ? grpcUnsupported : ""}><span>User</span> |
105 | | - <input type="text" bind:value={queryForm.username} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ID" name="username" disabled={isGrpc} /> |
| 96 | + <label class="qf-inline qf-xs"><span>Dir</span> |
| 97 | + <select bind:value={queryForm.direction} onchange={handleFieldChange} name="direction"> |
| 98 | + <option value="desc">Desc</option> |
| 99 | + <option value="asc">Asc</option> |
| 100 | + </select> |
106 | 101 | </label> |
107 | | - <label class="qf-inline"><span>Fn</span> |
108 | | - <input type="text" bind:value={queryForm.implemented_by_partial_function} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="partial fn" name="implemented_by_partial_function" /> |
| 102 | + </div> |
| 103 | + {/if} |
| 104 | + |
| 105 | + <!-- Row 2: match filters (server-side) --> |
| 106 | + <div class="qf-bar qf-filters"> |
| 107 | + <label class="qf-inline qf-sm"><span>Verb</span> |
| 108 | + <select bind:value={queryForm.verb} onchange={handleFieldChange} name="verb"> |
| 109 | + <option value="">All</option> |
| 110 | + <option value="GET">GET</option> |
| 111 | + <option value="POST">POST</option> |
| 112 | + <option value="PUT">PUT</option> |
| 113 | + <option value="DELETE">DEL</option> |
| 114 | + <option value="PATCH">PATCH</option> |
| 115 | + </select> |
| 116 | + </label> |
| 117 | + <label class="qf-inline qf-sm"><span>Code</span> |
| 118 | + <select bind:value={queryForm.http_status_code} onchange={handleFieldChange} name="http_status_code"> |
| 119 | + <option value="">All</option> |
| 120 | + <option value="200">200</option> |
| 121 | + <option value="201">201</option> |
| 122 | + <option value="204">204</option> |
| 123 | + <option value="400">400</option> |
| 124 | + <option value="401">401</option> |
| 125 | + <option value="403">403</option> |
| 126 | + <option value="404">404</option> |
| 127 | + <option value="500">500</option> |
| 128 | + <option value="502">502</option> |
| 129 | + <option value="503">503</option> |
| 130 | + </select> |
| 131 | + </label> |
| 132 | + <label class="qf-inline"><span>Consumer</span> |
| 133 | + <input type="text" bind:value={queryForm.consumer_id} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ID" name="consumer_id" /> |
| 134 | + </label> |
| 135 | + <label class="qf-inline"><span>App</span> |
| 136 | + <input type="text" bind:value={queryForm.app_name} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="name" name="app_name" /> |
| 137 | + </label> |
| 138 | + <label class="qf-inline"><span>Fn</span> |
| 139 | + <input type="text" bind:value={queryForm.implemented_by_partial_function} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="partial fn" name="implemented_by_partial_function" /> |
| 140 | + </label> |
| 141 | + </div> |
| 142 | + |
| 143 | + <!-- Row 3: extra filters --> |
| 144 | + <div class="qf-bar qf-filters"> |
| 145 | + {#if !isGrpc} |
| 146 | + <label class="qf-inline"><span>Apps</span> |
| 147 | + <input type="text" bind:value={queryForm.include_app_names} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="csv" name="include_app_names" /> |
109 | 148 | </label> |
110 | | - <label class="qf-inline qf-sm" title={isGrpc ? grpcUnsupported : ""}><span>Ver</span> |
111 | | - <input type="text" bind:value={queryForm.implemented_in_version} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ver" name="implemented_in_version" disabled={isGrpc} /> |
| 149 | + <label class="qf-inline"><span>User</span> |
| 150 | + <input type="text" bind:value={queryForm.username} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ID" name="username" /> |
112 | 151 | </label> |
113 | | - <label class="qf-inline qf-sm"><span>Min Duration</span> |
114 | | - <input type="number" bind:value={queryForm.duration} min="0" onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ms" name="duration" /> |
| 152 | + <label class="qf-inline qf-sm"><span>Ver</span> |
| 153 | + <input type="text" bind:value={queryForm.implemented_in_version} onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ver" name="implemented_in_version" /> |
115 | 154 | </label> |
116 | | - <label class="qf-inline qf-sm" title={isGrpc ? grpcUnsupported : ""}><span>Anon</span> |
117 | | - <select bind:value={queryForm.anon} onchange={handleFieldChange} name="anon" disabled={isGrpc}> |
| 155 | + {/if} |
| 156 | + <label class="qf-inline qf-sm"><span>Min Duration</span> |
| 157 | + <input type="number" bind:value={queryForm.duration} min="0" onblur={handleFieldChange} onchange={handleFieldChange} placeholder="ms" name="duration" /> |
| 158 | + </label> |
| 159 | + {#if !isGrpc} |
| 160 | + <label class="qf-inline qf-sm"><span>Anon</span> |
| 161 | + <select bind:value={queryForm.anon} onchange={handleFieldChange} name="anon"> |
118 | 162 | <option value="">All</option> |
119 | 163 | <option value="true">Yes</option> |
120 | 164 | <option value="false">No</option> |
121 | 165 | </select> |
122 | 166 | </label> |
123 | | - <button type="submit" hidden>Submit</button> |
124 | | - {#if showClearButton} |
125 | | - <div class="qf-actions"> |
126 | | - <button type="button" class="qf-btn" onclick={onClear} title="Clear form">🗑️ Clear</button> |
127 | | - </div> |
128 | | - {/if} |
129 | | - </div> |
130 | | - {/if} |
| 167 | + {/if} |
| 168 | + <button type="submit" hidden>Submit</button> |
| 169 | + {#if showClearButton} |
| 170 | + <div class="qf-actions"> |
| 171 | + <button type="button" class="qf-btn" onclick={onClear} title="Clear form">🗑️ Clear</button> |
| 172 | + </div> |
| 173 | + {/if} |
| 174 | + </div> |
131 | 175 | </form> |
132 | 176 |
|
133 | 177 | <style> |
|
0 commit comments