@c8y/ngx-components 1019.2.4 → 1019.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/common/forOf.directive.d.ts +10 -1
- package/core/common/forOf.directive.d.ts.map +1 -1
- package/core/common/geo.service.d.ts +9 -0
- package/core/common/geo.service.d.ts.map +1 -0
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/load-more.component.d.ts +1 -0
- package/core/common/load-more.component.d.ts.map +1 -1
- package/core/core.module.d.ts +50 -49
- package/core/core.module.d.ts.map +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/core/realtime/realtime-button.component.d.ts +5 -2
- package/core/realtime/realtime-button.component.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts +6 -5
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/time-interval/index.d.ts +3 -0
- package/core/time-interval/index.d.ts.map +1 -0
- package/core/time-interval/time-interval.component.d.ts +26 -0
- package/core/time-interval/time-interval.component.d.ts.map +1 -0
- package/core/time-interval/time-interval.model.d.ts +33 -0
- package/core/time-interval/time-interval.model.d.ts.map +1 -0
- package/esm2022/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +1 -1
- package/esm2022/core/audit-log/audit-log.component.mjs +1 -1
- package/esm2022/core/bootstrap/bootstrap.component.mjs +3 -3
- package/esm2022/core/common/forOf.directive.mjs +18 -2
- package/esm2022/core/common/geo.service.mjs +30 -0
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/load-more.component.mjs +5 -2
- package/esm2022/core/core.module.mjs +11 -7
- package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +1 -1
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/realtime/realtime-button.component.mjs +10 -4
- package/esm2022/core/router/context-route.service.mjs +10 -4
- package/esm2022/core/search/search-input.component.mjs +1 -1
- package/esm2022/core/time-interval/index.mjs +3 -0
- package/esm2022/core/time-interval/time-interval.component.mjs +85 -0
- package/esm2022/core/time-interval/time-interval.model.mjs +54 -0
- package/esm2022/datapoint-library/list/datapoint-library-list.component.mjs +2 -2
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +1 -1
- package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
- package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +1 -1
- package/esm2022/device-shell/shell/shell.component.mjs +1 -1
- package/esm2022/diagnostics/diagnostics.component.mjs +1 -1
- package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +1 -1
- package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +1 -1
- package/esm2022/location/location.component.mjs +1 -1
- package/esm2022/map/cluster-map.component.mjs +7 -7
- package/esm2022/map/map.component.mjs +92 -36
- package/esm2022/map/map.model.mjs +3 -2
- package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
- package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +1 -1
- package/esm2022/operations/operations-list/operations-list.component.mjs +1 -1
- package/esm2022/operations/operations-timeline/operations-timeline.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-firmware/select-firmware.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-firmware/version-or-patch.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-software/select-software-step.component.mjs +1 -1
- package/esm2022/protocol-lpwan/lpwan-set-connections.component.mjs +1 -1
- package/esm2022/protocol-lpwan/lpwan-set-device-protocol.component.mjs +1 -1
- package/esm2022/repository/configuration/list/configuration-detail.component.mjs +1 -1
- package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
- package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +1 -1
- package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-details.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
- package/esm2022/repository/shared/software-type/software-type.component.mjs +1 -1
- package/esm2022/repository/software/device-tab/device-software-list.component.mjs +1 -1
- package/esm2022/repository/software/list/add-software-modal.component.mjs +1 -1
- package/esm2022/repository/software/list/columns/software-type.filtering-form-renderer.component.mjs +1 -1
- package/esm2022/repository/software/list/software-details.component.mjs +1 -1
- package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
- package/esm2022/tracking/c8y-ngx-components-tracking.mjs +5 -0
- package/esm2022/tracking/index.mjs +6 -0
- package/esm2022/tracking/tracking-marker-popup.component.mjs +34 -0
- package/esm2022/tracking/tracking-tab.guard.mjs +25 -0
- package/esm2022/tracking/tracking.component.mjs +92 -0
- package/esm2022/tracking/tracking.feature.mjs +16 -0
- package/esm2022/tracking/tracking.service.mjs +124 -0
- package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +5 -5
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +1 -1
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +2 -2
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +95 -38
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +271 -0
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +5 -5
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +204 -16
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +158 -83
- package/locales/en.po +6 -0
- package/locales/fr.po +342 -186
- package/locales/locales.pot +34 -28
- package/locales/nl.po +326 -170
- package/locales/pt_BR.po +342 -186
- package/map/cluster-map.component.d.ts +3 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map.component.d.ts +17 -7
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +14 -6
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/tracking/c8y-ngx-components-tracking.d.ts.map +1 -0
- package/tracking/index.d.ts +6 -0
- package/tracking/index.d.ts.map +1 -0
- package/tracking/tracking-marker-popup.component.d.ts +17 -0
- package/tracking/tracking-marker-popup.component.d.ts.map +1 -0
- package/tracking/tracking-tab.guard.d.ts +12 -0
- package/tracking/tracking-tab.guard.d.ts.map +1 -0
- package/tracking/tracking.component.d.ts +33 -0
- package/tracking/tracking.component.d.ts.map +1 -0
- package/tracking/tracking.feature.d.ts +3 -0
- package/tracking/tracking.feature.d.ts.map +1 -0
- package/tracking/tracking.service.d.ts +38 -0
- package/tracking/tracking.service.d.ts.map +1 -0
- package/trusted-certificates/crl/crl-settings.component.d.ts +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
|
@@ -229,7 +229,7 @@ class LocationComponent {
|
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocationComponent, deps: [{ token: i1$1.ContextRouteService }, { token: i3.ActivatedRoute }, { token: i1.InventoryService }, { token: i1$1.Permissions }, { token: i1$1.OptionsService }, { token: i1$1.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
232
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LocationComponent, selector: "c8y-location", viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link c8y-realtime\"\n title=\"{{ 'Toggle realtime' | translate }}\"\n type=\"button\"\n (click)=\"toggleRealtime()\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{ active: config.realtime, inactive: !config.realtime }\"\n ></span>\n <span translate>Realtime</span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Center`verb`' | translate }}\"\n (click)=\"centerMap()\"\n >\n <i [c8yIcon]=\"'target1'\"></i>\n <span translate>Center`verb`</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [assets]=\"[position]\"\n [config]=\"config\"\n (onRealtimeUpdate)=\"positionChanged($event)\"\n ></c8y-map>\n </div>\n\n <form\n class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\"\n #positionForm=\"ngForm\"\n (ngSubmit)=\"save()\"\n >\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Device location\n </span>\n </div>\n <div class=\"inner-scroll\">\n <div\n class=\"m-16\"\n *ngIf=\"!isEdit\"\n >\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Latitude (\u00B0)\n </div>\n {{ position.c8y_Position.lat }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Longitude (\u00B0)\n </div>\n {{ position.c8y_Position.lng }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Altitude (m)\n </div>\n {{ position.c8y_Position.alt }}\n </div>\n </div>\n <div\n class=\"m-16\"\n *ngIf=\"isEdit\"\n >\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Latitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Latitude (\u00B0)' | translate\"\n id=\"lat\"\n name=\"lat\"\n type=\"number\"\n required\n min=\"-90\"\n max=\"90\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lat\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum latitude value is -90\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum latitude value is 90\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Longitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Longitude (\u00B0)' | translate\"\n id=\"lng\"\n name=\"lng\"\n type=\"number\"\n required\n min=\"-180\"\n max=\"180\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lng\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum longitude value is -180\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum longitude value is 180\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"alt\"\n translate\n >\n Altitude (m)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Altitude (m)' | translate\"\n id=\"alt\"\n name=\"alt\"\n type=\"number\"\n [(ngModel)]=\"position.c8y_Position.alt\"\n />\n </c8y-form-group>\n </div>\n\n <form\n class=\"card-block bg-level-1\"\n #addressSearch=\"ngForm\"\n novalidate\n (submit)=\"searchAddress(addressSearchTerm)\"\n *ngIf=\"isEdit && !hideAddressSearchFeature\"\n >\n <div class=\"form-group\">\n <label\n for=\"searchAddress\"\n translate\n >\n Find lat/long by address\n </label>\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n id=\"searchAddress\"\n name=\"addressSearchTerm\"\n type=\"text\"\n [placeholder]=\"'e.g. Speditionstra\u00DFe 13, D\u00FCsseldorf`LOCALIZE`' | translate\"\n [(ngModel)]=\"addressSearchTerm\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n [title]=\"'Search' | translate\"\n type=\"submit\"\n >\n <i\n class=\"dlt-c8y-icon-search\"\n c8y-icon=\"search\"\n ></i>\n </button>\n </span>\n </div>\n </div>\n </form>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Edit location' | translate\"\n type=\"button\"\n *ngIf=\"canEdit && !isEdit\"\n (click)=\"edit()\"\n translate\n >\n Edit location\n </button>\n <button\n class=\"btn btn-default\"\n [title]=\"'Cancel' | translate\"\n type=\"button\"\n (click)=\"cancel()\"\n *ngIf=\"isEdit\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save' | translate\"\n type=\"submit\"\n *ngIf=\"isEdit\"\n translate\n [disabled]=\"!positionForm.valid\"\n >\n Save\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "component", type: i4$1.MapComponent, selector: "c8y-map", inputs: ["config", "assets"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onRealtimeUpdate", "onInit"] }, { kind: "component", type: i1$1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1$1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i1$1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i1$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: i1$1.C8yTranslatePipe, name: "translate" }] }); }
|
|
232
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LocationComponent, selector: "c8y-location", viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link c8y-realtime\"\n title=\"{{ 'Toggle realtime' | translate }}\"\n type=\"button\"\n (click)=\"toggleRealtime()\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{ active: config.realtime, inactive: !config.realtime }\"\n ></span>\n <span translate>Realtime</span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Center`verb`' | translate }}\"\n (click)=\"centerMap()\"\n >\n <i [c8yIcon]=\"'target1'\"></i>\n <span translate>Center`verb`</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [assets]=\"[position]\"\n [config]=\"config\"\n (onRealtimeUpdate)=\"positionChanged($event)\"\n ></c8y-map>\n </div>\n\n <form\n class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\"\n #positionForm=\"ngForm\"\n (ngSubmit)=\"save()\"\n >\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Device location\n </span>\n </div>\n <div class=\"inner-scroll\">\n <div\n class=\"m-16\"\n *ngIf=\"!isEdit\"\n >\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Latitude (\u00B0)\n </div>\n {{ position.c8y_Position.lat }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Longitude (\u00B0)\n </div>\n {{ position.c8y_Position.lng }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Altitude (m)\n </div>\n {{ position.c8y_Position.alt }}\n </div>\n </div>\n <div\n class=\"m-16\"\n *ngIf=\"isEdit\"\n >\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Latitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Latitude (\u00B0)' | translate\"\n id=\"lat\"\n name=\"lat\"\n type=\"number\"\n required\n min=\"-90\"\n max=\"90\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lat\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum latitude value is -90\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum latitude value is 90\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Longitude (\u00B0)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Longitude (\u00B0)' | translate\"\n id=\"lng\"\n name=\"lng\"\n type=\"number\"\n required\n min=\"-180\"\n max=\"180\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lng\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum longitude value is -180\u00B0.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum longitude value is 180\u00B0.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"alt\"\n translate\n >\n Altitude (m)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Altitude (m)' | translate\"\n id=\"alt\"\n name=\"alt\"\n type=\"number\"\n [(ngModel)]=\"position.c8y_Position.alt\"\n />\n </c8y-form-group>\n </div>\n\n <form\n class=\"card-block bg-level-1\"\n #addressSearch=\"ngForm\"\n novalidate\n (submit)=\"searchAddress(addressSearchTerm)\"\n *ngIf=\"isEdit && !hideAddressSearchFeature\"\n >\n <div class=\"form-group\">\n <label\n for=\"searchAddress\"\n translate\n >\n Find lat/long by address\n </label>\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n id=\"searchAddress\"\n name=\"addressSearchTerm\"\n type=\"text\"\n [placeholder]=\"'e.g. Speditionstra\u00DFe 13, D\u00FCsseldorf`LOCALIZE`' | translate\"\n [(ngModel)]=\"addressSearchTerm\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n [title]=\"'Search' | translate\"\n type=\"submit\"\n >\n <i\n class=\"dlt-c8y-icon-search\"\n c8y-icon=\"search\"\n ></i>\n </button>\n </span>\n </div>\n </div>\n </form>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Edit location' | translate\"\n type=\"button\"\n *ngIf=\"canEdit && !isEdit\"\n (click)=\"edit()\"\n translate\n >\n Edit location\n </button>\n <button\n class=\"btn btn-default\"\n [title]=\"'Cancel' | translate\"\n type=\"button\"\n (click)=\"cancel()\"\n *ngIf=\"isEdit\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save' | translate\"\n type=\"submit\"\n *ngIf=\"isEdit\"\n translate\n [disabled]=\"!positionForm.valid\"\n >\n Save\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "component", type: i4$1.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onRealtimeUpdate", "onInit"] }, { kind: "component", type: i1$1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1$1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i1$1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i1$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: i1$1.C8yTranslatePipe, name: "translate" }] }); }
|
|
233
233
|
}
|
|
234
234
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocationComponent, decorators: [{
|
|
235
235
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-location.mjs","sources":["../../location/add-location.component.ts","../../location/add-location.component.html","../../location/add-location.factory.ts","../../location/location-tab.factory.ts","../../location/location.component.ts","../../location/location.component.html","../../location/location.module.ts","../../location/c8y-ngx-components-location.ts"],"sourcesContent":["import { Component, Inject, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { AlertService, ContextRouteService } from '@c8y/ngx-components';\nimport type { MapDefaultConfig } from '@c8y/devkit/options';\nimport { Router } from '@angular/router';\nimport { MAP_DEFAULT_CONFIG } from '@c8y/ngx-components/map';\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-add-location',\n templateUrl: './add-location.component.html'\n})\nexport class AddLocationComponent implements OnInit {\n @ViewChild('templateCopy', { read: TemplateRef, static: true }) templateCopy;\n\n constructor(\n private inventoryService: InventoryService,\n private contextRouteService: ContextRouteService,\n @Inject(MAP_DEFAULT_CONFIG)\n private defaultConfig$: Observable<MapDefaultConfig>,\n private router: Router,\n private alertService: AlertService,\n private vcRef: ViewContainerRef\n ) {}\n\n ngOnInit() {\n this.vcRef.createEmbeddedView(this.templateCopy);\n }\n\n onClick(): void {\n this.defaultConfig$.pipe(first()).subscribe(async config => {\n const context = this.contextRouteService.activatedContextData;\n context.contextData.c8y_Position = {\n lat: config.center[0],\n lng: config.center[1]\n };\n try {\n await this.inventoryService.update(context.contextData as IManagedObject);\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n\n const route = this.contextRouteService.getContextRoute(context);\n this.contextRouteService.refreshContext();\n this.router.navigateByUrl(route + '/location');\n });\n }\n}\n","<ng-template #templateCopy>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add location' | translate\"\n (click)=\"onClick()\"\n >\n <i c8yIcon=\"location-arrow\"></i>\n <span translate>Add location</span>\n </button>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n ActionBarFactory,\n ActionBarItem,\n ContextRouteService,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AddLocationComponent } from './add-location.component';\nimport { isUndefined } from 'lodash-es';\n\n@Injectable()\nexport class AddLocationFactory implements ActionBarFactory {\n private action: ActionBarItem = {\n component: AddLocationComponent,\n placement: 'more'\n };\n\n constructor(private contextRouteService: ContextRouteService) {}\n\n get(activatedRoute?: ActivatedRoute): ActionBarItem {\n const routeData = this.contextRouteService.getContextData(activatedRoute);\n if (!routeData) {\n return;\n }\n if (\n routeData.context === ViewContext.Device &&\n isUndefined(routeData.contextData.c8y_Position)\n ) {\n return this.action;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n ContextRouteService,\n Tab,\n ViewContext,\n ExtensionFactory,\n gettext\n} from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationTabFactory implements ExtensionFactory<Tab> {\n constructor(private contextRouteService: ContextRouteService) {}\n\n get(activatedRoute: ActivatedRoute): Tab[] {\n const contextData = this.contextRouteService.getContextData(activatedRoute);\n const isDeviceOrGroupWithPosition =\n (contextData?.context === ViewContext.Device || contextData?.context === ViewContext.Group) &&\n contextData?.contextData.c8y_Position;\n if (isDeviceOrGroupWithPosition) {\n return [\n {\n label: gettext('Location'),\n icon: 'location-arrow',\n path: `${this.contextRouteService.getContextRoute(contextData)}/location`\n }\n ];\n }\n return [];\n }\n}\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MapComponent, MapConfig, PositionManagedObject } from '@c8y/ngx-components/map';\nimport {\n AlertService,\n ContextRouteService,\n OptionsService,\n Permissions,\n gettext\n} from '@c8y/ngx-components';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { isUndefined, cloneDeep } from 'lodash-es';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'c8y-location',\n templateUrl: './location.component.html'\n})\nexport class LocationComponent implements OnInit, OnDestroy {\n position: PositionManagedObject;\n originalPosition: PositionManagedObject;\n isEdit = false;\n canEdit = true;\n config: MapConfig = { realtime: false, follow: true, zoomLevel: 12 };\n addressSearchTerm = '';\n hideAddressSearchFeature = false;\n\n private destroy$ = new Subject<void>();\n private mapNominatimUrl = 'https://nominatim.openstreetmap.org/search?format=json&q={searchTerm}';\n\n @ViewChild(MapComponent)\n map: MapComponent;\n\n constructor(\n private contextRouteService: ContextRouteService,\n private activatedRoute: ActivatedRoute,\n private inventoryService: InventoryService,\n private permissions: Permissions,\n private optionsService: OptionsService,\n private alertService: AlertService\n ) {}\n\n ngOnInit(): void {\n this.activatedRoute.url.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.updateMap();\n });\n }\n\n async updateMap() {\n const { contextData } = this.contextRouteService.getContextData(this.activatedRoute);\n this.position = contextData as PositionManagedObject;\n this.canEdit = await this.permissions.canEdit(\n [Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_INVENTORY_CREATE],\n contextData\n );\n\n const hasCustomSetting = !isUndefined(this.optionsService.mapNominatimUrl);\n this.hideAddressSearchFeature = hasCustomSetting && !this.optionsService.mapNominatimUrl;\n\n if (hasCustomSetting) {\n this.mapNominatimUrl = this.optionsService.mapNominatimUrl;\n }\n\n this.map.refresh();\n }\n\n toggleRealtime() {\n this.config = { ...this.config, realtime: !this.config.realtime };\n }\n\n disableRealtime() {\n this.config = { ...this.config, realtime: false };\n }\n\n centerMap() {\n this.config = {\n ...this.config,\n center: [this.position.c8y_Position.lat, this.position.c8y_Position.lng]\n };\n }\n\n edit() {\n this.originalPosition = cloneDeep(this.position);\n this.enableMarkerDragging();\n this.disableRealtime();\n this.isEdit = true;\n }\n\n cancel() {\n this.position = this.originalPosition;\n this.isEdit = false;\n this.map.markers[0]?.dragging.disable();\n this.centerMap();\n }\n\n async save() {\n try {\n const { data } = await this.inventoryService.update({\n id: this.position.id,\n c8y_Position: this.position.c8y_Position\n });\n this.position = data as PositionManagedObject;\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n this.map.markers[0]?.dragging.disable();\n this.centerMap();\n this.isEdit = false;\n }\n\n positionChanged(position: PositionManagedObject) {\n this.position = position;\n }\n\n async searchAddress(searchTerm: string) {\n const fetchResponse = await fetch(this.mapNominatimUrl.replace('{searchTerm}', searchTerm));\n if (fetchResponse.status !== 200) {\n this.alertService.danger(gettext('Failed to search for address.'));\n return;\n }\n const data: Array<{ lat: string | number; lon: string | number; licence?: string }> =\n await fetchResponse.json();\n const latLng = data[0];\n if (!latLng) {\n this.alertService.warning(gettext('Address could not be found.'));\n return;\n }\n this.position.c8y_Position.lat = Number(latLng.lat);\n this.position.c8y_Position.lng = Number(latLng.lon);\n this.updateMarkerPosition();\n if (latLng.licence) {\n this.map.map.attributionControl.addAttribution(latLng.licence);\n }\n }\n\n updateMarkerPosition() {\n this.map.refreshMarkers();\n this.enableMarkerDragging();\n this.centerMap();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private enableMarkerDragging() {\n const marker = this.map.markers[0];\n if (marker) {\n marker.dragging.enable();\n marker.on('dragend', () => {\n const latlng = marker.getLatLng();\n this.position.c8y_Position = {\n ...this.position.c8y_Position,\n lat: latlng.lat,\n lng: latlng.lng\n };\n this.centerMap();\n });\n }\n }\n}\n","<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link c8y-realtime\"\n title=\"{{ 'Toggle realtime' | translate }}\"\n type=\"button\"\n (click)=\"toggleRealtime()\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{ active: config.realtime, inactive: !config.realtime }\"\n ></span>\n <span translate>Realtime</span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Center`verb`' | translate }}\"\n (click)=\"centerMap()\"\n >\n <i [c8yIcon]=\"'target1'\"></i>\n <span translate>Center`verb`</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [assets]=\"[position]\"\n [config]=\"config\"\n (onRealtimeUpdate)=\"positionChanged($event)\"\n ></c8y-map>\n </div>\n\n <form\n class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\"\n #positionForm=\"ngForm\"\n (ngSubmit)=\"save()\"\n >\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Device location\n </span>\n </div>\n <div class=\"inner-scroll\">\n <div\n class=\"m-16\"\n *ngIf=\"!isEdit\"\n >\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Latitude (°)\n </div>\n {{ position.c8y_Position.lat }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Longitude (°)\n </div>\n {{ position.c8y_Position.lng }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Altitude (m)\n </div>\n {{ position.c8y_Position.alt }}\n </div>\n </div>\n <div\n class=\"m-16\"\n *ngIf=\"isEdit\"\n >\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Latitude (°)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Latitude (°)' | translate\"\n id=\"lat\"\n name=\"lat\"\n type=\"number\"\n required\n min=\"-90\"\n max=\"90\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lat\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum latitude value is -90°.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum latitude value is 90°.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Longitude (°)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Longitude (°)' | translate\"\n id=\"lng\"\n name=\"lng\"\n type=\"number\"\n required\n min=\"-180\"\n max=\"180\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lng\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum longitude value is -180°.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum longitude value is 180°.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"alt\"\n translate\n >\n Altitude (m)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Altitude (m)' | translate\"\n id=\"alt\"\n name=\"alt\"\n type=\"number\"\n [(ngModel)]=\"position.c8y_Position.alt\"\n />\n </c8y-form-group>\n </div>\n\n <form\n class=\"card-block bg-level-1\"\n #addressSearch=\"ngForm\"\n novalidate\n (submit)=\"searchAddress(addressSearchTerm)\"\n *ngIf=\"isEdit && !hideAddressSearchFeature\"\n >\n <div class=\"form-group\">\n <label\n for=\"searchAddress\"\n translate\n >\n Find lat/long by address\n </label>\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n id=\"searchAddress\"\n name=\"addressSearchTerm\"\n type=\"text\"\n [placeholder]=\"'e.g. Speditionstraße 13, Düsseldorf`LOCALIZE`' | translate\"\n [(ngModel)]=\"addressSearchTerm\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n [title]=\"'Search' | translate\"\n type=\"submit\"\n >\n <i\n class=\"dlt-c8y-icon-search\"\n c8y-icon=\"search\"\n ></i>\n </button>\n </span>\n </div>\n </div>\n </form>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Edit location' | translate\"\n type=\"button\"\n *ngIf=\"canEdit && !isEdit\"\n (click)=\"edit()\"\n translate\n >\n Edit location\n </button>\n <button\n class=\"btn btn-default\"\n [title]=\"'Cancel' | translate\"\n type=\"button\"\n (click)=\"cancel()\"\n *ngIf=\"isEdit\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save' | translate\"\n type=\"submit\"\n *ngIf=\"isEdit\"\n translate\n [disabled]=\"!positionForm.valid\"\n >\n Save\n </button>\n </div>\n </form>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MapModule } from '@c8y/ngx-components/map';\nimport { ViewContext, hookRoute, hookTab, CoreModule, hookActionBar } from '@c8y/ngx-components';\nimport { LocationTabFactory } from './location-tab.factory';\nimport { LocationComponent } from './location.component';\nimport { AddLocationFactory } from './add-location.factory';\nimport { AddLocationComponent } from './add-location.component';\nimport { RouterModule } from '@angular/router';\nimport { LocationConfiguration } from './location.model';\n\n@NgModule({\n declarations: [LocationComponent, AddLocationComponent],\n imports: [MapModule, CoreModule, RouterModule],\n exports: [LocationComponent, AddLocationComponent]\n})\nexport class LocationModule {\n static config(\n config: LocationConfiguration = { addLocation: false }\n ): ModuleWithProviders<LocationModule> {\n return {\n ngModule: LocationModule,\n providers: [\n config.addLocation ? hookActionBar(AddLocationFactory) : undefined,\n hookTab(LocationTabFactory),\n hookRoute({\n path: 'location',\n component: LocationComponent,\n context: ViewContext.Device,\n tabs: []\n }),\n hookRoute({\n path: 'location',\n component: LocationComponent,\n context: ViewContext.Group,\n tabs: []\n })\n ].filter(Boolean)\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-location.mjs","sources":["../../location/add-location.component.ts","../../location/add-location.component.html","../../location/add-location.factory.ts","../../location/location-tab.factory.ts","../../location/location.component.ts","../../location/location.component.html","../../location/location.module.ts","../../location/c8y-ngx-components-location.ts"],"sourcesContent":["import { Component, Inject, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { AlertService, ContextRouteService } from '@c8y/ngx-components';\nimport type { MapDefaultConfig } from '@c8y/devkit/options';\nimport { Router } from '@angular/router';\nimport { MAP_DEFAULT_CONFIG } from '@c8y/ngx-components/map';\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-add-location',\n templateUrl: './add-location.component.html'\n})\nexport class AddLocationComponent implements OnInit {\n @ViewChild('templateCopy', { read: TemplateRef, static: true }) templateCopy;\n\n constructor(\n private inventoryService: InventoryService,\n private contextRouteService: ContextRouteService,\n @Inject(MAP_DEFAULT_CONFIG)\n private defaultConfig$: Observable<MapDefaultConfig>,\n private router: Router,\n private alertService: AlertService,\n private vcRef: ViewContainerRef\n ) {}\n\n ngOnInit() {\n this.vcRef.createEmbeddedView(this.templateCopy);\n }\n\n onClick(): void {\n this.defaultConfig$.pipe(first()).subscribe(async config => {\n const context = this.contextRouteService.activatedContextData;\n context.contextData.c8y_Position = {\n lat: config.center[0],\n lng: config.center[1]\n };\n try {\n await this.inventoryService.update(context.contextData as IManagedObject);\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n\n const route = this.contextRouteService.getContextRoute(context);\n this.contextRouteService.refreshContext();\n this.router.navigateByUrl(route + '/location');\n });\n }\n}\n","<ng-template #templateCopy>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add location' | translate\"\n (click)=\"onClick()\"\n >\n <i c8yIcon=\"location-arrow\"></i>\n <span translate>Add location</span>\n </button>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n ActionBarFactory,\n ActionBarItem,\n ContextRouteService,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AddLocationComponent } from './add-location.component';\nimport { isUndefined } from 'lodash-es';\n\n@Injectable()\nexport class AddLocationFactory implements ActionBarFactory {\n private action: ActionBarItem = {\n component: AddLocationComponent,\n placement: 'more'\n };\n\n constructor(private contextRouteService: ContextRouteService) {}\n\n get(activatedRoute?: ActivatedRoute): ActionBarItem {\n const routeData = this.contextRouteService.getContextData(activatedRoute);\n if (!routeData) {\n return;\n }\n if (\n routeData.context === ViewContext.Device &&\n isUndefined(routeData.contextData.c8y_Position)\n ) {\n return this.action;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n ContextRouteService,\n Tab,\n ViewContext,\n ExtensionFactory,\n gettext\n} from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationTabFactory implements ExtensionFactory<Tab> {\n constructor(private contextRouteService: ContextRouteService) {}\n\n get(activatedRoute: ActivatedRoute): Tab[] {\n const contextData = this.contextRouteService.getContextData(activatedRoute);\n const isDeviceOrGroupWithPosition =\n (contextData?.context === ViewContext.Device || contextData?.context === ViewContext.Group) &&\n contextData?.contextData.c8y_Position;\n if (isDeviceOrGroupWithPosition) {\n return [\n {\n label: gettext('Location'),\n icon: 'location-arrow',\n path: `${this.contextRouteService.getContextRoute(contextData)}/location`\n }\n ];\n }\n return [];\n }\n}\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MapComponent, MapConfig, PositionManagedObject } from '@c8y/ngx-components/map';\nimport {\n AlertService,\n ContextRouteService,\n OptionsService,\n Permissions,\n gettext\n} from '@c8y/ngx-components';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { isUndefined, cloneDeep } from 'lodash-es';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'c8y-location',\n templateUrl: './location.component.html'\n})\nexport class LocationComponent implements OnInit, OnDestroy {\n position: PositionManagedObject;\n originalPosition: PositionManagedObject;\n isEdit = false;\n canEdit = true;\n config: MapConfig = { realtime: false, follow: true, zoomLevel: 12 };\n addressSearchTerm = '';\n hideAddressSearchFeature = false;\n\n private destroy$ = new Subject<void>();\n private mapNominatimUrl = 'https://nominatim.openstreetmap.org/search?format=json&q={searchTerm}';\n\n @ViewChild(MapComponent)\n map: MapComponent;\n\n constructor(\n private contextRouteService: ContextRouteService,\n private activatedRoute: ActivatedRoute,\n private inventoryService: InventoryService,\n private permissions: Permissions,\n private optionsService: OptionsService,\n private alertService: AlertService\n ) {}\n\n ngOnInit(): void {\n this.activatedRoute.url.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.updateMap();\n });\n }\n\n async updateMap() {\n const { contextData } = this.contextRouteService.getContextData(this.activatedRoute);\n this.position = contextData as PositionManagedObject;\n this.canEdit = await this.permissions.canEdit(\n [Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_INVENTORY_CREATE],\n contextData\n );\n\n const hasCustomSetting = !isUndefined(this.optionsService.mapNominatimUrl);\n this.hideAddressSearchFeature = hasCustomSetting && !this.optionsService.mapNominatimUrl;\n\n if (hasCustomSetting) {\n this.mapNominatimUrl = this.optionsService.mapNominatimUrl;\n }\n\n this.map.refresh();\n }\n\n toggleRealtime() {\n this.config = { ...this.config, realtime: !this.config.realtime };\n }\n\n disableRealtime() {\n this.config = { ...this.config, realtime: false };\n }\n\n centerMap() {\n this.config = {\n ...this.config,\n center: [this.position.c8y_Position.lat, this.position.c8y_Position.lng]\n };\n }\n\n edit() {\n this.originalPosition = cloneDeep(this.position);\n this.enableMarkerDragging();\n this.disableRealtime();\n this.isEdit = true;\n }\n\n cancel() {\n this.position = this.originalPosition;\n this.isEdit = false;\n this.map.markers[0]?.dragging.disable();\n this.centerMap();\n }\n\n async save() {\n try {\n const { data } = await this.inventoryService.update({\n id: this.position.id,\n c8y_Position: this.position.c8y_Position\n });\n this.position = data as PositionManagedObject;\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n this.map.markers[0]?.dragging.disable();\n this.centerMap();\n this.isEdit = false;\n }\n\n positionChanged(position: PositionManagedObject) {\n this.position = position;\n }\n\n async searchAddress(searchTerm: string) {\n const fetchResponse = await fetch(this.mapNominatimUrl.replace('{searchTerm}', searchTerm));\n if (fetchResponse.status !== 200) {\n this.alertService.danger(gettext('Failed to search for address.'));\n return;\n }\n const data: Array<{ lat: string | number; lon: string | number; licence?: string }> =\n await fetchResponse.json();\n const latLng = data[0];\n if (!latLng) {\n this.alertService.warning(gettext('Address could not be found.'));\n return;\n }\n this.position.c8y_Position.lat = Number(latLng.lat);\n this.position.c8y_Position.lng = Number(latLng.lon);\n this.updateMarkerPosition();\n if (latLng.licence) {\n this.map.map.attributionControl.addAttribution(latLng.licence);\n }\n }\n\n updateMarkerPosition() {\n this.map.refreshMarkers();\n this.enableMarkerDragging();\n this.centerMap();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private enableMarkerDragging() {\n const marker = this.map.markers[0];\n if (marker) {\n marker.dragging.enable();\n marker.on('dragend', () => {\n const latlng = marker.getLatLng();\n this.position.c8y_Position = {\n ...this.position.c8y_Position,\n lat: latlng.lat,\n lng: latlng.lng\n };\n this.centerMap();\n });\n }\n }\n}\n","<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link c8y-realtime\"\n title=\"{{ 'Toggle realtime' | translate }}\"\n type=\"button\"\n (click)=\"toggleRealtime()\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{ active: config.realtime, inactive: !config.realtime }\"\n ></span>\n <span translate>Realtime</span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Center`verb`' | translate }}\"\n (click)=\"centerMap()\"\n >\n <i [c8yIcon]=\"'target1'\"></i>\n <span translate>Center`verb`</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [assets]=\"[position]\"\n [config]=\"config\"\n (onRealtimeUpdate)=\"positionChanged($event)\"\n ></c8y-map>\n </div>\n\n <form\n class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\"\n #positionForm=\"ngForm\"\n (ngSubmit)=\"save()\"\n >\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Device location\n </span>\n </div>\n <div class=\"inner-scroll\">\n <div\n class=\"m-16\"\n *ngIf=\"!isEdit\"\n >\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Latitude (°)\n </div>\n {{ position.c8y_Position.lat }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Longitude (°)\n </div>\n {{ position.c8y_Position.lng }}\n </div>\n <div class=\"p-b-40\">\n <div\n class=\"text-bold\"\n translate\n >\n Altitude (m)\n </div>\n {{ position.c8y_Position.alt }}\n </div>\n </div>\n <div\n class=\"m-16\"\n *ngIf=\"isEdit\"\n >\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Latitude (°)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Latitude (°)' | translate\"\n id=\"lat\"\n name=\"lat\"\n type=\"number\"\n required\n min=\"-90\"\n max=\"90\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lat\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum latitude value is -90°.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum latitude value is 90°.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"lat\"\n translate\n >\n Longitude (°)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Longitude (°)' | translate\"\n id=\"lng\"\n name=\"lng\"\n type=\"number\"\n required\n min=\"-180\"\n max=\"180\"\n (blur)=\"updateMarkerPosition()\"\n [(ngModel)]=\"position.c8y_Position.lng\"\n />\n <c8y-messages>\n <c8y-message\n name=\"min\"\n [text]=\"'The minimum longitude value is -180°.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"max\"\n [text]=\"'The maximum longitude value is 180°.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"alt\"\n translate\n >\n Altitude (m)\n </label>\n\n <input\n class=\"form-control\"\n [title]=\"'Altitude (m)' | translate\"\n id=\"alt\"\n name=\"alt\"\n type=\"number\"\n [(ngModel)]=\"position.c8y_Position.alt\"\n />\n </c8y-form-group>\n </div>\n\n <form\n class=\"card-block bg-level-1\"\n #addressSearch=\"ngForm\"\n novalidate\n (submit)=\"searchAddress(addressSearchTerm)\"\n *ngIf=\"isEdit && !hideAddressSearchFeature\"\n >\n <div class=\"form-group\">\n <label\n for=\"searchAddress\"\n translate\n >\n Find lat/long by address\n </label>\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n id=\"searchAddress\"\n name=\"addressSearchTerm\"\n type=\"text\"\n [placeholder]=\"'e.g. Speditionstraße 13, Düsseldorf`LOCALIZE`' | translate\"\n [(ngModel)]=\"addressSearchTerm\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n [title]=\"'Search' | translate\"\n type=\"submit\"\n >\n <i\n class=\"dlt-c8y-icon-search\"\n c8y-icon=\"search\"\n ></i>\n </button>\n </span>\n </div>\n </div>\n </form>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Edit location' | translate\"\n type=\"button\"\n *ngIf=\"canEdit && !isEdit\"\n (click)=\"edit()\"\n translate\n >\n Edit location\n </button>\n <button\n class=\"btn btn-default\"\n [title]=\"'Cancel' | translate\"\n type=\"button\"\n (click)=\"cancel()\"\n *ngIf=\"isEdit\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save' | translate\"\n type=\"submit\"\n *ngIf=\"isEdit\"\n translate\n [disabled]=\"!positionForm.valid\"\n >\n Save\n </button>\n </div>\n </form>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MapModule } from '@c8y/ngx-components/map';\nimport { ViewContext, hookRoute, hookTab, CoreModule, hookActionBar } from '@c8y/ngx-components';\nimport { LocationTabFactory } from './location-tab.factory';\nimport { LocationComponent } from './location.component';\nimport { AddLocationFactory } from './add-location.factory';\nimport { AddLocationComponent } from './add-location.component';\nimport { RouterModule } from '@angular/router';\nimport { LocationConfiguration } from './location.model';\n\n@NgModule({\n declarations: [LocationComponent, AddLocationComponent],\n imports: [MapModule, CoreModule, RouterModule],\n exports: [LocationComponent, AddLocationComponent]\n})\nexport class LocationModule {\n static config(\n config: LocationConfiguration = { addLocation: false }\n ): ModuleWithProviders<LocationModule> {\n return {\n ngModule: LocationModule,\n providers: [\n config.addLocation ? hookActionBar(AddLocationFactory) : undefined,\n hookTab(LocationTabFactory),\n hookRoute({\n path: 'location',\n component: LocationComponent,\n context: ViewContext.Device,\n tabs: []\n }),\n hookRoute({\n path: 'location',\n component: LocationComponent,\n context: ViewContext.Group,\n tabs: []\n })\n ].filter(Boolean)\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4"],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import * as i1$1 from '@c8y/ngx-components';
|
|
|
4
4
|
import { gettext, sortByPriority, ManagedObjectRealtimeService, CommonModule as CommonModule$1, FormsModule as FormsModule$1, RealtimeModule } from '@c8y/ngx-components';
|
|
5
5
|
import * as i3 from '@ngx-translate/core';
|
|
6
6
|
import * as i4 from 'rxjs';
|
|
7
|
-
import { from, Subject, combineLatest, fromEvent, BehaviorSubject,
|
|
8
|
-
import { map, first, takeUntil, switchMap, tap, filter, debounceTime, mergeMap } from 'rxjs/operators';
|
|
9
|
-
import { isUndefined, flatten, cloneDeep } from 'lodash-es';
|
|
7
|
+
import { from, NEVER, Subject, combineLatest, fromEvent, BehaviorSubject, interval, of, merge } from 'rxjs';
|
|
8
|
+
import { map, first, takeUntil, scan, switchMap, tap, filter, debounceTime, mergeMap } from 'rxjs/operators';
|
|
9
|
+
import { remove, isUndefined, flatten, isEmpty, cloneDeep } from 'lodash-es';
|
|
10
10
|
import * as i1 from '@c8y/client';
|
|
11
11
|
import * as i1$2 from '@angular/common';
|
|
12
12
|
import { CommonModule } from '@angular/common';
|
|
@@ -30,8 +30,9 @@ function getStatus(device) {
|
|
|
30
30
|
}
|
|
31
31
|
return 'text-muted';
|
|
32
32
|
}
|
|
33
|
-
function getC8yMarker(marker, asset) {
|
|
33
|
+
function getC8yMarker(marker, asset, event) {
|
|
34
34
|
marker.asset = asset;
|
|
35
|
+
marker.event = event;
|
|
35
36
|
return marker;
|
|
36
37
|
}
|
|
37
38
|
const MAP_TILE_LAYER = new InjectionToken('MAP_TILE_LAYER');
|
|
@@ -320,12 +321,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
320
321
|
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i1$1.OptionsService }]; } });
|
|
321
322
|
|
|
322
323
|
class MapComponent {
|
|
323
|
-
constructor(moRealtimeService, mapService, layers$, defaultConfig$, translateService) {
|
|
324
|
+
constructor(moRealtimeService, mapService, layers$, defaultConfig$, translateService, geo, datePipe) {
|
|
324
325
|
this.moRealtimeService = moRealtimeService;
|
|
325
326
|
this.mapService = mapService;
|
|
326
327
|
this.layers$ = layers$;
|
|
327
328
|
this.defaultConfig$ = defaultConfig$;
|
|
328
329
|
this.translateService = translateService;
|
|
330
|
+
this.geo = geo;
|
|
331
|
+
this.datePipe = datePipe;
|
|
329
332
|
/**
|
|
330
333
|
* The markers placed on the map.
|
|
331
334
|
*/
|
|
@@ -335,6 +338,7 @@ class MapComponent {
|
|
|
335
338
|
*/
|
|
336
339
|
this.isInit = false;
|
|
337
340
|
this.config = {};
|
|
341
|
+
this.polyline$ = NEVER;
|
|
338
342
|
this.onMove = new EventEmitter();
|
|
339
343
|
this.onMoveEnd = new EventEmitter();
|
|
340
344
|
this.onZoomStart = new EventEmitter();
|
|
@@ -356,7 +360,7 @@ class MapComponent {
|
|
|
356
360
|
const marker = this.findMarker(asset.id);
|
|
357
361
|
const icon = this.getAssetIcon(asset);
|
|
358
362
|
marker.setIcon(icon);
|
|
359
|
-
marker.setLatLng(
|
|
363
|
+
marker.setLatLng(this.geo.getLatLong(asset));
|
|
360
364
|
if (Array.isArray(this.assets)) {
|
|
361
365
|
this.assets[0] = asset;
|
|
362
366
|
}
|
|
@@ -378,8 +382,9 @@ class MapComponent {
|
|
|
378
382
|
this.realtimeSubscription.unsubscribe();
|
|
379
383
|
}
|
|
380
384
|
}
|
|
381
|
-
findMarker(
|
|
382
|
-
|
|
385
|
+
findMarker(moOrId) {
|
|
386
|
+
const getId = moOrId => (typeof moOrId === 'string' ? moOrId : moOrId?.id);
|
|
387
|
+
return this.markers.find((marker) => marker.asset?.id === getId(moOrId) || marker.event?.id === getId(moOrId));
|
|
383
388
|
}
|
|
384
389
|
addMarkerToMap(marker) {
|
|
385
390
|
this.markers.push(marker);
|
|
@@ -390,27 +395,21 @@ class MapComponent {
|
|
|
390
395
|
return;
|
|
391
396
|
}
|
|
392
397
|
const icon = this.getAssetIcon(asset);
|
|
393
|
-
const leafletMarker = this.leaflet.marker(
|
|
398
|
+
const leafletMarker = this.leaflet.marker(this.geo.getLatLong(asset), {
|
|
394
399
|
icon
|
|
395
400
|
});
|
|
396
401
|
const marker = getC8yMarker(leafletMarker, asset);
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
view.detectChanges();
|
|
404
|
-
marker
|
|
405
|
-
.unbindPopup()
|
|
406
|
-
.bindPopup(this.popup.elementRef.nativeElement.previousSibling, {
|
|
407
|
-
offset: [0, -30],
|
|
408
|
-
maxWidth: 140,
|
|
409
|
-
autoPan: false
|
|
410
|
-
})
|
|
411
|
-
.openPopup();
|
|
412
|
-
});
|
|
402
|
+
this.bindPopup(marker, asset);
|
|
403
|
+
return marker;
|
|
404
|
+
}
|
|
405
|
+
getTrackingMarker(event) {
|
|
406
|
+
if (!event) {
|
|
407
|
+
return;
|
|
413
408
|
}
|
|
409
|
+
const icon = this.getTrackingIcon();
|
|
410
|
+
const leafletMarker = this.leaflet.marker(this.geo.getLatLong(event), { icon });
|
|
411
|
+
const marker = getC8yMarker(leafletMarker, null, event);
|
|
412
|
+
this.bindPopup(marker, event);
|
|
414
413
|
return marker;
|
|
415
414
|
}
|
|
416
415
|
getAssetIcon(asset) {
|
|
@@ -425,9 +424,25 @@ class MapComponent {
|
|
|
425
424
|
});
|
|
426
425
|
return icon;
|
|
427
426
|
}
|
|
428
|
-
|
|
429
|
-
this.
|
|
430
|
-
|
|
427
|
+
getTrackingIcon() {
|
|
428
|
+
const icon = this.leaflet.divIcon({
|
|
429
|
+
html: `<div class="dlt-c8y-icon-marker icon-3x text-muted"></div>`,
|
|
430
|
+
className: 'c8y-map-marker-icon',
|
|
431
|
+
// iconAnchor is used to set the marker accurately on click
|
|
432
|
+
iconAnchor: [8, 8]
|
|
433
|
+
});
|
|
434
|
+
return icon;
|
|
435
|
+
}
|
|
436
|
+
removeMarker(marker) {
|
|
437
|
+
if (marker) {
|
|
438
|
+
marker.remove();
|
|
439
|
+
remove(this.markers, m => m === marker);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
clearMarkers(fragment) {
|
|
443
|
+
const matchingMarkers = marker => !fragment || !!marker[fragment];
|
|
444
|
+
this.markers.filter(matchingMarkers).forEach(marker => marker.remove());
|
|
445
|
+
this.markers = this.markers.filter(marker => !matchingMarkers(marker));
|
|
431
446
|
}
|
|
432
447
|
refreshMarkers() {
|
|
433
448
|
this.clearMarkers();
|
|
@@ -454,12 +469,23 @@ class MapComponent {
|
|
|
454
469
|
}
|
|
455
470
|
async ngAfterViewInit() {
|
|
456
471
|
this.leaflet = await this.mapService.getLeaflet();
|
|
457
|
-
combineLatest([this.layers$, this.defaultConfig$])
|
|
458
|
-
|
|
459
|
-
.subscribe(([layers, defaultConfig]) => {
|
|
472
|
+
const initialized$ = combineLatest([this.layers$, this.defaultConfig$]).pipe(first(), takeUntil(this.destroy$));
|
|
473
|
+
initialized$.subscribe(([layers, defaultConfig]) => {
|
|
460
474
|
this.initMap(layers, defaultConfig);
|
|
461
475
|
this.refreshMarkers();
|
|
462
476
|
});
|
|
477
|
+
combineLatest([this.polyline$, initialized$])
|
|
478
|
+
.pipe(map(([expressions]) => this.leaflet.polyline(expressions, this.polylineOptions)), scan((oldPolyline, newPolyline) => {
|
|
479
|
+
if (!!oldPolyline) {
|
|
480
|
+
this.map.removeLayer(oldPolyline);
|
|
481
|
+
}
|
|
482
|
+
if (!!newPolyline) {
|
|
483
|
+
newPolyline.addTo(this.map);
|
|
484
|
+
this.fitBounds(newPolyline.getBounds());
|
|
485
|
+
}
|
|
486
|
+
return newPolyline;
|
|
487
|
+
}, null), takeUntil(this.destroy$))
|
|
488
|
+
.subscribe();
|
|
463
489
|
}
|
|
464
490
|
ngOnChanges(changes) {
|
|
465
491
|
if (changes.assets?.currentValue && !changes.assets?.firstChange) {
|
|
@@ -616,6 +642,8 @@ class MapComponent {
|
|
|
616
642
|
}
|
|
617
643
|
}
|
|
618
644
|
zoomToBound(assets) {
|
|
645
|
+
if (isEmpty(assets))
|
|
646
|
+
return;
|
|
619
647
|
const bounds = assets.map(asset => [
|
|
620
648
|
asset.c8y_Position.lat,
|
|
621
649
|
asset.c8y_Position.lng
|
|
@@ -628,8 +656,33 @@ class MapComponent {
|
|
|
628
656
|
animate: false
|
|
629
657
|
});
|
|
630
658
|
}
|
|
631
|
-
|
|
632
|
-
|
|
659
|
+
fitBounds(bounds) {
|
|
660
|
+
if (bounds?.isValid()) {
|
|
661
|
+
this.map.fitBounds(bounds, this.config.fitBoundsOptions);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
bindPopup(marker, context) {
|
|
665
|
+
if (this.popup) {
|
|
666
|
+
marker.on('click', () => {
|
|
667
|
+
this.popup.viewContainer.clear();
|
|
668
|
+
const view = this.popup.viewContainer.createEmbeddedView(this.popup.template, {
|
|
669
|
+
$implicit: context
|
|
670
|
+
});
|
|
671
|
+
view.detectChanges();
|
|
672
|
+
marker
|
|
673
|
+
.unbindPopup()
|
|
674
|
+
.bindPopup(this.popup.elementRef.nativeElement.previousSibling, {
|
|
675
|
+
offset: [-3, -40],
|
|
676
|
+
maxWidth: 140,
|
|
677
|
+
autoPan: false,
|
|
678
|
+
closeButton: false
|
|
679
|
+
})
|
|
680
|
+
.openPopup();
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapComponent, deps: [{ token: i1$1.ManagedObjectRealtimeService }, { token: MapService }, { token: MAP_TILE_LAYER }, { token: MAP_DEFAULT_CONFIG }, { token: i3.TranslateService }, { token: i1$1.GeoService }, { token: i1$1.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
685
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MapComponent, selector: "c8y-map", inputs: { config: "config", assets: "assets", polyline$: "polyline$", polylineOptions: "polylineOptions" }, outputs: { onMove: "onMove", onMoveEnd: "onMoveEnd", onZoomStart: "onZoomStart", onZoomEnd: "onZoomEnd", onRealtimeUpdate: "onRealtimeUpdate", onInit: "onInit" }, providers: [ManagedObjectRealtimeService], queries: [{ propertyName: "popup", first: true, predicate: MapPopupDirective, descendants: true }], viewQueries: [{ propertyName: "mapElement", first: true, predicate: ["map"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n" }); }
|
|
633
686
|
}
|
|
634
687
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapComponent, decorators: [{
|
|
635
688
|
type: Component,
|
|
@@ -640,7 +693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
640
693
|
}] }, { type: i4.Observable, decorators: [{
|
|
641
694
|
type: Inject,
|
|
642
695
|
args: [MAP_DEFAULT_CONFIG]
|
|
643
|
-
}] }, { type: i3.TranslateService }]; }, propDecorators: { mapElement: [{
|
|
696
|
+
}] }, { type: i3.TranslateService }, { type: i1$1.GeoService }, { type: i1$1.DatePipe }]; }, propDecorators: { mapElement: [{
|
|
644
697
|
type: ViewChild,
|
|
645
698
|
args: ['map']
|
|
646
699
|
}], popup: [{
|
|
@@ -650,6 +703,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
650
703
|
type: Input
|
|
651
704
|
}], assets: [{
|
|
652
705
|
type: Input
|
|
706
|
+
}], polyline$: [{
|
|
707
|
+
type: Input
|
|
708
|
+
}], polylineOptions: [{
|
|
709
|
+
type: Input
|
|
653
710
|
}], onMove: [{
|
|
654
711
|
type: Output
|
|
655
712
|
}], onMoveEnd: [{
|
|
@@ -665,8 +722,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
665
722
|
}] } });
|
|
666
723
|
|
|
667
724
|
class ClusterMapComponent extends MapComponent {
|
|
668
|
-
constructor(moRealtimeService, mapService, layers$, defaultConfig$, translateService, iterable, colorService) {
|
|
669
|
-
super(moRealtimeService, mapService, layers$, defaultConfig$, translateService);
|
|
725
|
+
constructor(moRealtimeService, mapService, layers$, defaultConfig$, translateService, iterable, colorService, geo, datePipe) {
|
|
726
|
+
super(moRealtimeService, mapService, layers$, defaultConfig$, translateService, geo, datePipe);
|
|
670
727
|
this.moRealtimeService = moRealtimeService;
|
|
671
728
|
this.mapService = mapService;
|
|
672
729
|
this.layers$ = layers$;
|
|
@@ -864,7 +921,7 @@ class ClusterMapComponent extends MapComponent {
|
|
|
864
921
|
});
|
|
865
922
|
return Promise.all(updatePromise);
|
|
866
923
|
}
|
|
867
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ClusterMapComponent, deps: [{ token: i1$1.ManagedObjectRealtimeService }, { token: MapService }, { token: MAP_TILE_LAYER }, { token: MAP_DEFAULT_CONFIG }, { token: i3.TranslateService }, { token: i0.IterableDiffers }, { token: i1$1.ColorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
924
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ClusterMapComponent, deps: [{ token: i1$1.ManagedObjectRealtimeService }, { token: MapService }, { token: MAP_TILE_LAYER }, { token: MAP_DEFAULT_CONFIG }, { token: i3.TranslateService }, { token: i0.IterableDiffers }, { token: i1$1.ColorService }, { token: i1$1.GeoService }, { token: i1$1.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
868
925
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ClusterMapComponent, selector: "c8y-cluster-map", inputs: { config: "config", rootNode: "rootNode", assets: ["asset", "assets"], showClusterColor: "showClusterColor" }, outputs: { mapChange: "mapChange" }, providers: [ManagedObjectRealtimeService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n" }); }
|
|
869
926
|
}
|
|
870
927
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ClusterMapComponent, decorators: [{
|
|
@@ -876,7 +933,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
876
933
|
}] }, { type: i4.Observable, decorators: [{
|
|
877
934
|
type: Inject,
|
|
878
935
|
args: [MAP_DEFAULT_CONFIG]
|
|
879
|
-
}] }, { type: i3.TranslateService }, { type: i0.IterableDiffers }, { type: i1$1.ColorService }]; }, propDecorators: { config: [{
|
|
936
|
+
}] }, { type: i3.TranslateService }, { type: i0.IterableDiffers }, { type: i1$1.ColorService }, { type: i1$1.GeoService }, { type: i1$1.DatePipe }]; }, propDecorators: { config: [{
|
|
880
937
|
type: Input
|
|
881
938
|
}], rootNode: [{
|
|
882
939
|
type: Input
|