Initial commit
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
var URLHelper = require('./url-helper');
|
||||
var _ = require('underscore');
|
||||
|
||||
function Dashboard (dashboard) {
|
||||
this._dashboard = dashboard;
|
||||
|
||||
this.onDataviewsFetched(function () {
|
||||
dashboard.widgets._widgetsCollection.initialState();
|
||||
dashboard.widgets._widgetsCollection.each(function (m) {
|
||||
m && m.applyInitialState && m.applyInitialState();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Dashboard.prototype = {
|
||||
|
||||
/**
|
||||
* @return {View} used in the dashboard
|
||||
*/
|
||||
getView: function () {
|
||||
return this._dashboard.dashboardView;
|
||||
},
|
||||
|
||||
/**
|
||||
* @return {Map} the map used in the dashboard
|
||||
*/
|
||||
getMap: function () {
|
||||
return this._dashboard.vis;
|
||||
},
|
||||
|
||||
reloadMap: function () {
|
||||
this.getMap().reload();
|
||||
},
|
||||
|
||||
forceResize: function () {
|
||||
this._dashboard.widgets.getCollection()
|
||||
.each(function (widget) {
|
||||
widget.forceResize();
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @return {Array} of widgets in the dashboard
|
||||
*/
|
||||
getWidgets: function () {
|
||||
return this._dashboard.widgets.getList();
|
||||
},
|
||||
|
||||
getDashboardURL: function () {
|
||||
return URLHelper.getURLFromState(this.getState());
|
||||
},
|
||||
|
||||
getState: function () {
|
||||
var state = {};
|
||||
var mapState = this.getMapState();
|
||||
if (!_.isEmpty(mapState)) state.map = mapState;
|
||||
|
||||
var widgetsCollection = this._dashboard.widgets.getCollection();
|
||||
var widgetsState = widgetsCollection.getStates();
|
||||
if (!_.isEmpty(widgetsState)) state.widgets = widgetsState;
|
||||
return state;
|
||||
},
|
||||
|
||||
getMapState: function () {
|
||||
var map = this._dashboard.vis.map;
|
||||
var currentBoundingBox = map.getViewBounds();
|
||||
var center = map.get('center');
|
||||
var zoom = map.get('zoom');
|
||||
|
||||
return {
|
||||
ne: currentBoundingBox[0],
|
||||
sw: currentBoundingBox[1],
|
||||
center: center,
|
||||
zoom: zoom
|
||||
};
|
||||
},
|
||||
|
||||
setState: function (state) {
|
||||
// todo: set map state
|
||||
this._dashboard.widgets.setWidgetsState(state.widgets);
|
||||
this._dashboard.vis.mapvis.map.setBounds([state.map.ne, state.map.sw]);
|
||||
},
|
||||
|
||||
onDataviewsFetched: function (callback) {
|
||||
var areWidgetsInitialized = this._dashboard.areWidgetsInitialised();
|
||||
if (areWidgetsInitialized) {
|
||||
callback && callback();
|
||||
} else {
|
||||
this._dashboard.vis.once('dataviewsFetched', function () {
|
||||
callback && callback();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onStateChanged: function (callback) {
|
||||
this.onDataviewsFetched(function () {
|
||||
callback && this._bindChange(callback);
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
_bindChange: function (callback) {
|
||||
var widgetsCollection = this._dashboard.widgets.getCollection();
|
||||
widgetsCollection.bind('change', function () {
|
||||
callback(this.getState(), this.getDashboardURL());
|
||||
}, this);
|
||||
|
||||
this._dashboard.vis.map.bind('change', function () {
|
||||
callback(this.getState(), this.getDashboardURL());
|
||||
}, this);
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {Integer} id - widget id
|
||||
* @return a widget object
|
||||
*/
|
||||
getWidget: function (id) {
|
||||
return this._dashboard.widgets.get(id);
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a category widget.
|
||||
* @param {Object} widgetAttrs - attributes for the new widget
|
||||
* @param {string} widgetAttrs.id - id (required)
|
||||
* @param {string} widgetAttrs.title - title (required)
|
||||
* @param {number} widgetAttrs.order - index of the widget (optional)
|
||||
* @param ...
|
||||
* @return {CategoryWidget} The new widget
|
||||
*/
|
||||
createCategoryWidget: function (widgetAttrs, layer) {
|
||||
return this._dashboard.widgets.createCategoryModel(widgetAttrs, layer, null);
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a histogram widget
|
||||
* @param {Object} widgetAttrs - attributes for the new widget
|
||||
* @param {string} widgetAttrs.id - id (required)
|
||||
* @param {string} widgetAttrs.title - title (required)
|
||||
* @param {number} widgetAttrs.order - index of the widget (optional)
|
||||
* @param ...
|
||||
* @return {HistogramWidget} The new widget
|
||||
*/
|
||||
createHistogramWidget: function (widgetAttrs, layer) {
|
||||
return this._dashboard.widgets.createHistogramModel(widgetAttrs, layer, null);
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a formula widget
|
||||
* @param {Object} widgetAttrs - attributes for the new widget
|
||||
* @param {string} widgetAttrs.id - id (required)
|
||||
* @param {string} widgetAttrs.title - title (required)
|
||||
* @param {number} widgetAttrs.order - index of the widget (optional)
|
||||
* @param ...
|
||||
* @return {FormulaWidget} The new widget
|
||||
*/
|
||||
createFormulaWidget: function (widgetAttrs, layer) {
|
||||
return this._dashboard.widgets.createFormulaModel(widgetAttrs, layer, null);
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a timesier es widget
|
||||
* @param {Object} widgetAttrs - attributes for the new widget
|
||||
* @param {string} widgetAttrs.id - id (required)
|
||||
* @param {string} widgetAttrs.title - title (required)
|
||||
* @param {number} widgetAttrs.order - index of the widget (optional)
|
||||
* @param ...
|
||||
* @return {TimeSeriesWidget} The new widget
|
||||
*/
|
||||
createTimeSeriesWidget: function (widgetAttrs, layer) {
|
||||
return this._dashboard.widgets.createTimeSeriesModel(widgetAttrs, layer, null);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports = Dashboard;
|
||||
Reference in New Issue
Block a user