coveo-search-ui
Version:
Coveo JavaScript Search Framework
67 lines (54 loc) • 2.19 kB
text/typescript
import { IExecutionReport, IExecutionReportSectionBuilder, EXECUTION_REPORT_SECTION, ExecutionReport } from './ExecutionReport';
import { findWhere, each, contains } from 'underscore';
import { GenericValueOutput } from './GenericValueOutput';
import { $$, Dom } from '../../utils/Dom';
export interface IExecutionReportEffectiveIndexQuerySection {
result: {
in: Record<string, any>;
};
}
const collapsibleSectionsInReport: string[] = ['Facets', 'RankingOverrides', 'RankingExpressions'];
export class ExecutionReportEffectiveIndexQuerySection implements IExecutionReportSectionBuilder {
public async build(executionReport: IExecutionReport): Promise<{ container: Dom }> {
const { container } = ExecutionReport.standardSectionHeader('Query sent to index');
const table = $$('table', {
className: 'coveo-relevance-inspector-table'
});
container.append(table.el);
const indexQuerySection = findWhere(executionReport.children, { description: EXECUTION_REPORT_SECTION.INDEX_QUERY });
if (indexQuerySection) {
each(indexQuerySection.result.in, (paramValue: string, paramKey: string) => {
const row = $$('tr');
table.append(row.el);
const id = `executionReportIndexExecution${paramKey}`;
if (contains(collapsibleSectionsInReport, paramKey) && paramValue) {
const btn = $$(
'button',
{
className: 'coveo-button',
type: 'button'
},
paramKey
);
const tdTarget = $$(
'td',
{
id,
className: 'coveo-relevance-inspector-effective-query-collapsible'
},
new GenericValueOutput().output(paramValue).content
);
btn.on('click', () => {
tdTarget.toggleClass('coveo-active');
});
row.append($$('td', undefined, btn).el);
row.append(tdTarget.el);
} else {
row.append($$('td', undefined, paramKey).el);
row.append($$('td', undefined, new GenericValueOutput().output(paramValue).content).el);
}
});
}
return { container };
}
}