@coolon/angular-ui-powerups 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/bundles/coolon-angular-ui-powerups.umd.js +435 -158
  3. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  5. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  6. package/coolon-angular-ui-powerups.d.ts +26 -25
  7. package/coolon-angular-ui-powerups.metadata.json +1 -1
  8. package/esm2015/coolon-angular-ui-powerups.js +24 -23
  9. package/esm2015/coolon-angular-ui-powerups.js.map +1 -1
  10. package/esm2015/coolon-angular-ui-powerups.metadata.json +1 -1
  11. package/esm2015/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  12. package/esm2015/lib/components/components.module.js +9 -2
  13. package/esm2015/lib/components/components.module.js.map +1 -1
  14. package/esm2015/lib/components/components.module.metadata.json +1 -1
  15. package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
  16. package/esm2015/lib/components/forms/abstract-input.component.js +12 -1
  17. package/esm2015/lib/components/forms/abstract-input.component.js.map +1 -1
  18. package/esm2015/lib/components/forms/abstract-input.component.metadata.json +1 -1
  19. package/esm2015/lib/components/index.js +1 -0
  20. package/esm2015/lib/components/index.js.map +1 -1
  21. package/esm2015/lib/components/index.metadata.json +1 -1
  22. package/esm2015/lib/components/switch-case/switch-case.component.js +124 -0
  23. package/esm2015/lib/components/switch-case/switch-case.component.js.map +1 -0
  24. package/esm2015/lib/components/switch-case/switch-case.component.metadata.json +1 -0
  25. package/esm2015/lib/components/switch-case/switch-case.component.ngfactory.js.map +1 -0
  26. package/esm2015/lib/components/switch-case/switch-case.component.scss.shim.ngstyle.js.map +1 -0
  27. package/esm2015/lib/directives/command.directive.js +4 -4
  28. package/esm2015/lib/directives/command.directive.js.map +1 -1
  29. package/esm2015/lib/directives/focus-binding.directive.js +3 -3
  30. package/esm2015/lib/directives/focus-binding.directive.js.map +1 -1
  31. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +1 -1
  32. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.metadata.json +1 -1
  33. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +1 -1
  34. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.metadata.json +1 -1
  35. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  36. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.metadata.json +1 -1
  37. package/esm2015/lib/place/guards/place.guard.js +4 -3
  38. package/esm2015/lib/place/guards/place.guard.js.map +1 -1
  39. package/esm2015/lib/place/place-component.js +2 -2
  40. package/esm2015/lib/place/place-component.js.map +1 -1
  41. package/esm2015/lib/place/place-history.js +116 -13
  42. package/esm2015/lib/place/place-history.js.map +1 -1
  43. package/esm2015/lib/place/place-history.metadata.json +1 -1
  44. package/esm2015/lib/place/place-router.js +13 -6
  45. package/esm2015/lib/place/place-router.js.map +1 -1
  46. package/esm2015/lib/place/place-router.metadata.json +1 -1
  47. package/esm2015/lib/place/route/parameter-definition.class.js +10 -9
  48. package/esm2015/lib/place/route/parameter-definition.class.js.map +1 -1
  49. package/esm2015/lib/place/route/visit-sanitiser.js +14 -6
  50. package/esm2015/lib/place/route/visit-sanitiser.js.map +1 -1
  51. package/esm2015/lib/place/route/visit-sanitiser.metadata.json +1 -1
  52. package/esm5/coolon-angular-ui-powerups.js +24 -23
  53. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  54. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  55. package/esm5/lib/components/components.module.js +9 -2
  56. package/esm5/lib/components/components.module.js.map +1 -1
  57. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  58. package/esm5/lib/components/forms/abstract-input.component.js +12 -1
  59. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  60. package/esm5/lib/components/index.js +1 -0
  61. package/esm5/lib/components/index.js.map +1 -1
  62. package/esm5/lib/components/switch-case/switch-case.component.js +144 -0
  63. package/esm5/lib/components/switch-case/switch-case.component.js.map +1 -0
  64. package/esm5/lib/components/switch-case/switch-case.component.ngfactory.js.map +1 -0
  65. package/esm5/lib/components/switch-case/switch-case.component.scss.shim.ngstyle.js.map +1 -0
  66. package/esm5/lib/directives/command.directive.js +4 -4
  67. package/esm5/lib/directives/command.directive.js.map +1 -1
  68. package/esm5/lib/directives/focus-binding.directive.js +3 -3
  69. package/esm5/lib/directives/focus-binding.directive.js.map +1 -1
  70. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +1 -1
  71. package/esm5/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +1 -1
  72. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  73. package/esm5/lib/place/guards/place.guard.js +5 -4
  74. package/esm5/lib/place/guards/place.guard.js.map +1 -1
  75. package/esm5/lib/place/place-component.js +2 -2
  76. package/esm5/lib/place/place-component.js.map +1 -1
  77. package/esm5/lib/place/place-history.js +117 -11
  78. package/esm5/lib/place/place-history.js.map +1 -1
  79. package/esm5/lib/place/place-router.js +13 -7
  80. package/esm5/lib/place/place-router.js.map +1 -1
  81. package/esm5/lib/place/route/parameter-definition.class.js +11 -11
  82. package/esm5/lib/place/route/parameter-definition.class.js.map +1 -1
  83. package/esm5/lib/place/route/visit-sanitiser.js +14 -6
  84. package/esm5/lib/place/route/visit-sanitiser.js.map +1 -1
  85. package/fesm2015/coolon-angular-ui-powerups.js +365 -115
  86. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  87. package/fesm5/coolon-angular-ui-powerups.js +393 -123
  88. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  89. package/lib/components/forms/abstract-input.component.d.ts +11 -1
  90. package/lib/components/index.d.ts +1 -0
  91. package/lib/components/switch-case/switch-case.component.d.ts +32 -0
  92. package/lib/place/place-history.d.ts +17 -3
  93. package/lib/place/route/parameter-definition.class.d.ts +1 -1
  94. package/lib/place/route/visit-sanitiser.d.ts +3 -1
  95. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  import { __extends, __decorate, __metadata, __param, __awaiter, __generator, __spread, __assign } from 'tslib';
2
2
  import { DOCUMENT, CommonModule, Location } from '@angular/common';
3
- import { ElementRef, Inject, Input, HostListener, Directive, NgZone, NgModule, EventEmitter, Output, Component, ContentChild, TemplateRef, InjectionToken, Injector, ComponentFactoryResolver, ViewContainerRef, ViewChild, ViewChildren, QueryList, ɵɵdefineInjectable, ɵɵinject, Injectable, Optional, SkipSelf, HostBinding } from '@angular/core';
3
+ import { ElementRef, Inject, Input, HostListener, Directive, NgZone, NgModule, EventEmitter, Output, Component, ContentChild, TemplateRef, ChangeDetectorRef, ContentChildren, QueryList, InjectionToken, Injector, ComponentFactoryResolver, ViewContainerRef, ViewChild, ViewChildren, ɵɵdefineInjectable, ɵɵinject, Injectable, Optional, SkipSelf, HostBinding } from '@angular/core';
4
4
  import { FormsModule } from '@angular/forms';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
  import { MatInputModule } from '@angular/material/input';
@@ -60,7 +60,7 @@ var CommandDirective = /** @class */ (function (_super) {
60
60
  assert.notNil(this.pectinCommand);
61
61
  if (this.pectinCommand instanceof UnaryCommand) {
62
62
  if (!this._commandParameterProvided) {
63
- lang.illegalState('UnaryCommands required the command parameter to be specified.');
63
+ lang.illegalState('UnaryCommands require the command parameter to be specified.');
64
64
  }
65
65
  }
66
66
  else {
@@ -73,8 +73,8 @@ var CommandDirective = /** @class */ (function (_super) {
73
73
  var _this = this;
74
74
  // for some reason mat-buttons kills the disabled host binding. It works on a regular button but for now
75
75
  // we need to do this.
76
- var chain = Dsl.disposeWith(this).chain;
77
- chain(this._commandEnabled).subscribe(function (enabled) {
76
+ var when = Dsl.disposeWith(this).when;
77
+ when.valueOf(this._commandEnabled).changes(function (enabled) {
78
78
  if (enabled) {
79
79
  _this.elementRef.nativeElement.removeAttribute('disabled');
80
80
  if (_this.elementRef.nativeElement.tagName === 'A') {
@@ -87,7 +87,7 @@ var CommandDirective = /** @class */ (function (_super) {
87
87
  _this.elementRef.nativeElement.removeAttribute('href');
88
88
  }
89
89
  }
90
- });
90
+ }, { initialValue: 'triggerChange' });
91
91
  };
92
92
  CommandDirective.prototype.ngOnDestroy = function () {
93
93
  this.dispose();
@@ -177,12 +177,12 @@ var FocusBindingDirective = /** @class */ (function (_super) {
177
177
  var _this = this;
178
178
  // TODO: Make this also track the current enabled/disabled state.
179
179
  if (this.hasBinding()) {
180
- var chain = Dsl.disposeWith(this).chain;
181
- chain(this.pectinFocusBinding.focusContext.focused).subscribe(function (focused) {
180
+ var when = Dsl.disposeWith(this).when;
181
+ when.valueOf(this.pectinFocusBinding.focusContext.focused).changes(function (focused) {
182
182
  if (focused && !_this.alreadyHasFocus()) {
183
183
  _this.tryAndFocus();
184
184
  }
185
- });
185
+ }, { initialValue: 'triggerChange' });
186
186
  }
187
187
  else {
188
188
  Logger.get(this).warn('pectinFocusBinding was nil');
@@ -310,7 +310,18 @@ var AbstractInputComponent = /** @class */ (function (_super) {
310
310
  __extends(AbstractInputComponent, _super);
311
311
  function AbstractInputComponent() {
312
312
  var _this = _super.call(this) || this;
313
- _this.delegatingFormValueModel = new DelegatingFormValueModel();
313
+ /**
314
+ * A backing model for all our @Input() valueModel properties which should be defined as follows.
315
+ *
316
+ * @Input() @UseDelegate({useExisting: "delegatingFormValueModel"})
317
+ * valueModel: FormValueModel<string> | MutableValueModel<string>;
318
+ *
319
+ * This approach allows the input to accept plain or form models but all backed by a form
320
+ * friendly delegate. We have to use an existing delegate for union types as pectin just
321
+ * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
322
+ */
323
+ // We have to register it as a disposable so it ditches any listeners when we're disposed.
324
+ _this.delegatingFormValueModel = _this.registerDisposable(new DelegatingFormValueModel());
314
325
  // TODO: fix this.
315
326
  // tslint:disable-next-line:no-output-native
316
327
  _this.focus = new EventEmitter();
@@ -620,6 +631,142 @@ var ScrollContainerComponent = /** @class */ (function () {
620
631
  return ScrollContainerComponent;
621
632
  }());
622
633
 
634
+ var SwitchCaseOption = /** @class */ (function () {
635
+ function SwitchCaseOption(templateRef) {
636
+ this.templateRef = templateRef;
637
+ }
638
+ Object.defineProperty(SwitchCaseOption.prototype, "name", {
639
+ get: function () {
640
+ return this.constructor.name;
641
+ },
642
+ enumerable: true,
643
+ configurable: true
644
+ });
645
+ return SwitchCaseOption;
646
+ }());
647
+ var SwitchCaseWhenDirective = /** @class */ (function (_super) {
648
+ __extends(SwitchCaseWhenDirective, _super);
649
+ function SwitchCaseWhenDirective(templateRef) {
650
+ var _this = _super.call(this, templateRef) || this;
651
+ _this.isDefault = false;
652
+ return _this;
653
+ }
654
+ SwitchCaseWhenDirective_1 = SwitchCaseWhenDirective;
655
+ SwitchCaseWhenDirective.prototype.matches = function (value) {
656
+ return this.aupSwitchCaseWhen === value;
657
+ };
658
+ var SwitchCaseWhenDirective_1;
659
+ SwitchCaseWhenDirective.ctorParameters = function () { return [
660
+ { type: TemplateRef }
661
+ ]; };
662
+ __decorate([
663
+ Input(),
664
+ __metadata("design:type", Object)
665
+ ], SwitchCaseWhenDirective.prototype, "aupSwitchCaseWhen", void 0);
666
+ SwitchCaseWhenDirective = SwitchCaseWhenDirective_1 = __decorate([
667
+ Directive({
668
+ selector: '[aupSwitchCaseWhen]',
669
+ providers: [{ provide: SwitchCaseOption, useExisting: SwitchCaseWhenDirective_1 }]
670
+ }),
671
+ __metadata("design:paramtypes", [TemplateRef])
672
+ ], SwitchCaseWhenDirective);
673
+ return SwitchCaseWhenDirective;
674
+ }(SwitchCaseOption));
675
+ var SwitchCaseDefaultDirective = /** @class */ (function (_super) {
676
+ __extends(SwitchCaseDefaultDirective, _super);
677
+ function SwitchCaseDefaultDirective(templateRef) {
678
+ var _this = _super.call(this, templateRef) || this;
679
+ _this.isDefault = true;
680
+ return _this;
681
+ }
682
+ SwitchCaseDefaultDirective_1 = SwitchCaseDefaultDirective;
683
+ SwitchCaseDefaultDirective.prototype.matches = function (value) {
684
+ return false;
685
+ };
686
+ var SwitchCaseDefaultDirective_1;
687
+ SwitchCaseDefaultDirective.ctorParameters = function () { return [
688
+ { type: TemplateRef }
689
+ ]; };
690
+ SwitchCaseDefaultDirective = SwitchCaseDefaultDirective_1 = __decorate([
691
+ Directive({
692
+ selector: '[aupSwitchCaseDefault]',
693
+ providers: [{ provide: SwitchCaseOption, useExisting: SwitchCaseDefaultDirective_1 }]
694
+ }),
695
+ __metadata("design:paramtypes", [TemplateRef])
696
+ ], SwitchCaseDefaultDirective);
697
+ return SwitchCaseDefaultDirective;
698
+ }(SwitchCaseOption));
699
+ var SwitchCaseComponent = /** @class */ (function (_super) {
700
+ __extends(SwitchCaseComponent, _super);
701
+ function SwitchCaseComponent(cdr) {
702
+ var _this = _super.call(this) || this;
703
+ _this.cdr = cdr;
704
+ _this.selectedIndex = 0;
705
+ return _this;
706
+ }
707
+ SwitchCaseComponent.prototype.ngOnInit = function () {
708
+ };
709
+ SwitchCaseComponent.prototype.ngAfterContentInit = function () {
710
+ var _this = this;
711
+ var subscription = this.switchCaseOptions.changes.subscribe(function (change) { return _this.updateSelection(); });
712
+ this.onDispose(function () { return subscription.unsubscribe(); });
713
+ var _a = Dsl.disposeWith(this), chain = _a.chain, when = _a.when;
714
+ when.valueOf(this.switchModel).changes(function () { return _this.updateSelection(); }, { initialValue: 'triggerChange' });
715
+ this.cdr.detectChanges();
716
+ };
717
+ SwitchCaseComponent.prototype.updateSelection = function () {
718
+ var _this = this;
719
+ var matchingIndicies = [];
720
+ this.switchCaseOptions.forEach(function (option, index) {
721
+ if (option.matches(_this.switchModel.value)) {
722
+ matchingIndicies.push(index);
723
+ }
724
+ });
725
+ if (matchingIndicies.length > 1) {
726
+ console.warn("found " + matchingIndicies.length + " matching case values, displaying the first.");
727
+ }
728
+ if (matchingIndicies.length === 0) {
729
+ this.switchCaseOptions.forEach(function (option, index) {
730
+ matchingIndicies.push(index);
731
+ });
732
+ if (matchingIndicies.length > 1) {
733
+ console.warn("found " + matchingIndicies.length + " default case values, displaying the first.");
734
+ }
735
+ }
736
+ if (matchingIndicies.length > 0) {
737
+ this.selectedIndex = matchingIndicies[0];
738
+ }
739
+ else {
740
+ console.warn("found no matching or default case values.");
741
+ this.selectedIndex = -1;
742
+ }
743
+ };
744
+ SwitchCaseComponent.ctorParameters = function () { return [
745
+ { type: ChangeDetectorRef }
746
+ ]; };
747
+ __decorate([
748
+ Input(), UseDelegate(),
749
+ __metadata("design:type", ValueModel)
750
+ ], SwitchCaseComponent.prototype, "switchModel", void 0);
751
+ __decorate([
752
+ Input(), StoreInValueModel('switchModel'),
753
+ __metadata("design:type", Object)
754
+ ], SwitchCaseComponent.prototype, "switch", void 0);
755
+ __decorate([
756
+ ContentChildren(SwitchCaseOption),
757
+ __metadata("design:type", QueryList)
758
+ ], SwitchCaseComponent.prototype, "switchCaseOptions", void 0);
759
+ SwitchCaseComponent = __decorate([
760
+ Component({
761
+ selector: 'aup-switch-case',
762
+ template: "<mat-tab-group class=\"content-wrapper\" no-tab-header full-height-tabs [selectedIndex]=\"selectedIndex\">\n <mat-tab *ngFor=\"let option of switchCaseOptions\">\n <ng-template [ngTemplateOutlet]=\"option.templateRef\"></ng-template>\n </mat-tab>\n</mat-tab-group>\n\n\n",
763
+ styles: [":host{display:flex;flex-direction:column;align-items:stretch}mat-tab-group{flex:1}"]
764
+ }),
765
+ __metadata("design:paramtypes", [ChangeDetectorRef])
766
+ ], SwitchCaseComponent);
767
+ return SwitchCaseComponent;
768
+ }(DisposableComponent));
769
+
623
770
  var ComponentsModule = /** @class */ (function () {
624
771
  function ComponentsModule() {
625
772
  }
@@ -632,7 +779,10 @@ var ComponentsModule = /** @class */ (function () {
632
779
  SelectInputComponent,
633
780
  ScrollContainerComponent,
634
781
  NoopComponent,
635
- AbstractInputComponent
782
+ AbstractInputComponent,
783
+ SwitchCaseComponent,
784
+ SwitchCaseWhenDirective,
785
+ SwitchCaseDefaultDirective
636
786
  ],
637
787
  imports: [
638
788
  CommonModule,
@@ -652,7 +802,10 @@ var ComponentsModule = /** @class */ (function () {
652
802
  PasswordInputComponent,
653
803
  SelectInputComponent,
654
804
  ScrollContainerComponent,
655
- NoopComponent
805
+ NoopComponent,
806
+ SwitchCaseComponent,
807
+ SwitchCaseWhenDirective,
808
+ SwitchCaseDefaultDirective
656
809
  ]
657
810
  })
658
811
  ], ComponentsModule);
@@ -724,7 +877,7 @@ var AlertDialogComponent = /** @class */ (function (_super) {
724
877
  Component({
725
878
  selector: 'aup-alert-dialog',
726
879
  template: "<h3 matDialogTitle *ngIf=\"alert.title\">{{alert.title()}}</h3>\n<div matDialogContent>\n <p *ngFor=\"let line of alert.content()\">{{line}}</p>\n</div>\n<div matDialogActions>\n <button mat-raised-button color=\"primary\" (click)=\"done()\" data-cy=\"close-button\">{{alert.ok()}}</button>\n</div>\n",
727
- styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{justify-content:flex-end}"]
880
+ styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-end}"]
728
881
  }),
729
882
  __param(0, Inject(ACTIVITY_DATA)),
730
883
  __metadata("design:paramtypes", [Object])
@@ -765,7 +918,7 @@ var ConfirmThenDialogComponent = /** @class */ (function (_super) {
765
918
  Component({
766
919
  selector: 'aup-confirmation-dialog',
767
920
  template: "<h3 matDialogTitle *ngIf=\"confirm.title\">{{confirm.title()}}</h3>\n<div matDialogContent>\n <p *ngFor=\"let line of confirm.content()\">{{line}}</p>\n</div>\n<div matDialogActions>\n <button mat-button (click)=\"cancel()\" data-cy=\"cancel-button\">{{confirm.cancel()}}</button>\n <button mat-raised-button [color]=\"isDestructive() ? 'warn' : 'primary'\"\n (click)=\"onConfirm()\" data-cy=\"confirm-button\">{{confirm.ok()}}</button>\n</div>\n\n",
768
- styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{justify-content:flex-end}"]
921
+ styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-end}"]
769
922
  }),
770
923
  __param(0, Inject(ACTIVITY_DATA)),
771
924
  __metadata("design:paramtypes", [Object])
@@ -793,7 +946,7 @@ var ConfirmationDialogComponent = /** @class */ (function (_super) {
793
946
  Component({
794
947
  selector: 'aup-confirmation-dialog',
795
948
  template: "<h3 matDialogTitle *ngIf=\"confirm.title\">{{confirm.title()}}</h3>\n<div matDialogContent>\n <p *ngFor=\"let line of confirm.content()\">{{line}}</p>\n</div>\n<div matDialogActions>\n <button mat-button (click)=\"cancel()\" data-cy=\"cancel-button\">{{confirm.cancel()}}</button>\n <button mat-raised-button [color]=\"isDestructive() ? 'warn' : 'primary'\"\n (click)=\"done()\" data-cy=\"confirm-button\">{{confirm.ok()}}</button>\n</div>\n\n",
796
- styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{justify-content:flex-end}"]
949
+ styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-end}"]
797
950
  }),
798
951
  __param(0, Inject(ACTIVITY_DATA)),
799
952
  __metadata("design:paramtypes", [Object])
@@ -1484,22 +1637,22 @@ var ParameterDefinition = /** @class */ (function () {
1484
1637
  return this.options.getOptional(key, null);
1485
1638
  };
1486
1639
  // @Trace()
1487
- ParameterDefinition.prototype.sanitise = function (value, visit, placeHistory, injector) {
1640
+ ParameterDefinition.prototype.sanitise = function (value, visit, placeHistory, injector, isPopState) {
1488
1641
  return __awaiter(this, void 0, void 0, function () {
1489
- var previousVisit;
1642
+ var returningFromSomewhereElse, lastKnownVisit;
1490
1643
  return __generator(this, function (_a) {
1491
1644
  if (this.isMissingFrom(visit)) {
1492
- previousVisit = ___default.first(placeHistory.getHistory(visit.placeDefinition));
1493
- if (this.remember && previousVisit) {
1494
- value = previousVisit.getParameter(this.name);
1645
+ returningFromSomewhereElse = !placeHistory.lastVisitIncluded(visit.placeDefinition);
1646
+ if (returningFromSomewhereElse) {
1647
+ lastKnownVisit = placeHistory.getMostRecentVisitFor(visit.placeDefinition);
1648
+ if (this.remember && lastKnownVisit) {
1649
+ value = lastKnownVisit.getParameter(this.name);
1650
+ }
1651
+ return [2 /*return*/, this.isEmptyValue(value) ? this.defaultValue : value];
1495
1652
  }
1496
- return [2 /*return*/, this.isEmptyValue(value) ? this.defaultValue : value];
1497
- }
1498
- else {
1499
- // todo: add custom sanitiser
1500
- return [2 /*return*/, value];
1501
1653
  }
1502
- return [2 /*return*/];
1654
+ // todo: add custom sanitiser
1655
+ return [2 /*return*/, value];
1503
1656
  });
1504
1657
  });
1505
1658
  };
@@ -1746,11 +1899,11 @@ var PlaceComponent = /** @class */ (function (_super) {
1746
1899
  var binding = this.registerDisposable(new Binding(this.visitModel, model, {
1747
1900
  toRight: function (visit) {
1748
1901
  var value = visit.getParameter(parameterDef.name);
1749
- console.log('push to component', { name: parameterDef.name, value: value, visit: visit });
1902
+ // console.log('push to component', { name: parameterDef.name, value, visit });
1750
1903
  return value;
1751
1904
  },
1752
1905
  toLeft: function (value, currentVisit) {
1753
- console.log('push to route', { name: parameterDef.name, value: value, currentVisit: currentVisit });
1906
+ // console.log('push to route', { name: parameterDef.name, value, currentVisit });
1754
1907
  return currentVisit.replace(parameterDef, value);
1755
1908
  }
1756
1909
  }));
@@ -2571,19 +2724,32 @@ var PopStateNavigation = /** @class */ (function (_super) {
2571
2724
 
2572
2725
  var PlaceHistory = /** @class */ (function () {
2573
2726
  function PlaceHistory() {
2574
- this._history = new Map();
2727
+ this._archive = new Map();
2728
+ this.placeHistoryDepth = 4;
2575
2729
  }
2576
- // @Trace()
2577
- PlaceHistory.prototype.add = function (state) {
2578
- var history = this.getHistory(state.placeDefinition);
2579
- var previousState = ___default.first(history);
2580
- if (!previousState || state.hasChangedFrom(previousState)) {
2581
- history.unshift(state); // LIFO
2582
- this.setHistory(state.placeDefinition, history.slice(0, 3)); // limit our history to 4 visits
2730
+ PlaceHistory_1 = PlaceHistory;
2731
+ PlaceHistory.prototype.notifyNavigationStarted = function () {
2732
+ if (this._activeVisits) {
2733
+ this.archive(this._activeVisits.visits);
2734
+ this._previousVisits = this._activeVisits;
2583
2735
  }
2584
2736
  };
2737
+ PlaceHistory.prototype.notifyNavigationFinished = function (visits) {
2738
+ this._activeVisits = new PlaceHistory_1.VisitRecord(visits);
2739
+ };
2740
+ PlaceHistory.prototype.updateVisit = function (visit) {
2741
+ assert.isTruthy(this._activeVisits);
2742
+ this._activeVisits.update(visit);
2743
+ };
2744
+ PlaceHistory.prototype.lastVisitIncluded = function (placeDef) {
2745
+ var _a;
2746
+ return !!((_a = this._previousVisits) === null || _a === void 0 ? void 0 : _a.getVisitFor(placeDef));
2747
+ };
2748
+ PlaceHistory.prototype.getMostRecentVisitFor = function (placeDef) {
2749
+ return ___default.first(this.getHistory(placeDef));
2750
+ };
2585
2751
  PlaceHistory.prototype.getHistory = function (placeDef) {
2586
- var history = this._history.get(placeDef);
2752
+ var history = this._archive.get(placeDef);
2587
2753
  if (!history) {
2588
2754
  history = [];
2589
2755
  this.setHistory(placeDef, history);
@@ -2591,10 +2757,22 @@ var PlaceHistory = /** @class */ (function () {
2591
2757
  return history;
2592
2758
  };
2593
2759
  PlaceHistory.prototype.setHistory = function (placeDef, history) {
2594
- this._history.set(placeDef, history);
2760
+ this._archive.set(placeDef, history);
2595
2761
  };
2762
+ PlaceHistory.prototype.archive = function (visits) {
2763
+ var _this = this;
2764
+ visits.forEach(function (state) {
2765
+ var history = _this.getHistory(state.placeDefinition);
2766
+ var previousState = ___default.first(history);
2767
+ if (!previousState || state.hasChangedFrom(previousState)) {
2768
+ history.unshift(state); // LIFO
2769
+ _this.setHistory(state.placeDefinition, history.slice(0, _this.placeHistoryDepth));
2770
+ }
2771
+ });
2772
+ };
2773
+ var PlaceHistory_1;
2596
2774
  PlaceHistory.ɵprov = ɵɵdefineInjectable({ factory: function PlaceHistory_Factory() { return new PlaceHistory(); }, token: PlaceHistory, providedIn: "root" });
2597
- PlaceHistory = __decorate([
2775
+ PlaceHistory = PlaceHistory_1 = __decorate([
2598
2776
  Injectable({
2599
2777
  providedIn: 'root'
2600
2778
  }),
@@ -2602,6 +2780,86 @@ var PlaceHistory = /** @class */ (function () {
2602
2780
  ], PlaceHistory);
2603
2781
  return PlaceHistory;
2604
2782
  }());
2783
+ (function (PlaceHistory) {
2784
+ var VisitRecord = /** @class */ (function () {
2785
+ function VisitRecord(visits) {
2786
+ this.visits = visits;
2787
+ }
2788
+ VisitRecord.prototype.update = function (visit) {
2789
+ this.visits = this.visits.filter(function (v) { return v.placeDefinition !== visit.placeDefinition; }).concat(visit);
2790
+ };
2791
+ VisitRecord.prototype.getVisitFor = function (placeDef) {
2792
+ return this.visits.find(function (v) { return v.placeDefinition === placeDef; });
2793
+ };
2794
+ return VisitRecord;
2795
+ }());
2796
+ PlaceHistory.VisitRecord = VisitRecord;
2797
+ // export class Query {
2798
+ // private _history: Visit.State[];
2799
+ // private _places: Place[];
2800
+ // private _predicate: (visit: any) => boolean;
2801
+ // private _limit: number;
2802
+ //
2803
+ // constructor(history, limit = history.length) {
2804
+ // this._history = history;
2805
+ // this._places = [];
2806
+ // this._predicate = (visit => true);
2807
+ // this._limit = limit;
2808
+ // }
2809
+ //
2810
+ // to(...places:Place[]):this {
2811
+ // this._places = places;
2812
+ // return this;
2813
+ // }
2814
+ //
2815
+ // with(parameters: { [parameter: string]: any }): this {
2816
+ // this.matching(state => {
2817
+ // return Object.keys(parameters).reduce((acc, key) => {
2818
+ // const matchValue = parameters[key];
2819
+ // const visitValue = state.get(key);
2820
+ // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;
2821
+ // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);
2822
+ // return acc && matched;
2823
+ // }, true);
2824
+ // });
2825
+ // return this;
2826
+ // }
2827
+ //
2828
+ // last(): Visit.State {
2829
+ // return _.findLast(this._history, visit => this._matches(visit))
2830
+ // }
2831
+ //
2832
+ // // @trace
2833
+ // allThatMatch(): Visit.State[] {
2834
+ // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);
2835
+ // }
2836
+ //
2837
+ // // @trace
2838
+ // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {
2839
+ // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));
2840
+ // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);
2841
+ // }
2842
+ //
2843
+ // limit(limit: number): this {
2844
+ // this._limit = limit;
2845
+ // return this;
2846
+ // }
2847
+ //
2848
+ // matching(predicate: (visit: Visit.State) => boolean): this {
2849
+ // this._predicate = predicate;
2850
+ // return this;
2851
+ // }
2852
+ //
2853
+ // _matches(visit: Visit.State) {
2854
+ // return this._isPlaceMatch(visit) && this._predicate(visit);
2855
+ // }
2856
+ //
2857
+ // _isPlaceMatch(visit: Visit.State) {
2858
+ // return this._places.length < 1 || this._places.includes(visit.place)
2859
+ // }
2860
+ //
2861
+ // }
2862
+ })(PlaceHistory || (PlaceHistory = {}));
2605
2863
 
2606
2864
  var UrlSnapshot = /** @class */ (function () {
2607
2865
  // TODO: Update this accept a url Parser so it can be immutable and generate new trees on mutation using toString() are parseUrl.
@@ -2765,6 +3023,75 @@ var UrlService = /** @class */ (function () {
2765
3023
  return UrlService;
2766
3024
  }());
2767
3025
 
3026
+ var Visit = /** @class */ (function () {
3027
+ function Visit(placeDefinition, visitParameters) {
3028
+ if (visitParameters === void 0) { visitParameters = {}; }
3029
+ this.placeDefinition = placeDefinition;
3030
+ this.visitParameters = visitParameters;
3031
+ }
3032
+ // @Trace()
3033
+ Visit.prototype.getRouteId = function () {
3034
+ return this.placeDefinition.getRouteIdFrom(this);
3035
+ };
3036
+ // @Trace()
3037
+ Visit.prototype.hasRouteId = function () {
3038
+ return !isNil(this.getRouteId());
3039
+ };
3040
+ /**
3041
+ * Returns the value of the place parameter with the specified name. The parameter
3042
+ * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
3043
+ * same as the the ValueModel property name.
3044
+ * @param parameterName the field name of the property model or the `as` option if specified.
3045
+ */
3046
+ Visit.prototype.getParameter = function (parameterName) {
3047
+ return this.visitParameters[parameterName];
3048
+ };
3049
+ // @Trace()
3050
+ Visit.prototype.hasParameter = function (parameterName) {
3051
+ return Object.keys(this.visitParameters).includes(parameterName);
3052
+ };
3053
+ Visit.prototype.replace = function (parameter, value) {
3054
+ var _a;
3055
+ return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
3056
+ };
3057
+ Visit.prototype.mergeRouteParameters = function (routeParams) {
3058
+ var _this = this;
3059
+ // todo: whitelist parameters.
3060
+ var routeParameterKeys = Object.keys(routeParams);
3061
+ var params = {};
3062
+ this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
3063
+ if (def.isRouteId || def.isRouteParameter) {
3064
+ if (routeParameterKeys.includes(def.name)) {
3065
+ params[def.name] = routeParams[def.name];
3066
+ }
3067
+ }
3068
+ else {
3069
+ // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
3070
+ // defaults and remember sanitisation process.
3071
+ var value = _this.getParameter(def.name);
3072
+ if (_this.hasParameter(def.name)) {
3073
+ params[def.name] = value;
3074
+ }
3075
+ }
3076
+ });
3077
+ return new Visit(this.placeDefinition, params);
3078
+ };
3079
+ Visit.prototype.hasRoutingChangedFrom = function (other) {
3080
+ var samePlace = other.placeDefinition === this.placeDefinition;
3081
+ var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
3082
+ return !samePlace || !sameRouteParameters;
3083
+ };
3084
+ Visit.prototype.hasChangedFrom = function (other) {
3085
+ var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
3086
+ return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
3087
+ };
3088
+ Visit.prototype.toDebugString = function () {
3089
+ var _this = this;
3090
+ return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
3091
+ };
3092
+ return Visit;
3093
+ }());
3094
+
2768
3095
  var PlaceRouter = /** @class */ (function (_super) {
2769
3096
  __extends(PlaceRouter, _super);
2770
3097
  function PlaceRouter(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
@@ -2960,14 +3287,11 @@ var PlaceRouter = /** @class */ (function (_super) {
2960
3287
  enumerable: true,
2961
3288
  configurable: true
2962
3289
  });
2963
- // @Trace()
2964
3290
  PlaceRouter.prototype.pushVisitChangesToRoute = function (previous, next) {
2965
3291
  return __awaiter(this, void 0, void 0, function () {
2966
3292
  var _this = this;
2967
3293
  return __generator(this, function (_a) {
2968
- // we have to push to history so our remember sanitisers don't pick up the previous value
2969
- // when it's been cleared by the user.
2970
- this.placeHistory.add(next);
3294
+ this.placeHistory.updateVisit(next);
2971
3295
  // FIXME: no route id -> route id duplicates route parameters
2972
3296
  if (next.hasRoutingChangedFrom(previous)) {
2973
3297
  return [2 /*return*/, this.doNavigation(next, function (router) {
@@ -2989,6 +3313,9 @@ var PlaceRouter = /** @class */ (function (_super) {
2989
3313
  // @Trace()
2990
3314
  PlaceRouter.prototype.transitionTo = function (next) {
2991
3315
  var previous = this.navigationSessionModel.value;
3316
+ if (!previous) {
3317
+ this.placeHistory.notifyNavigationStarted();
3318
+ }
2992
3319
  assert.isTruthy(next !== previous);
2993
3320
  Logger.get(this).info("### Router State Transition: " + (previous ? previous.toString() : 'null') + " -> " + next.toString());
2994
3321
  this.navigationSessionModel.value = next;
@@ -2999,10 +3326,9 @@ var PlaceRouter = /** @class */ (function (_super) {
2999
3326
  };
3000
3327
  // @Trace()
3001
3328
  PlaceRouter.prototype.routingSessionFinished = function (visits) {
3002
- var _this = this;
3003
3329
  if (visits && visits.length > 0) {
3004
3330
  assert.isTruthy(this.navigationInProgress.value);
3005
- visits.forEach(function (v) { return _this.placeHistory.add(v); });
3331
+ this.placeHistory.notifyNavigationFinished(visits);
3006
3332
  // We update the active visits before we finish the session so the
3007
3333
  // place outlets can ignore the incoming changes until things are
3008
3334
  // settled. TODO: can we removed the event'ness here and just do a push?
@@ -3061,6 +3387,12 @@ var PlaceRouter = /** @class */ (function (_super) {
3061
3387
  { type: PlaceHistory }
3062
3388
  ]; };
3063
3389
  PlaceRouter.ɵprov = ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(ɵɵinject(Router), ɵɵinject(Location), ɵɵinject(InteractionService), ɵɵinject(UrlService), ɵɵinject(PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
3390
+ __decorate([
3391
+ Trace(),
3392
+ __metadata("design:type", Function),
3393
+ __metadata("design:paramtypes", [Visit, Visit]),
3394
+ __metadata("design:returntype", Promise)
3395
+ ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
3064
3396
  PlaceRouter = __decorate([
3065
3397
  Injectable({
3066
3398
  providedIn: 'root'
@@ -3074,75 +3406,6 @@ var PlaceRouter = /** @class */ (function (_super) {
3074
3406
  return PlaceRouter;
3075
3407
  }(GarbageCollector));
3076
3408
 
3077
- var Visit = /** @class */ (function () {
3078
- function Visit(placeDefinition, visitParameters) {
3079
- if (visitParameters === void 0) { visitParameters = {}; }
3080
- this.placeDefinition = placeDefinition;
3081
- this.visitParameters = visitParameters;
3082
- }
3083
- // @Trace()
3084
- Visit.prototype.getRouteId = function () {
3085
- return this.placeDefinition.getRouteIdFrom(this);
3086
- };
3087
- // @Trace()
3088
- Visit.prototype.hasRouteId = function () {
3089
- return !isNil(this.getRouteId());
3090
- };
3091
- /**
3092
- * Returns the value of the place parameter with the specified name. The parameter
3093
- * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
3094
- * same as the the ValueModel property name.
3095
- * @param parameterName the field name of the property model or the `as` option if specified.
3096
- */
3097
- Visit.prototype.getParameter = function (parameterName) {
3098
- return this.visitParameters[parameterName];
3099
- };
3100
- // @Trace()
3101
- Visit.prototype.hasParameter = function (parameterName) {
3102
- return Object.keys(this.visitParameters).includes(parameterName);
3103
- };
3104
- Visit.prototype.replace = function (parameter, value) {
3105
- var _a;
3106
- return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
3107
- };
3108
- Visit.prototype.mergeRouteParameters = function (routeParams) {
3109
- var _this = this;
3110
- // todo: whitelist parameters.
3111
- var routeParameterKeys = Object.keys(routeParams);
3112
- var params = {};
3113
- this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
3114
- if (def.isRouteId || def.isRouteParameter) {
3115
- if (routeParameterKeys.includes(def.name)) {
3116
- params[def.name] = routeParams[def.name];
3117
- }
3118
- }
3119
- else {
3120
- // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
3121
- // defaults and remember sanitisation process.
3122
- var value = _this.getParameter(def.name);
3123
- if (_this.hasParameter(def.name)) {
3124
- params[def.name] = value;
3125
- }
3126
- }
3127
- });
3128
- return new Visit(this.placeDefinition, params);
3129
- };
3130
- Visit.prototype.hasRoutingChangedFrom = function (other) {
3131
- var samePlace = other.placeDefinition === this.placeDefinition;
3132
- var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
3133
- return !samePlace || !sameRouteParameters;
3134
- };
3135
- Visit.prototype.hasChangedFrom = function (other) {
3136
- var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
3137
- return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
3138
- };
3139
- Visit.prototype.toDebugString = function () {
3140
- var _this = this;
3141
- return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
3142
- };
3143
- return Visit;
3144
- }());
3145
-
3146
3409
  var AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
3147
3410
 
3148
3411
  // Freezes the state of the components at the start of the animation.
@@ -3944,13 +4207,13 @@ var NoopAuthGuard = /** @class */ (function () {
3944
4207
  }());
3945
4208
 
3946
4209
  var VisitSanitiser = /** @class */ (function () {
3947
- function VisitSanitiser(activatedRoute, router, placeHistory, injector) {
4210
+ function VisitSanitiser(navigationSession, activatedRoute, router, placeHistory, injector) {
4211
+ this.navigationSession = navigationSession;
3948
4212
  this.activatedRoute = activatedRoute;
3949
4213
  this.router = router;
3950
4214
  this.placeHistory = placeHistory;
3951
4215
  this.injector = injector;
3952
4216
  }
3953
- // @Trace()
3954
4217
  VisitSanitiser.prototype.sanitise = function (visit) {
3955
4218
  return __awaiter(this, void 0, void 0, function () {
3956
4219
  var placeDef, routeIdDef, routeId, sanitisedValue, parameterDefs, sanitisedVisit, i, def, value, sanitisedValue;
@@ -3961,10 +4224,10 @@ var VisitSanitiser = /** @class */ (function () {
3961
4224
  if (!placeDef.hasRouteId()) return [3 /*break*/, 2];
3962
4225
  routeIdDef = placeDef.getRouteIdParameterDef();
3963
4226
  routeId = visit.getRouteId();
3964
- return [4 /*yield*/, routeIdDef.sanitise(routeId, visit, this.placeHistory, this.injector)];
4227
+ return [4 /*yield*/, routeIdDef.sanitise(routeId, visit, this.placeHistory, this.injector, this.navigationSession.isPopState)];
3965
4228
  case 1:
3966
4229
  sanitisedValue = _a.sent();
3967
- // console.log({routeId, sanitisedValue});
4230
+ console.log({ routeId: routeId, sanitisedValue: sanitisedValue });
3968
4231
  // ###------- EARLY EXIT --------###
3969
4232
  if (routeIdDef.hasChanged(routeId, sanitisedValue)) {
3970
4233
  // if the route id has changed we redirect immediately as other
@@ -3984,7 +4247,7 @@ var VisitSanitiser = /** @class */ (function () {
3984
4247
  if (!(i < parameterDefs.length)) return [3 /*break*/, 6];
3985
4248
  def = parameterDefs[i];
3986
4249
  value = visit.getParameter(def.name);
3987
- return [4 /*yield*/, def.sanitise(value, sanitisedVisit, this.placeHistory, this.injector)];
4250
+ return [4 /*yield*/, def.sanitise(value, sanitisedVisit, this.placeHistory, this.injector, this.navigationSession.isPopState)];
3988
4251
  case 4:
3989
4252
  sanitisedValue = _a.sent();
3990
4253
  if (def.hasChanged(value, sanitisedValue)) {
@@ -3999,6 +4262,12 @@ var VisitSanitiser = /** @class */ (function () {
3999
4262
  });
4000
4263
  });
4001
4264
  };
4265
+ __decorate([
4266
+ Trace(),
4267
+ __metadata("design:type", Function),
4268
+ __metadata("design:paramtypes", [Visit]),
4269
+ __metadata("design:returntype", Promise)
4270
+ ], VisitSanitiser.prototype, "sanitise", null);
4002
4271
  return VisitSanitiser;
4003
4272
  }());
4004
4273
 
@@ -4024,19 +4293,20 @@ var PlaceGuard = /** @class */ (function () {
4024
4293
  return __generator(this, function (_a) {
4025
4294
  switch (_a.label) {
4026
4295
  case 0: return [4 /*yield*/, this.cleanInteractionState(activatedRoute, state, function () { return __awaiter(_this, void 0, void 0, function () {
4027
- var params, parsedParams, initialVisit, sanitiser, sanitisedVisit, urlSnapshot;
4296
+ var params, parsedParams, navigationSession, initialVisit, sanitiser, sanitisedVisit, urlSnapshot;
4028
4297
  return __generator(this, function (_a) {
4029
4298
  switch (_a.label) {
4030
4299
  case 0:
4031
4300
  params = new ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);
4032
4301
  parsedParams = placeDefinition.parseRouteParams(params);
4033
- initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);
4034
- sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);
4302
+ navigationSession = this.placeRouter.navigationSession;
4303
+ initialVisit = navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);
4304
+ sanitiser = new VisitSanitiser(navigationSession, activatedRoute, this.router, this.placeHistory, this.injector);
4035
4305
  return [4 /*yield*/, sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams))];
4036
4306
  case 1:
4037
4307
  sanitisedVisit = _a.sent();
4038
4308
  // Save the visit with any updated parameters. We need to save it so we remember any non route parameters
4039
- this.placeRouter.navigationSession.storeVisit(sanitisedVisit);
4309
+ navigationSession.storeVisit(sanitisedVisit);
4040
4310
  if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {
4041
4311
  urlSnapshot = this.urlService.parseUrl(state.url).updateVisitSegments(sanitisedVisit);
4042
4312
  // console.log('##### Place Guard Redirect', urlSnapshot);
@@ -4256,5 +4526,5 @@ function VisitParameterList(options) {
4256
4526
  * Generated bundle index. Do not edit.
4257
4527
  */
4258
4528
 
4259
- export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputComponent, AbstractInteractionContext, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, Activity, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AlertDialogComponent, AngularUiPowerupsModule, Bounds, BusyOverlayComponent, CommandDirective, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EmptyStateComponent, EventCleanUpSession, FocusBindingDirective, Formatter, InPlaceInteractionContextComponent, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ModalInteractionContextFactory, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SelectInputComponent, StringInputComponent, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, UrlService, UrlSnapshot, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, DirectivesModule as ɵa, CommandDirective as ɵb, AbstractPlaceNavigationComponent as ɵba, ListPlaceNavComponent as ɵbb, InteractionModule as ɵbc, ActivityContainerComponent as ɵbd, AbstractInteractionContext as ɵbe, ActivityOutletComponent as ɵbf, ConfirmationDialogComponent as ɵbg, ACTIVITY_DATA as ɵbh, Activity as ɵbi, ConfirmThenDialogComponent as ɵbk, AlertDialogComponent as ɵbl, InPlaceInteractionContextComponent as ɵbn, FocusBindingDirective as ɵc, DisposableComponent as ɵd, ComponentsModule as ɵe, NumberInputComponent as ɵf, AbstractInputComponent as ɵg, StringInputComponent as ɵh, PasswordInputComponent as ɵi, SelectInputComponent as ɵj, ScrollContainerComponent as ɵk, NoopComponent as ɵl, PlaceModule as ɵm, EmptyStateComponent as ɵn, BusyOverlayComponent as ɵo, PlaceOutletComponent as ɵp, leftRightPlaceAnimation as ɵq, LEFT_RIGHT_PLACE_ANIMATION as ɵr, AUP_PLACE_CONFIG as ɵs, PlaceRouter as ɵu, InteractionService as ɵv, ModalInteractionContextFactory as ɵw, UrlService as ɵx, PlaceHistory as ɵy, TabbedPlaceNavigationComponent as ɵz };
4529
+ export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputComponent, AbstractInteractionContext, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, Activity, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AlertDialogComponent, AngularUiPowerupsModule, Bounds, BusyOverlayComponent, CommandDirective, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EmptyStateComponent, EventCleanUpSession, FocusBindingDirective, Formatter, InPlaceInteractionContextComponent, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ModalInteractionContextFactory, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SelectInputComponent, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, UrlService, UrlSnapshot, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, DirectivesModule as ɵa, CommandDirective as ɵb, ModalInteractionContextFactory as ɵba, UrlService as ɵbb, PlaceHistory as ɵbc, TabbedPlaceNavigationComponent as ɵbd, AbstractPlaceNavigationComponent as ɵbe, ListPlaceNavComponent as ɵbf, InteractionModule as ɵbg, ActivityContainerComponent as ɵbh, AbstractInteractionContext as ɵbi, ActivityOutletComponent as ɵbj, ConfirmationDialogComponent as ɵbk, ACTIVITY_DATA as ɵbl, Activity as ɵbm, ConfirmThenDialogComponent as ɵbo, AlertDialogComponent as ɵbp, InPlaceInteractionContextComponent as ɵbr, FocusBindingDirective as ɵc, DisposableComponent as ɵd, ComponentsModule as ɵe, NumberInputComponent as ɵf, AbstractInputComponent as ɵg, StringInputComponent as ɵh, PasswordInputComponent as ɵi, SelectInputComponent as ɵj, ScrollContainerComponent as ɵk, NoopComponent as ɵl, SwitchCaseOption as ɵm, SwitchCaseWhenDirective as ɵn, SwitchCaseDefaultDirective as ɵo, SwitchCaseComponent as ɵp, PlaceModule as ɵq, EmptyStateComponent as ɵr, BusyOverlayComponent as ɵs, PlaceOutletComponent as ɵt, leftRightPlaceAnimation as ɵu, LEFT_RIGHT_PLACE_ANIMATION as ɵv, AUP_PLACE_CONFIG as ɵw, PlaceRouter as ɵy, InteractionService as ɵz };
4260
4530
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map