From b53b223a07dbba48321d42204ffbb07a33ac2caf Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 1 Dec 2016 12:00:19 +0500 Subject: - Handle eventId url parameter - Fit map view to events positions markers --- web/app/Application.js | 10 +++++++++- web/app/view/MapMarkerController.js | 15 ++++++++++++++- web/app/view/ReportController.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) (limited to 'web') diff --git a/web/app/Application.js b/web/app/Application.js index 8619ba96..bae3896e 100644 --- a/web/app/Application.js +++ b/web/app/Application.js @@ -141,5 +141,13 @@ Ext.define('Traccar.Application', { } else { Ext.Msg.alert(Strings.errorTitle, Strings.errorConnection); } - } + }, + + removeUrlParameter: function (param) { + var params = Ext.Object.fromQueryString(window.location.search); + delete params[param]; + window.history.pushState(null, null, window.location.pathname + '?' + Ext.Object.toQueryString(params)); + }, + + hasEventId: false }); diff --git a/web/app/view/MapMarkerController.js b/web/app/view/MapMarkerController.js index 97e75925..9b699c04 100644 --- a/web/app/view/MapMarkerController.js +++ b/web/app/view/MapMarkerController.js @@ -225,7 +225,7 @@ Ext.define('Traccar.view.MapMarkerController', { }, addReportMarkers: function (store, data) { - var i, position, point, geometry, marker, style; + var i, position, point, geometry, marker, style, minx, miny, maxx, maxy; this.clearReport(); for (i = 0; i < data.length; i++) { position = data[i]; @@ -233,6 +233,10 @@ Ext.define('Traccar.view.MapMarkerController', { position.get('longitude'), position.get('latitude') ]); + minx = minx ? Math.min(point[0], minx) : point[0]; + miny = miny ? Math.min(point[1], miny) : point[1]; + maxx = maxx ? Math.max(point[0], maxx) : point[0]; + maxy = maxy ? Math.max(point[1], maxy) : point[1]; geometry = new ol.geom.Point(point); marker = new ol.Feature(geometry); marker.set('record', position); @@ -243,6 +247,15 @@ Ext.define('Traccar.view.MapMarkerController', { this.reportMarkers[position.get('id')] = marker; this.getView().getReportSource().addFeature(marker); } + if (minx !== maxx || miny !== maxy) { + this.getView().getMapView().fit([minx, miny, maxx, maxy], this.getView().getMap().getSize()); + } else if (geometry) { + this.getView().getMapView().fit(geometry, this.getView().getMap().getSize()); + } + if (Traccar.app.hasEventId) { + this.fireEvent('selectreport', data[0], false); + Traccar.app.hasEventId = false; + } }, clearReport: function () { diff --git a/web/app/view/ReportController.js b/web/app/view/ReportController.js index f8a01bc6..32a44df5 100644 --- a/web/app/view/ReportController.js +++ b/web/app/view/ReportController.js @@ -40,12 +40,32 @@ Ext.define('Traccar.view.ReportController', { }, store: { '#ReportEvents': { + add: 'loadEvents', load: 'loadEvents' } } } }, + init: function () { + var eventId = Ext.Object.fromQueryString(window.location.search).eventId; + if (eventId) { + this.lookupReference('reportTypeField').setValue('events'); + Ext.getStore('Events').load({ + params: { + id: eventId + }, + callback: function (records, operation, success) { + if (success) { + Ext.getStore('ReportEvents').add(records); + } + } + }); + Traccar.app.hasEventId = true; + Traccar.app.removeUrlParameter('eventId'); + } + }, + hideReports: function () { Traccar.app.showReports(false); }, @@ -214,6 +234,15 @@ Ext.define('Traccar.view.ReportController', { } } }); + } else if (Traccar.app.hasEventId && data.length > 0) { + this.getView().getSelectionModel().select([data[0]], false, true); + this.getView().getView().focusRow(data[0]); + if (Traccar.app.isMobile()) { + Traccar.app.showReports(true); + } else { + this.getView().expand(); + } + Traccar.app.hasEventId = false; } }, -- cgit v1.2.3