{"version":3,"file":"agm-direction.mjs","sources":["../../../projects/agm-direction/src/lib/agm-direction.directive.ts","../../../projects/agm-direction/src/lib/agm-direction.module.ts","../../../projects/agm-direction/src/public-api.ts","../../../projects/agm-direction/src/agm-direction.ts"],"sourcesContent":["import { Directive, Input, Output, OnChanges, OnInit, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { GoogleMapsAPIWrapper } from '@amin-karimi/agm-core';\r\n\r\n@Directive({\r\n  selector: 'agm-direction',\r\n})\r\nexport class AgmDirection implements OnChanges, OnInit, OnDestroy {\r\n\r\n  @Input() origin: string | google.maps.Place | google.maps.LatLng | google.maps.LatLngLiteral;\r\n\r\n  @Input() destination: string | google.maps.Place | google.maps.LatLng | google.maps.LatLngLiteral;\r\n\r\n  @Input() travelMode?: google.maps.TravelMode;\r\n\r\n  @Input() transitOptions?: google.maps.TransitOptions;\r\n\r\n  @Input() drivingOptions?: google.maps.DrivingOptions;\r\n\r\n  @Input() waypoints: google.maps.DirectionsWaypoint[] = [];\r\n\r\n  @Input() optimizeWaypoints = true;\r\n\r\n  @Input() provideRouteAlternatives = false;\r\n\r\n  @Input() avoidHighways = false;\r\n\r\n  @Input() avoidTolls = false;\r\n\r\n  @Input() avoidFerries = false;\r\n\r\n  @Input() unitSystem?: google.maps.UnitSystem;\r\n\r\n  @Input() renderOptions?: google.maps.DirectionsRendererOptions;\r\n\r\n  @Input() panel?: Element;\r\n\r\n  @Input() markerOptions: {\r\n    origin: google.maps.MarkerOptions,\r\n    destination: google.maps.MarkerOptions,\r\n    waypoints?: google.maps.MarkerOptions,\r\n  };\r\n\r\n  @Input() infoWindow: google.maps.InfoWindow;\r\n\r\n  // Remove or draw direction\r\n  @Input() visible = true;\r\n\r\n  // Render exist direction\r\n  @Input() renderRoute?: google.maps.DirectionsResult | null;\r\n\r\n  // Direction change event handler\r\n  @Output() onChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  // Direction response for the new request\r\n  @Output() onResponse: EventEmitter<google.maps.DirectionsResult> = new EventEmitter<google.maps.DirectionsResult>();\r\n\r\n  // Send a custom infowindow\r\n  @Output() sendInfoWindow: EventEmitter<google.maps.InfoWindow> = new EventEmitter<google.maps.InfoWindow>();\r\n\r\n  // Status of Directions Query (google.maps.DirectionsStatus.OVER_QUERY_LIMIT)\r\n  @Output() status: EventEmitter<google.maps.DirectionsStatus> = new EventEmitter<google.maps.DirectionsStatus>();\r\n\r\n  // Marker drag event handler\r\n  @Output() originDrag: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() destinationDrag: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  public directionsService: google.maps.DirectionsService;\r\n  public directionsRenderer: google.maps.DirectionsRenderer;\r\n\r\n  // Use for custom marker\r\n  private originMarker?: any;\r\n  private destinationMarker?: any;\r\n  private waypointsMarker: Array<google.maps.Marker> = [];\r\n\r\n  // Use for visible flag\r\n  private isFirstChange = true;\r\n\r\n  constructor(\r\n    private gmapsApi: GoogleMapsAPIWrapper,\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    if (this.visible === true) {\r\n      this.directionDraw();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(obj: any) {\r\n    /**\r\n     * When visible is false then remove the direction layer\r\n     */\r\n    if (!this.visible) {\r\n      try {\r\n        this.removeMarkers();\r\n        this.removeDirections();\r\n      } catch (e) { }\r\n    } else {\r\n      if (this.isFirstChange) {\r\n        /**\r\n         * When visible is false at the first time\r\n         */\r\n        if (typeof this.directionsRenderer === 'undefined') {\r\n          this.directionDraw();\r\n        }\r\n        this.isFirstChange = false;\r\n        return;\r\n      }\r\n\r\n      /**\r\n       * When renderOptions are not first change then reset the display\r\n       */\r\n      if (typeof obj.renderOptions !== 'undefined') {\r\n        if (obj.renderOptions.firstChange === false) {\r\n          this.removeMarkers();\r\n          this.removeDirections();\r\n        }\r\n      }\r\n      this.directionDraw();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroyMarkers();\r\n    this.removeDirections();\r\n  }\r\n\r\n  /**\r\n   * This event is fired when the user creating or updating this direction\r\n   */\r\n  private directionDraw() {\r\n    this.gmapsApi.getNativeMap().then(_map => {\r\n\r\n      // const map = _map as unknown | google.maps.Map;\r\n      const map = _map;\r\n\r\n      if (typeof this.directionsRenderer === 'undefined') {\r\n        this.directionsRenderer = new google.maps.DirectionsRenderer(this.renderOptions);\r\n        // @ts-ignore\r\n        this.directionsRenderer.setMap(map);\r\n        this.directionsRenderer.addListener('directions_changed', () => {\r\n          this.onChange.emit(this.directionsRenderer.getDirections());\r\n        });\r\n      }\r\n\r\n      if (typeof this.directionsService === 'undefined') {\r\n        this.directionsService = new google.maps.DirectionsService();\r\n      }\r\n\r\n      if (typeof this.panel === 'undefined') {\r\n        // @ts-ignore\r\n        this.directionsRenderer.setPanel(null);\r\n      } else {\r\n        this.directionsRenderer.setPanel(this.panel as any);\r\n      }\r\n\r\n      // Render exist direction\r\n      if (this.renderRoute) {\r\n        this.directionsRenderer.setDirections(this.renderRoute);\r\n        this.renderRoute = undefined;\r\n      } else {\r\n\r\n        // Request new direction\r\n        this.directionsService.route({\r\n          origin: this.origin,\r\n          destination: this.destination,\r\n          travelMode: this.travelMode || google.maps.TravelMode.DRIVING,\r\n          transitOptions: this.transitOptions,\r\n          drivingOptions: this.drivingOptions,\r\n          waypoints: this.waypoints,\r\n          optimizeWaypoints: this.optimizeWaypoints,\r\n          provideRouteAlternatives: this.provideRouteAlternatives,\r\n          avoidHighways: this.avoidHighways,\r\n          avoidTolls: this.avoidTolls,\r\n          avoidFerries: this.avoidFerries,\r\n          unitSystem: this.unitSystem,\r\n        }, (response: any, status) => {\r\n\r\n          this.onResponse.emit(response);\r\n\r\n          // Emit Query Status\r\n          this.status.emit(status);\r\n\r\n          /**\r\n           * DirectionsStatus\r\n           * https://developers.google.com/maps/documentation/javascript/directions#DirectionsStatus\r\n           */\r\n          switch (status) {\r\n            case google.maps.DirectionsStatus.OK:\r\n\r\n              this.directionsRenderer.setDirections(response);\r\n\r\n              /**\r\n               * Emit The DirectionsResult Object\r\n               * https://developers.google.com/maps/documentation/javascript/directions?hl=en#DirectionsResults\r\n               */\r\n              // Custom Markers\r\n              if (typeof this.markerOptions !== 'undefined') {\r\n\r\n                this.destroyMarkers();\r\n\r\n                // Set custom markers\r\n                const _route = response.routes[0].legs[0];\r\n                try {\r\n                  // Origin Marker\r\n                  if (typeof this.markerOptions.origin !== 'undefined') {\r\n                    this.markerOptions.origin.map = map;\r\n                    this.markerOptions.origin.position = _route.start_location;\r\n                    this.originMarker = this.setMarker(\r\n                      map,\r\n                      this.originMarker,\r\n                      this.markerOptions.origin,\r\n                      _route.start_address,\r\n                    );\r\n\r\n                    if (this.markerOptions.origin.draggable) {\r\n                      this.originMarker.addListener('dragend', () => {\r\n                        this.origin = this.originMarker.position;\r\n                        this.directionDraw();\r\n                        this.originDrag.emit(this.origin);\r\n                      });\r\n                    }\r\n                  }\r\n                  // Destination Marker\r\n                  if (typeof this.markerOptions.destination !== 'undefined') {\r\n                    this.markerOptions.destination.map = map;\r\n                    this.markerOptions.destination.position = _route.end_location;\r\n                    this.destinationMarker = this.setMarker(\r\n                      map,\r\n                      this.destinationMarker,\r\n                      this.markerOptions.destination,\r\n                      _route.end_address,\r\n                    );\r\n                    if (this.markerOptions.destination.draggable) {\r\n                      this.destinationMarker.addListener('dragend', () => {\r\n                        this.destination = this.destinationMarker.position;\r\n                        this.directionDraw();\r\n                        this.destinationDrag.emit(this.destination);\r\n                      });\r\n                    }\r\n                  }\r\n\r\n                  // Waypoints Marker\r\n                  if (typeof this.markerOptions.waypoints !== 'undefined') {\r\n\r\n                    this.waypoints.forEach((waypoint, index) => {\r\n\r\n                      // If waypoints are not array then set all the same\r\n                      if (!Array.isArray(this.markerOptions.waypoints)) {\r\n                        this.markerOptions.waypoints!.map = map;\r\n                        this.markerOptions.waypoints!.position = _route.via_waypoints[index];\r\n                        this.waypointsMarker.push(this.setMarker(\r\n                          map,\r\n                          waypoint,\r\n                          this.markerOptions.waypoints,\r\n                          _route.via_waypoints[index],\r\n                        ));\r\n                      } else {\r\n                        this.markerOptions.waypoints[index].map = map;\r\n                        this.markerOptions.waypoints[index].position = _route.via_waypoints[index];\r\n                        this.waypointsMarker.push(this.setMarker(\r\n                          map,\r\n                          waypoint,\r\n                          this.markerOptions.waypoints[index],\r\n                          _route.via_waypoints[index],\r\n                        ));\r\n                      }\r\n\r\n                    }); // End forEach\r\n\r\n                  }\r\n                } catch (err) {\r\n                  console.error('MarkerOptions error.', err);\r\n                }\r\n              }\r\n\r\n              break;\r\n\r\n            case google.maps.DirectionsStatus.OVER_QUERY_LIMIT:\r\n              console.warn('The webpage has sent too many requests within the allowed time period.');\r\n              break;\r\n            default:\r\n              // console.warn(status);\r\n              break;\r\n          } // End switch\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Custom Origin and Destination Icon\r\n   * @param map map\r\n   * @param marker marker\r\n   * @param markerOpts properties\r\n   * @param content marker's infowindow content\r\n   * @returns new marker\r\n   * @memberof AgmDirection\r\n   */\r\n  private setMarker(\r\n    map: google.maps.Map,\r\n    marker: google.maps.Marker | google.maps.DirectionsWaypoint,\r\n    markerOpts: any,\r\n    content: google.maps.LatLng | string\r\n  ): google.maps.Marker {\r\n    if (typeof this.infoWindow === 'undefined') {\r\n      this.infoWindow = new google.maps.InfoWindow();\r\n      this.sendInfoWindow.emit(this.infoWindow);\r\n    }\r\n\r\n    marker = new google.maps.Marker(markerOpts);\r\n    // https://developers.google.com/maps/documentation/javascript/reference/marker?hl=zh-tw#MarkerOptions.clickable\r\n    if (marker.getClickable()) {\r\n      marker.addListener('click', () => {\r\n        const infowindoContent: string = typeof markerOpts.infoWindow === 'undefined' ? content : markerOpts.infoWindow;\r\n        this.infoWindow.setContent(infowindoContent);\r\n        this.infoWindow.open(map, marker as google.maps.MVCObject);\r\n      });\r\n    }\r\n    return marker;\r\n  }\r\n\r\n  /**\r\n   * This event is fired when remove markers\r\n   */\r\n  private removeMarkers(): void {\r\n    if (typeof this.originMarker !== 'undefined') {\r\n      this.originMarker.setMap(null);\r\n    }\r\n    if (typeof this.destinationMarker !== 'undefined') {\r\n      this.destinationMarker.setMap(null);\r\n    }\r\n    this.waypointsMarker.forEach((w: any) => {\r\n      if (typeof w !== 'undefined') {\r\n        w.setMap(null);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * This event is fired when remove directions\r\n   */\r\n  private removeDirections(): void {\r\n    if (this.directionsRenderer !== undefined) {\r\n      // @ts-ignore\r\n      this.directionsRenderer.setPanel(null);\r\n      this.directionsRenderer.setMap(null);\r\n      // @ts-ignore\r\n      this.directionsRenderer = undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This event is fired when destroy markers\r\n   */\r\n  private destroyMarkers(): void {\r\n    // Remove origin markers\r\n    try {\r\n      if (typeof this.originMarker !== 'undefined') {\r\n        google.maps.event.clearListeners(this.originMarker, 'click');\r\n        if (this.markerOptions.origin.draggable) {\r\n          google.maps.event.clearListeners(this.originMarker, 'dragend');\r\n        }\r\n      }\r\n      if (typeof this.destinationMarker !== 'undefined') {\r\n        google.maps.event.clearListeners(this.destinationMarker, 'click');\r\n        if (this.markerOptions.origin.draggable) {\r\n          google.maps.event.clearListeners(this.destinationMarker, 'dragend');\r\n        }\r\n      }\r\n      this.waypointsMarker.forEach((w: any) => {\r\n        if (typeof w !== 'undefined') {\r\n          google.maps.event.clearListeners(w, 'click');\r\n        }\r\n      });\r\n      this.removeMarkers();\r\n\r\n    } catch (err) {\r\n      console.error('Can not reset custom marker.', err);\r\n    }\r\n  }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { AgmDirection } from './agm-direction.directive';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AgmDirection,\r\n  ],\r\n  exports: [\r\n    AgmDirection,\r\n  ]\r\n})\r\nexport class AgmDirectionModule {\r\n  public static forRoot(): ModuleWithProviders<AgmDirectionModule> {\r\n    return {\r\n      ngModule: AgmDirectionModule,\r\n    };\r\n  }\r\n\r\n  public static forChild(): ModuleWithProviders<AgmDirectionModule> {\r\n    return {\r\n      ngModule: AgmDirectionModule,\r\n    };\r\n  }\r\n}\r\n","/*\n * Public API Surface of agm-direction\n */\nexport { AgmDirection } from './lib/agm-direction.directive';\nexport { AgmDirectionModule } from './lib/agm-direction.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}