| |
| |
| |
| |
| |
| |
| |
| |
|
|
| (function ($, require) { |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| var SeriesPicker = function (dataTable) { |
| this.domElem = null; |
| this.app = null; |
| this.dataTableId = dataTable.workingDivId; |
|
|
| |
| this.selectableColumns = dataTable.props.selectable_columns; |
|
|
| |
| this.selectableRows = dataTable.props.selectable_rows; |
|
|
| |
| this.show = !! dataTable.props.show_series_picker |
| && (this.selectableColumns || this.selectableRows); |
|
|
| |
| this.multiSelect = !! dataTable.props.allow_multi_select_series_picker; |
|
|
| |
| |
| this.useChooseMetricsButton = false; |
| }; |
|
|
| SeriesPicker.prototype = { |
|
|
| |
| |
| |
| |
| init: function () { |
| if (!this.show) { |
| return; |
| } |
|
|
| var self = this; |
|
|
| var selectedColumns = this.selectableColumns |
| .filter(isItemDisplayed) |
| .map(function (columnConfig) { |
| return columnConfig.column; |
| }); |
|
|
| var selectedRows = this.selectableRows |
| .filter(isItemDisplayed) |
| .map(function (rowConfig) { |
| return rowConfig.matcher; |
| }); |
|
|
| |
| this.domElem = $('<div class="series-picker-wrapper" style="display:inline-block"><div></div></div>'); |
|
|
| $(this).trigger('placeSeriesPicker'); |
|
|
| var createVNode = Vue.createVNode; |
| var createVueApp = CoreHome.createVueApp; |
| var PickerComponent = self.useChooseMetricsButton |
| ? CoreVisualizations.MetricsPicker |
| : CoreVisualizations.SeriesPicker; |
|
|
| this.app = createVueApp({ |
| render: function () { |
| return createVNode(PickerComponent, { |
| multiselect: self.multiSelect, |
| selectableColumns: self.selectableColumns, |
| selectableRows: self.selectableRows, |
| selectedColumns: selectedColumns, |
| selectedRows: selectedRows, |
| onSelect: function selectionChanged(event) { |
| var columns = event.columns, rows = event.rows; |
| if (columns.length === 0 && rows.length === 0) { |
| return; |
| } |
|
|
| rows = rows.map(encodeURIComponent); |
|
|
| $(self).trigger('seriesPicked', [columns, rows]); |
|
|
| |
| var UI = require('piwik/UI'); |
| var params = { |
| columns: columns, |
| columns_to_display: columns, |
| rows: rows, |
| rows_to_display: rows |
| }; |
|
|
| var tableNode = $('#' + self.dataTableId); |
| UI.DataTable.prototype.notifyWidgetParametersChange(tableNode, params); |
| } |
| }); |
| } |
| }); |
| this.app.mount(this.domElem.children()[0]); |
|
|
| function isItemDisplayed(columnOrRowConfig) { |
| return columnOrRowConfig.displayed; |
| } |
| }, |
|
|
| |
| |
| |
| |
| destroy: function () { |
| if (this.app) { |
| this.app.unmount(); |
| this.app = null; |
| } |
| $(this).off(); |
| if (this.domElem) { |
| this.domElem.remove(); |
| this.domElem = null; |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| getMetricTranslation: function (metric) { |
| for (var i = 0; i !== this.selectableColumns.length; ++i) { |
| if (this.selectableColumns[i].column === metric) { |
| return this.selectableColumns[i].translation; |
| } |
| } |
| return metric; |
| } |
| }; |
|
|
| var exports = require('piwik/DataTableVisualizations/Widgets'); |
| exports.SeriesPicker = SeriesPicker; |
|
|
| })(jQuery, require); |
|
|