Skip to content

Commit 51fc019

Browse files
fix: restore grid layout in PanelSearch broken by wrapper div (#6977)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d93f6d4 commit 51fc019

File tree

1 file changed

+54
-44
lines changed

1 file changed

+54
-44
lines changed

frontend/web/components/PanelSearch.tsx

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { AutoSizer, List } from 'react-virtualized'
1212
import Popover from './base/Popover'
1313
import Input from './base/forms/Input'
1414
import Icon from './Icon'
15-
import classNames from 'classnames'
1615
import { IonIcon } from '@ionic/react'
1716
import { chevronDown, chevronUp } from 'ionicons/icons'
1817
import Button from './base/forms/Button'
@@ -197,6 +196,58 @@ const PanelSearch = <T,>(props: PanelSearchProps<T>): ReactElement => {
197196
search = search.replace(/^"+|"+$/g, '')
198197
}
199198

199+
const renderListContent = (): ReactNode => {
200+
if (isLoading && (!filteredItems || !items)) {
201+
return (
202+
<div className='text-center'>
203+
<Loader />
204+
</div>
205+
)
206+
}
207+
if (filteredItems && filteredItems.length) {
208+
return (
209+
<div
210+
className={props.listClassName}
211+
style={isLoading ? { opacity: 0.5 } : undefined}
212+
>
213+
{renderContainer(filteredItems)}
214+
</div>
215+
)
216+
}
217+
if (renderNoResults && !search) {
218+
return <>{renderNoResults}</>
219+
}
220+
return (
221+
<Row className='list-item'>
222+
{!isLoading && (
223+
<>
224+
{props.noResultsText ? (
225+
props.noResultsText(search) || (
226+
<div className='table-column'>
227+
No results{' '}
228+
{search && (
229+
<span>
230+
for <strong>{` "${search}"`}</strong>
231+
</span>
232+
)}
233+
</div>
234+
)
235+
) : (
236+
<div className='table-column'>
237+
No results{' '}
238+
{search && (
239+
<span>
240+
for <strong>{` "${search}"`}</strong>
241+
</span>
242+
)}
243+
</div>
244+
)}
245+
</>
246+
)}
247+
</Row>
248+
)
249+
}
250+
200251
if (
201252
!search &&
202253
(!filteredItems || filteredItems.length === 0) &&
@@ -304,50 +355,9 @@ const PanelSearch = <T,>(props: PanelSearchProps<T>): ReactElement => {
304355
}
305356
>
306357
{props.searchPanel}
307-
<div
308-
id={props.id}
309-
className={classNames('search-list', props.listClassName)}
310-
>
358+
<div id={props.id} className='search-list'>
311359
{props.header}
312-
{isLoading && (!filteredItems || !items) ? (
313-
<div className='text-center'>
314-
<Loader />
315-
</div>
316-
) : filteredItems && filteredItems.length ? (
317-
<div style={isLoading ? { opacity: 0.5 } : undefined}>
318-
{renderContainer(filteredItems)}
319-
</div>
320-
) : renderNoResults && !search ? (
321-
renderNoResults
322-
) : (
323-
<Row className='list-item'>
324-
{!isLoading && (
325-
<>
326-
{props.noResultsText ? (
327-
props.noResultsText(search) || (
328-
<div className='table-column'>
329-
No results{' '}
330-
{search && (
331-
<span>
332-
for <strong>{` "${search}"`}</strong>
333-
</span>
334-
)}
335-
</div>
336-
)
337-
) : (
338-
<div className='table-column'>
339-
No results{' '}
340-
{search && (
341-
<span>
342-
for <strong>{` "${search}"`}</strong>
343-
</span>
344-
)}
345-
</div>
346-
)}
347-
</>
348-
)}
349-
</Row>
350-
)}
360+
{renderListContent()}
351361
{paging && (
352362
<Paging
353363
paging={paging}

0 commit comments

Comments
 (0)