@fleetbase/fleetops-engine
Version:
Fleet & Transport Management Extension for Fleetbase
79 lines (65 loc) • 2.36 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { calculateInPlacePosition } from 'ember-basic-dropdown/utils/calculate-position';
export default class MapToolbarVisibilityControlPanel extends Component {
leafletLayerVisibilityManager;
mapManager;
areVehiclesHidden = false;
arePlacesHidden = false;
areDriversHidden = false;
get livemap() {
return this.mapManager.livemap ?? {};
}
get vehicles() {
return this.livemap.vehicles ?? [];
}
get drivers() {
return this.livemap.drivers ?? [];
}
get places() {
return this.livemap.places ?? [];
}
#setModelVisible(model, visible) {
if (visible) {
this.leafletLayerVisibilityManager.showModelLayer(model);
} else {
this.leafletLayerVisibilityManager.hideModelLayer(model);
}
}
#setAllVisible(models, visible) {
for (const m of models) {
this.#setModelVisible(m, visible);
}
}
calculatePosition(trigger) {
const position = calculateInPlacePosition(...arguments);
const rect = trigger.getBoundingClientRect();
position.style.top = '-0.5rem';
position.style.left = `calc(${rect.width}px + 0.75rem)`;
return position;
}
togglePlaces() {
this.arePlacesHidden = !this.arePlacesHidden;
this.#setAllVisible(this.places, !this.arePlacesHidden);
}
toggleDrivers() {
this.areDriversHidden = !this.areDriversHidden;
this.#setAllVisible(this.drivers, !this.areDriversHidden);
}
toggleDriversByOnline(wantOnline = true) {
for (const d of this.drivers) {
this.#setModelVisible(d, Boolean(d?.online) === Boolean(wantOnline));
}
}
toggleVehicles() {
this.areVehiclesHidden = !this.areVehiclesHidden;
this.#setAllVisible(this.vehicles, !this.areVehiclesHidden);
}
toggleVehiclesByOnline(wantOnline = true) {
for (const v of this.vehicles) {
this.#setModelVisible(v, Boolean(v?.online) === Boolean(wantOnline));
}
}
}