coveo-search-ui
Version:
Coveo JavaScript Search Framework
68 lines (60 loc) • 2.82 kB
text/typescript
import { IResponsiveComponent, IResponsiveComponentOptions, ResponsiveComponentsManager } from './ResponsiveComponentsManager';
import { SearchInterface } from '../SearchInterface/SearchInterface';
import { ResultList } from '../ResultList/ResultList';
import { $$, Dom } from '../../utils/Dom';
import { Component } from '../Base/Component';
import { Logger } from '../../misc/Logger';
import { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';
export class ResponsiveDefaultResultTemplate implements IResponsiveComponent {
private searchInterface: SearchInterface;
private resultList: ResultList;
private currentMode: string;
public static init(root: HTMLElement, component: ResultList, options: IResponsiveComponentOptions) {
if (!$$(root).find(`.${Component.computeCssClassName(ResultList)}`)) {
let logger = new Logger('ResponsiveDefaultResultTemplate');
logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');
return;
}
ResponsiveComponentsManager.register(ResponsiveDefaultResultTemplate, $$(root), ResultList.ID, component, options);
}
constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, responsiveDropdown?: ResponsiveDropdown) {
this.searchInterface = <SearchInterface>Component.get(this.coveoRoot.el, SearchInterface, false);
this.currentMode = 'large';
}
public registerComponent(accept: ResultList) {
if (accept instanceof ResultList) {
this.resultList = accept;
return true;
}
return false;
}
public handleResizeEvent() {
let lastResults = this.resultList.queryController.getLastResults();
if (this.needSmallMode()) {
$$(this.resultList.options.resultsContainer).addClass('coveo-card-layout-container');
$$(this.resultList.options.resultsContainer).removeClass(`coveo-list-layout-container`);
if (this.currentMode != 'small') {
if (lastResults) {
this.resultList.buildResults(lastResults).then((elements: HTMLElement[]) => {
this.resultList.renderResults(elements);
});
}
this.currentMode = 'small';
}
} else {
$$(this.resultList.options.resultsContainer).removeClass('coveo-card-layout-container');
$$(this.resultList.options.resultsContainer).addClass(`coveo-list-layout-container`);
if (this.currentMode != 'large') {
if (lastResults) {
this.resultList.buildResults(lastResults).then((elements: HTMLElement[]) => {
this.resultList.renderResults(elements);
});
}
this.currentMode = 'large';
}
}
}
private needSmallMode(): boolean {
return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();
}
}