UNPKG

dhis2-gis

Version:
1,221 lines (1,067 loc) 37.7 kB
import arrayClean from 'd2-utilizr/lib/arrayClean'; import arrayPluck from 'd2-utilizr/lib/arrayPluck'; export default function LayerWidgetEvent(gis, layer) { // stores var programStore, stagesByProgramStore, dataElementsByStageStore, // cache stageStorage = {}, attributeStorage = {}, dataElementStorage = {}, // components program, onProgramSelect, stage, onStageSelect, loadDataElements, dataElementAvailable, dataElementSelected, addUxFromDataElement, selectDataElements, dataElement, startDate, endDate, onDateFieldRender, periods, period, treePanel, userOrganisationUnit, userOrganisationUnitChildren, userOrganisationUnitGrandChildren, // organisationUnitLevel, // organisationUnitGroup, organisationUnitPanel, accordionBody, // toolMenu, // tool, // toolPanel, organisationUnit, eventColor, eventRadius, eventCluster, optionsPanel, panel, // functions reset, setGui, getView, validateView, // constants baseWidth = 444, accBaseWidth = baseWidth - 2, dimConf = gis.conf.finals.dimension; // stores programStore = Ext.create('Ext.data.Store', { fields: ['id', 'name'], proxy: { type: 'ajax', url: encodeURI(gis.init.contextPath + '/api/programs.json?fields=id,displayName|rename(name)&paging=false'), reader: { type: 'json', root: 'programs' }, pageParam: false, startParam: false, limitParam: false }, sortInfo: {field: 'name', direction: 'ASC'}, isLoaded: false, listeners: { load: function() { if (!this.isLoaded) { this.isLoaded = true; } } } }); stagesByProgramStore = Ext.create('Ext.data.Store', { fields: ['id', 'name'], proxy: { type: 'ajax', url: '', reader: { type: 'json', root: 'programStages' } }, isLoaded: false, loadFn: function(fn) { if (Ext.isFunction(fn)) { if (this.isLoaded) { fn.call(); } else { this.load({ callback: fn }); } } }, listeners: { load: function() { if (!this.isLoaded) { this.isLoaded = true; } this.sort('name', 'ASC'); } } }); dataElementsByStageStore = Ext.create('Ext.data.Store', { fields: ['id', 'name', 'isAttribute'], data: [], sorters: [ { property: 'isAttribute', direction: 'DESC' }, { property: 'name', direction: 'ASC' } ] }); // components // data element program = Ext.create('Ext.form.field.ComboBox', { fieldLabel: GIS.i18n.program, editable: false, valueField: 'id', displayField: 'name', labelAlign: 'top', labelCls: 'gis-form-item-label-top', labelSeparator: '', emptyText: GIS.i18n.select_program, forceSelection: true, queryMode: 'remote', columnWidth: 0.5, style: 'margin:1px 1px 1px 0', storage: {}, store: programStore, getRecord: function() { return this.getValue ? { id: this.getValue(), name: this.getRawValue() } : null; }, listeners: { select: function(cb) { onProgramSelect(cb.getValue()); } } }); onProgramSelect = function(programId, layout) { var load; programId = layout ? layout.program.id : programId; stage.clearValue(); dataElementsByStageStore.removeAll(); dataElementSelected.removeAll(); load = function(stages) { stage.enable(); stage.clearValue(); stagesByProgramStore.removeAll(); stagesByProgramStore.loadData(stages); //ns.app.aggregateLayoutWindow.resetData(); //ns.app.queryLayoutWindow.resetData(); var stageId = (layout ? layout.programStage.id : null) || (stages.length === 1 ? stages[0].id : null); if (stageId) { stage.setValue(stageId); onStageSelect(stageId, layout); } }; if (stageStorage.hasOwnProperty(programId)) { load(stageStorage[programId]); } else { Ext.Ajax.request({ url: encodeURI(gis.init.contextPath + '/api/programs.json?filter=id:eq:' + programId + '&fields=programStages[id,displayName|rename(name)],programTrackedEntityAttributes[trackedEntityAttribute[id,displayName|rename(name),valueType,optionSet[id,displayName|rename(name)]]]&paging=false'), success: function(r) { var program = JSON.parse(r.responseText).programs[0], stages, attributes; if (!program) { return; } stages = program.programStages; attributes = arrayPluck(program.programTrackedEntityAttributes, 'trackedEntityAttribute'); // mark as attribute for (var i = 0; i < attributes.length; i++) { attributes[i].isAttribute = true; } // attributes cache if (Ext.isArray(attributes) && attributes.length) { attributeStorage[programId] = attributes; } if (Ext.isArray(stages) && stages.length) { // stages cache stageStorage[programId] = stages; load(stages); } } }); } }; stage = Ext.create('Ext.form.field.ComboBox', { editable: false, valueField: 'id', displayField: 'name', fieldLabel: GIS.i18n.stage, labelAlign: 'top', labelCls: 'gis-form-item-label-top', labelSeparator: '', emptyText: GIS.i18n.select_stage, queryMode: 'local', forceSelection: true, columnWidth: 0.5, style: 'margin:1px 0 1px 0', disabled: true, listConfig: {loadMask: false}, store: stagesByProgramStore, getRecord: function() { return this.getValue() ? { id: this.getValue(), name: this.getRawValue() } : null; }, listeners: { select: function(cb) { onStageSelect(cb.getValue()); } } }); onStageSelect = function(stageId, layout) { if (!layout) { dataElementSelected.removeAll(); } loadDataElements(stageId, layout); }; loadDataElements = function(stageId, layout) { var programId = layout ? layout.program.id : (program.getValue() || null), load; stageId = stageId || layout.programStage.id; load = function(dataElements) { var attributes = attributeStorage[programId], data = arrayClean([].concat(attributes || [], dataElements || [])); dataElementsByStageStore.loadData(data); if (layout) { var dataDimensions = gis.util.layout.getDataDimensionsFromLayout(layout), records = []; for (var i = 0, dim, row; i < dataDimensions.length; i++) { dim = dataDimensions[i]; row = dataElementsByStageStore.getById(dim.dimension); if (row) { records.push(Ext.applyIf(dim, row.data)); } } selectDataElements(records, layout); } }; // data elements if (dataElementStorage.hasOwnProperty(stageId)) { load(dataElementStorage[stageId]); } else { Ext.Ajax.request({ url: encodeURI(gis.init.contextPath + '/api/programStages.json?filter=id:eq:' + stageId + '&fields=programStageDataElements[dataElement[id,' + gis.init.namePropertyUrl + ',type,optionSet[id,displayName|rename(name)]]]'), success: function(r) { var objects = JSON.parse(r.responseText).programStages, dataElements; if (!objects.length) { load(); return; } dataElements = arrayPluck(objects[0].programStageDataElements, 'dataElement'); // data elements cache dataElementStorage[stageId] = dataElements; load(dataElements); } }); } }; dataElementAvailable = Ext.create('Ext.ux.form.MultiSelect', { cls: 'ns-toolbar-multiselect-left', width: accBaseWidth - 4, height: 118, valueField: 'id', displayField: 'name', style: 'margin-bottom:1px', store: dataElementsByStageStore, tbar: [ { xtype: 'label', text: 'Available data items', cls: 'ns-toolbar-multiselect-left-label' }, '->', { xtype: 'button', icon: 'images/arrowdown.png', width: 22, height: 22, handler: function() { if (dataElementAvailable.getValue().length) { selectDataElements(dataElementAvailable.getValue()); } } }, { xtype: 'button', icon: 'images/arrowdowndouble.png', width: 22, height: 22, handler: function() { if (dataElementsByStageStore.getRange().length) { selectDataElements(dataElementsByStageStore.getRange()); } } } ], listeners: { afterrender: function(ms) { this.boundList.on('itemdblclick', function() { if (ms.getValue().length) { selectDataElements(ms.getValue()); } }); } } }); dataElementSelected = Ext.create('Ext.panel.Panel', { width: accBaseWidth - 4, height: 176, bodyStyle: 'padding-left:1px', autoScroll: true, tbar: { height: 27, items: [ { xtype: 'label', text: 'Selected data items', style: 'padding-left:6px; color:#222', cls: 'ns-toolbar-multiselect-left-label' }, '->', { xtype: 'button', icon: 'images/arrowupdouble.png', width: 22, height: 22, handler: function() { dataElementSelected.removeAllDataElements(); } } ] }, getChildIndex: function(child) { var items = this.items.items; for (var i = 0; i < items.length; i++) { if (items[i].id === child.id) { return i; } } return items.length; }, hasDataElement: function(dataElementId) { var hasDataElement = false; this.items.each(function(item) { if (item.dataElement.id === dataElementId) { hasDataElement = true; } }); return hasDataElement; }, removeAllDataElements: function() { var items = this.items.items, len = items.length; for (var i = 0; i < len; i++) { items[0].removeDataElement(); } } }); addUxFromDataElement = function(element, index) { var getUxType, ux; element.type = element.type || element.valueType; index = index || dataElementSelected.items.items.length; getUxType = function(element) { if (Ext.isObject(element.optionSet) && Ext.isString(element.optionSet.id)) { return 'Ext.ux.panel.OrganisationUnitGroupSetContainer'; } if (element.type === 'int' || element.type === 'number') { return 'Ext.ux.panel.DataElementIntegerContainer'; } if (element.type === 'string') { return 'Ext.ux.panel.DataElementStringContainer'; } if (element.type === 'date') { return 'Ext.ux.panel.DataElementDateContainer'; } if (element.type === 'bool' || element.type === 'trueOnly') { return 'Ext.ux.panel.DataElementBooleanContainer'; } return 'Ext.ux.panel.DataElementIntegerContainer'; }; ux = dataElementSelected.insert(index, Ext.create(getUxType(element), { dataElement: element })); ux.removeDataElement = function() { dataElementSelected.remove(ux); if (!dataElementSelected.hasDataElement(element.id)) { dataElementsByStageStore.add(element); dataElementsByStageStore.sort(); } }; ux.duplicateDataElement = function() { var index = dataElementSelected.getChildIndex(ux) + 1; addUxFromDataElement(element, index); }; dataElementsByStageStore.removeAt(dataElementsByStageStore.findExact('id', element.id)); return ux; }; selectDataElements = function(items, layout) { var dataElements = []; // data element objects for (var i = 0, item; i < items.length; i++) { item = items[i]; if (Ext.isString(item)) { dataElements.push(dataElementsByStageStore.getAt(dataElementsByStageStore.findExact('id', item)).data); } else if (Ext.isObject(item)) { if (item.data) { dataElements.push(item.data); } else { dataElements.push(item); } } } // panel, store for (var i = 0, element, ux; i < dataElements.length; i++) { element = dataElements[i]; ux = addUxFromDataElement(element); if (layout) { ux.setRecord(element); } } }; dataElement = Ext.create('Ext.panel.Panel', { title: '<div class="gis-panel-title-data">' + GIS.i18n.data + '</div>', bodyStyle: 'padding:1px', hideCollapseTool: true, items: [ { layout: 'column', bodyStyle: 'border:0 none', style: 'margin-top:2px', items: [ program, stage ] }, dataElementAvailable, dataElementSelected ] }); // date onDateFieldRender = function(c) { $('#' + c.inputEl.id).calendarsPicker({ calendar: gis.init.calendar, dateFormat: gis.init.systemInfo.dateFormat }); Ext.get(c.id).setStyle('z-index', 100000); }; startDate = Ext.create('Ext.form.field.Text', { fieldLabel: GIS.i18n.start_date, labelAlign: 'top', labelCls: 'gis-form-item-label-top', labelSeparator: '', columnWidth: 0.5, height: 41, value: gis.init.calendar.formatDate(gis.init.systemInfo.dateFormat, gis.init.calendar.today().add(-12, 'm')), listeners: { render: function(c) { onDateFieldRender(c); } } }); endDate = Ext.create('Ext.form.field.Text', { fieldLabel: GIS.i18n.end_date, labelAlign: 'top', labelCls: 'gis-form-item-label-top', labelSeparator: '', columnWidth: 0.5, height: 41, style: 'margin-left: 1px', value: gis.init.calendar.formatDate(gis.init.systemInfo.dateFormat, gis.init.calendar.today()), listeners: { render: function(c) { onDateFieldRender(c); } } }); // Relative periods periods = Ext.create('Ext.form.field.ComboBox', { cls: 'gis-combo', fieldLabel: GIS.i18n.period, labelSeparator: '', editable: false, valueField: 'id', displayField: 'name', queryMode: 'local', forceSelection: true, width: 220, labelWidth: gis.conf.layout.widget.itemlabel_width, labelAlign: 'top', labelCls: 'gis-form-item-label-top', style: 'padding-bottom:5px;', store: Ext.create('Ext.data.Store', { fields: ['id', 'name', 'index'], data: [{id: 'CUSTOM', name: GIS.i18n.start_end_dates}].concat(gis.conf.period.relativePeriods) }), selectFirst: function() { this.setValue(this.store.getAt(0).data.id); }, listeners: { select: function () { var id = this.getValue(); if (id === 'CUSTOM') { startDate.enable(); endDate.enable(); } else { startDate.disable(); endDate.disable(); } } } }); period = Ext.create('Ext.panel.Panel', { title: '<div class="gis-panel-title-period">Periods</div>', bodyStyle: 'padding:4px 1px 2px', hideCollapseTool: true, width: accBaseWidth, items: [ periods, { xtype: 'container', layout: 'column', items: [ startDate, endDate ] } ] }); // organisation unit treePanel = Ext.create('Ext.tree.Panel', { cls: 'gis-tree', width: accBaseWidth - 4, height: 313, bodyStyle: 'border:0 none', style: 'border-top: 1px solid #ddd; padding-top: 1px;', displayField: 'name', rootVisible: false, autoScroll: false, // https://www.sencha.com/forum/archive/index.php/t-144780.html?s=b3a72bbd82e5cc20417f0b5779439b97 scroll:false, viewConfig: { style: 'overflow-y:auto' }, multiSelect: true, rendered: false, reset: function() { var rootNode = this.getRootNode().findChild('id', gis.init.rootNodes[0].id); this.collapseAll(); this.expandPath(rootNode.getPath()); this.getSelectionModel().select(rootNode); }, selectRootIf: function() { if (this.getSelectionModel().getSelection().length < 1) { var node = this.getRootNode().findChild('id', gis.init.rootNodes[0].id); if (this.rendered) { this.getSelectionModel().select(node); } return node; } }, isPending: false, recordsToSelect: [], recordsToRestore: [], multipleSelectIf: function(map, doUpdate) { if (this.recordsToSelect.length === gis.util.object.getLength(map)) { this.getSelectionModel().select(this.recordsToSelect); this.recordsToSelect = []; this.isPending = false; if (doUpdate) { update(); } } }, multipleExpand: function(id, map, doUpdate) { var that = this, rootId = gis.conf.finals.root.id, path = map[id]; if (path.substr(0, rootId.length + 1) !== ('/' + rootId)) { path = '/' + rootId + path; } that.expandPath(path, 'id', '/', function() { var record = Ext.clone(that.getRootNode().findChild('id', id, true)); that.recordsToSelect.push(record); that.multipleSelectIf(map, doUpdate); }); }, select: function(url, params) { if (!params) { params = {}; } Ext.Ajax.request({ url: encodeURI(url), method: 'GET', params: params, scope: this, success: function(r) { var a = JSON.parse(r.responseText).organisationUnits; this.numberOfRecords = a.length; for (var i = 0; i < a.length; i++) { this.multipleExpand(a[i].id, a[i].path); } } }); }, getParentGraphMap: function() { var selection = this.getSelectionModel().getSelection(), map = {}; if (Ext.isArray(selection) && selection.length) { for (var i = 0, pathArray; i < selection.length; i++) { pathArray = selection[i].getPath().split('/'); map[pathArray.pop()] = pathArray.join('/'); } } return map; }, selectGraphMap: function(map, update) { if (!gis.util.object.getLength(map)) { return; } this.isPending = true; for (var key in map) { if (map.hasOwnProperty(key)) { treePanel.multipleExpand(key, map, update); } } }, store: Ext.create('Ext.data.TreeStore', { fields: ['id', 'name', 'hasChildren'], proxy: { type: 'rest', format: 'json', noCache: false, extraParams: { fields: 'children[id,' + gis.init.namePropertyUrl + ',children::isNotEmpty|rename(hasChildren)&paging=false' }, url: gis.init.contextPath + '/api/organisationUnits', reader: { type: 'json', root: 'children' }, sortParam: false }, sorters: [{ property: 'name', direction: 'ASC' }], root: { id: gis.conf.finals.root.id, expanded: true, children: gis.init.rootNodes }, listeners: { beforeload: function(store, operation) { if (!store.proxy._url) { store.proxy._url = store.proxy.url; } store.proxy.url = store.proxy._url + '/' + operation.node.data.id; }, load: function(store, node, records) { records.forEach(function(record) { if (Ext.isBoolean(record.data.hasChildren)) { record.set('leaf', !record.data.hasChildren); } }); } } }), xable: function(values) { for (var i = 0; i < values.length; i++) { if (!!values[i]) { this.disable(); return; } } this.enable(); }, getDimension: function() { var r = treePanel.getSelectionModel().getSelection(), config = { dimension: gis.conf.finals.dimension.organisationUnit.objectName, items: [] }; if (userOrganisationUnit.getValue() || userOrganisationUnitChildren.getValue() || userOrganisationUnitGrandChildren.getValue()) { if (userOrganisationUnit.getValue()) { config.items.push({ id: 'USER_ORGUNIT', name: '' }); } if (userOrganisationUnitChildren.getValue()) { config.items.push({ id: 'USER_ORGUNIT_CHILDREN', name: '' }); } if (userOrganisationUnitGrandChildren.getValue()) { config.items.push({ id: 'USER_ORGUNIT_GRANDCHILDREN', name: '' }); } } else { for (var i = 0; i < r.length; i++) { config.items.push({id: r[i].data.id}); } } return config.items.length ? config : null; }, listeners: { beforeitemexpand: function() { if (!treePanel.isPending) { treePanel.recordsToRestore = treePanel.getSelectionModel().getSelection(); } }, itemexpand: function() { if (!treePanel.isPending && treePanel.recordsToRestore.length) { treePanel.getSelectionModel().select(treePanel.recordsToRestore); treePanel.recordsToRestore = []; } }, render: function() { this.rendered = true; }, afterrender: function() { this.getSelectionModel().select(0); }, itemcontextmenu: function(v, r, h, i, e) { e.stopEvent(); v.getSelectionModel().select(r, false); if (v.menu) { v.menu.destroy(); } v.menu = Ext.create('Ext.menu.Menu', { showSeparator: false, shadow: false }); if (!r.data.leaf) { v.menu.add({ text: GIS.i18n.select_sub_units, icon: 'images/node-select-child.png', handler: function() { r.expand(false, function() { v.getSelectionModel().select(r.childNodes, true); v.getSelectionModel().deselect(r); }); } }); } else { return; } v.menu.showAt(e.xy); } } }); userOrganisationUnit = Ext.create('Ext.form.field.Checkbox', { columnWidth: 0.33, // 0.25, style: 'padding-top: 2px; padding-left: 5px; margin-bottom: 0', boxLabelCls: 'x-form-cb-label-alt1', boxLabel: GIS.i18n.user_organisation_unit, labelWidth: gis.conf.layout.form_label_width, handler: function(chb, checked) { treePanel.xable([checked, userOrganisationUnitChildren.getValue(), userOrganisationUnitGrandChildren.getValue()]); } }); userOrganisationUnitChildren = Ext.create('Ext.form.field.Checkbox', { columnWidth: 0.33, // 0.26, style: 'padding-top: 2px; margin-bottom: 0', boxLabelCls: 'x-form-cb-label-alt1', boxLabel: GIS.i18n.user_sub_units, labelWidth: gis.conf.layout.form_label_width, handler: function(chb, checked) { treePanel.xable([checked, userOrganisationUnit.getValue(), userOrganisationUnitGrandChildren.getValue()]); } }); userOrganisationUnitGrandChildren = Ext.create('Ext.form.field.Checkbox', { columnWidth: 0.33, //0.4, style: 'padding-top: 2px; margin-bottom: 0', boxLabelCls: 'x-form-cb-label-alt1', boxLabel: GIS.i18n.user_sub_x2_units, labelWidth: gis.conf.layout.form_label_width, handler: function(chb, checked) { treePanel.xable([checked, userOrganisationUnit.getValue(), userOrganisationUnitChildren.getValue()]); } }); organisationUnitPanel = Ext.create('Ext.panel.Panel', { width: accBaseWidth, layout: 'column', bodyStyle: 'border:0 none', items: [ userOrganisationUnit, userOrganisationUnitChildren, userOrganisationUnitGrandChildren ] }); organisationUnit = Ext.create('Ext.panel.Panel', { title: '<div class="gis-panel-title-organisationunit">' + GIS.i18n.organisation_units + '</div>', bodyStyle: 'padding:1px', hideCollapseTool: true, items: [ organisationUnitPanel, treePanel ] }); eventColor = Ext.create('Ext.ux.button.ColorButton', { xtype: 'colorbutton', height: 24, width: 80, value: '333333' }); eventRadius = Ext.create('Ext.form.field.Number', { cls: 'gis-numberfield', width: 80, allowDecimals: false, minValue: 1, maxValue: 20, value: 6 }); eventCluster = Ext.create('Ext.form.field.Checkbox', { boxLabel: 'Group nearby events', cls: 'gis-event-clustering-checkbox', checked: true }); optionsPanel = Ext.create('Ext.panel.Panel', { title: '<div class="gis-panel-title-options">' + GIS.i18n.options + '</div>', cls: 'gis-accordion-last', bodyStyle: 'padding:6px 8px;', hideCollapseTool: true, width: accBaseWidth, items: [ { xtype: 'container', html: 'Clustering', style: 'padding-bottom:3px;font-weight:bold;font-size:12px;' }, eventCluster, { xtype: 'container', html: 'Style', style: 'padding:10px 0 3px;font-weight:bold;font-size:12px;' }, { xtype: 'container', layout: 'hbox', items: [ { xtype: 'container', html: 'Point color:', width: 80, style: 'padding:5px;font-size:11px;' }, eventColor ] }, { xtype: 'container', layout: 'hbox', items: [ { xtype: 'container', html: 'Point radius:', width: 80, style: 'padding:5px;font-size:11px;' }, eventRadius ] } ] }); // accordion accordionBody = Ext.create('Ext.panel.Panel', { layout: 'accordion', activeOnTop: true, cls: 'gis-accordion', bodyStyle: 'border:0 none', height: 450, items: [ dataElement, period, organisationUnit, optionsPanel ], listeners: { afterrender: function() { // nasty workaround optionsPanel.expand(); organisationUnit.expand(); period.expand(); dataElement.expand(); periods.selectFirst(); } } }); // functions reset = function(skipTree) { // Uncheck in layers list layer.item.setValue(false); if (!layer.window.isRendered) { layer.view = null; return; } // Components program.clearValue(); stage.clearValue(); dataElementsByStageStore.removeAll(); dataElementSelected.removeAll(); periods.selectFirst(); startDate.reset(); endDate.reset(); if (!skipTree) { treePanel.reset(); } userOrganisationUnit.setValue(false); userOrganisationUnitChildren.setValue(false); userOrganisationUnitGrandChildren.setValue(false); }; setGui = function(view) { var ouDim = view.rows[0], isOu = false, isOuc = false, isOugc = false, isTopOu = false, setWidgetGui, setLayerGui; setWidgetGui = function() { // Components if (!layer.window.isRendered) { return; } reset(true); // Program program.store.add(view.program); program.setValue(view.program.id); onProgramSelect(null, view); if (view.startDate) { startDate.setValue(view.startDate); startDate.enable(); } if (view.endDate) { endDate.setValue(view.endDate); endDate.enable(); } // Periods if (view.filters && view.filters[0] && view.filters[0].dimension === dimConf.period.objectName && view.filters[0].items) { periods.select(view.filters[0].items[0].id); startDate.disable(); endDate.disable(); } // Organisation units for (var i = 0, item; i < ouDim.items.length; i++) { item = ouDim.items[i]; if (item.id === 'USER_ORGUNIT') { isOu = true; } else if (item.id === 'USER_ORGUNIT_CHILDREN') { isOuc = true; } else if (item.id === 'USER_ORGUNIT_GRANDCHILDREN') { isOugc = true; } else { isTopOu = true; } } if (!isTopOu) { userOrganisationUnit.setValue(isOu); userOrganisationUnitChildren.setValue(isOuc); userOrganisationUnitGrandChildren.setValue(isOugc); } treePanel.selectGraphMap(view.parentGraphMap); // Options if (view.eventClustering !== undefined) { eventCluster.setValue(view.eventClustering); } if (view.eventPointColor) { eventColor.setValue(view.eventPointColor); } if (view.eventPointRadius !== undefined) { eventRadius.setValue(view.eventPointRadius); } }(); setLayerGui = function() { // Layer item layer.item.setValue(!view.hidden, view.opacity); // Layer menu layer.menu.enableItems(); }(); }; getView = function(config) { var view = {}; view.program = program.getRecord(); view.programStage = stage.getRecord(); if (periods.getValue() === 'CUSTOM') { view.startDate = startDate.getValue(); view.endDate = endDate.getValue(); } else { // pe view.filters = [{ dimension: dimConf.period.objectName, items: [{ id: periods.getValue() }] }]; } view.columns = []; for (var i = 0, panel; i < dataElementSelected.items.items.length; i++) { panel = dataElementSelected.items.items[i]; view.columns.push(panel.getRecord()); } view.rows = [{ dimension: 'ou', items: treePanel.getDimension().items }]; view.eventClustering = eventCluster.getValue(); view.eventPointColor = eventColor.getValue(); view.eventPointRadius = eventRadius.getValue(); view.opacity = layer.layerOpacity; return view; }; validateView = function(view) { if (!(Ext.isArray(view.rows) && view.rows.length && Ext.isString(view.rows[0].dimension) && Ext.isArray(view.rows[0].items) && view.rows[0].items.length)) { GIS.logg.push([view.rows, layer.id + '.rows: dimension array']); alert('No organisation units selected'); return false; } return view; }; panel = Ext.create('Ext.panel.Panel', { map: layer.map, layer: layer, menu: layer.menu, reset: reset, setGui: setGui, getView: getView, getParentGraphMap: function() { return treePanel.getParentGraphMap(); }, cls: 'gis-form-widget', border: false, items: [ accordionBody ] }); return panel; };