Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 1x 2x 4x 3x 3x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x | import FieldIteratorMap from '../util/field/base/FieldIteratorMap';
import {makeSentenceCase} from '../util/string/string';
import {Filter, FilterList} from './Filter';
/**
* A `<sp-filter-builder />` component's ViewModel.
*
* @class ViewModel
* @memberof sp-filter-builder
*/
const ViewModel = FieldIteratorMap.extend('FilterWidget', {
/** @lends sp-filter-builder.ViewModel.prototype */
/**
* Disabled the add new form if true
* @type {Boolean}
* @memberof sp-filter-builder.ViewModel.prototype
*/
disableCreate: 'htmlbool',
/**
* A string referencing a field type that will exclude that field
* from this classes fields. The default is 'list'.
* @type {String}
* @memberof sp-filter-builder.ViewModel.prototype
*/
excludeFieldKey: {
default: 'filter'
},
/**
* A list of filterObjects currently used in this widget
* @type {Array<sp-filter-builder.Filter>}
* @memberof sp-filter-builder.ViewModel.prototype
*/
filters: {
Type: FilterList,
Default: FilterList
},
/**
* The field properties for the field name dropdown
* @type {Object}
* @memberof sp-filter-builder.ViewModel.prototype
*/
nameField: {
get () {
return this.fieldOptions.length ? {
formatter: makeSentenceCase,
name: 'name',
alias: 'Add filter',
fieldType: 'select',
options: this.fieldOptions,
defaultLabel: 'Add a filter',
inline: true
} : {
name: 'name',
alias: 'Field Name',
placeholder: 'Enter fieldname'
};
}
},
/**
* An array of field options to display for the field selection dropdown.
* @type {Array<sp-form/fields/sp-select-field.SelectOption>}
* @memberof sp-filter-builder.ViewModel.prototype
*/
fieldOptions: {
get () {
if (this.fields.length) {
return this.fields.map((f) => {
return {
value: f.name,
label: f.alias
};
});
}
return [];
}
},
/**
* The selected field dropdown value
* @type {String}
* @memberof sp-filter-builder.ViewModel.prototype
*/
fieldValue: {
type: 'string',
default: '_'
},
/**
* Removes a filter from the list of filters
* @param {sp-filter-builder.Filter} obj The object to remove. This is the only argument used by the function, the rest may be null.
* @return {undefined}
*/
removeFilter (obj) {
const index = this.filters.indexOf(obj);
this.filters.splice(index, 1);
},
/**
* Replaces the filter array with an empty array, clearing all existing filters
* @return {undefined}
*/
removeFilters () {
this.filters.replace([]);
},
/**
* Adds a new filter or set of filters to the list of filters in this widget.
* <br />TODO: A `filterFactory` may be defined on the field which may return one filter or an array of
* filters.
* @param {string} args the array of arguments from the fieldchange event
* @return {Boolean} returns false to prevent event propagation from links
*/
addFilter () {
const name = this.fieldValue;
Iif (!name || name === '') {
return false;
}
// make a new filter object with the fields used in the form
let fieldProp;
Iif (this.fields.length) {
fieldProp = this.fields.filter((field) => {
return field.name === name;
})[0];
}
const filterObj = new Filter({
field: fieldProp,
name: name
});
this.filters.push(filterObj);
// reset the dropdown
this.fieldValue = '';
return false;
}
});
export default ViewModel;
|