/* jslint node: true */ 'use strict'; // ENiGMA½ const MenuModule = require('./menu_module.js').MenuModule; const ViewController = require('./view_controller.js').ViewController; const getSortedAvailableFileAreas = require('./file_base_area.js').getSortedAvailableFileAreas; const FileBaseFilters = require('./file_base_filter.js'); // deps const async = require('async'); exports.moduleInfo = { name: 'File Base Search', desc: 'Module for quickly searching the file base', author: 'NuSkooler', }; const MciViewIds = { search: { searchTerms: 1, search: 2, tags: 3, area: 4, orderBy: 5, sort: 6, advSearch: 7, }, }; exports.getModule = class FileBaseSearch extends MenuModule { constructor(options) { super(options); this.menuMethods = { search: (formData, extraArgs, cb) => { const isAdvanced = formData.submitId === MciViewIds.search.advSearch; return this.searchNow(formData, isAdvanced, cb); }, }; } mciReady(mciData, cb) { super.mciReady(mciData, err => { if (err) { return cb(err); } const self = this; const vc = self.addViewController( 'search', new ViewController({ client: this.client }) ); async.series( [ function loadFromConfig(callback) { return vc.loadFromMenuConfig( { callingMenu: self, mciMap: mciData.menu }, callback ); }, function populateAreas(callback) { self.availAreas = [{ name: '-ALL-' }].concat( getSortedAvailableFileAreas(self.client) || [] ); const areasView = vc.getView(MciViewIds.search.area); areasView.setItems(self.availAreas.map(a => a.name)); areasView.redraw(); vc.switchFocus(MciViewIds.search.searchTerms); return callback(null); }, ], err => { return cb(err); } ); }); } getSelectedAreaTag(index) { if (0 === index) { return ''; // -ALL- } const area = this.availAreas[index]; if (!area) { return ''; } return area.areaTag; } getOrderBy(index) { return FileBaseFilters.OrderByValues[index] || FileBaseFilters.OrderByValues[0]; } getSortBy(index) { return FileBaseFilters.SortByValues[index] || FileBaseFilters.SortByValues[0]; } getFilterValuesFromFormData(formData, isAdvanced) { const areaIndex = isAdvanced ? formData.value.areaIndex : 0; const orderByIndex = isAdvanced ? formData.value.orderByIndex : 0; const sortByIndex = isAdvanced ? formData.value.sortByIndex : 0; return { areaTag: this.getSelectedAreaTag(areaIndex), terms: formData.value.searchTerms, tags: isAdvanced ? formData.value.tags : '', order: this.getOrderBy(orderByIndex), sort: this.getSortBy(sortByIndex), }; } searchNow(formData, isAdvanced, cb) { const filterCriteria = this.getFilterValuesFromFormData(formData, isAdvanced); const menuOpts = { extraArgs: { filterCriteria: filterCriteria, }, }; return this.gotoMenu( this.menuConfig.config.fileBaseListEntriesMenu || 'fileBaseListEntries', menuOpts, cb ); } };