@coolon/angular-ui-powerups 0.0.117 → 0.0.119

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.
@@ -1085,7 +1085,7 @@ if (false) {
1085
1085
  // Angular doesn't preserve the url when a guard cancels the back button.
1086
1086
  // See https://github.com/angular/angular/issues/13586#issuecomment-432795720
1087
1087
  Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');
1088
- this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.
1088
+ // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.
1089
1089
  this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.
1090
1090
  if (this.interactionService.isActive()) {
1091
1091
  /** @type {?} */
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-state.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/guards/navigation-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouterEvent } from '@angular/router';\nimport { Dsl, GarbageCollector, lang, Logger, Trace } from '@coolon/pectin';\nimport { InteractionContext } from '../../interaction/interaction-context';\nimport { InteractionService } from '../../interaction/services/interaction.service';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceRouter } from '../place-router';\nimport { UrlSnapshot } from '../url-snapshot';\nimport { Visit } from '../visit';\nimport { PlaceComponentDeactivationHandler } from './place-component-deactivation-handler';\n\nexport abstract class NavigationState extends GarbageCollector {\n\n private _visits = new Map<PlaceDefinition, Visit>();\n\n abstract readonly isTransitional: boolean;\n abstract readonly startingUrl: string;\n abstract readonly isPopState: boolean;\n debugPropertyKeys: string[] = [];\n\n constructor(protected readonly context: NavigationState.Context) {\n super();\n }\n\n get name(): string {\n return this.constructor.name;\n }\n\n get idle() {\n return !this.isTransitional;\n }\n\n get placeRouter(): PlaceRouter {\n return this.context.placeRouter;\n }\n\n get interactionService(): InteractionService {\n return this.context.interactionService;\n }\n\n get interactionContext(): InteractionContext {\n return null;\n }\n\n storeVisit(visit: Visit) {\n this._visits.set(visit.placeDefinition, visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition) {\n return this._visits.get(placeDef);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n return this.illegalTransition('onPlaceNavigationStart');\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.illegalTransition(event);\n }\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n return this.illegalTransition('onBackClickedDuringNavigationInteraction');\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return this.illegalTransition('canDeactivatePlace');\n }\n\n getVisits(): Visit[] {\n return Array.from(this._visits.values());\n }\n\n protected illegalTransition<R>(message: string | RouterEvent): R {\n return lang.illegalState(`${message.toString()} not supported by ${this.toString()}`);\n }\n\n protected currentRouterUrl(): string {\n return this.placeRouter.getCurrentRouterUrl();\n }\n\n protected createTransitionStateFor(event: NavigationStart) {\n const popstate = event.navigationTrigger === 'popstate';\n const inInteraction = this.interactionService.isActive();\n if (popstate) {\n return inInteraction ?\n new NavigationState.LeavingInteractionAfterPopStateTransition(this.context, this.currentRouterUrl(), event.url) :\n new NavigationState.PopStateTransition(this.context, this.currentRouterUrl(), event.url);\n } else {\n return inInteraction ?\n new NavigationState.StartingInteractionTransition(this.context, this.currentRouterUrl()) :\n new NavigationState.NavigationTransition(this.context, this.currentRouterUrl());\n }\n }\n\n protected createIdleState() {\n return this.interactionService.isActive() ?\n new NavigationState.IdleDuringInteraction(this.context, this.currentRouterUrl()) :\n new NavigationState.Idle(this.context);\n }\n\n //\n resetBrowserLocation(url) {\n this.placeRouter.resetBrowserLocation(url);\n }\n\n ignore(event: RouterEvent, reason?: string): NavigationState {\n reason = reason ? ` -> ${reason}` : '';\n Logger.get(this).info(`Ignoring router event${reason}: ${event.constructor.name} -> ${event.url} :: ${this.toString()}`);\n return this;\n }\n\n toString(): string {\n return `${this.constructor.name}(${this.debugState()})`;\n }\n\n protected debugState(properties?: string[]) {\n return (properties || this.debugPropertyKeys).map(p => {\n return `${p}: ${this[p]}`;\n }).join(', ');\n }\n}\n\nexport namespace NavigationState {\n\n export class Context {\n constructor(\n readonly placeRouter: PlaceRouter,\n readonly interactionService: InteractionService,\n readonly notifySuccess: (success: NavigationState) => void) {\n }\n }\n\n export class Idle extends NavigationState {\n readonly isTransitional = false;\n readonly startingUrl = null;\n readonly isPopState = false;\n\n constructor(context: Context) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n const navigationTransition = new NavigationTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n\n // calling angularLocation.go() to clear back state can trigger router cycles to the current url if we don't ignore them\n if (event.url === this.currentRouterUrl()) {\n Logger.get(this).info(`navigation started to same url -> ${event.url}`);\n return this;\n }\n\n if (this.placeRouter.hasActiveInteractionIds(event.url)) {\n Logger.get(this).info(`navigation started with interaction outlet -> ${event.url}`);\n return new StartingInteractionTransition(this.context, event.url);\n } else {\n return this.createTransitionStateFor(event);\n }\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.createTransitionStateFor(event);\n }\n }\n\n export abstract class AbstractNavigationTransition extends NavigationState {\n readonly isTransitional = true;\n private componentDeactivationHandlers = new Map<PlaceComponent, PlaceComponentDeactivationHandler>();\n private _interactionContext: InteractionContext;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n this._interactionContext = this.interactionService._createExclusiveModalInteractionContext();\n this.onDispose(() => {\n // the interaction context can be detached during the back button cancellation state transition\n // as the transition is synchronous and activityCancellation isn't. Otherwise dispose will be\n // called before the context has been cancelled. It might be work having the interaction context\n // automatically cancel if the context is disposed so we don't have worry about detaching etc.\n if (this._interactionContext) {\n this._interactionContext.dispose(); // or do something like cancelAndDispose?\n }\n });\n }\n\n get interactionContext(): InteractionContext {\n return this._interactionContext;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n // active sessions can have many cancel start cycles due\n // to place guard redirects\n return this;\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n // navigation succeeded\n this.context.notifySuccess(this);\n return new Idle(this.context);\n }\n\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n Logger.get(this).info(`back button pressed during navigation session interaction promise`);\n // detach the interaction from the session so it doesn't get disposed until the activity has completed.\n const navigationInteraction = this.detachInteractionContext();\n const { when } = Dsl.disposeWith(navigationInteraction);\n // TODO: I need to make the exclusive interaction context disallow nested activities or\n // that would mess things up entirely. Or, can I do a context.abortAll().then(..)\n Logger.get(this).info('cancelling current navigation activity..');\n navigationInteraction.cancelActiveActivity().then(() => {\n navigationInteraction.dispose();\n });\n\n return this.createNavigationInteractionCancelledState(newUrl);\n }\n\n abstract createNavigationInteractionCancelledState(newUrl: string): NavigationState\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // lookup the handler and create it if we've not seen it yet\n let handler = this.componentDeactivationHandlers.get(component);\n if (!handler) {\n const isPrimaryHandler = this.componentDeactivationHandlers.size === 0; // only primary handler cancels the app model interations\n handler = new PlaceComponentDeactivationHandler(component, this, isPrimaryHandler);\n this.componentDeactivationHandlers.set(component, handler);\n }\n return handler.canDeactivate(currentUrl, nextUrl);\n }\n\n protected detachInteractionContext(): InteractionContext {\n const context = this._interactionContext;\n this._interactionContext = null;\n return context;\n }\n }\n\n export class NavigationTransition extends AbstractNavigationTransition {\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this;\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return new LinkTriggeredNavigationInteractionCancelled(\n this.context,\n this.startingUrl,\n newUrl\n );\n }\n }\n\n export class PopStateTransition extends AbstractNavigationTransition {\n readonly isPopState = true;\n debugPropertyKeys = ['startingUrl', 'poppedHistoryUrl'];\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n return new Idle(this.context);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n if (this.currentRouterUrl() !== this.startingUrl) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new PopStateTriggeredNavigationInteractionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl,\n this.poppedHistoryUrl);\n }\n\n }\n\n export abstract class AbstractInteractionTransition extends AbstractNavigationTransition {\n readonly isTransitional = true;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context, startingUrl);\n }\n\n }\n\n\n// The following states exist to handle all events while any kind of navigation is in progress. That way all other states can\n// happily ignore interaction contexts.\n\n /**\n * This is the non transitional (i.e. rest) state that is used whenever an interaction context is active.\n */\n export class IdleDuringInteraction extends NavigationState {\n readonly isTransitional = false;\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n // we're in an interaction and the user clicked back\n const navigationTransition = new StartingInteractionTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return new StartingInteractionTransition(this.context, event.url);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n // we're in an interaction and the user clicked back\n return new LeavingInteractionAfterPopStateTransition(this.context, event.url, event.url);\n }\n }\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n * NOTE: This state is activated when ever an interaction is started. It might be better to split it into\n * different states for different scenarios, e.g. starting model, starting model during route guard etc.\n */\n export class StartingInteractionTransition extends AbstractInteractionTransition {\n readonly isPopState = false;\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.context.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new IdleDuringInteraction(this.context, this.startingUrl);\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new LeavingInteractionTransitionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl);\n }\n }\n\n /**\n * The sequence of router events are:\n * Error -> url = url of navigation link\n * End\n * onPopState url = current intereaction url sans the query params\n * Cancel url == same as above.\n */\n export class LeavingInteractionTransitionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n */\n export class LeavingInteractionAfterPopStateTransition extends AbstractInteractionTransition {\n readonly isPopState = true;\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return this.illegalTransition(\"Leaving interaction after pop-state should't block so should never see a back button click\")\n }\n\n }\n\n // See LeavingInteractionAfterPopStateTransition.createNavigationInteractionCancelledState(...) above.\n //\n // export class LeavingInteractionAfterPopStateCancelled extends NavigationState {\n //\n // readonly isPopState = false;\n // firstCancelHandled = false;\n // popStateHandled = false;\n // popStateEventUrl: string;\n // debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n //\n // constructor(context: Context,\n // readonly startingUrl: string,\n // readonly locationChangeTriggerUrl: string,\n // readonly poppedHistoryUrl: string) {\n // super(context);\n // }\n //\n // get isTransitional() {\n // return true;\n // }\n //\n // onRouterStarted(event: NavigationStart): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterCancelled(event: NavigationCancel): NavigationState {\n //\n // // if (this.firstCancelHandled && this.popStateHandled) {\n // // // Angular doesn't preserve the url when a guard cancels the back button.\n // // // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n // // Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n // // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n // // this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n // // if (this.interactionService.isActive()) {\n // // const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // // this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n // // } else {\n // // this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n // // }\n // // return this.createIdleState();\n // // } else {\n // // this.firstCancelHandled = true;\n // return this.ignore(event);\n // // }\n // }\n //\n //\n // onRouterEnd(event: NavigationEnd): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterError(event: NavigationError): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onPopState(event: NavigationStart): NavigationState {\n // // this.popStateHandled = true;\n // // this.popStateEventUrl = event.url;\n // return this.ignore(event);\n // }\n //\n // async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // return false;\n // }\n // }\n\n\n /**\n * This state handles the scenario where a link navigation triggered an interaction and the user clicked back a to cancel it.\n * The routing event sequence is different depending on the link that was clicked.\n *\n * If the link was the same as the previous history location (i.e. they've gone back via a link rather than clicking back) then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl === cancel.url\n * -> NavigationEnd\n *\n * Otherwise if the link is different from teh history location then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl !== cancel.url\n * -> NavigationEnd\n * -> PopState\n * -> NavigationCancel\n */\n export class LinkTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelEventUrl: string;\n popStateEventUrl: string;\n clickedLinkMatchedBackButtonUrl = false;\n debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'firstCancelEventUrl', 'clickedLinkMatchedBackButtonUrl', 'popStateEventUrl'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly clickedLinkUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // TODO: should really split this into two sub states in the first cancel event.\n if (!this.firstCancelEventUrl) {\n this.firstCancelEventUrl = event.url;\n this.clickedLinkMatchedBackButtonUrl = event.url === this.clickedLinkUrl;\n return this.ignore(event);\n } else {\n // we wait for our popped state to come in.\n if (!this.clickedLinkMatchedBackButtonUrl && this.popStateEventUrl) {\n return this.finaliseRouting();\n }\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.clickedLinkMatchedBackButtonUrl) {\n return this.finaliseRouting();\n } else {\n return this.ignore(event);\n }\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n finaliseRouting() {\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.clickedLinkUrl); // put the back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n /**\n * This state handles the scenario where a pop state triggered and interaction and the user clickeb back a second time to cancel it.\n * The sequence of routing events/state transitions is as follows.\n * -> Idle -> PopStateTransition (poppedHistoryUrl == page to go to, startingUrl = page to stay on )\n * -> confirm dialog shown.\n * -> click back\n * -> PopStateTransition -> CancelledDuringBackButtonNavigationInteraction(trigger url is the page before the popped history url)\n * -> NavigationCancel (for the previous back)\n * -> PopState\n * -> NavigationCancel\n */\n export class PopStateTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string,\n readonly poppedHistoryUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n\n if (this.firstCancelHandled && this.popStateHandled) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n } else {\n this.firstCancelHandled = true;\n return this.ignore(event);\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateHandled = true;\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"navigation-state.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/guards/navigation-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouterEvent } from '@angular/router';\nimport { Dsl, GarbageCollector, lang, Logger, Trace } from '@coolon/pectin';\nimport { InteractionContext } from '../../interaction/interaction-context';\nimport { InteractionService } from '../../interaction/services/interaction.service';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceRouter } from '../place-router';\nimport { UrlSnapshot } from '../url-snapshot';\nimport { Visit } from '../visit';\nimport { PlaceComponentDeactivationHandler } from './place-component-deactivation-handler';\n\nexport abstract class NavigationState extends GarbageCollector {\n\n private _visits = new Map<PlaceDefinition, Visit>();\n\n abstract readonly isTransitional: boolean;\n abstract readonly startingUrl: string;\n abstract readonly isPopState: boolean;\n debugPropertyKeys: string[] = [];\n\n constructor(protected readonly context: NavigationState.Context) {\n super();\n }\n\n get name(): string {\n return this.constructor.name;\n }\n\n get idle() {\n return !this.isTransitional;\n }\n\n get placeRouter(): PlaceRouter {\n return this.context.placeRouter;\n }\n\n get interactionService(): InteractionService {\n return this.context.interactionService;\n }\n\n get interactionContext(): InteractionContext {\n return null;\n }\n\n storeVisit(visit: Visit) {\n this._visits.set(visit.placeDefinition, visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition) {\n return this._visits.get(placeDef);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n return this.illegalTransition('onPlaceNavigationStart');\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.illegalTransition(event);\n }\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n return this.illegalTransition('onBackClickedDuringNavigationInteraction');\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return this.illegalTransition('canDeactivatePlace');\n }\n\n getVisits(): Visit[] {\n return Array.from(this._visits.values());\n }\n\n protected illegalTransition<R>(message: string | RouterEvent): R {\n return lang.illegalState(`${message.toString()} not supported by ${this.toString()}`);\n }\n\n protected currentRouterUrl(): string {\n return this.placeRouter.getCurrentRouterUrl();\n }\n\n protected createTransitionStateFor(event: NavigationStart) {\n const popstate = event.navigationTrigger === 'popstate';\n const inInteraction = this.interactionService.isActive();\n if (popstate) {\n return inInteraction ?\n new NavigationState.LeavingInteractionAfterPopStateTransition(this.context, this.currentRouterUrl(), event.url) :\n new NavigationState.PopStateTransition(this.context, this.currentRouterUrl(), event.url);\n } else {\n return inInteraction ?\n new NavigationState.StartingInteractionTransition(this.context, this.currentRouterUrl()) :\n new NavigationState.NavigationTransition(this.context, this.currentRouterUrl());\n }\n }\n\n protected createIdleState() {\n return this.interactionService.isActive() ?\n new NavigationState.IdleDuringInteraction(this.context, this.currentRouterUrl()) :\n new NavigationState.Idle(this.context);\n }\n\n //\n resetBrowserLocation(url) {\n this.placeRouter.resetBrowserLocation(url);\n }\n\n ignore(event: RouterEvent, reason?: string): NavigationState {\n reason = reason ? ` -> ${reason}` : '';\n Logger.get(this).info(`Ignoring router event${reason}: ${event.constructor.name} -> ${event.url} :: ${this.toString()}`);\n return this;\n }\n\n toString(): string {\n return `${this.constructor.name}(${this.debugState()})`;\n }\n\n protected debugState(properties?: string[]) {\n return (properties || this.debugPropertyKeys).map(p => {\n return `${p}: ${this[p]}`;\n }).join(', ');\n }\n}\n\nexport namespace NavigationState {\n\n export class Context {\n constructor(\n readonly placeRouter: PlaceRouter,\n readonly interactionService: InteractionService,\n readonly notifySuccess: (success: NavigationState) => void) {\n }\n }\n\n export class Idle extends NavigationState {\n readonly isTransitional = false;\n readonly startingUrl = null;\n readonly isPopState = false;\n\n constructor(context: Context) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n const navigationTransition = new NavigationTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n\n // calling angularLocation.go() to clear back state can trigger router cycles to the current url if we don't ignore them\n if (event.url === this.currentRouterUrl()) {\n Logger.get(this).info(`navigation started to same url -> ${event.url}`);\n return this;\n }\n\n if (this.placeRouter.hasActiveInteractionIds(event.url)) {\n Logger.get(this).info(`navigation started with interaction outlet -> ${event.url}`);\n return new StartingInteractionTransition(this.context, event.url);\n } else {\n return this.createTransitionStateFor(event);\n }\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.createTransitionStateFor(event);\n }\n }\n\n export abstract class AbstractNavigationTransition extends NavigationState {\n readonly isTransitional = true;\n private componentDeactivationHandlers = new Map<PlaceComponent, PlaceComponentDeactivationHandler>();\n private _interactionContext: InteractionContext;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n this._interactionContext = this.interactionService._createExclusiveModalInteractionContext();\n this.onDispose(() => {\n // the interaction context can be detached during the back button cancellation state transition\n // as the transition is synchronous and activityCancellation isn't. Otherwise dispose will be\n // called before the context has been cancelled. It might be work having the interaction context\n // automatically cancel if the context is disposed so we don't have worry about detaching etc.\n if (this._interactionContext) {\n this._interactionContext.dispose(); // or do something like cancelAndDispose?\n }\n });\n }\n\n get interactionContext(): InteractionContext {\n return this._interactionContext;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n // active sessions can have many cancel start cycles due\n // to place guard redirects\n return this;\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n // navigation succeeded\n this.context.notifySuccess(this);\n return new Idle(this.context);\n }\n\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n Logger.get(this).info(`back button pressed during navigation session interaction promise`);\n // detach the interaction from the session so it doesn't get disposed until the activity has completed.\n const navigationInteraction = this.detachInteractionContext();\n const { when } = Dsl.disposeWith(navigationInteraction);\n // TODO: I need to make the exclusive interaction context disallow nested activities or\n // that would mess things up entirely. Or, can I do a context.abortAll().then(..)\n Logger.get(this).info('cancelling current navigation activity..');\n navigationInteraction.cancelActiveActivity().then(() => {\n navigationInteraction.dispose();\n });\n\n return this.createNavigationInteractionCancelledState(newUrl);\n }\n\n abstract createNavigationInteractionCancelledState(newUrl: string): NavigationState\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // lookup the handler and create it if we've not seen it yet\n let handler = this.componentDeactivationHandlers.get(component);\n if (!handler) {\n const isPrimaryHandler = this.componentDeactivationHandlers.size === 0; // only primary handler cancels the app model interations\n handler = new PlaceComponentDeactivationHandler(component, this, isPrimaryHandler);\n this.componentDeactivationHandlers.set(component, handler);\n }\n return handler.canDeactivate(currentUrl, nextUrl);\n }\n\n protected detachInteractionContext(): InteractionContext {\n const context = this._interactionContext;\n this._interactionContext = null;\n return context;\n }\n }\n\n export class NavigationTransition extends AbstractNavigationTransition {\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this;\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return new LinkTriggeredNavigationInteractionCancelled(\n this.context,\n this.startingUrl,\n newUrl\n );\n }\n }\n\n export class PopStateTransition extends AbstractNavigationTransition {\n readonly isPopState = true;\n debugPropertyKeys = ['startingUrl', 'poppedHistoryUrl'];\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n return new Idle(this.context);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n if (this.currentRouterUrl() !== this.startingUrl) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new PopStateTriggeredNavigationInteractionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl,\n this.poppedHistoryUrl);\n }\n\n }\n\n export abstract class AbstractInteractionTransition extends AbstractNavigationTransition {\n readonly isTransitional = true;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context, startingUrl);\n }\n\n }\n\n\n// The following states exist to handle all events while any kind of navigation is in progress. That way all other states can\n// happily ignore interaction contexts.\n\n /**\n * This is the non transitional (i.e. rest) state that is used whenever an interaction context is active.\n */\n export class IdleDuringInteraction extends NavigationState {\n readonly isTransitional = false;\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n // we're in an interaction and the user clicked back\n const navigationTransition = new StartingInteractionTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return new StartingInteractionTransition(this.context, event.url);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n // we're in an interaction and the user clicked back\n return new LeavingInteractionAfterPopStateTransition(this.context, event.url, event.url);\n }\n }\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n * NOTE: This state is activated when ever an interaction is started. It might be better to split it into\n * different states for different scenarios, e.g. starting model, starting model during route guard etc.\n */\n export class StartingInteractionTransition extends AbstractInteractionTransition {\n readonly isPopState = false;\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.context.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new IdleDuringInteraction(this.context, this.startingUrl);\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new LeavingInteractionTransitionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl);\n }\n }\n\n /**\n * The sequence of router events are:\n * Error -> url = url of navigation link\n * End\n * onPopState url = current intereaction url sans the query params\n * Cancel url == same as above.\n */\n export class LeavingInteractionTransitionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n */\n export class LeavingInteractionAfterPopStateTransition extends AbstractInteractionTransition {\n readonly isPopState = true;\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return this.illegalTransition(\"Leaving interaction after pop-state should't block so should never see a back button click\")\n }\n\n }\n\n // See LeavingInteractionAfterPopStateTransition.createNavigationInteractionCancelledState(...) above.\n //\n // export class LeavingInteractionAfterPopStateCancelled extends NavigationState {\n //\n // readonly isPopState = false;\n // firstCancelHandled = false;\n // popStateHandled = false;\n // popStateEventUrl: string;\n // debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n //\n // constructor(context: Context,\n // readonly startingUrl: string,\n // readonly locationChangeTriggerUrl: string,\n // readonly poppedHistoryUrl: string) {\n // super(context);\n // }\n //\n // get isTransitional() {\n // return true;\n // }\n //\n // onRouterStarted(event: NavigationStart): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterCancelled(event: NavigationCancel): NavigationState {\n //\n // // if (this.firstCancelHandled && this.popStateHandled) {\n // // // Angular doesn't preserve the url when a guard cancels the back button.\n // // // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n // // Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n // // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n // // this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n // // if (this.interactionService.isActive()) {\n // // const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // // this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n // // } else {\n // // this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n // // }\n // // return this.createIdleState();\n // // } else {\n // // this.firstCancelHandled = true;\n // return this.ignore(event);\n // // }\n // }\n //\n //\n // onRouterEnd(event: NavigationEnd): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterError(event: NavigationError): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onPopState(event: NavigationStart): NavigationState {\n // // this.popStateHandled = true;\n // // this.popStateEventUrl = event.url;\n // return this.ignore(event);\n // }\n //\n // async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // return false;\n // }\n // }\n\n\n /**\n * This state handles the scenario where a link navigation triggered an interaction and the user clicked back a to cancel it.\n * The routing event sequence is different depending on the link that was clicked.\n *\n * If the link was the same as the previous history location (i.e. they've gone back via a link rather than clicking back) then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl === cancel.url\n * -> NavigationEnd\n *\n * Otherwise if the link is different from teh history location then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl !== cancel.url\n * -> NavigationEnd\n * -> PopState\n * -> NavigationCancel\n */\n export class LinkTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelEventUrl: string;\n popStateEventUrl: string;\n clickedLinkMatchedBackButtonUrl = false;\n debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'firstCancelEventUrl', 'clickedLinkMatchedBackButtonUrl', 'popStateEventUrl'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly clickedLinkUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // TODO: should really split this into two sub states in the first cancel event.\n if (!this.firstCancelEventUrl) {\n this.firstCancelEventUrl = event.url;\n this.clickedLinkMatchedBackButtonUrl = event.url === this.clickedLinkUrl;\n return this.ignore(event);\n } else {\n // we wait for our popped state to come in.\n if (!this.clickedLinkMatchedBackButtonUrl && this.popStateEventUrl) {\n return this.finaliseRouting();\n }\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.clickedLinkMatchedBackButtonUrl) {\n return this.finaliseRouting();\n } else {\n return this.ignore(event);\n }\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n finaliseRouting() {\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.clickedLinkUrl); // put the back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n /**\n * This state handles the scenario where a pop state triggered and interaction and the user clickeb back a second time to cancel it.\n * The sequence of routing events/state transitions is as follows.\n * -> Idle -> PopStateTransition (poppedHistoryUrl == page to go to, startingUrl = page to stay on )\n * -> confirm dialog shown.\n * -> click back\n * -> PopStateTransition -> CancelledDuringBackButtonNavigationInteraction(trigger url is the page before the popped history url)\n * -> NavigationCancel (for the previous back)\n * -> PopState\n * -> NavigationCancel\n */\n export class PopStateTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string,\n readonly poppedHistoryUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n\n if (this.firstCancelHandled && this.popStateHandled) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n } else {\n this.firstCancelHandled = true;\n return this.ignore(event);\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateHandled = true;\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"place-component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/place-component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assert,\n Binding,\n Constructable,\n DebugContext,\n IMutableHasValue,\n lang,\n TransactionObserver,\n ValueModel\n} from '@coolon/pectin';\nimport { Klass } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\nimport 'reflect-metadata';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { InteractionContext } from '../interaction/interaction-context';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\n// RAKE: making this Symbol(...) broke things.\nexport const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';\n// this one seems ok.\nexport const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');\n\nexport class PlaceComponent extends DisposableComponent {\n\n private visit: ValueModel<Visit>;\n // private _inDeactivationGuard = new MutableValueModel<boolean>(false);\n\n interactionContext?: InteractionContext;\n\n canDeactivate?(interactionContext: InteractionContext): boolean | Promise<boolean>;\n\n constructor() {\n super();\n }\n\n public initialiseBindings(visit: ValueModel<Visit>) {\n assert.isNil(this.visit);\n this.visit = visit;\n // DebugContext.get(this.visit).tag(`${this.placeDefinition.component.name}.visit`);\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => {\n this.installBinding(parameterDef);\n });\n }\n\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n // this.txo.observe(parameterDef.propertyName, model);\n this.registerDisposable(new Binding(this.visit, model, {\n toRight(visit: Visit): S {\n const value = visit.getParameter(parameterDef.name);\n // console.log('push to component', {name:parameterDef.name, value, visit});\n return value;\n },\n toLeft(value: S, currentVisit?: Visit): Visit {\n console.log('push to route', { name: parameterDef.name, value, currentVisit });\n return currentVisit.replace(parameterDef, value);\n }\n }));\n }\n\n @Memoize()\n get placeDefinition(): PlaceDefinition {\n return PlaceComponent.getDefinition(this.constructor as any as Constructable<PlaceComponent>);\n }\n\n get childPlaces(): Constructable<PlaceComponent>[] {\n return this.placeDefinition.children.map(d => d.component);\n }\n\n onPlaceReady() {\n }\n\n}\n\nexport namespace PlaceComponent {\n\n export function isPlaceComponentConstructor(target: any): target is Constructable<PlaceComponent> {\n return lang.constructorChain(target as Constructable<any>).includes(PlaceComponent);\n }\n\n export function getRouteParameters(klass: Constructable<PlaceComponent>): ParameterDefinition<any>[] {\n return Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);\n }\n\n export function getDefinition(klass: Constructable<PlaceComponent>): PlaceDefinition {\n return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);\n }\n\n export function injectDefinition(klass: Constructable<PlaceComponent>, definition: PlaceDefinition) {\n Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);\n }\n\n}\n"]}
1
+ {"version":3,"file":"place-component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/place-component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assert,\n Binding,\n Constructable,\n // DebugContext,\n IMutableHasValue,\n lang,\n TransactionObserver,\n ValueModel\n} from '@coolon/pectin';\nimport { Klass } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\nimport 'reflect-metadata';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { InteractionContext } from '../interaction/interaction-context';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\n// RAKE: making this Symbol(...) broke things.\nexport const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';\n// this one seems ok.\nexport const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');\n\nexport class PlaceComponent extends DisposableComponent {\n\n private visit: ValueModel<Visit>;\n // private _inDeactivationGuard = new MutableValueModel<boolean>(false);\n\n interactionContext?: InteractionContext;\n\n canDeactivate?(interactionContext: InteractionContext): boolean | Promise<boolean>;\n\n constructor() {\n super();\n }\n\n public initialiseBindings(visit: ValueModel<Visit>) {\n assert.isNil(this.visit);\n this.visit = visit;\n // DebugContext.get(this.visit).tag(`${this.placeDefinition.component.name}.visit`);\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => {\n this.installBinding(parameterDef);\n });\n }\n\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n // this.txo.observe(parameterDef.propertyName, model);\n this.registerDisposable(new Binding(this.visit, model, {\n toRight(visit: Visit): S {\n const value = visit.getParameter(parameterDef.name);\n // console.log('push to component', {name:parameterDef.name, value, visit});\n return value;\n },\n toLeft(value: S, currentVisit?: Visit): Visit {\n console.log('push to route', { name: parameterDef.name, value, currentVisit });\n return currentVisit.replace(parameterDef, value);\n }\n }));\n }\n\n @Memoize()\n get placeDefinition(): PlaceDefinition {\n return PlaceComponent.getDefinition(this.constructor as any as Constructable<PlaceComponent>);\n }\n\n get childPlaces(): Constructable<PlaceComponent>[] {\n return this.placeDefinition.children.map(d => d.component);\n }\n\n onPlaceReady() {\n }\n\n}\n\nexport namespace PlaceComponent {\n\n export function isPlaceComponentConstructor(target: any): target is Constructable<PlaceComponent> {\n return lang.constructorChain(target as Constructable<any>).includes(PlaceComponent);\n }\n\n export function getRouteParameters(klass: Constructable<PlaceComponent>): ParameterDefinition<any>[] {\n return Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);\n }\n\n export function getDefinition(klass: Constructable<PlaceComponent>): PlaceDefinition {\n return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);\n }\n\n export function injectDefinition(klass: Constructable<PlaceComponent>, definition: PlaceDefinition) {\n Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);\n }\n\n}\n"]}
@@ -112,9 +112,9 @@ export function VisitParameterList(options) {
112
112
  (prototype, propertyKey) => {
113
113
  /** @type {?} */
114
114
  const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional("storeInUrl", null));
115
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
116
- UseDelegate()(prototype, propertyKey);
117
115
  // UseDelegate({tag: `@VisitParameterList(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);
116
+ UseDelegate()(prototype, propertyKey);
117
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
118
118
  });
119
119
  }
120
120
  //# sourceMappingURL=parameter-decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameter-decorators.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/route/parameter-decorators.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;;;;;AAInE,oCAMC;;;IALC,4BAAY;;IACZ,kCAAmB;;IACnB,kCAAmB;;IACnB,sCAAiB;;;;;;AAInB,2CAOC;;;IANC,mCAAY;;IACZ,yCAAmB;;IACnB,yCAAmB;;IACnB,6CAAiB;;IACjB,2CAAyB;;;;;;AAI3B,+CAOC;;;IANC,uCAAY;;IACZ,6CAAmB;;IACnB,6CAAmB;;IACnB,iDAAmB;;IACnB,+CAAyB;;;;;;;;AAI3B,MAAM,UAAU,OAAO,CAA4B,IAAkB,EAAE,OAA2B;IAChG;;;;;IAAO,CAAC,SAAiB,EAAE,WAA4B,EAAE,EAAE;;cACnD,KAAK,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;QACpF,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC3E,mHAAmH;QACnH,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC,EAAC;AACJ,CAAC;;;;;;AAED,MAAM,UAAU,cAAc,CAAI,OAAkC;;UAC5D,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;;;;;IAAO,CAAC,SAAiB,EAAE,WAA4B,EAAE,EAAE;;cACnD,KAAK,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3H,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC3E,0HAA0H;QAC1H,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC,EAAC;AACJ,CAAC;;;;;;AAED,MAAM,UAAU,kBAAkB,CAAI,OAAsC;;UACpE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;;;;;IAAO,CAAC,SAAiB,EAAE,WAA4B,EAAE,EAAE;;cACnD,KAAK,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3H,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC3E,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACtC,8HAA8H;IAChI,CAAC,EAAC;AACJ,CAAC","sourcesContent":["import { UseDelegate } from '@coolon/pectin';\nimport { Klass, Opts } from '@coolon/typescript-utilities';\nimport { ROUTE_PARAMETER_LIST_KEY } from '../place-component';\nimport { ParameterDefinition } from './parameter-definition.class';\nimport { Formatter } from './formatter';\n\n\nexport interface RouteIdOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteListParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T[];\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T[]>> | ParameterSanitiser<T[]>;\n}\n\nexport function RouteId<T extends string | number>(type: Formatter<T>, options?: RouteIdOptions<T>): PropertyDecorator {\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.RouteId(propertyKey.toString(), options, type);\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n // UseDelegate({tag: `@RouteId(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameter<T>(options?: RouteParameterOptions<T>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n // UseDelegate({tag: `@VisitParameter(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameterList<E>(options?: RouteListParameterOptions<E>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n // UseDelegate({tag: `@VisitParameterList(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);\n };\n}\n\n// export function RouteParameter<T>(type: ParameterType<T>, options?: RouteParameterOptions<T>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, type);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n//\n// export function RouteParameterList<E>(elementType: ParameterType<E>, options?: RouteListParameterOptions<E>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, elementType);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n"]}
1
+ {"version":3,"file":"parameter-decorators.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/route/parameter-decorators.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;;;;;AAInE,oCAMC;;;IALC,4BAAY;;IACZ,kCAAmB;;IACnB,kCAAmB;;IACnB,sCAAiB;;;;;;AAInB,2CAOC;;;IANC,mCAAY;;IACZ,yCAAmB;;IACnB,yCAAmB;;IACnB,6CAAiB;;IACjB,2CAAyB;;;;;;AAI3B,+CAOC;;;IANC,uCAAY;;IACZ,6CAAmB;;IACnB,6CAAmB;;IACnB,iDAAmB;;IACnB,+CAAyB;;;;;;;;AAI3B,MAAM,UAAU,OAAO,CAA4B,IAAkB,EAAE,OAA2B;IAChG;;;;;IAAO,CAAC,SAAiB,EAAE,WAA4B,EAAE,EAAE;;cACnD,KAAK,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;QACpF,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC3E,mHAAmH;QACnH,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC,EAAC;AACJ,CAAC;;;;;;AAED,MAAM,UAAU,cAAc,CAAI,OAAkC;;UAC5D,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;;;;;IAAO,CAAC,SAAiB,EAAE,WAA4B,EAAE,EAAE;;cACnD,KAAK,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3H,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC3E,0HAA0H;QAC1H,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC,EAAC;AACJ,CAAC;;;;;;AAED,MAAM,UAAU,kBAAkB,CAAI,OAAsC;;UACpE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;;;;;IAAO,CAAC,SAAiB,EAAE,WAA4B,EAAE,EAAE;;cACnD,KAAK,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3H,8HAA8H;QAC9H,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC,EAAC;AACJ,CAAC","sourcesContent":["import { UseDelegate } from '@coolon/pectin';\nimport { Klass, Opts } from '@coolon/typescript-utilities';\nimport { ROUTE_PARAMETER_LIST_KEY } from '../place-component';\nimport { ParameterDefinition } from './parameter-definition.class';\nimport { Formatter } from './formatter';\n\n\nexport interface RouteIdOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteListParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T[];\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T[]>> | ParameterSanitiser<T[]>;\n}\n\nexport function RouteId<T extends string | number>(type: Formatter<T>, options?: RouteIdOptions<T>): PropertyDecorator {\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.RouteId(propertyKey.toString(), options, type);\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n // UseDelegate({tag: `@RouteId(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameter<T>(options?: RouteParameterOptions<T>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n // UseDelegate({tag: `@VisitParameter(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameterList<E>(options?: RouteListParameterOptions<E>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n // UseDelegate({tag: `@VisitParameterList(${prototype.constructor.name}.${propertyKey.toString()})`})(prototype, propertyKey);\n UseDelegate()(prototype, propertyKey);\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n };\n}\n\n// export function RouteParameter<T>(type: ParameterType<T>, options?: RouteParameterOptions<T>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, type);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n//\n// export function RouteParameterList<E>(elementType: ParameterType<E>, options?: RouteListParameterOptions<E>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, elementType);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n"]}
@@ -1502,7 +1502,7 @@ if (false) {
1502
1502
  // Angular doesn't preserve the url when a guard cancels the back button.
1503
1503
  // See https://github.com/angular/angular/issues/13586#issuecomment-432795720
1504
1504
  Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');
1505
- this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.
1505
+ // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.
1506
1506
  this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.
1507
1507
  if (this.interactionService.isActive()) {
1508
1508
  /** @type {?} */
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-state.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/guards/navigation-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouterEvent } from '@angular/router';\nimport { Dsl, GarbageCollector, lang, Logger, Trace } from '@coolon/pectin';\nimport { InteractionContext } from '../../interaction/interaction-context';\nimport { InteractionService } from '../../interaction/services/interaction.service';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceRouter } from '../place-router';\nimport { UrlSnapshot } from '../url-snapshot';\nimport { Visit } from '../visit';\nimport { PlaceComponentDeactivationHandler } from './place-component-deactivation-handler';\n\nexport abstract class NavigationState extends GarbageCollector {\n\n private _visits = new Map<PlaceDefinition, Visit>();\n\n abstract readonly isTransitional: boolean;\n abstract readonly startingUrl: string;\n abstract readonly isPopState: boolean;\n debugPropertyKeys: string[] = [];\n\n constructor(protected readonly context: NavigationState.Context) {\n super();\n }\n\n get name(): string {\n return this.constructor.name;\n }\n\n get idle() {\n return !this.isTransitional;\n }\n\n get placeRouter(): PlaceRouter {\n return this.context.placeRouter;\n }\n\n get interactionService(): InteractionService {\n return this.context.interactionService;\n }\n\n get interactionContext(): InteractionContext {\n return null;\n }\n\n storeVisit(visit: Visit) {\n this._visits.set(visit.placeDefinition, visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition) {\n return this._visits.get(placeDef);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n return this.illegalTransition('onPlaceNavigationStart');\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.illegalTransition(event);\n }\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n return this.illegalTransition('onBackClickedDuringNavigationInteraction');\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return this.illegalTransition('canDeactivatePlace');\n }\n\n getVisits(): Visit[] {\n return Array.from(this._visits.values());\n }\n\n protected illegalTransition<R>(message: string | RouterEvent): R {\n return lang.illegalState(`${message.toString()} not supported by ${this.toString()}`);\n }\n\n protected currentRouterUrl(): string {\n return this.placeRouter.getCurrentRouterUrl();\n }\n\n protected createTransitionStateFor(event: NavigationStart) {\n const popstate = event.navigationTrigger === 'popstate';\n const inInteraction = this.interactionService.isActive();\n if (popstate) {\n return inInteraction ?\n new NavigationState.LeavingInteractionAfterPopStateTransition(this.context, this.currentRouterUrl(), event.url) :\n new NavigationState.PopStateTransition(this.context, this.currentRouterUrl(), event.url);\n } else {\n return inInteraction ?\n new NavigationState.StartingInteractionTransition(this.context, this.currentRouterUrl()) :\n new NavigationState.NavigationTransition(this.context, this.currentRouterUrl());\n }\n }\n\n protected createIdleState() {\n return this.interactionService.isActive() ?\n new NavigationState.IdleDuringInteraction(this.context, this.currentRouterUrl()) :\n new NavigationState.Idle(this.context);\n }\n\n //\n resetBrowserLocation(url) {\n this.placeRouter.resetBrowserLocation(url);\n }\n\n ignore(event: RouterEvent, reason?: string): NavigationState {\n reason = reason ? ` -> ${reason}` : '';\n Logger.get(this).info(`Ignoring router event${reason}: ${event.constructor.name} -> ${event.url} :: ${this.toString()}`);\n return this;\n }\n\n toString(): string {\n return `${this.constructor.name}(${this.debugState()})`;\n }\n\n protected debugState(properties?: string[]) {\n return (properties || this.debugPropertyKeys).map(p => {\n return `${p}: ${this[p]}`;\n }).join(', ');\n }\n}\n\nexport namespace NavigationState {\n\n export class Context {\n constructor(\n readonly placeRouter: PlaceRouter,\n readonly interactionService: InteractionService,\n readonly notifySuccess: (success: NavigationState) => void) {\n }\n }\n\n export class Idle extends NavigationState {\n readonly isTransitional = false;\n readonly startingUrl = null;\n readonly isPopState = false;\n\n constructor(context: Context) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n const navigationTransition = new NavigationTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n\n // calling angularLocation.go() to clear back state can trigger router cycles to the current url if we don't ignore them\n if (event.url === this.currentRouterUrl()) {\n Logger.get(this).info(`navigation started to same url -> ${event.url}`);\n return this;\n }\n\n if (this.placeRouter.hasActiveInteractionIds(event.url)) {\n Logger.get(this).info(`navigation started with interaction outlet -> ${event.url}`);\n return new StartingInteractionTransition(this.context, event.url);\n } else {\n return this.createTransitionStateFor(event);\n }\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.createTransitionStateFor(event);\n }\n }\n\n export abstract class AbstractNavigationTransition extends NavigationState {\n readonly isTransitional = true;\n private componentDeactivationHandlers = new Map<PlaceComponent, PlaceComponentDeactivationHandler>();\n private _interactionContext: InteractionContext;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n this._interactionContext = this.interactionService._createExclusiveModalInteractionContext();\n this.onDispose(() => {\n // the interaction context can be detached during the back button cancellation state transition\n // as the transition is synchronous and activityCancellation isn't. Otherwise dispose will be\n // called before the context has been cancelled. It might be work having the interaction context\n // automatically cancel if the context is disposed so we don't have worry about detaching etc.\n if (this._interactionContext) {\n this._interactionContext.dispose(); // or do something like cancelAndDispose?\n }\n });\n }\n\n get interactionContext(): InteractionContext {\n return this._interactionContext;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n // active sessions can have many cancel start cycles due\n // to place guard redirects\n return this;\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n // navigation succeeded\n this.context.notifySuccess(this);\n return new Idle(this.context);\n }\n\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n Logger.get(this).info(`back button pressed during navigation session interaction promise`);\n // detach the interaction from the session so it doesn't get disposed until the activity has completed.\n const navigationInteraction = this.detachInteractionContext();\n const { when } = Dsl.disposeWith(navigationInteraction);\n // TODO: I need to make the exclusive interaction context disallow nested activities or\n // that would mess things up entirely. Or, can I do a context.abortAll().then(..)\n Logger.get(this).info('cancelling current navigation activity..');\n navigationInteraction.cancelActiveActivity().then(() => {\n navigationInteraction.dispose();\n });\n\n return this.createNavigationInteractionCancelledState(newUrl);\n }\n\n abstract createNavigationInteractionCancelledState(newUrl: string): NavigationState\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // lookup the handler and create it if we've not seen it yet\n let handler = this.componentDeactivationHandlers.get(component);\n if (!handler) {\n const isPrimaryHandler = this.componentDeactivationHandlers.size === 0; // only primary handler cancels the app model interations\n handler = new PlaceComponentDeactivationHandler(component, this, isPrimaryHandler);\n this.componentDeactivationHandlers.set(component, handler);\n }\n return handler.canDeactivate(currentUrl, nextUrl);\n }\n\n protected detachInteractionContext(): InteractionContext {\n const context = this._interactionContext;\n this._interactionContext = null;\n return context;\n }\n }\n\n export class NavigationTransition extends AbstractNavigationTransition {\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this;\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return new LinkTriggeredNavigationInteractionCancelled(\n this.context,\n this.startingUrl,\n newUrl\n );\n }\n }\n\n export class PopStateTransition extends AbstractNavigationTransition {\n readonly isPopState = true;\n debugPropertyKeys = ['startingUrl', 'poppedHistoryUrl'];\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n return new Idle(this.context);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n if (this.currentRouterUrl() !== this.startingUrl) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new PopStateTriggeredNavigationInteractionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl,\n this.poppedHistoryUrl);\n }\n\n }\n\n export abstract class AbstractInteractionTransition extends AbstractNavigationTransition {\n readonly isTransitional = true;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context, startingUrl);\n }\n\n }\n\n\n// The following states exist to handle all events while any kind of navigation is in progress. That way all other states can\n// happily ignore interaction contexts.\n\n /**\n * This is the non transitional (i.e. rest) state that is used whenever an interaction context is active.\n */\n export class IdleDuringInteraction extends NavigationState {\n readonly isTransitional = false;\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n // we're in an interaction and the user clicked back\n const navigationTransition = new StartingInteractionTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return new StartingInteractionTransition(this.context, event.url);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n // we're in an interaction and the user clicked back\n return new LeavingInteractionAfterPopStateTransition(this.context, event.url, event.url);\n }\n }\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n * NOTE: This state is activated when ever an interaction is started. It might be better to split it into\n * different states for different scenarios, e.g. starting model, starting model during route guard etc.\n */\n export class StartingInteractionTransition extends AbstractInteractionTransition {\n readonly isPopState = false;\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.context.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new IdleDuringInteraction(this.context, this.startingUrl);\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new LeavingInteractionTransitionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl);\n }\n }\n\n /**\n * The sequence of router events are:\n * Error -> url = url of navigation link\n * End\n * onPopState url = current intereaction url sans the query params\n * Cancel url == same as above.\n */\n export class LeavingInteractionTransitionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n */\n export class LeavingInteractionAfterPopStateTransition extends AbstractInteractionTransition {\n readonly isPopState = true;\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return this.illegalTransition(\"Leaving interaction after pop-state should't block so should never see a back button click\")\n }\n\n }\n\n // See LeavingInteractionAfterPopStateTransition.createNavigationInteractionCancelledState(...) above.\n //\n // export class LeavingInteractionAfterPopStateCancelled extends NavigationState {\n //\n // readonly isPopState = false;\n // firstCancelHandled = false;\n // popStateHandled = false;\n // popStateEventUrl: string;\n // debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n //\n // constructor(context: Context,\n // readonly startingUrl: string,\n // readonly locationChangeTriggerUrl: string,\n // readonly poppedHistoryUrl: string) {\n // super(context);\n // }\n //\n // get isTransitional() {\n // return true;\n // }\n //\n // onRouterStarted(event: NavigationStart): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterCancelled(event: NavigationCancel): NavigationState {\n //\n // // if (this.firstCancelHandled && this.popStateHandled) {\n // // // Angular doesn't preserve the url when a guard cancels the back button.\n // // // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n // // Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n // // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n // // this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n // // if (this.interactionService.isActive()) {\n // // const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // // this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n // // } else {\n // // this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n // // }\n // // return this.createIdleState();\n // // } else {\n // // this.firstCancelHandled = true;\n // return this.ignore(event);\n // // }\n // }\n //\n //\n // onRouterEnd(event: NavigationEnd): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterError(event: NavigationError): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onPopState(event: NavigationStart): NavigationState {\n // // this.popStateHandled = true;\n // // this.popStateEventUrl = event.url;\n // return this.ignore(event);\n // }\n //\n // async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // return false;\n // }\n // }\n\n\n /**\n * This state handles the scenario where a link navigation triggered an interaction and the user clicked back a to cancel it.\n * The routing event sequence is different depending on the link that was clicked.\n *\n * If the link was the same as the previous history location (i.e. they've gone back via a link rather than clicking back) then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl === cancel.url\n * -> NavigationEnd\n *\n * Otherwise if the link is different from teh history location then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl !== cancel.url\n * -> NavigationEnd\n * -> PopState\n * -> NavigationCancel\n */\n export class LinkTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelEventUrl: string;\n popStateEventUrl: string;\n clickedLinkMatchedBackButtonUrl = false;\n debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'firstCancelEventUrl', 'clickedLinkMatchedBackButtonUrl', 'popStateEventUrl'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly clickedLinkUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // TODO: should really split this into two sub states in the first cancel event.\n if (!this.firstCancelEventUrl) {\n this.firstCancelEventUrl = event.url;\n this.clickedLinkMatchedBackButtonUrl = event.url === this.clickedLinkUrl;\n return this.ignore(event);\n } else {\n // we wait for our popped state to come in.\n if (!this.clickedLinkMatchedBackButtonUrl && this.popStateEventUrl) {\n return this.finaliseRouting();\n }\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.clickedLinkMatchedBackButtonUrl) {\n return this.finaliseRouting();\n } else {\n return this.ignore(event);\n }\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n finaliseRouting() {\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.clickedLinkUrl); // put the back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n /**\n * This state handles the scenario where a pop state triggered and interaction and the user clickeb back a second time to cancel it.\n * The sequence of routing events/state transitions is as follows.\n * -> Idle -> PopStateTransition (poppedHistoryUrl == page to go to, startingUrl = page to stay on )\n * -> confirm dialog shown.\n * -> click back\n * -> PopStateTransition -> CancelledDuringBackButtonNavigationInteraction(trigger url is the page before the popped history url)\n * -> NavigationCancel (for the previous back)\n * -> PopState\n * -> NavigationCancel\n */\n export class PopStateTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string,\n readonly poppedHistoryUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n\n if (this.firstCancelHandled && this.popStateHandled) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n } else {\n this.firstCancelHandled = true;\n return this.ignore(event);\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateHandled = true;\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"navigation-state.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/guards/navigation-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouterEvent } from '@angular/router';\nimport { Dsl, GarbageCollector, lang, Logger, Trace } from '@coolon/pectin';\nimport { InteractionContext } from '../../interaction/interaction-context';\nimport { InteractionService } from '../../interaction/services/interaction.service';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceRouter } from '../place-router';\nimport { UrlSnapshot } from '../url-snapshot';\nimport { Visit } from '../visit';\nimport { PlaceComponentDeactivationHandler } from './place-component-deactivation-handler';\n\nexport abstract class NavigationState extends GarbageCollector {\n\n private _visits = new Map<PlaceDefinition, Visit>();\n\n abstract readonly isTransitional: boolean;\n abstract readonly startingUrl: string;\n abstract readonly isPopState: boolean;\n debugPropertyKeys: string[] = [];\n\n constructor(protected readonly context: NavigationState.Context) {\n super();\n }\n\n get name(): string {\n return this.constructor.name;\n }\n\n get idle() {\n return !this.isTransitional;\n }\n\n get placeRouter(): PlaceRouter {\n return this.context.placeRouter;\n }\n\n get interactionService(): InteractionService {\n return this.context.interactionService;\n }\n\n get interactionContext(): InteractionContext {\n return null;\n }\n\n storeVisit(visit: Visit) {\n this._visits.set(visit.placeDefinition, visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition) {\n return this._visits.get(placeDef);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n return this.illegalTransition('onPlaceNavigationStart');\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.illegalTransition(event);\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.illegalTransition(event);\n }\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n return this.illegalTransition('onBackClickedDuringNavigationInteraction');\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return this.illegalTransition('canDeactivatePlace');\n }\n\n getVisits(): Visit[] {\n return Array.from(this._visits.values());\n }\n\n protected illegalTransition<R>(message: string | RouterEvent): R {\n return lang.illegalState(`${message.toString()} not supported by ${this.toString()}`);\n }\n\n protected currentRouterUrl(): string {\n return this.placeRouter.getCurrentRouterUrl();\n }\n\n protected createTransitionStateFor(event: NavigationStart) {\n const popstate = event.navigationTrigger === 'popstate';\n const inInteraction = this.interactionService.isActive();\n if (popstate) {\n return inInteraction ?\n new NavigationState.LeavingInteractionAfterPopStateTransition(this.context, this.currentRouterUrl(), event.url) :\n new NavigationState.PopStateTransition(this.context, this.currentRouterUrl(), event.url);\n } else {\n return inInteraction ?\n new NavigationState.StartingInteractionTransition(this.context, this.currentRouterUrl()) :\n new NavigationState.NavigationTransition(this.context, this.currentRouterUrl());\n }\n }\n\n protected createIdleState() {\n return this.interactionService.isActive() ?\n new NavigationState.IdleDuringInteraction(this.context, this.currentRouterUrl()) :\n new NavigationState.Idle(this.context);\n }\n\n //\n resetBrowserLocation(url) {\n this.placeRouter.resetBrowserLocation(url);\n }\n\n ignore(event: RouterEvent, reason?: string): NavigationState {\n reason = reason ? ` -> ${reason}` : '';\n Logger.get(this).info(`Ignoring router event${reason}: ${event.constructor.name} -> ${event.url} :: ${this.toString()}`);\n return this;\n }\n\n toString(): string {\n return `${this.constructor.name}(${this.debugState()})`;\n }\n\n protected debugState(properties?: string[]) {\n return (properties || this.debugPropertyKeys).map(p => {\n return `${p}: ${this[p]}`;\n }).join(', ');\n }\n}\n\nexport namespace NavigationState {\n\n export class Context {\n constructor(\n readonly placeRouter: PlaceRouter,\n readonly interactionService: InteractionService,\n readonly notifySuccess: (success: NavigationState) => void) {\n }\n }\n\n export class Idle extends NavigationState {\n readonly isTransitional = false;\n readonly startingUrl = null;\n readonly isPopState = false;\n\n constructor(context: Context) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n const navigationTransition = new NavigationTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n\n // calling angularLocation.go() to clear back state can trigger router cycles to the current url if we don't ignore them\n if (event.url === this.currentRouterUrl()) {\n Logger.get(this).info(`navigation started to same url -> ${event.url}`);\n return this;\n }\n\n if (this.placeRouter.hasActiveInteractionIds(event.url)) {\n Logger.get(this).info(`navigation started with interaction outlet -> ${event.url}`);\n return new StartingInteractionTransition(this.context, event.url);\n } else {\n return this.createTransitionStateFor(event);\n }\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.createTransitionStateFor(event);\n }\n }\n\n export abstract class AbstractNavigationTransition extends NavigationState {\n readonly isTransitional = true;\n private componentDeactivationHandlers = new Map<PlaceComponent, PlaceComponentDeactivationHandler>();\n private _interactionContext: InteractionContext;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n this._interactionContext = this.interactionService._createExclusiveModalInteractionContext();\n this.onDispose(() => {\n // the interaction context can be detached during the back button cancellation state transition\n // as the transition is synchronous and activityCancellation isn't. Otherwise dispose will be\n // called before the context has been cancelled. It might be work having the interaction context\n // automatically cancel if the context is disposed so we don't have worry about detaching etc.\n if (this._interactionContext) {\n this._interactionContext.dispose(); // or do something like cancelAndDispose?\n }\n });\n }\n\n get interactionContext(): InteractionContext {\n return this._interactionContext;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n // active sessions can have many cancel start cycles due\n // to place guard redirects\n return this;\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n // navigation succeeded\n this.context.notifySuccess(this);\n return new Idle(this.context);\n }\n\n\n onBackClickedDuringNavigationInteraction(newUrl: string): NavigationState {\n Logger.get(this).info(`back button pressed during navigation session interaction promise`);\n // detach the interaction from the session so it doesn't get disposed until the activity has completed.\n const navigationInteraction = this.detachInteractionContext();\n const { when } = Dsl.disposeWith(navigationInteraction);\n // TODO: I need to make the exclusive interaction context disallow nested activities or\n // that would mess things up entirely. Or, can I do a context.abortAll().then(..)\n Logger.get(this).info('cancelling current navigation activity..');\n navigationInteraction.cancelActiveActivity().then(() => {\n navigationInteraction.dispose();\n });\n\n return this.createNavigationInteractionCancelledState(newUrl);\n }\n\n abstract createNavigationInteractionCancelledState(newUrl: string): NavigationState\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // lookup the handler and create it if we've not seen it yet\n let handler = this.componentDeactivationHandlers.get(component);\n if (!handler) {\n const isPrimaryHandler = this.componentDeactivationHandlers.size === 0; // only primary handler cancels the app model interations\n handler = new PlaceComponentDeactivationHandler(component, this, isPrimaryHandler);\n this.componentDeactivationHandlers.set(component, handler);\n }\n return handler.canDeactivate(currentUrl, nextUrl);\n }\n\n protected detachInteractionContext(): InteractionContext {\n const context = this._interactionContext;\n this._interactionContext = null;\n return context;\n }\n }\n\n export class NavigationTransition extends AbstractNavigationTransition {\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n return this;\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return new LinkTriggeredNavigationInteractionCancelled(\n this.context,\n this.startingUrl,\n newUrl\n );\n }\n }\n\n export class PopStateTransition extends AbstractNavigationTransition {\n readonly isPopState = true;\n debugPropertyKeys = ['startingUrl', 'poppedHistoryUrl'];\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n return new Idle(this.context);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n if (this.currentRouterUrl() !== this.startingUrl) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the popped history item back in.\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return new Idle(this.context);\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new PopStateTriggeredNavigationInteractionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl,\n this.poppedHistoryUrl);\n }\n\n }\n\n export abstract class AbstractInteractionTransition extends AbstractNavigationTransition {\n readonly isTransitional = true;\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context, startingUrl);\n }\n\n }\n\n\n// The following states exist to handle all events while any kind of navigation is in progress. That way all other states can\n// happily ignore interaction contexts.\n\n /**\n * This is the non transitional (i.e. rest) state that is used whenever an interaction context is active.\n */\n export class IdleDuringInteraction extends NavigationState {\n readonly isTransitional = false;\n readonly isPopState = false;\n debugPropertyKeys = ['startingUrl'];\n\n constructor(context: Context, readonly startingUrl: string) {\n super(context);\n }\n\n onPlaceNavigationStart(visit: Visit, initialUrl: string): NavigationState {\n // we're in an interaction and the user clicked back\n const navigationTransition = new StartingInteractionTransition(this.context, initialUrl);\n navigationTransition.storeVisit(visit);\n return navigationTransition;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return new StartingInteractionTransition(this.context, event.url);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n // we're in an interaction and the user clicked back\n return new LeavingInteractionAfterPopStateTransition(this.context, event.url, event.url);\n }\n }\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n * NOTE: This state is activated when ever an interaction is started. It might be better to split it into\n * different states for different scenarios, e.g. starting model, starting model during route guard etc.\n */\n export class StartingInteractionTransition extends AbstractInteractionTransition {\n readonly isPopState = false;\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.context.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterError(event: NavigationError): NavigationState {\n // navigation was aborted.\n return new IdleDuringInteraction(this.context, this.startingUrl);\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(locationTriggerUrl: string): NavigationState {\n return new LeavingInteractionTransitionCancelled(this.context,\n this.startingUrl,\n locationTriggerUrl);\n }\n }\n\n /**\n * The sequence of router events are:\n * Error -> url = url of navigation link\n * End\n * onPopState url = current intereaction url sans the query params\n * Cancel url == same as above.\n */\n export class LeavingInteractionTransitionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n\n /**\n * This state exists to handle all events while any kind of navigation is in progress. That way all other states can\n * happily ignore interaction contexts.\n */\n export class LeavingInteractionAfterPopStateTransition extends AbstractInteractionTransition {\n readonly isPopState = true;\n\n constructor(context: NavigationState.Context, startingUrl: string, readonly poppedHistoryUrl: string) {\n super(context, startingUrl);\n }\n\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.context.interactionService.isActive()) {\n return new IdleDuringInteraction(this.context, this.startingUrl);\n } else {\n return new Idle(this.context);\n }\n }\n\n createNavigationInteractionCancelledState(newUrl: string): NavigationState {\n return this.illegalTransition(\"Leaving interaction after pop-state should't block so should never see a back button click\")\n }\n\n }\n\n // See LeavingInteractionAfterPopStateTransition.createNavigationInteractionCancelledState(...) above.\n //\n // export class LeavingInteractionAfterPopStateCancelled extends NavigationState {\n //\n // readonly isPopState = false;\n // firstCancelHandled = false;\n // popStateHandled = false;\n // popStateEventUrl: string;\n // debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n //\n // constructor(context: Context,\n // readonly startingUrl: string,\n // readonly locationChangeTriggerUrl: string,\n // readonly poppedHistoryUrl: string) {\n // super(context);\n // }\n //\n // get isTransitional() {\n // return true;\n // }\n //\n // onRouterStarted(event: NavigationStart): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterCancelled(event: NavigationCancel): NavigationState {\n //\n // // if (this.firstCancelHandled && this.popStateHandled) {\n // // // Angular doesn't preserve the url when a guard cancels the back button.\n // // // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n // // Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n // // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n // // this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n // // if (this.interactionService.isActive()) {\n // // const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // // this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n // // } else {\n // // this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n // // }\n // // return this.createIdleState();\n // // } else {\n // // this.firstCancelHandled = true;\n // return this.ignore(event);\n // // }\n // }\n //\n //\n // onRouterEnd(event: NavigationEnd): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onRouterError(event: NavigationError): NavigationState {\n // return this.ignore(event);\n // }\n //\n //\n // onPopState(event: NavigationStart): NavigationState {\n // // this.popStateHandled = true;\n // // this.popStateEventUrl = event.url;\n // return this.ignore(event);\n // }\n //\n // async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n // return false;\n // }\n // }\n\n\n /**\n * This state handles the scenario where a link navigation triggered an interaction and the user clicked back a to cancel it.\n * The routing event sequence is different depending on the link that was clicked.\n *\n * If the link was the same as the previous history location (i.e. they've gone back via a link rather than clicking back) then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl === cancel.url\n * -> NavigationEnd\n *\n * Otherwise if the link is different from teh history location then the sequence is:\n *\n * -> Idle -> NavigationTransition\n * -> confirm dialog shown.\n * -> click back\n * -> NavigationCancel -> clickedLinkUrl !== cancel.url\n * -> NavigationEnd\n * -> PopState\n * -> NavigationCancel\n */\n export class LinkTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelEventUrl: string;\n popStateEventUrl: string;\n clickedLinkMatchedBackButtonUrl = false;\n debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'firstCancelEventUrl', 'clickedLinkMatchedBackButtonUrl', 'popStateEventUrl'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly clickedLinkUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n // TODO: should really split this into two sub states in the first cancel event.\n if (!this.firstCancelEventUrl) {\n this.firstCancelEventUrl = event.url;\n this.clickedLinkMatchedBackButtonUrl = event.url === this.clickedLinkUrl;\n return this.ignore(event);\n } else {\n // we wait for our popped state to come in.\n if (!this.clickedLinkMatchedBackButtonUrl && this.popStateEventUrl) {\n return this.finaliseRouting();\n }\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n if (this.clickedLinkMatchedBackButtonUrl) {\n return this.finaliseRouting();\n } else {\n return this.ignore(event);\n }\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n finaliseRouting() {\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n this.resetBrowserLocation(this.clickedLinkUrl); // put the back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n\n /**\n * This state handles the scenario where a pop state triggered and interaction and the user clickeb back a second time to cancel it.\n * The sequence of routing events/state transitions is as follows.\n * -> Idle -> PopStateTransition (poppedHistoryUrl == page to go to, startingUrl = page to stay on )\n * -> confirm dialog shown.\n * -> click back\n * -> PopStateTransition -> CancelledDuringBackButtonNavigationInteraction(trigger url is the page before the popped history url)\n * -> NavigationCancel (for the previous back)\n * -> PopState\n * -> NavigationCancel\n */\n export class PopStateTriggeredNavigationInteractionCancelled extends NavigationState {\n\n readonly isPopState = false;\n firstCancelHandled = false;\n popStateHandled = false;\n popStateEventUrl: string;\n debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];\n\n constructor(context: Context,\n readonly startingUrl: string,\n readonly locationChangeTriggerUrl: string,\n readonly poppedHistoryUrl: string) {\n super(context);\n }\n\n get isTransitional() {\n return true;\n }\n\n onRouterStarted(event: NavigationStart): NavigationState {\n return this.ignore(event);\n }\n\n onRouterCancelled(event: NavigationCancel): NavigationState {\n\n if (this.firstCancelHandled && this.popStateHandled) {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');\n // this.resetBrowserLocation(this.locationChangeTriggerUrl); // put the second back click one back in.\n this.resetBrowserLocation(this.poppedHistoryUrl); // put the first back click one back in.\n if (this.interactionService.isActive()) {\n const interactionIds = this.interactionService.activeInteractionContextIds.value;\n this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);\n } else {\n this.resetBrowserLocation(this.startingUrl); // and now put our own url back in.\n }\n return this.createIdleState();\n } else {\n this.firstCancelHandled = true;\n return this.ignore(event);\n }\n }\n\n onRouterEnd(event: NavigationEnd): NavigationState {\n return this.ignore(event);\n }\n\n onRouterError(event: NavigationError): NavigationState {\n return this.ignore(event);\n }\n\n onPopState(event: NavigationStart): NavigationState {\n this.popStateHandled = true;\n this.popStateEventUrl = event.url;\n return this.ignore(event);\n }\n\n async canDeactivatePlace(component: PlaceComponent, currentUrl: UrlSnapshot, nextUrl: UrlSnapshot): Promise<boolean | UrlSnapshot> {\n return false;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"place-component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/place-component.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,EACL,MAAM,EACN,OAAO,EAIP,IAAI,EAGL,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAClE,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;;;AAKrD,MAAM,KAAO,wBAAwB,GAAG,0BAA0B;;;AAElE,MAAM,KAAO,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAExE;IAAoC,0CAAmB;IASrD;eACE,iBAAO;IACT,CAAC;;;;;IAEM,2CAAkB;;;;IAAzB,UAA0B,KAAwB;QAAlD,iBAOC;QANC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,oFAAoF;QACpF,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC,OAAO;;;;QAAC,UAAA,YAAY;YAC/D,KAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC,EAAC,CAAC;IACL,CAAC;;;;;;;IAEO,uCAAc;;;;;;IAAtB,UAA6B,YAAuC;;YAC5D,KAAK,GAAG,mBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAuB;QACpE,sDAAsD;QACtD,IAAI,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE;YACrD,OAAO;;;;YAAP,UAAQ,KAAY;;oBACZ,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnD,4EAA4E;gBAC5E,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM;;;;;YAAN,UAAO,KAAQ,EAAE,YAAoB;gBACnC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,OAAA,EAAE,YAAY,cAAA,EAAE,CAAC,CAAC;gBAC/E,OAAO,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAGD,sBAAI,2CAAe;;;;QAAnB;YACE,OAAO,cAAc,CAAC,aAAa,CAAC,mBAAA,mBAAA,IAAI,CAAC,WAAW,EAAO,EAAiC,CAAC,CAAC;QAChG,CAAC;;;OAAA;IAED,sBAAI,uCAAW;;;;QAAf;YACE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG;;;;YAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,EAAX,CAAW,EAAC,CAAC;QAC7D,CAAC;;;OAAA;;;;IAED,qCAAY;;;IAAZ;IACA,CAAC;IATD;QADC,OAAO,EAAE;0CACa,eAAe;;yDAErC;IASH,qBAAC;CAAA,AAlDD,CAAoC,mBAAmB,GAkDtD;SAlDY,cAAc;;;;;;IAEzB,+BAAiC;;IAGjC,4CAAwC;;AA+C1C,WAAiB,cAAc;;;;;IAE7B,SAAgB,2BAA2B,CAAC,MAAW;QACrD,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAA,MAAM,EAAsB,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtF,CAAC;IAFe,0CAA2B,8BAE1C,CAAA;;;;;IAED,SAAgB,kBAAkB,CAAC,KAAoC;QACrE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACpE,CAAC;IAFe,iCAAkB,qBAEjC,CAAA;;;;;IAED,SAAgB,aAAa,CAAC,KAAoC;QAChE,OAAO,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAFe,4BAAa,gBAE5B,CAAA;;;;;;IAED,SAAgB,gBAAgB,CAAC,KAAoC,EAAE,UAA2B;QAChG,OAAO,CAAC,cAAc,CAAC,wBAAwB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAFe,+BAAgB,mBAE/B,CAAA;AAEH,CAAC,EAlBgB,cAAc,KAAd,cAAc,QAkB9B","sourcesContent":["import {\n assert,\n Binding,\n Constructable,\n DebugContext,\n IMutableHasValue,\n lang,\n TransactionObserver,\n ValueModel\n} from '@coolon/pectin';\nimport { Klass } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\nimport 'reflect-metadata';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { InteractionContext } from '../interaction/interaction-context';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\n// RAKE: making this Symbol(...) broke things.\nexport const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';\n// this one seems ok.\nexport const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');\n\nexport class PlaceComponent extends DisposableComponent {\n\n private visit: ValueModel<Visit>;\n // private _inDeactivationGuard = new MutableValueModel<boolean>(false);\n\n interactionContext?: InteractionContext;\n\n canDeactivate?(interactionContext: InteractionContext): boolean | Promise<boolean>;\n\n constructor() {\n super();\n }\n\n public initialiseBindings(visit: ValueModel<Visit>) {\n assert.isNil(this.visit);\n this.visit = visit;\n // DebugContext.get(this.visit).tag(`${this.placeDefinition.component.name}.visit`);\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => {\n this.installBinding(parameterDef);\n });\n }\n\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n // this.txo.observe(parameterDef.propertyName, model);\n this.registerDisposable(new Binding(this.visit, model, {\n toRight(visit: Visit): S {\n const value = visit.getParameter(parameterDef.name);\n // console.log('push to component', {name:parameterDef.name, value, visit});\n return value;\n },\n toLeft(value: S, currentVisit?: Visit): Visit {\n console.log('push to route', { name: parameterDef.name, value, currentVisit });\n return currentVisit.replace(parameterDef, value);\n }\n }));\n }\n\n @Memoize()\n get placeDefinition(): PlaceDefinition {\n return PlaceComponent.getDefinition(this.constructor as any as Constructable<PlaceComponent>);\n }\n\n get childPlaces(): Constructable<PlaceComponent>[] {\n return this.placeDefinition.children.map(d => d.component);\n }\n\n onPlaceReady() {\n }\n\n}\n\nexport namespace PlaceComponent {\n\n export function isPlaceComponentConstructor(target: any): target is Constructable<PlaceComponent> {\n return lang.constructorChain(target as Constructable<any>).includes(PlaceComponent);\n }\n\n export function getRouteParameters(klass: Constructable<PlaceComponent>): ParameterDefinition<any>[] {\n return Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);\n }\n\n export function getDefinition(klass: Constructable<PlaceComponent>): PlaceDefinition {\n return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);\n }\n\n export function injectDefinition(klass: Constructable<PlaceComponent>, definition: PlaceDefinition) {\n Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);\n }\n\n}\n"]}
1
+ {"version":3,"file":"place-component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/place-component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assert,\n Binding,\n Constructable,\n // DebugContext,\n IMutableHasValue,\n lang,\n TransactionObserver,\n ValueModel\n} from '@coolon/pectin';\nimport { Klass } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\nimport 'reflect-metadata';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { InteractionContext } from '../interaction/interaction-context';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\n// RAKE: making this Symbol(...) broke things.\nexport const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';\n// this one seems ok.\nexport const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');\n\nexport class PlaceComponent extends DisposableComponent {\n\n private visit: ValueModel<Visit>;\n // private _inDeactivationGuard = new MutableValueModel<boolean>(false);\n\n interactionContext?: InteractionContext;\n\n canDeactivate?(interactionContext: InteractionContext): boolean | Promise<boolean>;\n\n constructor() {\n super();\n }\n\n public initialiseBindings(visit: ValueModel<Visit>) {\n assert.isNil(this.visit);\n this.visit = visit;\n // DebugContext.get(this.visit).tag(`${this.placeDefinition.component.name}.visit`);\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => {\n this.installBinding(parameterDef);\n });\n }\n\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n // this.txo.observe(parameterDef.propertyName, model);\n this.registerDisposable(new Binding(this.visit, model, {\n toRight(visit: Visit): S {\n const value = visit.getParameter(parameterDef.name);\n // console.log('push to component', {name:parameterDef.name, value, visit});\n return value;\n },\n toLeft(value: S, currentVisit?: Visit): Visit {\n console.log('push to route', { name: parameterDef.name, value, currentVisit });\n return currentVisit.replace(parameterDef, value);\n }\n }));\n }\n\n @Memoize()\n get placeDefinition(): PlaceDefinition {\n return PlaceComponent.getDefinition(this.constructor as any as Constructable<PlaceComponent>);\n }\n\n get childPlaces(): Constructable<PlaceComponent>[] {\n return this.placeDefinition.children.map(d => d.component);\n }\n\n onPlaceReady() {\n }\n\n}\n\nexport namespace PlaceComponent {\n\n export function isPlaceComponentConstructor(target: any): target is Constructable<PlaceComponent> {\n return lang.constructorChain(target as Constructable<any>).includes(PlaceComponent);\n }\n\n export function getRouteParameters(klass: Constructable<PlaceComponent>): ParameterDefinition<any>[] {\n return Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);\n }\n\n export function getDefinition(klass: Constructable<PlaceComponent>): PlaceDefinition {\n return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);\n }\n\n export function injectDefinition(klass: Constructable<PlaceComponent>, definition: PlaceDefinition) {\n Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);\n }\n\n}\n"]}