UNPKG

corporate-frontend-mithril

Version:

Corporate frontend MithrilJS modules

209 lines (160 loc) 5.49 kB
const model = require('./advanced-search-form-model'); const formStateLoading = 'formStateLoading'; const formStateDefault = 'formStateDefault'; const formStateResult = 'formStateResult'; const config = require('../advanced-search-form/advanced-search-form-constant'); const service = require('./../service/advance-search-service'); const util = require('./advance-search-util'); module.exports = function() { let _formState = formStateDefault; let _resultMsg = ''; let _queryOptions = {}; let _totalMatch = 0; let _responseSearchResult = {}; let _sortedBy = model.sortBy[0]; // search pagination parameters let _totalPages = 0; let _startIndex = config.START_INDEX; let _currentPage = config.FIRST_PAGE; let _pageType = config.PAGE_TYPE_ADVANCED_SEARCH; let _faculty = config.FACULTIES[0]; let vm = { get pageType() { return _pageType; }, set pageType(pageType) { _pageType = pageType; }, get faculty() { return _faculty; }, set faculty(faculty) { _faculty = faculty; service.setFaculty(_faculty); }, get pageLinks() { let pages = []; for (let page = config.FIRST_PAGE; page <= _totalPages; page++) { pages.push({ title: page}); } return pages; }, get currentPage() { // within the range of first and last page if (_currentPage >= config.FIRST_PAGE && _currentPage <= _totalPages) { return _currentPage; } // beyond last page, reset to last page else if (_currentPage > _totalPages) { return _totalPages; } // beyond first page, reset to first page else { return config.FIRST_PAGE; } }, get lastPage() { return _totalPages; }, get profiletype() { return model.profileTypes; }, get searchType() { return model.searchTypes; }, get sortedBy() { console.log('_sortedBy', _sortedBy); return model.sortBy.find(item => item.value == _sortedBy.value).name; }, get sortByList() { return model.sortBy; }, get totalMatch() { return _totalMatch; }, get responseSearchResult() { return _responseSearchResult; }, get resultMsg() { return _resultMsg; }, get formState() { return _formState; }, get theme() { return service.formDropDowns.theme; }, get keyword() { return service.formDropDowns.keyword; }, get clinicalspecialty() { return service.formDropDowns.clinicalspecialty; }, get approach() { return service.formDropDowns.approach; }, get internationallinkage() { return service.formDropDowns.internationallinkage; }, formStateLoading, formStateDefault, formStateResult, }; //------------------- View Handlers --------------------- vm.generatePageLinks = function() { return util.pagination(vm.currentPage, vm.lastPage).map(page => { return m(`a.pagination__item.${vm.active(page)}`, { innerHTML: page, style: 'cursor: pointer;', onclick: () => vm.moveToPage(page), }); }); }; vm.active = function(title) { return vm.currentPage == title ? 'pagination__item--active' : ''; }; vm.searchTerms = function({v}) { _queryOptions.searchTerms = v; }; vm.selectOptions = function({queryKey, obj}) { console.log(`selectOptions and key - ${queryKey} -`, obj); _queryOptions[queryKey] = obj.value; }; vm.selectSort = function({queryKey, e, obj}) { // TODO: need to retain the selected value in the dropdown console.log(`selectSort and key - ${queryKey} -`, obj); console.log('e', e); _sortedBy = obj; // let selected = obj; _queryOptions[queryKey] = obj.value; vm.submit(); // reset to the first page _currentPage = 1; // obj = selected; }; vm.selectProfile = function({queryKey, profile, v}) { console.log(`selectProfile and key - ${queryKey} -`, v); profile.checked = v; _queryOptions[queryKey] = v; }; vm.moveToPage = (page) => { console.log('moveToPage()', page); _currentPage = page; if (page > 0 && page <= _totalPages) { _startIndex = (page - config.FIRST_PAGE) * config.ITEMS_PER_PAGE; } vm.submit(null, _startIndex); }; vm.visible = (visible) => visible.includes(_pageType); vm.submit = (e, startIndex = 0) => { _formState = formStateLoading; service.totalMatchPerformSearch(_queryOptions, startIndex).then((response) => { console.log('submit() response', response); _formState = formStateResult; _totalMatch = response[0]; _responseSearchResult = response[1]; _totalPages = Math.ceil(_totalMatch / config.ITEMS_PER_PAGE); }); }; return vm; };