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 | 16x 16x 16x 16x 16x 16x 16x 16x 18x 18x 18x 18x 18x 18x 17x 16x 12x 12x 12x 12x 16x 16x 16x 18x 18x 18x 16x 16x 16x | import * as $ from 'jquery'; import * as i18n from 'pimui/js/i18n'; import * as _ from 'underscore'; import NormalizedAttribute from 'pim/model/attribute'; import NormalizedAttributeGroup from 'pim/model/attribute-group'; const __ = require('oro/translator'); const BaseMultiSelectAsync = require('pim/form/common/fields/multi-select-async'); const UserContext = require('pim/user-context'); const FetcherRegistry = require('pim/fetcher-registry'); const LineTemplate = require('pim/template/attribute/attribute-line'); /** * Product grid filters select. It's a multi-select for attributes. * * @author Pierre Allard <pierre.allard@akeneo.com> */ class ProductGridFilters extends BaseMultiSelectAsync { private readonly lineView = _.template(LineTemplate); private attributeGroups: { [key: string]: NormalizedAttributeGroup } = {}; /** * {@inheritdoc} */ public configure(): JQueryPromise<any> { this.attributeGroups = { system: ProductGridFilters.getSystemAttributeGroup() }; return $.when( BaseMultiSelectAsync.prototype.configure.apply(this, arguments), FetcherRegistry .getFetcher('attribute-group') .fetchAll() .then((attributeGroups: { [key: string]: NormalizedAttributeGroup }) => { this.attributeGroups = {...this.attributeGroups, ...attributeGroups}; }) ); } /** * {@inheritdoc} */ public getSelect2Options(): any { const parent = BaseMultiSelectAsync.prototype.getSelect2Options.apply(this, arguments); parent.formatResult = this.onGetResult.bind(this); parent.dropdownCssClass = 'select2--annotedLabels ' + parent.dropdownCssClass; return parent; } protected convertBackendItem(item: NormalizedAttribute): Object { return { id: item.code, text: i18n.getLabel(item.labels, UserContext.get('catalogLocale'), item.code), group: { text: ( item.group ? i18n.getLabel( this.attributeGroups[item.group].labels, UserContext.get('catalogLocale'), item.group ) : '' ) } }; } /** * {@inheritdoc} */ protected select2InitSelection(element: any, callback: any): void { const strValues = (<any> $(element)).val() as string; const values = strValues.split(','); if (values.length > 0) { $.ajax({ url: this.choiceUrl, data: { identifiers: strValues }, type: this.choiceVerb }).then(response => { let selecteds: NormalizedAttribute[] = <NormalizedAttribute[]> Object.values(response) .filter((item: NormalizedAttribute) => { return values.indexOf(item.code) > -1; }); callback(selecteds.map((selected: NormalizedAttribute) => { return this.convertBackendItem(selected); })); }); } } /** * Returns a fake attribute group for system filters * * @returns {NormalizedAttributeGroup} */ private static getSystemAttributeGroup(): NormalizedAttributeGroup { const result: NormalizedAttributeGroup = {labels: {}}; result['labels'][UserContext.get('catalogLocale')] = __('pim_datagrid.filters.system'); return result; } /** * Formats and updates list of items * * @param {Object} item * * @return {Object} */ private onGetResult(item: { text: string, group: { text: string } }): Object { return this.lineView({item}); } } export = ProductGridFilters |