/** * @private */Ext.define('Ext.pivot.plugin.configurator.FormController', { extend: 'Ext.app.ViewController', alias: 'controller.pivotconfigform', init: function(view){ var viewModel = this.getViewModel(); viewModel.getStore('sSorters').loadData([ [ view.sortClearText, 'none' ], [ view.sortAscText, 'ASC' ], [ view.sortDescText, 'DESC' ] ]); viewModel.getStore('sFilters').loadData([ [ view.clearFilterText, 'none' ], [ view.labelFiltersText, 'label' ], [ view.valueFiltersText, 'value' ], [ view.top10FiltersText, 'top10' ] ]); viewModel.getStore('sTopOrder').loadData([ [view.topOrderTopText, 'top'], [view.topOrderBottomText, 'bottom'] ]); viewModel.getStore('sTopType').loadData([ [view.topTypeItemsText, 'items'], [view.topTypePercentText, 'percent'], [view.topTypeSumText, 'sum'] ]); viewModel.getStore('sAlign').loadData([ [view.alignLeftText, 'left'], [view.alignCenterText, 'center'], [view.alignRightText, 'right'] ]); }, applySettings: function(){ var vm = this.getViewModel(), view = this.getView(), fieldItem = view.getFieldItem(), field = fieldItem.getField(), cfg = Ext.clone(vm.get('form')), item, store, sort, filter; if(cfg.align && cfg.align.isModel){ cfg.align = cfg.align.get('value'); } if(field.isAggregate){ if(cfg.formatter && cfg.formatter.isModel){ item = cfg.formatter; }else{ store = vm.getStore('sFormatters'); item = store.findRecord('value', cfg.formatter, 0, false, true, true); } if(item){ if(item.get('type') == 1){ cfg.formatter = item.get('value'); cfg.renderer = null; }else{ cfg.renderer = item.get('value'); cfg.formatter = null; } } if(cfg.aggregator && cfg.aggregator.isModel){ cfg.aggregator = cfg.aggregator.get('value'); } }else{ sort = cfg.direction; if(sort && sort.isModel){ sort = sort.get('value'); } cfg.sortable = (sort !== 'none'); cfg.direction = sort || 'ASC'; filter = cfg.filter; if(!filter || !filter.type || filter.type.get('value') === 'none'){ filter = null; }else{ filter.type = filter.type.get('value'); if(filter.operator && filter.operator.isModel){ filter.operator = filter.operator.get('value'); } if(filter.dimensionId && filter.dimensionId.isModel){ filter.dimensionId = filter.dimensionId.get('value'); } if(filter.topType && filter.topType.isModel){ filter.topType = filter.topType.get('value'); } if(filter.topOrder && filter.topOrder.isModel){ filter.topOrder = filter.topOrder.get('value'); } if(filter.type === 'top10'){ filter.type = 'value'; filter.operator = 'top10'; } if(filter.operator === 'between' || filter.operator === 'not between'){ filter.value = [filter.from, filter.to]; } delete(filter.from); delete(filter.to); if(filter.type === 'label'){ delete(filter.dimensionId); delete(filter.topSort); delete(filter.topType); delete(filter.topOrder); } } cfg.filter = filter; } if(view.fireEvent('beforeapplyconfigfieldsettings', view, cfg) !== false){ field.setConfig(cfg); fieldItem.refreshData(); view.fireEvent('applyconfigfieldsettings', view, cfg); this.cancelSettings(); } }, cancelSettings: function(){ var view = this.getView(); view.setFieldItem(null); view.fireEvent('close', view); }, onFieldItemChanged: function(view, fieldItem){ var viewModel = this.getViewModel(), form = {}, dataFormatters = [], dataAggregators = [], field, settings, formatters, renderers, fns, length, i, list, data, filter, format; if(!fieldItem){ viewModel.set('form', form); return; } field = fieldItem.getField(); data = field.getConfig(); Ext.apply(form, { dataIndex: data.dataIndex, header: data.header }); if(field.isAggregate){ settings = field.getSettings(); formatters = settings.getFormatters(); renderers = settings.getRenderers(); fns = settings.getAggregators(); length = fns.length; for(i = 0; i < length; i++){ dataAggregators.push([ field.getAggText(fns[i]), fns[i] ]); } list = Ext.Object.getAllKeys(formatters || {}); length = list.length; for(i = 0; i < length; i++){ dataFormatters.push([ list[i], formatters[list[i]], 1 ]); } list = Ext.Object.getAllKeys(renderers || {}); length = list.length; for(i = 0; i < length; i++){ dataFormatters.push([ list[i], renderers[list[i]], 2 ]); } viewModel.getStore('sFormatters').loadData(dataFormatters); viewModel.getStore('sAggregators').loadData(dataAggregators); format = data.formatter; if(Ext.isFunction(format)){ format = null; } if(!format && !Ext.isFunction(data.renderer)){ format = data.renderer; } Ext.apply(form, { formatter: format, aggregator: data.aggregator, align: data.align }); }else{ filter = data.filter; Ext.apply(form, { direction: (data.sortable ? data.direction : 'none'), filter: { type: (filter ? (filter.type === 'value' && filter.operator === 'top10' ? 'top10' : filter.type) : 'none'), operator: (filter ? (filter.type === 'value' && filter.operator === 'top10' ? 'top10' : filter.operator) : null), value: (filter ? filter.value : null), from: (filter ? (Ext.isArray(filter.value) ? filter.value[0] : null) : null), to: (filter ? (Ext.isArray(filter.value) ? filter.value[1] : null) : null), caseSensitive: (filter ? filter.caseSensitive : false), topSort: (filter ? filter.topSort : false), topOrder: (filter ? filter.topOrder : false), topType: (filter ? filter.topType : false), dimensionId: (filter ? filter.dimensionId : null) } }); } viewModel.set('form', form); }, prepareOperators: function(type){ var me = this.getView(), viewModel = this.getViewModel(), data; data = [ [me.equalsLText, '='], [me.doesNotEqualLText, '!='], [me.greaterThanLText, '>'], [me.greaterThanOrEqualToLText, '>='], [me.lessThanLText, '<'], [me.lessThanOrEqualToLText, '<='], [me.betweenLText, 'between'], [me.notBetweenLText, 'not between'] ]; if(type === 'label'){ Ext.Array.insert(data, 3, [ [me.beginsWithLText, 'begins'], [me.doesNotBeginWithLText, 'not begins'], [me.endsWithLText, 'ends'], [me.doesNotEndWithLText, 'not ends'], [me.containsLText, 'contains'], [me.doesNotContainLText, 'not contains'] ]); } viewModel.getStore('sOperators').loadData(data); }, onChangeFilterType: function(combo, record){ var me = this, view = me.getView(), filters = view.down('#commonFilters'), type = record && record.isModel ? record.get('value') : record; filters.setHidden(type === 'none' || type === 'top10'); filters.setTitle(type === 'label' ? view.labelFilterText : view.valueFilterText); view.down('#top10Filters').setHidden(type !== 'top10'); view.down('[role=dimensions]').setHidden((type !== 'value')); if(type === 'label' || type === 'value'){ me.prepareOperators(type); } }, onChangeFilterOperator: function(combo, record){ var op = record && record.isModel ? record.get('value') : record, view = this.getView(), between = (op === 'between' || op === 'not between'), items = view.query('[role=between]'), len = items.length, i; view.down('[role=operator]').setHidden(between); for(i = 0; i < len; i++){ items[i].setHidden(!between); } } });