import { initStandardListPage } from '../core/app-grid-factory.js'; import { readPageConfig } from '../core/app-page-config.js'; import { warnOnce } from '../core/app-dom.js'; import { getAppBase, escapeHtml } from './app-list-utils.js'; const config = readPageConfig('search-index'); if (config) { const appBase = getAppBase(); const gridSearch = config.gridSearch ?? null; const filterSchema = config.filterSchema ?? []; const labels = config.labels ?? {}; const renderResult = (cell) => { const title = escapeHtml(cell?.title ?? ''); const description = escapeHtml(cell?.description ?? ''); const url = cell?.url ?? '#'; const image = cell?.image ?? ''; const icon = escapeHtml(cell?.icon ?? 'bi-search'); const avatar = image ? `` : ``; return gridjs.html(`
${avatar}
${title} ${description ? `

${description}

` : ''}
`); }; const renderType = (cell) => gridjs.html(`${escapeHtml(cell ?? '')}`); const { gridConfig } = initStandardListPage({ grid: { gridjs: window.gridjs, container: '#search-results-grid', dataUrl: 'search/data', appBase, columns: [ { name: labels.result || 'Result', sort: false, formatter: (cell) => renderResult(cell), }, { name: labels.type || 'Type', sort: false, formatter: (cell) => renderType(cell), }, ], sortColumns: [null, null], paginationLimit: 10, language: config.gridLang ?? {}, mapData: (data) => data.data.map((row) => [row, row.type]), search: gridSearch, filterSchema, urlSync: true, }, filters: { mode: 'search-only', }, }); if (!gridConfig || !gridConfig.grid) { warnOnce('UI_INIT_FAIL', 'Search results grid init failed', { module: 'search-index', component: 'grid' }); } }