131 lines
2.9 KiB
TypeScript
Raw Normal View History

import Controller from '@ember/controller';
import { computed } from '@ember-decorators/object';
import { debounce } from '@ember-decorators/runloop';
import { IFacetsSelectionsMap, facetToParamUrl, facetFromParamUrl } from 'wherehows-web/utils/api/search';
// gradual refactor into es class, hence extends EmberObject instance
2018-09-11 11:11:36 -07:00
export default class SearchController extends Controller {
queryParams = ['category', 'page', 'facets', 'keyword'];
2018-09-11 11:11:36 -07:00
/**
* The category to narrow/ filter search results
* @type {string}
*/
category = 'datasets';
/**
* Dataset Platform to restrict search results to
* @type {DatasetPlatform}
2018-09-11 11:11:36 -07:00
*/
facets: string;
2018-09-11 11:11:36 -07:00
/**
* The current search page
* @type {number}
*/
page = 1;
/**
* Header text for search sidebar
* @type {string}
*/
header = 'Refine By';
searchLoading: boolean = false;
onFacetsChange(selections: IFacetsSelectionsMap) {
this.set('searchLoading', true);
this.onFacetsChangeDebounced(selections);
}
@debounce(1000)
onFacetsChangeDebounced(selections: IFacetsSelectionsMap) {
this.setProperties({
facets: facetToParamUrl(selections),
page: 1
});
}
@computed('facets')
get facetsSelections() {
return facetFromParamUrl(this.facets || '');
}
@computed('model.data.length')
get showNoResult() {
return this.model.data ? this.model.data.length === 0 : true;
2018-09-11 11:11:36 -07:00
}
@computed('model.category')
get isMetrics(): boolean {
const model = this.get('model');
2017-02-13 14:17:49 -08:00
if (model && model.category) {
if (model.category.toLocaleLowerCase() === 'metrics') {
return true;
}
}
return false;
2018-09-11 11:11:36 -07:00
}
2018-09-11 11:11:36 -07:00
@computed('model.page')
get previousPage(): number {
const model = this.get('model');
2017-02-13 14:17:49 -08:00
if (model && model.page) {
var currentPage = model.page;
if (currentPage <= 1) {
return currentPage;
} else {
2017-02-13 14:17:49 -08:00
return currentPage - 1;
}
} else {
return 1;
}
2018-09-11 11:11:36 -07:00
}
@computed('model.page')
get nextPage(): number {
const model = this.get('model');
2017-02-13 14:17:49 -08:00
if (model && model.page) {
2018-09-11 11:11:36 -07:00
const currentPage = model.page;
const totalPages = model.totalPages;
2017-02-13 14:17:49 -08:00
if (currentPage >= totalPages) {
return totalPages;
} else {
2017-02-13 14:17:49 -08:00
return currentPage + 1;
}
} else {
return 1;
}
2018-09-11 11:11:36 -07:00
}
@computed('model.page')
get first(): boolean {
const model = this.get('model');
2017-02-13 14:17:49 -08:00
if (model && model.page) {
2018-09-11 11:11:36 -07:00
const currentPage = model.page;
2017-02-13 14:17:49 -08:00
if (currentPage <= 1) {
return true;
} else {
return false;
2017-02-13 14:17:49 -08:00
}
} else {
return false;
}
2018-09-11 11:11:36 -07:00
}
@computed('model.page')
get last(): boolean {
const model = this.get('model');
2017-02-13 14:17:49 -08:00
if (model && model.page) {
2018-09-11 11:11:36 -07:00
const currentPage = model.page;
const totalPages = model.totalPages;
2017-02-13 14:17:49 -08:00
if (currentPage >= totalPages) {
return true;
} else {
return false;
2017-02-13 14:17:49 -08:00
}
} else {
return false;
}
}
}