@artstesh/maps 5.0.4 → 5.0.6

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.
Files changed (65) hide show
  1. package/dist/esm2022/map/helpers/index.mjs +2 -1
  2. package/dist/esm2022/map/helpers/polygon-style.helper.mjs +16 -0
  3. package/dist/esm2022/map/map-plate/features/index.mjs +2 -1
  4. package/dist/esm2022/map/map-plate/features/polygons/polygons.component.mjs +42 -0
  5. package/dist/esm2022/map/map-plate/layers/feature-layer/feature-layer.component.mjs +2 -2
  6. package/dist/esm2022/map/map-plate/tooltips/index.mjs +3 -0
  7. package/dist/esm2022/map/map-plate/tooltips/tooltip/tooltip.component.mjs +81 -0
  8. package/dist/esm2022/map/map-plate/tooltips/tooltip/tooltip.settings.mjs +31 -0
  9. package/dist/esm2022/map/map.module.mjs +21 -3
  10. package/dist/esm2022/map/messages/commands/close-tooltip.command.mjs +13 -0
  11. package/dist/esm2022/map/messages/index.mjs +2 -1
  12. package/dist/esm2022/map/models/index.mjs +2 -1
  13. package/dist/esm2022/map/models/polygon.model.mjs +30 -0
  14. package/dist/esm2022/map/public-api.mjs +2 -1
  15. package/dist/esm2022/map/services/map-click.service.mjs +2 -2
  16. package/dist/esm2022/map/services/message-registrator.service.mjs +3 -1
  17. package/dist/esm2022/src/map/helpers/index.mjs +2 -1
  18. package/dist/esm2022/src/map/helpers/polygon-style.helper.mjs +16 -0
  19. package/dist/esm2022/src/map/map-plate/features/index.mjs +2 -1
  20. package/dist/esm2022/src/map/map-plate/features/polygons/polygons.component.mjs +42 -0
  21. package/dist/esm2022/src/map/map-plate/layers/feature-layer/feature-layer.component.mjs +2 -2
  22. package/dist/esm2022/src/map/map-plate/tooltips/index.mjs +3 -0
  23. package/dist/esm2022/src/map/map-plate/tooltips/tooltip/tooltip.component.mjs +81 -0
  24. package/dist/esm2022/src/map/map-plate/tooltips/tooltip/tooltip.settings.mjs +31 -0
  25. package/dist/esm2022/src/map/map.module.mjs +21 -3
  26. package/dist/esm2022/src/map/messages/commands/close-tooltip.command.mjs +13 -0
  27. package/dist/esm2022/src/map/messages/index.mjs +2 -1
  28. package/dist/esm2022/src/map/models/index.mjs +2 -1
  29. package/dist/esm2022/src/map/models/polygon.model.mjs +30 -0
  30. package/dist/esm2022/src/map/public-api.mjs +2 -1
  31. package/dist/esm2022/src/map/services/map-click.service.mjs +2 -2
  32. package/dist/esm2022/src/map/services/message-registrator.service.mjs +3 -1
  33. package/dist/fesm2022/maps-components-src-map.mjs +216 -6
  34. package/dist/fesm2022/maps-components-src-map.mjs.map +1 -1
  35. package/dist/fesm2022/maps-components.mjs +216 -6
  36. package/dist/fesm2022/maps-components.mjs.map +1 -1
  37. package/dist/map/helpers/index.d.ts +1 -0
  38. package/dist/map/helpers/polygon-style.helper.d.ts +4 -0
  39. package/dist/map/map-plate/features/index.d.ts +1 -0
  40. package/dist/map/map-plate/features/polygons/polygons.component.d.ts +16 -0
  41. package/dist/map/map-plate/layers/feature-layer/feature-layer.component.d.ts +1 -1
  42. package/dist/map/map-plate/tooltips/index.d.ts +2 -0
  43. package/dist/map/map-plate/tooltips/tooltip/tooltip.component.d.ts +26 -0
  44. package/dist/map/map-plate/tooltips/tooltip/tooltip.settings.d.ts +11 -0
  45. package/dist/map/map.module.d.ts +4 -2
  46. package/dist/map/messages/commands/close-tooltip.command.d.ts +7 -0
  47. package/dist/map/messages/index.d.ts +1 -0
  48. package/dist/map/models/index.d.ts +1 -0
  49. package/dist/map/models/polygon.model.d.ts +19 -0
  50. package/dist/map/public-api.d.ts +1 -0
  51. package/dist/src/map/helpers/index.d.ts +1 -0
  52. package/dist/src/map/helpers/polygon-style.helper.d.ts +4 -0
  53. package/dist/src/map/map-plate/features/index.d.ts +1 -0
  54. package/dist/src/map/map-plate/features/polygons/polygons.component.d.ts +16 -0
  55. package/dist/src/map/map-plate/layers/feature-layer/feature-layer.component.d.ts +1 -1
  56. package/dist/src/map/map-plate/tooltips/index.d.ts +2 -0
  57. package/dist/src/map/map-plate/tooltips/tooltip/tooltip.component.d.ts +26 -0
  58. package/dist/src/map/map-plate/tooltips/tooltip/tooltip.settings.d.ts +11 -0
  59. package/dist/src/map/map.module.d.ts +4 -2
  60. package/dist/src/map/messages/commands/close-tooltip.command.d.ts +7 -0
  61. package/dist/src/map/messages/index.d.ts +1 -0
  62. package/dist/src/map/models/index.d.ts +1 -0
  63. package/dist/src/map/models/polygon.model.d.ts +19 -0
  64. package/dist/src/map/public-api.d.ts +1 -0
  65. package/package.json +1 -1
@@ -1,9 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Injectable, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';
2
+ import { Component, Injectable, ChangeDetectionStrategy, Input, ViewChild, NgModule } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { Feature } from 'ol';
6
6
  import { Point } from 'ol/geom';
7
+ import { GeoJSON, WKT } from 'ol/format';
8
+ import { getCenter } from 'ol/extent';
7
9
  import { useGeographic, get } from 'ol/proj';
8
10
  import { Subject } from 'rxjs';
9
11
  import { PostboyService, PostboyAbstractRegistrator } from '@artstesh/postboy';
@@ -14,6 +16,7 @@ import OSM from 'ol/source/OSM';
14
16
  import { filter, first } from 'rxjs/operators';
15
17
  import { XYZ, Vector } from 'ol/source';
16
18
  import { Vector as Vector$1 } from 'ol/layer';
19
+ import Overlay from 'ol/Overlay';
17
20
  import Style from 'ol/style/Style';
18
21
  import { Icon, Circle, Fill, Stroke } from 'ol/style';
19
22
 
@@ -141,6 +144,33 @@ class MarkerModel {
141
144
  }
142
145
  }
143
146
 
147
+ class PolygonModel {
148
+ info;
149
+ id;
150
+ lat;
151
+ lng;
152
+ _feature;
153
+ static fromGeoJson(id, json, info) {
154
+ let feature = new GeoJSON().readFeature(json);
155
+ feature.setId(id);
156
+ return new PolygonModel(feature, id, info);
157
+ }
158
+ static fromWKT(id, wkt, info) {
159
+ let feature = new WKT().readFeature(wkt);
160
+ feature.setId(id);
161
+ return new PolygonModel(feature, id, info);
162
+ }
163
+ constructor(feature, id, info) {
164
+ this.info = info;
165
+ this.id = id == null ? IdGenerator.get() : id;
166
+ this._feature = feature;
167
+ [this.lng, this.lat] = getCenter(this._feature.getGeometry()?.getExtent());
168
+ }
169
+ get feature() {
170
+ return this._feature;
171
+ }
172
+ }
173
+
144
174
  class GenericMessage {
145
175
  }
146
176
  class CallbackMessage extends GenericMessage {
@@ -178,6 +208,18 @@ class MapClickEvent extends GenericMessage {
178
208
  }
179
209
  }
180
210
 
211
+ class CloseTooltipCommand extends GenericMessage {
212
+ tooltipId;
213
+ static ID = '4896d52c-e34f-4994-bcfd-32832d12dbe4';
214
+ constructor(tooltipId) {
215
+ super();
216
+ this.tooltipId = tooltipId;
217
+ }
218
+ get id() {
219
+ return CloseTooltipCommand.ID;
220
+ }
221
+ }
222
+
181
223
  class AddLayerCommand extends GenericMessage {
182
224
  layer;
183
225
  static ID = 'd93e250f-92bc-43ac-9c6a-46c521a1aaa5';
@@ -351,7 +393,7 @@ class MapClickService {
351
393
  const model = new MapClickEvent(ev.coordinate, {});
352
394
  this.map?.forEachFeatureAtPixel(ev.pixel, (f, l) => {
353
395
  this.getFeatureCollectionWithInner([f])
354
- .filter((f) => !!f.getId())
396
+ .filter((f) => f.getId() != null)
355
397
  .forEach((fs) => {
356
398
  let layerName = l.get('name');
357
399
  if (!model.entities[layerName])
@@ -389,6 +431,7 @@ class MessageRegistratorService extends PostboyAbstractRegistrator {
389
431
  this.registerSubject(AddTileCommand.ID);
390
432
  this.registerSubject(RemoveTileCommand.ID);
391
433
  this.registerSubject(MapClickEvent.ID);
434
+ this.registerSubject(CloseTooltipCommand.ID);
392
435
  }
393
436
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MessageRegistratorService, deps: [{ token: MapPostboyService }, { token: MapManagementService }, { token: MapStateService }, { token: MapClickService }], target: i0.ɵɵFactoryTarget.Injectable });
394
437
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MessageRegistratorService });
@@ -732,6 +775,7 @@ class FeatureLayerComponent extends DestructibleComponent {
732
775
  postboy;
733
776
  factory;
734
777
  layer = null;
778
+ _settings = new FeatureLayerSettings();
735
779
  constructor(postboy, factory) {
736
780
  super();
737
781
  this.postboy = postboy;
@@ -743,7 +787,6 @@ class FeatureLayerComponent extends DestructibleComponent {
743
787
  .pipe(filter((m) => !!m), first())
744
788
  .subscribe((m) => this.initLayer());
745
789
  }
746
- _settings = new FeatureLayerSettings();
747
790
  set settings(value) {
748
791
  if (!value || this._settings.isSame(value))
749
792
  return;
@@ -805,6 +848,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
805
848
  type: Input
806
849
  }] } });
807
850
 
851
+ class TooltipSettings {
852
+ id;
853
+ containerClass = 'custom-tooltip-class';
854
+ show = (e) => true;
855
+ constructor(id) {
856
+ this.id = id ?? IdGenerator.get();
857
+ }
858
+ static copy(model) {
859
+ const result = new TooltipSettings(model.id);
860
+ result.show = model.show;
861
+ result.containerClass = model.containerClass;
862
+ return result;
863
+ }
864
+ setShow(show) {
865
+ return TooltipSettings.copy({ ...this, show });
866
+ }
867
+ setClass(containerClass) {
868
+ return TooltipSettings.copy({ ...this, containerClass });
869
+ }
870
+ isSame(model) {
871
+ if (this.show !== model.show)
872
+ return false;
873
+ if (this.containerClass !== model.containerClass)
874
+ return false;
875
+ if (this.id !== model.id)
876
+ return false;
877
+ return true;
878
+ }
879
+ }
880
+
881
+ class TooltipComponent extends DestructibleComponent {
882
+ postboy;
883
+ detector;
884
+ container;
885
+ _settings = new TooltipSettings();
886
+ map;
887
+ overlay;
888
+ show = false;
889
+ set settings(value) {
890
+ if (!value || this._settings.isSame(value))
891
+ return;
892
+ this._settings = value;
893
+ this.detector.detectChanges();
894
+ }
895
+ constructor(postboy, detector) {
896
+ super();
897
+ this.postboy = postboy;
898
+ this.detector = detector;
899
+ }
900
+ ngOnInit() {
901
+ this.subs.push(this.observeMapRender());
902
+ this.subs.push(this.observeMapClick());
903
+ this.subs.push(this.observeClose());
904
+ }
905
+ observeMapClick() {
906
+ return this.postboy.subscribe(MapClickEvent.ID).subscribe((ev) => {
907
+ this._settings.show(ev) ? this.addOverlay(ev.coordinates) : this.removeOverlay();
908
+ });
909
+ }
910
+ observeClose() {
911
+ return this.postboy
912
+ .subscribe(CloseTooltipCommand.ID)
913
+ .pipe(filter((ev) => ev.tooltipId === this._settings.id))
914
+ .subscribe(() => this.removeOverlay());
915
+ }
916
+ observeMapRender() {
917
+ return this.postboy.subscribe(MapRenderedEvent.ID).subscribe((m) => {
918
+ this.map = m.map;
919
+ });
920
+ }
921
+ removeOverlay = () => {
922
+ !!this.overlay && this.map?.removeOverlay(this.overlay);
923
+ this.show = false;
924
+ };
925
+ addOverlay(coordinates) {
926
+ this.removeOverlay();
927
+ this.overlay = new Overlay(this.options(coordinates));
928
+ this.map?.addOverlay(this.overlay);
929
+ this.show = true;
930
+ this.detector.detectChanges();
931
+ }
932
+ options = (coordinates) => {
933
+ return {
934
+ element: this.container?.nativeElement,
935
+ autoPan: false,
936
+ autoPanAnimation: { duration: 0 },
937
+ position: coordinates,
938
+ };
939
+ };
940
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TooltipComponent, deps: [{ token: MapPostboyService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
941
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TooltipComponent, selector: "lib-tooltip", inputs: { settings: "settings" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["tip"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #tip [class]=\"['tooltip-wrapper', _settings.containerClass]\" [hidden]=\"!show\">\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: [".tooltip-wrapper{position:absolute}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
942
+ }
943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TooltipComponent, decorators: [{
944
+ type: Component,
945
+ args: [{ selector: 'lib-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #tip [class]=\"['tooltip-wrapper', _settings.containerClass]\" [hidden]=\"!show\">\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: [".tooltip-wrapper{position:absolute}\n"] }]
946
+ }], ctorParameters: function () { return [{ type: MapPostboyService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { container: [{
947
+ type: ViewChild,
948
+ args: ['tip']
949
+ }], settings: [{
950
+ type: Input
951
+ }] } });
952
+
953
+ class PolygonsComponent extends DestructibleComponent {
954
+ postboy;
955
+ layerName = '';
956
+ constructor(postboy) {
957
+ super();
958
+ this.postboy = postboy;
959
+ }
960
+ _polygons = [];
961
+ set polygons(value) {
962
+ this._polygons = value;
963
+ this.putPolygons();
964
+ }
965
+ ngOnInit() {
966
+ this.postboy
967
+ .subscribe(MapRenderedEvent.ID)
968
+ .pipe(filter((m) => !!m), first())
969
+ .subscribe(() => this.putPolygons());
970
+ }
971
+ putPolygons() {
972
+ if (!this._polygons?.length)
973
+ return;
974
+ this.postboy.fire(new PlaceLayerFeaturesCommand(this.layerName, this._polygons.map((m) => m.feature)));
975
+ }
976
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PolygonsComponent, deps: [{ token: MapPostboyService }], target: i0.ɵɵFactoryTarget.Component });
977
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PolygonsComponent, selector: "lib-polygons", inputs: { layerName: "layerName", polygons: "polygons" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
978
+ }
979
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PolygonsComponent, decorators: [{
980
+ type: Component,
981
+ args: [{ selector: 'lib-polygons', template: '', changeDetection: ChangeDetectionStrategy.OnPush }]
982
+ }], ctorParameters: function () { return [{ type: MapPostboyService }]; }, propDecorators: { layerName: [{
983
+ type: Input
984
+ }], polygons: [{
985
+ type: Input
986
+ }] } });
987
+
808
988
  class MapModule {
809
989
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
810
990
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: MapModule, declarations: [DestructibleComponent,
@@ -812,7 +992,14 @@ class MapModule {
812
992
  TileLayerComponent,
813
993
  OsmTileLayerComponent,
814
994
  FeatureLayerComponent,
815
- MarkersComponent], imports: [CommonModule], exports: [MapPlateComponent, FeatureLayerComponent, MarkersComponent, TileLayerComponent] });
995
+ MarkersComponent,
996
+ TooltipComponent,
997
+ PolygonsComponent], imports: [CommonModule], exports: [MapPlateComponent,
998
+ FeatureLayerComponent,
999
+ MarkersComponent,
1000
+ TileLayerComponent,
1001
+ TooltipComponent,
1002
+ PolygonsComponent] });
816
1003
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapModule, imports: [CommonModule] });
817
1004
  }
818
1005
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapModule, decorators: [{
@@ -826,8 +1013,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
826
1013
  OsmTileLayerComponent,
827
1014
  FeatureLayerComponent,
828
1015
  MarkersComponent,
1016
+ TooltipComponent,
1017
+ PolygonsComponent,
1018
+ ],
1019
+ exports: [
1020
+ MapPlateComponent,
1021
+ FeatureLayerComponent,
1022
+ MarkersComponent,
1023
+ TileLayerComponent,
1024
+ TooltipComponent,
1025
+ PolygonsComponent,
829
1026
  ],
830
- exports: [MapPlateComponent, FeatureLayerComponent, MarkersComponent, TileLayerComponent],
831
1027
  }]
832
1028
  }] });
833
1029
 
@@ -854,6 +1050,20 @@ class MarkerStyleHelper {
854
1050
  }
855
1051
  }
856
1052
 
1053
+ class PolygonStyleHelper {
1054
+ static simple(fill, stroke, strokeWidth = 1) {
1055
+ return new Style({
1056
+ fill: new Fill({
1057
+ color: fill,
1058
+ }),
1059
+ stroke: new Stroke({
1060
+ color: stroke,
1061
+ width: strokeWidth,
1062
+ }),
1063
+ });
1064
+ }
1065
+ }
1066
+
857
1067
  /*
858
1068
  * Public API Surface of maps
859
1069
  */
@@ -862,5 +1072,5 @@ class MarkerStyleHelper {
862
1072
  * Generated bundle index. Do not edit.
863
1073
  */
864
1074
 
865
- export { CallbackMessage, FeatureLayerComponent, FeatureLayerSettings, GenericMessage, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, TileLayerComponent, TileLayerSettings };
1075
+ export { CallbackMessage, CloseTooltipCommand, FeatureLayerComponent, FeatureLayerSettings, GenericMessage, MapClickEvent, MapLyrs, MapLyrsLabel, MapModule, MapPlateComponent, MapPostboyService, MapRenderedEvent, MapSettings, MarkerModel, MarkerStyleHelper, MarkersComponent, MessageRegistratorService, OsmTileLayerComponent, PolygonModel, PolygonStyleHelper, PolygonsComponent, TileLayerComponent, TileLayerSettings, TooltipComponent, TooltipSettings };
866
1076
  //# sourceMappingURL=maps-components-src-map.mjs.map