{"version":3,"file":"ng-maps-direction.mjs","sources":["../../../../libs/direction/src/lib/directives/direction.directive.ts","../../../../libs/direction/src/lib/direction.module.ts","../../../../libs/direction/src/ng-maps-direction.ts"],"sourcesContent":["import {\n  Directive,\n  EventEmitter,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  SkipSelf,\n} from '@angular/core';\n\nimport { MAP_PROVIDER, MapsAPILoader, MapsApiWrapper } from '@ng-maps/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'map-direction',\n})\nexport class NgMapsDirectionDirective implements OnChanges, OnInit, OnDestroy {\n  @Input() public origin?:\n    | string\n    | google.maps.Place\n    | google.maps.LatLng\n    | google.maps.LatLngLiteral;\n\n  @Input() public destination?:\n    | string\n    | google.maps.Place\n    | google.maps.LatLng\n    | google.maps.LatLngLiteral;\n\n  @Input() public travelMode?: google.maps.TravelMode;\n\n  @Input() public transitOptions?: google.maps.TransitOptions;\n\n  @Input() public drivingOptions?: google.maps.DrivingOptions;\n\n  @Input() public waypoints: Array<google.maps.DirectionsWaypoint> = [];\n\n  @Input() public optimizeWaypoints = true;\n\n  @Input() public provideRouteAlternatives = false;\n\n  @Input() public avoidHighways = false;\n\n  @Input() public avoidTolls = false;\n\n  @Input() public avoidFerries = false;\n\n  @Input() public unitSystem?: google.maps.UnitSystem;\n\n  @Input() public renderOptions?: google.maps.DirectionsRendererOptions;\n\n  @Input() public panel?: Element;\n\n  @Input() public markerOptions?: {\n    origin: { infoWindow?: string | Node } & google.maps.MarkerOptions;\n    destination: { infoWindow?: string | Node } & google.maps.MarkerOptions;\n    waypoints?: Array<\n      { infoWindow?: string | Node } & google.maps.MarkerOptions\n    >;\n  };\n\n  @Input() public infoWindow?: google.maps.InfoWindow;\n\n  // Remove or draw direction\n  @Input() public visible = true;\n\n  // Render exist direction\n  @Input() public renderRoute?: google.maps.DirectionsResult | null;\n\n  // Direction change event handler\n  @Output() public directionChange: EventEmitter<google.maps.DirectionsResult> =\n    new EventEmitter<google.maps.DirectionsResult>();\n\n  // Direction response for the new request\n  @Output()\n  public directionResponse: EventEmitter<google.maps.DirectionsResult> =\n    new EventEmitter<google.maps.DirectionsResult>();\n\n  // Send a custom infowindow\n  @Output() public sendInfoWindow: EventEmitter<google.maps.InfoWindow> =\n    new EventEmitter<google.maps.InfoWindow>();\n\n  // Status of Directions Query (google.maps.DirectionsStatus.OVER_QUERY_LIMIT)\n  @Output() public status: EventEmitter<google.maps.DirectionsStatus> =\n    new EventEmitter<google.maps.DirectionsStatus>();\n\n  // Marker drag event handler\n  @Output() public originDrag: EventEmitter<any> = new EventEmitter<any>();\n  @Output() public destinationDrag: EventEmitter<any> = new EventEmitter<any>();\n\n  public directionsService!: google.maps.DirectionsService;\n  public directionsRenderer!: google.maps.DirectionsRenderer;\n\n  // Use for custom marker\n  private originMarker?: any;\n  private destinationMarker?: any;\n  private waypointsMarker: Array<google.maps.Marker> = [];\n\n  // Use for visible flag\n  private isFirstChange = true;\n  private map: google.maps.Map = null;\n\n  constructor(\n    @Inject(MAP_PROVIDER) @SkipSelf() private mapProvider: string,\n    private mapsApiWrapper: MapsApiWrapper,\n    private mapsAPILoader: MapsAPILoader,\n    protected zone: NgZone,\n  ) {}\n\n  public ngOnInit(): void {\n    if (this.mapProvider !== 'GoogleMaps') {\n      throw new Error('<map-direction> only support google-maps provider yet');\n    }\n  }\n\n  public ngOnChanges(obj: SimpleChanges): void {\n    /**\n     * When visible is false then remove the direction layer\n     */\n    if (!this.visible) {\n      try {\n        this.removeMarkers();\n        this.removeDirections();\n      } catch (e) {\n        /* empty */\n      }\n    } else {\n      if (this.isFirstChange) {\n        /**\n         * When visible is false at the first time\n         */\n        if (typeof this.directionsRenderer === 'undefined') {\n          this.directionDraw();\n        }\n        this.isFirstChange = false;\n        return;\n      }\n\n      /**\n       * When renderOptions are not first change then reset the display\n       */\n      if (typeof obj.renderOptions !== 'undefined') {\n        if (obj.renderOptions.firstChange === false) {\n          this.removeMarkers();\n          this.removeDirections();\n        }\n      }\n      this.directionDraw();\n    }\n  }\n\n  public ngOnDestroy() {\n    this.destroyMarkers();\n    this.removeDirections();\n  }\n\n  /**\n   * This event is fired when the user creating or updating this direction\n   */\n  private async directionDraw() {\n    await this.mapsAPILoader.load();\n    this.map = await this.mapsApiWrapper.getNativeMap();\n\n    if (this.map === null) {\n      throw new Error('Missing map reference');\n    }\n\n    if (this.waypoints.length !== this.markerOptions.waypoints.length) {\n      throw new Error(\n        'waypoints.length does not match markerOptions.waypoints.length',\n      );\n    }\n\n    if (typeof this.directionsRenderer === 'undefined') {\n      this.directionsRenderer = new google.maps.DirectionsRenderer(\n        this.renderOptions,\n      );\n      this.directionsRenderer.setMap(this.map);\n      this.directionsRenderer.addListener('directions_changed', () => {\n        this.directionChange.emit(this.directionsRenderer.getDirections());\n      });\n    }\n\n    if (typeof this.directionsService === 'undefined') {\n      this.directionsService = new google.maps.DirectionsService();\n    }\n\n    if (typeof this.panel === 'undefined') {\n      this.directionsRenderer.setPanel(null);\n    } else {\n      this.directionsRenderer.setPanel(this.panel as any);\n    }\n\n    // Render exist direction\n    if (this.renderRoute) {\n      this.directionsRenderer.setDirections(this.renderRoute);\n      this.renderRoute = undefined;\n    } else {\n      // Request new direction\n      this.directionsService.route(\n        {\n          origin: this.origin,\n          destination: this.destination,\n          travelMode: this.travelMode || google.maps.TravelMode.DRIVING,\n          transitOptions: this.transitOptions,\n          drivingOptions: this.drivingOptions,\n          waypoints: this.waypoints,\n          optimizeWaypoints: this.optimizeWaypoints,\n          provideRouteAlternatives: this.provideRouteAlternatives,\n          avoidHighways: this.avoidHighways,\n          avoidTolls: this.avoidTolls,\n          avoidFerries: this.avoidFerries,\n          unitSystem: this.unitSystem,\n        },\n        async (response: any, status) => {\n          this.directionResponse.emit(response);\n\n          // Emit Query Status\n          this.status.emit(status);\n\n          /**\n           * DirectionsStatus\n           * https://developers.google.com/maps/documentation/javascript/directions#DirectionsStatus\n           */\n          switch (status) {\n            case google.maps.DirectionsStatus.OK:\n              this.directionsRenderer.setDirections(response);\n\n              /**\n               * Emit The DirectionsResult Object\n               * https://developers.google.com/maps/documentation/javascript/directions?hl=en#DirectionsResults\n               */\n              // Custom Markers\n              if (typeof this.markerOptions !== 'undefined') {\n                this.destroyMarkers();\n\n                // Set custom markers\n                const _route = response.routes[0];\n\n                try {\n                  if (_route.legs.length === 0) {\n                    console.warn('The route has no legs.');\n                    return;\n                  }\n\n                  // Origin Marker\n                  if (typeof this.markerOptions.origin !== 'undefined') {\n                    this.markerOptions.origin.map = this.map;\n                    this.markerOptions.origin.position =\n                      _route.legs[0].start_location;\n                    this.originMarker = this.setMarker(\n                      this.map,\n                      this.originMarker,\n                      this.markerOptions.origin,\n                      _route.legs[0].start_address,\n                    );\n\n                    if (this.markerOptions.origin.draggable) {\n                      this.originMarker.addListener('dragend', () => {\n                        this.origin = this.originMarker.position;\n                        this.directionDraw();\n                        this.originDrag.emit(this.origin);\n                      });\n                    }\n                  }\n\n                  // Destination Marker\n                  if (typeof this.markerOptions.destination !== 'undefined') {\n                    this.markerOptions.destination.map = this.map;\n                    this.markerOptions.destination.position =\n                      _route.legs[_route.legs.length - 1].end_location;\n                    this.destinationMarker = this.setMarker(\n                      this.map,\n                      this.destinationMarker,\n                      this.markerOptions.destination,\n                      _route.legs[_route.legs.length - 1].end_address,\n                    );\n                    if (this.markerOptions.destination.draggable) {\n                      this.destinationMarker.addListener('dragend', () => {\n                        this.destination = this.destinationMarker.position;\n                        this.directionDraw();\n                        this.destinationDrag.emit(this.destination);\n                      });\n                    }\n                  }\n\n                  // Waypoints Marker\n                  if (\n                    typeof this.markerOptions !== 'undefined' &&\n                    typeof this.markerOptions.waypoints !== 'undefined'\n                  ) {\n                    let addedWaypointIndex = 0;\n                    for (let i = 0; i < _route.legs.length; i++) {\n                      const leg = _route.legs[i];\n                      if (i !== _route.legs.length - 1) {\n                        //Stopover: false - waypoints position equals leg.via_waypoint[j].location\n                        for (let j = 0; j < leg.via_waypoint.length; j++) {\n                          const via_waypoint = leg.via_waypoint[j];\n                          this.markerOptions.waypoints[addedWaypointIndex].map =\n                            this.map;\n                          this.markerOptions.waypoints[\n                            addedWaypointIndex\n                          ].position = via_waypoint.location;\n                          this.waypointsMarker[addedWaypointIndex] =\n                            this.setMarker(\n                              this.map,\n                              this.waypoints[addedWaypointIndex],\n                              this.markerOptions.waypoints[addedWaypointIndex],\n                              null,\n                            );\n                          addedWaypointIndex++;\n                        }\n\n                        //Stopover: true - waypoints position equals leg.end_location\n                        this.markerOptions.waypoints[addedWaypointIndex].map =\n                          this.map;\n                        this.markerOptions.waypoints[\n                          addedWaypointIndex\n                        ].position = leg.end_location;\n                        this.waypointsMarker[addedWaypointIndex] =\n                          this.setMarker(\n                            this.map,\n                            this.waypoints[addedWaypointIndex],\n                            this.markerOptions.waypoints[addedWaypointIndex],\n                            leg.start_address,\n                          );\n                        addedWaypointIndex++;\n                      }\n                    }\n                  }\n                } catch (err) {\n                  console.error('MarkerOptions error.', err);\n                }\n              }\n\n              break;\n\n            case google.maps.DirectionsStatus.OVER_QUERY_LIMIT:\n              console.warn(\n                'The webpage has sent too many requests within the allowed time period.',\n              );\n              break;\n            default:\n              // console.warn(status);\n              break;\n          } // End switch\n        },\n      );\n    }\n  }\n\n  /**\n   * Custom Origin and Destination Icon\n   * @param map map\n   * @param marker marker\n   * @param markerOpts properties\n   * @param content marker's infowindow content\n   * @returns new marker\n   */\n  private setMarker(\n    map: google.maps.Map,\n    marker: google.maps.Marker | google.maps.DirectionsWaypoint,\n    markerOpts: any,\n    content: google.maps.LatLng | string,\n  ): google.maps.Marker {\n    if (typeof this.infoWindow === 'undefined') {\n      this.infoWindow = new google.maps.InfoWindow();\n      this.sendInfoWindow.emit(this.infoWindow);\n    }\n\n    marker = new google.maps.Marker(markerOpts);\n    // https://developers.google.com/maps/documentation/javascript/reference/marker?hl=zh-tw#MarkerOptions.clickable\n    if (marker.getClickable()) {\n      marker.addListener('click', () => {\n        const infoWindowContent: string =\n          typeof markerOpts.infoWindow === 'undefined'\n            ? content\n            : markerOpts.infoWindow;\n        this.infoWindow.setContent(infoWindowContent);\n        this.infoWindow.open(map, marker as google.maps.MVCObject);\n      });\n    }\n    return marker;\n  }\n\n  /**\n   * This event is fired when remove markers\n   */\n  private removeMarkers(): void {\n    if (typeof this.originMarker !== 'undefined') {\n      this.originMarker.setMap(null);\n    }\n    if (typeof this.destinationMarker !== 'undefined') {\n      this.destinationMarker.setMap(null);\n    }\n    this.waypointsMarker.forEach((w: google.maps.Marker) => {\n      if (typeof w !== 'undefined') {\n        w.setMap(null);\n      }\n    });\n  }\n\n  /**\n   * This event is fired when remove directions\n   */\n  private removeDirections(): void {\n    if (this.directionsRenderer !== undefined) {\n      this.directionsRenderer.setPanel(null);\n      this.directionsRenderer.setMap(null);\n      this.directionsRenderer = undefined;\n    }\n  }\n\n  /**\n   * This event is fired when destroy markers\n   */\n  private destroyMarkers(): void {\n    // Remove origin markers\n    try {\n      if (\n        typeof this.markerOptions !== 'undefined' &&\n        typeof this.originMarker !== 'undefined'\n      ) {\n        google.maps.event.clearListeners(this.originMarker, 'click');\n        if (this.markerOptions.origin.draggable) {\n          google.maps.event.clearListeners(this.originMarker, 'dragend');\n        }\n      }\n      if (\n        typeof this.markerOptions !== 'undefined' &&\n        typeof this.destinationMarker !== 'undefined'\n      ) {\n        google.maps.event.clearListeners(this.destinationMarker, 'click');\n        if (this.markerOptions.origin.draggable) {\n          google.maps.event.clearListeners(this.destinationMarker, 'dragend');\n        }\n      }\n      this.waypointsMarker.forEach((w: google.maps.Marker) => {\n        if (typeof w !== 'undefined') {\n          google.maps.event.clearListeners(w, 'click');\n        }\n      });\n      this.removeMarkers();\n    } catch (err) {\n      console.error('Can not reset custom marker.', err);\n    }\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { NgMapsDirectionDirective } from './directives/direction.directive';\n\n@NgModule({\n  declarations: [NgMapsDirectionDirective],\n  exports: [NgMapsDirectionDirective],\n})\nexport class NgMapsDirectionModule {\n  public static forRoot(): ModuleWithProviders<NgMapsDirectionModule> {\n    return {\n      ngModule: NgMapsDirectionModule,\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}