UNPKG

cv-dialog-sdk

Version:

Catavolt Dialog Javascript API

202 lines (201 loc) 7.54 kB
import { EditorDialog } from './EditorDialog'; import { SortDirectionEnum, ViewModeEnum } from "./types"; export const FILTER_VALUE_SUFFIX = '_FILTER_VALUE'; export const FILTER_OPERATOR_SUFFIX = '_FILTER_OPER'; export const SORT_DIRECTION_SUFFIX = '_SORT_DIRECTION'; export const SORT_SEQUENCE_SUFFIX = '_SORT_SEQUENCE'; export const KEYWORD_PROPERTY_NAME = 'keyword'; export class SearchDialog extends EditorDialog { /** * Clear the search values currently in the buffer. Does not submit search. */ clearSearchValues() { this.record.propNames.filter((propName) => { return propName.endsWith(FILTER_OPERATOR_SUFFIX) || propName.endsWith(FILTER_VALUE_SUFFIX) || propName === KEYWORD_PROPERTY_NAME; }).forEach((propName) => { this.setPropertyValue(propName, null); }); } /** * Clear the sort values currently in the buffer. Does not submit search. */ clearSortValues() { this.record.propNames.filter((propName) => { return propName.endsWith(SORT_DIRECTION_SUFFIX) || propName.endsWith(SORT_SEQUENCE_SUFFIX); }).forEach((propName) => { this.setPropertyValue(propName, null); }); } /** * Get the current search value for a property name, as a Property * @param propName */ getSearchValuePropertyForName(propName) { return this.record.propAtName(propName + FILTER_VALUE_SUFFIX); } /** * Get the PropertyDef associated with the search value Property * @param propName */ getSearchValuePropertyDefForName(propName) { return this.propDefAtName(propName + FILTER_VALUE_SUFFIX); } getSearchablePropertyNames() { return this.recordDef.propertyDefs.filter((propertyDef) => { return propertyDef.propertyName.endsWith(FILTER_VALUE_SUFFIX); }).map(propertyDef => this.getPropertyNameForSearchPropertyName(propertyDef.propertyName)); } getSortablePropertyNames() { return this.recordDef.propertyDefs.filter((propertyDef) => { return propertyDef.propertyName.endsWith(SORT_DIRECTION_SUFFIX); }).map(propertyDef => this.getPropertyNameForSearchPropertyName(propertyDef.propertyName)); } getPropertyNameForSearchPropertyName(searchPropertyName) { if (searchPropertyName.endsWith(FILTER_VALUE_SUFFIX)) { return searchPropertyName.substring(0, searchPropertyName.indexOf(FILTER_VALUE_SUFFIX)); } else if (searchPropertyName.endsWith(FILTER_OPERATOR_SUFFIX)) { return searchPropertyName.substring(0, searchPropertyName.indexOf(FILTER_OPERATOR_SUFFIX)); } else if (searchPropertyName.endsWith(SORT_DIRECTION_SUFFIX)) { return searchPropertyName.substring(0, searchPropertyName.indexOf(SORT_DIRECTION_SUFFIX)); } else if (searchPropertyName.endsWith(SORT_SEQUENCE_SUFFIX)) { return searchPropertyName.substring(0, searchPropertyName.indexOf(SORT_SEQUENCE_SUFFIX)); } return null; } /** * Get the current keyword search value. This is a global substring search * across all properties */ getKeywordSearchValue() { return this.record.propAtName(KEYWORD_PROPERTY_NAME); } /** * Get the current search operator for a property name, as a Property * @param propName */ getSearchOpPropertyForName(propName) { return this.record.propAtName(propName + FILTER_OPERATOR_SUFFIX); } /** * Get the PropertyDef associated with the search operator Property * @param propName */ getSearchOpPropertyDefForName(propName) { return this.propDefAtName(propName + FILTER_OPERATOR_SUFFIX); } /** * Get the current sort direction for a property name, as a Property * @param propName */ getSortDirectionPropertyForName(propName) { return this.record.propAtName(propName + SORT_DIRECTION_SUFFIX); } /** * Get the PropertyDef associated with the sort direction * @param propName */ getSortDirectionPropertyDefForName(propName) { return this.propDefAtName(propName + SORT_DIRECTION_SUFFIX); } /** * Get the current sort priority for a property name, as a Property * @param propName */ getSortPriorityPropertyForName(propName) { return this.record.propAtName(propName + SORT_SEQUENCE_SUFFIX); } /** * Get the PropertyDef associated with the sort priority * @param propName */ getSortPriorityPropertyDefForName(propName) { return this.propDefAtName(propName + SORT_SEQUENCE_SUFFIX); } /** * Returns whether or not the sort direction for a property is set to ascending * @param propName */ isAscending(propName) { const dirProp = this.getSortDirectionPropertyForName(propName); const dirValue = dirProp ? dirProp.value : null; // server may return ASCENDING or ASC and DSC or DESCENDING return dirValue && dirValue.indexOf('A') === 0; } /** * Returns whether or not the sort direction for a property is set to descending * @param propName */ isDescending(propName) { const dirProp = this.getSortDirectionPropertyForName(propName); const dirValue = dirProp ? dirProp.value : null; // server may return ASCENDING or ASC and DSC or DESCENDING return dirValue && dirValue.indexOf('D') === 0; } /** * Reopen the search dialog for writing */ reopenSearch() { return this.changeViewMode(ViewModeEnum.WRITE); } /** * Set the sort direction for a property to ascending * @param propName * @param sortFieldPriority */ setAscending(propName, sortFieldPriority = 0) { this.setSortValue(propName, SortDirectionEnum.ASC, sortFieldPriority); } /** * Set the sort direction for a property to descending * @param propName * @param sortFieldPriority */ setDescending(propName, sortFieldPriority = 0) { this.setSortValue(propName, SortDirectionEnum.DESC, sortFieldPriority); } /** * Set the search value for a property * @param propName * @param searchValue */ setSearchValue(propName, searchValue) { this.setPropertyValue(propName + FILTER_VALUE_SUFFIX, searchValue); } /** * Set the search value for the keyword search. This is a global substring search * across all properties * @param keyword */ setKeywordSearchValue(keyword) { this.setPropertyValue(KEYWORD_PROPERTY_NAME, keyword); } /** * Set the filter operator type for a property to one of [[FilterOperatorEnum]] * @param propName * @param operator */ setSearchValueOperation(propName, operator) { this.setPropertyValue(propName + FILTER_OPERATOR_SUFFIX, operator); } /** * Set the sort direction for a property to one of [[SortDirectionEnum]] * @param propName * @param sortDirection * @param sortFieldPriority */ setSortValue(propName, sortDirection = SortDirectionEnum.ASC, sortFieldPriority = 0) { this.setPropertyValue(propName + SORT_DIRECTION_SUFFIX, sortDirection); this.setPropertyValue(propName + SORT_SEQUENCE_SUFFIX, sortFieldPriority); } /** * Submit the search dialog (write) */ submitSearch() { return this.write(); } }