@coolon/angular-ui-powerups 1.0.1 → 1.1.0

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 (132) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/bundles/coolon-angular-ui-powerups.umd.js +446 -169
  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/forms/number-input/number-input.component.js +2 -2
  20. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  21. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  22. package/esm2015/lib/components/forms/password-input/password-input.component.js +2 -2
  23. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  24. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  25. package/esm2015/lib/components/forms/select-input/select-input.component.js +3 -3
  26. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  27. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  28. package/esm2015/lib/components/forms/string-input/string-input.component.js +3 -3
  29. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  30. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  31. package/esm2015/lib/components/index.js +1 -0
  32. package/esm2015/lib/components/index.js.map +1 -1
  33. package/esm2015/lib/components/index.metadata.json +1 -1
  34. package/esm2015/lib/components/switch-case/switch-case.component.js +124 -0
  35. package/esm2015/lib/components/switch-case/switch-case.component.js.map +1 -0
  36. package/esm2015/lib/components/switch-case/switch-case.component.metadata.json +1 -0
  37. package/esm2015/lib/components/switch-case/switch-case.component.ngfactory.js.map +1 -0
  38. package/esm2015/lib/components/switch-case/switch-case.component.scss.shim.ngstyle.js.map +1 -0
  39. package/esm2015/lib/directives/command.directive.js +4 -4
  40. package/esm2015/lib/directives/command.directive.js.map +1 -1
  41. package/esm2015/lib/directives/focus-binding.directive.js +3 -3
  42. package/esm2015/lib/directives/focus-binding.directive.js.map +1 -1
  43. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +1 -1
  44. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.metadata.json +1 -1
  45. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +1 -1
  46. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.metadata.json +1 -1
  47. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  48. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.metadata.json +1 -1
  49. package/esm2015/lib/place/components/abstract-place-navigation.component.js +3 -3
  50. package/esm2015/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  51. package/esm2015/lib/place/components/abstract-place-navigation.component.metadata.json +1 -1
  52. package/esm2015/lib/place/components/busy-overlay/busy-overlay.component.js +2 -2
  53. package/esm2015/lib/place/components/busy-overlay/busy-overlay.component.js.map +1 -1
  54. package/esm2015/lib/place/components/busy-overlay/busy-overlay.component.metadata.json +1 -1
  55. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +3 -3
  56. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  57. package/esm2015/lib/place/components/place-outlet/place-outlet.component.metadata.json +1 -1
  58. package/esm2015/lib/place/guards/place.guard.js +4 -3
  59. package/esm2015/lib/place/guards/place.guard.js.map +1 -1
  60. package/esm2015/lib/place/place-component.js +2 -2
  61. package/esm2015/lib/place/place-component.js.map +1 -1
  62. package/esm2015/lib/place/place-history.js +116 -13
  63. package/esm2015/lib/place/place-history.js.map +1 -1
  64. package/esm2015/lib/place/place-history.metadata.json +1 -1
  65. package/esm2015/lib/place/place-router.js +13 -6
  66. package/esm2015/lib/place/place-router.js.map +1 -1
  67. package/esm2015/lib/place/place-router.metadata.json +1 -1
  68. package/esm2015/lib/place/route/parameter-decorators.js.map +1 -1
  69. package/esm2015/lib/place/route/parameter-definition.class.js +10 -9
  70. package/esm2015/lib/place/route/parameter-definition.class.js.map +1 -1
  71. package/esm2015/lib/place/route/visit-sanitiser.js +14 -6
  72. package/esm2015/lib/place/route/visit-sanitiser.js.map +1 -1
  73. package/esm2015/lib/place/route/visit-sanitiser.metadata.json +1 -1
  74. package/esm5/coolon-angular-ui-powerups.js +24 -23
  75. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  76. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  77. package/esm5/lib/components/components.module.js +9 -2
  78. package/esm5/lib/components/components.module.js.map +1 -1
  79. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  80. package/esm5/lib/components/forms/abstract-input.component.js +12 -1
  81. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  82. package/esm5/lib/components/forms/number-input/number-input.component.js +2 -2
  83. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  84. package/esm5/lib/components/forms/password-input/password-input.component.js +2 -2
  85. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  86. package/esm5/lib/components/forms/select-input/select-input.component.js +3 -3
  87. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  88. package/esm5/lib/components/forms/string-input/string-input.component.js +3 -3
  89. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  90. package/esm5/lib/components/index.js +1 -0
  91. package/esm5/lib/components/index.js.map +1 -1
  92. package/esm5/lib/components/switch-case/switch-case.component.js +144 -0
  93. package/esm5/lib/components/switch-case/switch-case.component.js.map +1 -0
  94. package/esm5/lib/components/switch-case/switch-case.component.ngfactory.js.map +1 -0
  95. package/esm5/lib/components/switch-case/switch-case.component.scss.shim.ngstyle.js.map +1 -0
  96. package/esm5/lib/directives/command.directive.js +4 -4
  97. package/esm5/lib/directives/command.directive.js.map +1 -1
  98. package/esm5/lib/directives/focus-binding.directive.js +3 -3
  99. package/esm5/lib/directives/focus-binding.directive.js.map +1 -1
  100. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +1 -1
  101. package/esm5/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +1 -1
  102. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  103. package/esm5/lib/place/components/abstract-place-navigation.component.js +3 -3
  104. package/esm5/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  105. package/esm5/lib/place/components/busy-overlay/busy-overlay.component.js +2 -2
  106. package/esm5/lib/place/components/busy-overlay/busy-overlay.component.js.map +1 -1
  107. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +3 -3
  108. package/esm5/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  109. package/esm5/lib/place/guards/place.guard.js +5 -4
  110. package/esm5/lib/place/guards/place.guard.js.map +1 -1
  111. package/esm5/lib/place/place-component.js +2 -2
  112. package/esm5/lib/place/place-component.js.map +1 -1
  113. package/esm5/lib/place/place-history.js +117 -11
  114. package/esm5/lib/place/place-history.js.map +1 -1
  115. package/esm5/lib/place/place-router.js +13 -7
  116. package/esm5/lib/place/place-router.js.map +1 -1
  117. package/esm5/lib/place/route/parameter-decorators.js.map +1 -1
  118. package/esm5/lib/place/route/parameter-definition.class.js +11 -11
  119. package/esm5/lib/place/route/parameter-definition.class.js.map +1 -1
  120. package/esm5/lib/place/route/visit-sanitiser.js +14 -6
  121. package/esm5/lib/place/route/visit-sanitiser.js.map +1 -1
  122. package/fesm2015/coolon-angular-ui-powerups.js +377 -127
  123. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  124. package/fesm5/coolon-angular-ui-powerups.js +405 -135
  125. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  126. package/lib/components/forms/abstract-input.component.d.ts +11 -1
  127. package/lib/components/index.d.ts +1 -0
  128. package/lib/components/switch-case/switch-case.component.d.ts +32 -0
  129. package/lib/place/place-history.d.ts +17 -3
  130. package/lib/place/route/parameter-definition.class.d.ts +1 -1
  131. package/lib/place/route/visit-sanitiser.d.ts +3 -1
  132. package/package.json +2 -2
@@ -29,12 +29,12 @@ var FocusBindingDirective = /** @class */ (function (_super) {
29
29
  var _this = this;
30
30
  // TODO: Make this also track the current enabled/disabled state.
31
31
  if (this.hasBinding()) {
32
- var chain = Dsl.disposeWith(this).chain;
33
- chain(this.pectinFocusBinding.focusContext.focused).subscribe(function (focused) {
32
+ var when = Dsl.disposeWith(this).when;
33
+ when.valueOf(this.pectinFocusBinding.focusContext.focused).changes(function (focused) {
34
34
  if (focused && !_this.alreadyHasFocus()) {
35
35
  _this.tryAndFocus();
36
36
  }
37
- });
37
+ }, { initialValue: 'triggerChange' });
38
38
  }
39
39
  else {
40
40
  Logger.get(this).warn('pectinFocusBinding was nil');
@@ -1 +1 @@
1
- {"version":3,"file":"focus-binding.directive.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/directives/focus-binding.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, NgZone, OnInit } from '@angular/core';\nimport { Dsl, HasFocusTracking, Logger } from '@coolon/pectin';\nimport { DisposableComponent } from '../components/disposable-component';\n\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[pectinFocusBinding]'\n})\nexport class FocusBindingDirective extends DisposableComponent implements OnInit, AfterViewInit {\n\n private readonly document: Document;\n\n @Input() pectinFocusBinding: HasFocusTracking;\n @Input() focusBindingTarget: HTMLElement;\n\n @HostListener('focusin')\n onFocusIn() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusIn();\n }\n }\n\n @HostListener('focusout')\n onFocusOut() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusOut();\n }\n }\n\n constructor(@Inject(ElementRef) private readonly el: ElementRef,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(DOCUMENT) document: any) {\n super();\n // @see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642\n this.document = document as Document;\n }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n // TODO: Make this also track the current enabled/disabled state.\n if (this.hasBinding()) {\n const { chain } = Dsl.disposeWith(this);\n chain(this.pectinFocusBinding.focusContext.focused).subscribe((focused) => {\n if (focused && !this.alreadyHasFocus()) {\n this.tryAndFocus();\n }\n });\n } else {\n Logger.get(this).warn('pectinFocusBinding was nil');\n }\n }\n\n private hasBinding() {\n return !!this.pectinFocusBinding && !!this.pectinFocusBinding.focusContext;\n }\n\n// Hook method for debugging via tracing.\n alreadyHasFocus() {\n return this.isFocused(this.focusTarget);\n }\n\n // Hook method for debugging via tracing.\n isFocused(element: Element): boolean {\n return this.document.activeElement === element;\n }\n\n tryAndFocus(retries: number = 5) {\n if (this.modelShouldStillHaveFocus() && this.canFocus()) {\n if (!this.alreadyHasFocus()) {\n this.focusTarget.focus();\n }\n // if we didn't get the focus we try again later.\n if (!this.alreadyHasFocus()) {\n Logger.get(this).log(`focus failed, trying ${retries} more times`);\n if (retries > 0) {\n // try again on the next paint\n // TODO: is there an angular way of doing this without calling a window function.\n requestAnimationFrame(() => {\n this.tryAndFocus(retries - 1);\n });\n } else {\n Logger.get(this).warn(`Tried to focus but gave up as the component wasn't enabled or visible.`);\n }\n }\n }\n }\n\n get focusTarget(): HTMLElement {\n return this.focusBindingTarget || this.el.nativeElement;\n }\n\n // Hook method for debugging via tracing.\n modelShouldStillHaveFocus() {\n return this.hasBinding() && this.pectinFocusBinding.focusContext.focused.value;\n }\n\n // Hook method for debugging via tracing.\n canFocus(): boolean {\n const dimension = this.focusTarget.getBoundingClientRect();\n const hasSize = dimension.height >= 0 && dimension.height >= 0;\n // tslint:disable-next-line:no-string-literal\n return hasSize && !this.focusTarget['disabled'];\n }\n}\n"]}
1
+ {"version":3,"file":"focus-binding.directive.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/directives/focus-binding.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, NgZone, OnInit } from '@angular/core';\nimport { Dsl, HasFocusTracking, Logger } from '@coolon/pectin';\nimport { DisposableComponent } from '../components/disposable-component';\n\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[pectinFocusBinding]'\n})\nexport class FocusBindingDirective extends DisposableComponent implements OnInit, AfterViewInit {\n\n private readonly document: Document;\n\n @Input() pectinFocusBinding: HasFocusTracking;\n @Input() focusBindingTarget: HTMLElement;\n\n @HostListener('focusin')\n onFocusIn() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusIn();\n }\n }\n\n @HostListener('focusout')\n onFocusOut() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusOut();\n }\n }\n\n constructor(@Inject(ElementRef) private readonly el: ElementRef,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(DOCUMENT) document: any) {\n super();\n // @see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642\n this.document = document as Document;\n }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n // TODO: Make this also track the current enabled/disabled state.\n if (this.hasBinding()) {\n const { when } = Dsl.disposeWith(this);\n when.valueOf(this.pectinFocusBinding.focusContext.focused).changes((focused) => {\n if (focused && !this.alreadyHasFocus()) {\n this.tryAndFocus();\n }\n }, {initialValue: 'triggerChange'});\n } else {\n Logger.get(this).warn('pectinFocusBinding was nil');\n }\n }\n\n private hasBinding() {\n return !!this.pectinFocusBinding && !!this.pectinFocusBinding.focusContext;\n }\n\n// Hook method for debugging via tracing.\n alreadyHasFocus() {\n return this.isFocused(this.focusTarget);\n }\n\n // Hook method for debugging via tracing.\n isFocused(element: Element): boolean {\n return this.document.activeElement === element;\n }\n\n tryAndFocus(retries: number = 5) {\n if (this.modelShouldStillHaveFocus() && this.canFocus()) {\n if (!this.alreadyHasFocus()) {\n this.focusTarget.focus();\n }\n // if we didn't get the focus we try again later.\n if (!this.alreadyHasFocus()) {\n Logger.get(this).log(`focus failed, trying ${retries} more times`);\n if (retries > 0) {\n // try again on the next paint\n // TODO: is there an angular way of doing this without calling a window function.\n requestAnimationFrame(() => {\n this.tryAndFocus(retries - 1);\n });\n } else {\n Logger.get(this).warn(`Tried to focus but gave up as the component wasn't enabled or visible.`);\n }\n }\n }\n }\n\n get focusTarget(): HTMLElement {\n return this.focusBindingTarget || this.el.nativeElement;\n }\n\n // Hook method for debugging via tracing.\n modelShouldStillHaveFocus() {\n return this.hasBinding() && this.pectinFocusBinding.focusContext.focused.value;\n }\n\n // Hook method for debugging via tracing.\n canFocus(): boolean {\n const dimension = this.focusTarget.getBoundingClientRect();\n const hasSize = dimension.height >= 0 && dimension.height >= 0;\n // tslint:disable-next-line:no-string-literal\n return hasSize && !this.focusTarget['disabled'];\n }\n}\n"]}
@@ -17,7 +17,7 @@ var AlertDialogComponent = /** @class */ (function (_super) {
17
17
  Component({
18
18
  selector: 'aup-alert-dialog',
19
19
  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",
20
- styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{justify-content:flex-end}"]
20
+ 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}"]
21
21
  }),
22
22
  __param(0, Inject(ACTIVITY_DATA)),
23
23
  __metadata("design:paramtypes", [Object])
@@ -35,7 +35,7 @@ var ConfirmThenDialogComponent = /** @class */ (function (_super) {
35
35
  Component({
36
36
  selector: 'aup-confirmation-dialog',
37
37
  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",
38
- styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{justify-content:flex-end}"]
38
+ 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}"]
39
39
  }),
40
40
  __param(0, Inject(ACTIVITY_DATA)),
41
41
  __metadata("design:paramtypes", [Object])
@@ -22,7 +22,7 @@ var ConfirmationDialogComponent = /** @class */ (function (_super) {
22
22
  Component({
23
23
  selector: 'aup-confirmation-dialog',
24
24
  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",
25
- styles: [":host{display:block;padding:var(--aup-default-padding)}.mat-dialog-content{margin:0;padding:0}.mat-dialog-actions{justify-content:flex-end}"]
25
+ 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}"]
26
26
  }),
27
27
  __param(0, Inject(ACTIVITY_DATA)),
28
28
  __metadata("design:paramtypes", [Object])
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __extends, __metadata } from "tslib";
2
2
  import { Component, Input } from '@angular/core';
3
- import { Command, DelegatingValueModel, Dsl, ListModel, StoreInListModel, StoreInValueModel, UseDelegate, ValueModel } from '@coolon/pectin';
3
+ import { Command, DelegatingValueModel, Dsl, ListModel, StoreInListModel, StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';
4
4
  import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
5
5
  import { DisposableComponent } from '../../components/disposable-component';
6
6
  import { PlaceComponent } from '../place-component';
@@ -48,7 +48,7 @@ var AbstractPlaceNavigationComponent = /** @class */ (function (_super) {
48
48
  __metadata("design:type", Array)
49
49
  ], AbstractPlaceNavigationComponent.prototype, "places", void 0);
50
50
  __decorate([
51
- Input(), UseDelegate(),
51
+ Input(), TrackExternal(),
52
52
  __metadata("design:type", ListModel)
53
53
  ], AbstractPlaceNavigationComponent.prototype, "placesModel", void 0);
54
54
  __decorate([
@@ -56,7 +56,7 @@ var AbstractPlaceNavigationComponent = /** @class */ (function (_super) {
56
56
  __metadata("design:type", PlaceOutletComponent)
57
57
  ], AbstractPlaceNavigationComponent.prototype, "placeOutlet", void 0);
58
58
  __decorate([
59
- Input(), UseDelegate(),
59
+ Input(), TrackExternal(),
60
60
  __metadata("design:type", ValueModel)
61
61
  ], AbstractPlaceNavigationComponent.prototype, "placeOutletModel", void 0);
62
62
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-place-navigation.component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/components/abstract-place-navigation.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,OAAO,EAEP,oBAAoB,EACpB,GAAG,EACH,SAAS,EAET,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,UAAU,EAEX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,kDAAkD,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAK7E;IAAsD,oDAAmB;IAqBvE,0CAAY,WAAwB;QAApC,YACE,iBAAO,SAcR;QAlBQ,2BAAqB,GAAG,IAAI,oBAAoB,EAAkB,CAAC;QAKpE,IAAA,2BAAkF,EAAhF,gBAAK,EAAE,oBAAO,EAAE,kBAAM,EAAE,cAAI,EAAE,gBAAK,EAAE,oBAAO,EAAE,sBAAkC,CAAC;QACzF,KAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAC1F,KAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,UAAC,eAAgC;YAC3E,KAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;YAChD,+FAA+F;YAC/F,0FAA0F;YAC1F,QAAQ;YACR,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,EAA/E,CAA+E,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QACH,KAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,KAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;;IAC1F,CAAC;IAID,iDAAM,GAAN,UAAO,QAAyB;QAC9B,IAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAY,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,cAAM,OAAA,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAA3E,CAA2E;YACxF,OAAO,EAAE,cAAM,OAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,EAA1F,CAA0F;YACzG,IAAI,EAAE,cAAM,OAAA,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAjF,CAAiF;SAC9F,CAAC;IACJ,CAAC;IAED,mDAAQ,GAAR,UAAS,KAAsB;QAC7B,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,mDAAQ,GAAR;IACA,CAAC;;gBAjCwB,WAAW;;IAlBpC;QADC,KAAK,EAAE,EAAE,gBAAgB,CAAC,aAAa,CAAC;;oEACD;IAGxC;QADC,KAAK,EAAE,EAAE,WAAW,EAAE;kCACV,SAAS;yEAAgC;IAItD;QADC,KAAK,EAAE,EAAE,iBAAiB,CAAC,kBAAkB,CAAC;kCAClC,oBAAoB;yEAAC;IAGlC;QADC,KAAK,EAAE,EAAE,WAAW,EAAE;kCACL,UAAU;8EAAuB;IA2BnD;QADC,OAAO,EAAE;;yCACO,eAAe;;kEAO/B;IA/CU,gCAAgC;QAH5C,SAAS,CAAC;YACT,QAAQ,EAAE,EAAE;SACb,CAAC;yCAsByB,WAAW;OArBzB,gCAAgC,CAwD5C;IAAD,uCAAC;CAAA,AAxDD,CAAsD,mBAAmB,GAwDxE;SAxDY,gCAAgC","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport {\n Command,\n Constructable,\n DelegatingValueModel,\n Dsl,\n ListModel,\n ListModelChain,\n StoreInListModel,\n StoreInValueModel,\n TransactionObserver,\n UseDelegate,\n ValueModel,\n ValueModelChain\n} from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport { DisposableComponent } from '../../components/disposable-component';\nimport { NavItem } from '../nav-item';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceRouter } from '../place-router';\nimport { Visit } from '../visit';\nimport { PlaceOutletComponent } from './place-outlet/place-outlet.component';\n\n@Component({\n template: ''\n})\nexport class AbstractPlaceNavigationComponent extends DisposableComponent implements OnInit {\n\n @Input() @StoreInListModel('placesModel')\n places: Constructable<PlaceComponent>[];\n\n @Input() @UseDelegate()\n placesModel: ListModel<Constructable<PlaceComponent>>;\n\n\n @Input() @StoreInValueModel('placeOutletModel')\n placeOutlet: PlaceOutletComponent;\n\n @Input() @UseDelegate()\n placeOutletModel: ValueModel<PlaceOutletComponent>;\n\n readonly placeDefinitions: ListModelChain<PlaceDefinition>;\n\n readonly commandFactory: Command.Factory<PlaceDefinition, void>;\n readonly _activePlaceComponent = new DelegatingValueModel<PlaceComponent>();\n private activePlaceDefinition: ValueModelChain<PlaceDefinition>;\n\n constructor(placeRouter: PlaceRouter) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n this.placeDefinitions = chain(this.placesModel).map(c => PlaceComponent.getDefinition(c));\n this.commandFactory = Command.createFactory((placeDefinition: PlaceDefinition) => {\n this.placeOutlet.navigate(new Visit(placeDefinition));\n });\n\n when.valueOf(this.placeOutletModel).changes(outlet => {\n // NOTE: this updates during a change cycle and causes our isActiveMethod to return 2 different\n // values in the one change detection cycle. So instead we delay the update to a different\n // tick.\n setTimeout(() => this._activePlaceComponent.setDelegate(outlet ? outlet.activePlaceModel : null));\n });\n this.activePlaceDefinition = chain(this._activePlaceComponent).pluck('placeDefinition');\n }\n\n\n @Memoize()\n getNav(placeDef: PlaceDefinition): NavItem {\n const navItem = placeDef.getPlaceData('nav') as NavItem;\n return {\n title: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),\n tooltip: () => navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getPlaceData('navTooltip', null),\n icon: () => navItem && navItem.icon ? navItem.icon() : placeDef.getPlaceData('navIcon', null)\n };\n }\n\n isActive(place: PlaceDefinition): boolean {\n return this.activePlaceDefinition.query().equals(place);\n }\n\n ngOnInit() {\n }\n\n}\n"]}
1
+ {"version":3,"file":"abstract-place-navigation.component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/components/abstract-place-navigation.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport {\n Command,\n Constructable,\n DelegatingValueModel,\n Dsl,\n ListModel,\n ListModelChain,\n StoreInListModel,\n StoreInValueModel,\n TransactionObserver,\n TrackExternal,\n ValueModel,\n ValueModelChain\n} from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport { DisposableComponent } from '../../components/disposable-component';\nimport { NavItem } from '../nav-item';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceRouter } from '../place-router';\nimport { Visit } from '../visit';\nimport { PlaceOutletComponent } from './place-outlet/place-outlet.component';\n\n@Component({\n template: ''\n})\nexport class AbstractPlaceNavigationComponent extends DisposableComponent implements OnInit {\n\n @Input() @StoreInListModel('placesModel')\n places: Constructable<PlaceComponent>[];\n\n @Input() @TrackExternal()\n placesModel: ListModel<Constructable<PlaceComponent>>;\n\n\n @Input() @StoreInValueModel('placeOutletModel')\n placeOutlet: PlaceOutletComponent;\n\n @Input() @TrackExternal()\n placeOutletModel: ValueModel<PlaceOutletComponent>;\n\n readonly placeDefinitions: ListModelChain<PlaceDefinition>;\n\n readonly commandFactory: Command.Factory<PlaceDefinition, void>;\n readonly _activePlaceComponent = new DelegatingValueModel<PlaceComponent>();\n private activePlaceDefinition: ValueModelChain<PlaceDefinition>;\n\n constructor(placeRouter: PlaceRouter) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n this.placeDefinitions = chain(this.placesModel).map(c => PlaceComponent.getDefinition(c));\n this.commandFactory = Command.createFactory((placeDefinition: PlaceDefinition) => {\n this.placeOutlet.navigate(new Visit(placeDefinition));\n });\n\n when.valueOf(this.placeOutletModel).changes(outlet => {\n // NOTE: this updates during a change cycle and causes our isActiveMethod to return 2 different\n // values in the one change detection cycle. So instead we delay the update to a different\n // tick.\n setTimeout(() => this._activePlaceComponent.setDelegate(outlet ? outlet.activePlaceModel : null));\n });\n this.activePlaceDefinition = chain(this._activePlaceComponent).pluck('placeDefinition');\n }\n\n\n @Memoize()\n getNav(placeDef: PlaceDefinition): NavItem {\n const navItem = placeDef.getPlaceData('nav') as NavItem;\n return {\n title: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),\n tooltip: () => navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getPlaceData('navTooltip', null),\n icon: () => navItem && navItem.icon ? navItem.icon() : placeDef.getPlaceData('navIcon', null)\n };\n }\n\n isActive(place: PlaceDefinition): boolean {\n return this.activePlaceDefinition.query().equals(place);\n }\n\n ngOnInit() {\n }\n\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Component, Input } from '@angular/core';
3
- import { StoreInValueModel, UseDelegate, ValueModel } from '@coolon/pectin';
3
+ import { StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';
4
4
  var BusyOverlayComponent = /** @class */ (function () {
5
5
  function BusyOverlayComponent() {
6
6
  }
7
7
  BusyOverlayComponent.prototype.ngOnInit = function () {
8
8
  };
9
9
  __decorate([
10
- Input(), UseDelegate(),
10
+ Input(), TrackExternal(),
11
11
  __metadata("design:type", ValueModel)
12
12
  ], BusyOverlayComponent.prototype, "busyModel", void 0);
13
13
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"busy-overlay.component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/components/busy-overlay/busy-overlay.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAO5E;IAQE;IACA,CAAC;IAED,uCAAQ,GAAR;IACA,CAAC;IATD;QADC,KAAK,EAAE,EAAE,WAAW,EAAE;kCACZ,UAAU;2DAAU;IAG/B;QADC,KAAK,EAAE,EAAE,iBAAiB,CAAC,WAAW,CAAC;;sDAC1B;IANH,oBAAoB;QALhC,SAAS,CAAC;YACT,QAAQ,EAAE,kBAAkB;YAC5B,0MAA4C;;SAE7C,CAAC;;OACW,oBAAoB,CAchC;IAAD,2BAAC;CAAA,AAdD,IAcC;SAdY,oBAAoB","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { StoreInValueModel, UseDelegate, ValueModel } from '@coolon/pectin';\n\n@Component({\n selector: 'aup-busy-overlay',\n templateUrl: `./busy-overlay.component.html`,\n styleUrls: ['./busy-overlay.component.scss']\n})\nexport class BusyOverlayComponent implements OnInit {\n\n @Input() @UseDelegate()\n busyModel: ValueModel<boolean>;\n\n @Input() @StoreInValueModel('busyModel')\n busy: boolean;\n\n constructor() {\n }\n\n ngOnInit() {\n }\n\n}\n"]}
1
+ {"version":3,"file":"busy-overlay.component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/components/busy-overlay/busy-overlay.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAO9E;IAQE;IACA,CAAC;IAED,uCAAQ,GAAR;IACA,CAAC;IATD;QADC,KAAK,EAAE,EAAE,aAAa,EAAE;kCACd,UAAU;2DAAU;IAG/B;QADC,KAAK,EAAE,EAAE,iBAAiB,CAAC,WAAW,CAAC;;sDAC1B;IANH,oBAAoB;QALhC,SAAS,CAAC;YACT,QAAQ,EAAE,kBAAkB;YAC5B,0MAA4C;;SAE7C,CAAC;;OACW,oBAAoB,CAchC;IAAD,2BAAC;CAAA,AAdD,IAcC;SAdY,oBAAoB","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';\n\n@Component({\n selector: 'aup-busy-overlay',\n templateUrl: `./busy-overlay.component.html`,\n styleUrls: ['./busy-overlay.component.scss']\n})\nexport class BusyOverlayComponent implements OnInit {\n\n @Input() @TrackExternal()\n busyModel: ValueModel<boolean>;\n\n @Input() @StoreInValueModel('busyModel')\n busy: boolean;\n\n constructor() {\n }\n\n ngOnInit() {\n }\n\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { __decorate, __extends, __metadata, __param } from "tslib";
2
2
  import { Component, EventEmitter, Inject, Input, Optional, Output, SkipSelf, ViewChild } from '@angular/core';
3
3
  import { ActivatedRoute, Router, RouterOutlet } from '@angular/router';
4
- import { DebugContext, Dsl, lang, ListModel, MutableValueModel, StoreInListModel, StoreInValueModel, UseDelegate, ValueModel } from '@coolon/pectin';
4
+ import { DebugContext, Dsl, lang, ListModel, MutableValueModel, StoreInListModel, StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';
5
5
  import * as _ from 'lodash';
6
6
  import { DisposableComponent } from '../../../components/disposable-component';
7
7
  import { AUP_PLACE_CONFIG } from '../../place-config';
@@ -169,11 +169,11 @@ var PlaceOutletComponent = /** @class */ (function (_super) {
169
169
  __metadata("design:type", Boolean)
170
170
  ], PlaceOutletComponent.prototype, "animate", void 0);
171
171
  __decorate([
172
- Input(), UseDelegate({ defaultValue: true }),
172
+ Input(), TrackExternal({ defaultValue: true }),
173
173
  __metadata("design:type", ValueModel)
174
174
  ], PlaceOutletComponent.prototype, "animateModel", void 0);
175
175
  __decorate([
176
- Input('placeAnimationOrderModel'), UseDelegate(),
176
+ Input('placeAnimationOrderModel'), TrackExternal(),
177
177
  __metadata("design:type", ListModel)
178
178
  ], PlaceOutletComponent.prototype, "customPlaceAnimationOrderModel", void 0);
179
179
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"place-outlet.component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/components/place-outlet/place-outlet.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Inject, Input, OnInit, Optional, Output, SkipSelf, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport {\n Constructable,\n DebugContext,\n Dsl,\n lang,\n ListModel,\n MutableValueModel,\n StoreInListModel,\n StoreInValueModel,\n UseDelegate,\n ValueModel,\n ValueModelChain\n} from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { DisposableComponent } from '../../../components/disposable-component';\nimport { PlaceComponent } from '../../place-component';\nimport { AUP_PLACE_CONFIG, PlaceConfig } from '../../place-config';\nimport { PlaceDefinition } from '../../place-definition';\nimport { PlaceRouter } from '../../place-router';\n\nimport { Visit } from '../../visit';\nimport { LEFT_RIGHT_PLACE_ANIMATION } from './route-animations';\n\n// Quick hack to avoid circular references between this and PlaceComponents.\ninterface PlaceRef {\n readonly placeDefinition: PlaceDefinition\n\n initialiseBindings(param: ValueModel<Visit>): void;\n\n onPlaceReady(): void;\n}\n\n@Component({\n selector: 'aup-place-outlet',\n templateUrl: './place-outlet.component.html',\n styleUrls: ['./place-outlet.component.scss'],\n animations: [LEFT_RIGHT_PLACE_ANIMATION]\n})\nexport class PlaceOutletComponent extends DisposableComponent implements OnInit {\n\n @Input() @StoreInValueModel('animateModel')\n animate: boolean;\n\n @Input() @UseDelegate({ defaultValue: true })\n animateModel: ValueModel<boolean>;\n\n // tslint:disable-next-line:no-input-rename\n @Input('placeAnimationOrderModel') @UseDelegate()\n customPlaceAnimationOrderModel: ListModel<Constructable<PlaceComponent>>;\n\n // tslint:disable-next-line:no-input-rename\n @Input('placeAnimationOrder') @StoreInListModel('customPlaceAnimationOrderModel')\n customPlaceAnimationOrder: Constructable<PlaceComponent>[];\n\n @Output()\n readonly placeChanged = new EventEmitter<PlaceComponent>();\n\n @ViewChild('routeOutlet', { static: true })\n routerOut: RouterOutlet;\n\n\n private outletActivated = new MutableValueModel(false);\n private readonly _activatedRouteModel = new MutableValueModel<ActivatedRoute>();\n private readonly _activePlaceModel = new MutableValueModel<PlaceComponent>();\n private readonly _activePlaceDefinition: ValueModelChain<PlaceDefinition>;\n\n private parentOutletModel: MutableValueModel<PlaceOutletComponent>;\n public readonly placeAnimationOrder: ValueModelChain<number>;\n\n private initialPlaceIndex: number = null;\n private routerVisitModel: ValueModelChain<Visit>;\n private _isPushingVisitToRoute = new MutableValueModel<boolean>(false);\n private navigationInProgress: ValueModelChain<boolean>;\n\n constructor(private readonly router: Router,\n private readonly placeRouter: PlaceRouter,\n @Optional() @Inject(AUP_PLACE_CONFIG) readonly placeConfig: PlaceConfig,\n @SkipSelf() @Optional() parentOutlet: PlaceOutletComponent) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n\n this.parentOutletModel = new MutableValueModel(parentOutlet);\n\n const defaultPlaceAnimationOrder = chain(this.parentOutletModel)\n .pullValueModel(o => o.activePlaceModel)\n .pluck('placeDefinition')\n .pluckList('children')\n .pluck('component');\n\n const activatePlaceType = chain(this.activePlaceModel).map(p => p.constructor as Constructable<PlaceComponent>);\n this.placeAnimationOrder = chain(this.customPlaceAnimationOrderModel)\n .otherwise(defaultPlaceAnimationOrder)\n .reduce((placesInOrder) => {\n let placeIndex = 0;\n if (activatePlaceType.value) {\n placeIndex = placesInOrder.indexOf(activatePlaceType.value);\n if (_.isNil(this.initialPlaceIndex)) {\n this.initialPlaceIndex = placeIndex;\n }\n }\n return _.isNil(this.initialPlaceIndex) ? 0 : placeIndex - this.initialPlaceIndex;\n }, { dependsOn: activatePlaceType });\n\n // Extract our visit model from the place router.\n this._activePlaceDefinition = chain(this._activePlaceModel).pluck('placeDefinition');\n this.routerVisitModel = this._activePlaceDefinition.findIn(chain(placeRouter.activeVisitsByPlaceDefinition));\n\n this.navigationInProgress = chain(this.placeRouter.navigationInProgress);\n when.valueOf(this.navigationInProgress).becomesFalsey(() => {\n this.checkStateAndInitialise();\n });\n when.valueOf(this.outletActivated).becomesTruthy(() => {\n this.checkStateAndInitialise();\n });\n\n chain(this._activePlaceModel)\n .postponeWhile(this.navigationInProgress)\n .subscribe(place => this.placeChanged.emit(place));\n\n }\n\n // @Trace()\n ngOnInit() {\n }\n\n // @Trace()\n getAnimationOrder() {\n return this.placeAnimationOrder.value;\n }\n\n get animationDuration() {\n return this.placeConfig && this.placeConfig.animationDuration ? this.placeConfig.animationDuration : '500ms';\n }\n\n // @Trace()\n navigate(visit: Visit) {\n // console.log({ activatedRoute: this._activatedRouteModel.value });\n this.placeRouter.navigate(visit, {\n relativeTo: this.parentOutlet ? this.parentOutlet.activatedRouteModel.value : null\n });\n }\n\n get parentOutlet(): PlaceOutletComponent {\n return this.parentOutletModel.value;\n }\n\n\n get activePlaceModel(): ValueModel<PlaceComponent> {\n return this._activePlaceModel.readonly;\n }\n\n get activatedRouteModel(): ValueModel<ActivatedRoute> {\n return this._activatedRouteModel.readonly;\n }\n\n // @Trace()\n onOutletActivated(routerOutlet: RouterOutlet, place: PlaceComponent) {\n this._activatedRouteModel.value = routerOutlet.activatedRoute;\n this._activePlaceModel.value = place;\n this.outletActivated.value = true;\n this.checkStateAndInitialise();\n }\n\n // @Trace()\n onOutletDeactivated() {\n this.outletActivated.value = false;\n this._activePlaceModel.value = null;\n this._activatedRouteModel.value = null;\n }\n\n // @Trace()\n private checkStateAndInitialise() {\n const routerVisit = this.routerVisitModel.value;\n const activePlace = this.activePlaceModel.value;\n if (routerVisit && activePlace && !activePlace.isInitialised()) {\n if (routerVisit.placeDefinition !== activePlace.placeDefinition) {\n lang.illegalState('wrong visit!!!');\n }\n this.initialisePlace(routerVisit, activePlace);\n }\n }\n\n // @Trace()\n private initialisePlace(routerVisit: Visit, activePlace: PlaceComponent) {\n const visitModel = new MutableValueModel<Visit>(routerVisit);\n DebugContext.tag(visitModel, `PlaceOutletComponent[${activePlace.constructor.name})].visitModel`);\n activePlace.initialiseVisit(routerVisit, (current, previous) => {\n this.pushVisitChangeToRoute(previous, current);\n });\n if (!this.animateModel.value) {\n // we're not animating so trigger any post animation callbacks now.\n this.animationDone();\n }\n const { when, chain, valueOf } = Dsl.disposeWith(activePlace);\n when.valueOf(this.routerVisitModel)\n .changes(visit => {\n activePlace.updateVisit(visit);\n }, {\n unless: valueOf.any(\n this._isPushingVisitToRoute,\n this.routerVisitModel.isNil()\n ).areTruthy()\n });\n }\n\n private pushVisitChangeToRoute(previous: Visit, current: Visit) {\n this._isPushingVisitToRoute.value = true;\n this.placeRouter.pushVisitChangesToRoute(previous, current).finally(() => {\n this._isPushingVisitToRoute.value = false;\n });\n }\n\n// @Trace()\n animationStarted() {\n // console.log({ activePlace: this._activePlaceModel.value });\n }\n\n // @Trace()\n animationDone() {\n if (this._activePlaceModel.value) {\n this._activePlaceModel.value.onPlaceReady();\n }\n }\n\n}\n"]}
1
+ {"version":3,"file":"place-outlet.component.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/components/place-outlet/place-outlet.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Inject, Input, OnInit, Optional, Output, SkipSelf, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport {\n Constructable,\n DebugContext,\n Dsl,\n lang,\n ListModel,\n MutableValueModel,\n StoreInListModel,\n StoreInValueModel,\n TrackExternal,\n ValueModel,\n ValueModelChain\n} from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { DisposableComponent } from '../../../components/disposable-component';\nimport { PlaceComponent } from '../../place-component';\nimport { AUP_PLACE_CONFIG, PlaceConfig } from '../../place-config';\nimport { PlaceDefinition } from '../../place-definition';\nimport { PlaceRouter } from '../../place-router';\n\nimport { Visit } from '../../visit';\nimport { LEFT_RIGHT_PLACE_ANIMATION } from './route-animations';\n\n// Quick hack to avoid circular references between this and PlaceComponents.\ninterface PlaceRef {\n readonly placeDefinition: PlaceDefinition\n\n initialiseBindings(param: ValueModel<Visit>): void;\n\n onPlaceReady(): void;\n}\n\n@Component({\n selector: 'aup-place-outlet',\n templateUrl: './place-outlet.component.html',\n styleUrls: ['./place-outlet.component.scss'],\n animations: [LEFT_RIGHT_PLACE_ANIMATION]\n})\nexport class PlaceOutletComponent extends DisposableComponent implements OnInit {\n\n @Input() @StoreInValueModel('animateModel')\n animate: boolean;\n\n @Input() @TrackExternal({ defaultValue: true })\n animateModel: ValueModel<boolean>;\n\n // tslint:disable-next-line:no-input-rename\n @Input('placeAnimationOrderModel') @TrackExternal()\n customPlaceAnimationOrderModel: ListModel<Constructable<PlaceComponent>>;\n\n // tslint:disable-next-line:no-input-rename\n @Input('placeAnimationOrder') @StoreInListModel('customPlaceAnimationOrderModel')\n customPlaceAnimationOrder: Constructable<PlaceComponent>[];\n\n @Output()\n readonly placeChanged = new EventEmitter<PlaceComponent>();\n\n @ViewChild('routeOutlet', { static: true })\n routerOut: RouterOutlet;\n\n\n private outletActivated = new MutableValueModel(false);\n private readonly _activatedRouteModel = new MutableValueModel<ActivatedRoute>();\n private readonly _activePlaceModel = new MutableValueModel<PlaceComponent>();\n private readonly _activePlaceDefinition: ValueModelChain<PlaceDefinition>;\n\n private parentOutletModel: MutableValueModel<PlaceOutletComponent>;\n public readonly placeAnimationOrder: ValueModelChain<number>;\n\n private initialPlaceIndex: number = null;\n private routerVisitModel: ValueModelChain<Visit>;\n private _isPushingVisitToRoute = new MutableValueModel<boolean>(false);\n private navigationInProgress: ValueModelChain<boolean>;\n\n constructor(private readonly router: Router,\n private readonly placeRouter: PlaceRouter,\n @Optional() @Inject(AUP_PLACE_CONFIG) readonly placeConfig: PlaceConfig,\n @SkipSelf() @Optional() parentOutlet: PlaceOutletComponent) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n\n this.parentOutletModel = new MutableValueModel(parentOutlet);\n\n const defaultPlaceAnimationOrder = chain(this.parentOutletModel)\n .pullValueModel(o => o.activePlaceModel)\n .pluck('placeDefinition')\n .pluckList('children')\n .pluck('component');\n\n const activatePlaceType = chain(this.activePlaceModel).map(p => p.constructor as Constructable<PlaceComponent>);\n this.placeAnimationOrder = chain(this.customPlaceAnimationOrderModel)\n .otherwise(defaultPlaceAnimationOrder)\n .reduce((placesInOrder) => {\n let placeIndex = 0;\n if (activatePlaceType.value) {\n placeIndex = placesInOrder.indexOf(activatePlaceType.value);\n if (_.isNil(this.initialPlaceIndex)) {\n this.initialPlaceIndex = placeIndex;\n }\n }\n return _.isNil(this.initialPlaceIndex) ? 0 : placeIndex - this.initialPlaceIndex;\n }, { dependsOn: activatePlaceType });\n\n // Extract our visit model from the place router.\n this._activePlaceDefinition = chain(this._activePlaceModel).pluck('placeDefinition');\n this.routerVisitModel = this._activePlaceDefinition.findIn(chain(placeRouter.activeVisitsByPlaceDefinition));\n\n this.navigationInProgress = chain(this.placeRouter.navigationInProgress);\n when.valueOf(this.navigationInProgress).becomesFalsey(() => {\n this.checkStateAndInitialise();\n });\n when.valueOf(this.outletActivated).becomesTruthy(() => {\n this.checkStateAndInitialise();\n });\n\n chain(this._activePlaceModel)\n .postponeWhile(this.navigationInProgress)\n .subscribe(place => this.placeChanged.emit(place));\n\n }\n\n // @Trace()\n ngOnInit() {\n }\n\n // @Trace()\n getAnimationOrder() {\n return this.placeAnimationOrder.value;\n }\n\n get animationDuration() {\n return this.placeConfig && this.placeConfig.animationDuration ? this.placeConfig.animationDuration : '500ms';\n }\n\n // @Trace()\n navigate(visit: Visit) {\n // console.log({ activatedRoute: this._activatedRouteModel.value });\n this.placeRouter.navigate(visit, {\n relativeTo: this.parentOutlet ? this.parentOutlet.activatedRouteModel.value : null\n });\n }\n\n get parentOutlet(): PlaceOutletComponent {\n return this.parentOutletModel.value;\n }\n\n\n get activePlaceModel(): ValueModel<PlaceComponent> {\n return this._activePlaceModel.readonly;\n }\n\n get activatedRouteModel(): ValueModel<ActivatedRoute> {\n return this._activatedRouteModel.readonly;\n }\n\n // @Trace()\n onOutletActivated(routerOutlet: RouterOutlet, place: PlaceComponent) {\n this._activatedRouteModel.value = routerOutlet.activatedRoute;\n this._activePlaceModel.value = place;\n this.outletActivated.value = true;\n this.checkStateAndInitialise();\n }\n\n // @Trace()\n onOutletDeactivated() {\n this.outletActivated.value = false;\n this._activePlaceModel.value = null;\n this._activatedRouteModel.value = null;\n }\n\n // @Trace()\n private checkStateAndInitialise() {\n const routerVisit = this.routerVisitModel.value;\n const activePlace = this.activePlaceModel.value;\n if (routerVisit && activePlace && !activePlace.isInitialised()) {\n if (routerVisit.placeDefinition !== activePlace.placeDefinition) {\n lang.illegalState('wrong visit!!!');\n }\n this.initialisePlace(routerVisit, activePlace);\n }\n }\n\n // @Trace()\n private initialisePlace(routerVisit: Visit, activePlace: PlaceComponent) {\n const visitModel = new MutableValueModel<Visit>(routerVisit);\n DebugContext.tag(visitModel, `PlaceOutletComponent[${activePlace.constructor.name})].visitModel`);\n activePlace.initialiseVisit(routerVisit, (current, previous) => {\n this.pushVisitChangeToRoute(previous, current);\n });\n if (!this.animateModel.value) {\n // we're not animating so trigger any post animation callbacks now.\n this.animationDone();\n }\n const { when, chain, valueOf } = Dsl.disposeWith(activePlace);\n when.valueOf(this.routerVisitModel)\n .changes(visit => {\n activePlace.updateVisit(visit);\n }, {\n unless: valueOf.any(\n this._isPushingVisitToRoute,\n this.routerVisitModel.isNil()\n ).areTruthy()\n });\n }\n\n private pushVisitChangeToRoute(previous: Visit, current: Visit) {\n this._isPushingVisitToRoute.value = true;\n this.placeRouter.pushVisitChangesToRoute(previous, current).finally(() => {\n this._isPushingVisitToRoute.value = false;\n });\n }\n\n// @Trace()\n animationStarted() {\n // console.log({ activePlace: this._activePlaceModel.value });\n }\n\n // @Trace()\n animationDone() {\n if (this._activePlaceModel.value) {\n this._activePlaceModel.value.onPlaceReady();\n }\n }\n\n}\n"]}
@@ -28,19 +28,20 @@ var PlaceGuard = /** @class */ (function () {
28
28
  return __generator(this, function (_a) {
29
29
  switch (_a.label) {
30
30
  case 0: return [4 /*yield*/, this.cleanInteractionState(activatedRoute, state, function () { return __awaiter(_this, void 0, void 0, function () {
31
- var params, parsedParams, initialVisit, sanitiser, sanitisedVisit, urlSnapshot;
31
+ var params, parsedParams, navigationSession, initialVisit, sanitiser, sanitisedVisit, urlSnapshot;
32
32
  return __generator(this, function (_a) {
33
33
  switch (_a.label) {
34
34
  case 0:
35
35
  params = new ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);
36
36
  parsedParams = placeDefinition.parseRouteParams(params);
37
- initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);
38
- sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);
37
+ navigationSession = this.placeRouter.navigationSession;
38
+ initialVisit = navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);
39
+ sanitiser = new VisitSanitiser(navigationSession, activatedRoute, this.router, this.placeHistory, this.injector);
39
40
  return [4 /*yield*/, sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams))];
40
41
  case 1:
41
42
  sanitisedVisit = _a.sent();
42
43
  // Save the visit with any updated parameters. We need to save it so we remember any non route parameters
43
- this.placeRouter.navigationSession.storeVisit(sanitisedVisit);
44
+ navigationSession.storeVisit(sanitisedVisit);
44
45
  if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {
45
46
  urlSnapshot = this.urlService.parseUrl(state.url).updateVisitSegments(sanitisedVisit);
46
47
  // console.log('##### Place Guard Redirect', urlSnapshot);
@@ -1 +1 @@
1
- {"version":3,"file":"place.guard.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/guards/place.guard.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n CanDeactivate,\n Router,\n RouterStateSnapshot,\n UrlSerializer,\n UrlTree\n} from '@angular/router';\nimport { lang, Trace } from '@coolon/pectin';\nimport { Observable } from 'rxjs';\nimport { InteractionService } from '../../interaction/services/interaction.service';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceHistory } from '../place-history';\nimport { PlaceRouter } from '../place-router';\nimport { VisitSanitiser } from '../route/visit-sanitiser';\nimport { UrlService } from '../url-service';\nimport { UrlSnapshot } from '../url-snapshot';\nimport { Visit } from '../visit';\nimport { ConsolidatedParameterMap } from './consolidated-param-map';\n\n\nexport abstract class PlaceGuard implements CanActivate, CanDeactivate<PlaceComponent> {\n\n\n constructor(private readonly router: Router,\n private urlService: UrlService,\n private readonly placeRouter: PlaceRouter,\n private readonly placeHistory: PlaceHistory,\n private readonly interactionService: InteractionService,\n private readonly injector: Injector) {\n }\n\n // @Trace()\n async canActivate(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\n\n // TODO: this is ugly now that I'm return UrlSnapshots and not UrlTrees. It'd be better if the functions\n // weren't nested or if I implemented a handler chain.\n return this.authorisePlaceThen(activatedRoute, state, async (placeDefinition) => {\n\n const result = await this.cleanInteractionState(activatedRoute, state, async () => {\n // Parse our route params.\n const params = new ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);\n const parsedParams = placeDefinition.parseRouteParams(params);\n\n const initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);\n const sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);\n const sanitisedVisit = await sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams));\n\n // Save the visit with any updated parameters. We need to save it so we remember any non route parameters\n this.placeRouter.navigationSession.storeVisit(sanitisedVisit);\n if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {\n // Regenerate the url\n const urlSnapshot = this.urlService.parseUrl(state.url).updateVisitSegments(sanitisedVisit);\n // console.log('##### Place Guard Redirect', urlSnapshot);\n return urlSnapshot;\n } else {\n return true;\n }\n });\n return this.handleGuardResult(result);\n\n });\n }\n\n // @Trace()\n async canDeactivate(component: PlaceComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Promise<boolean | UrlTree> {\n const currentUrl = this.urlService.parseUrl(currentState.url);\n const nextUrl = this.urlService.parseUrl(nextState.url);\n const result = await this.placeRouter.navigationSession.canDeactivatePlace(component, currentUrl, nextUrl);\n return this.handleGuardResult(result);\n }\n\n // @Trace()\n private handleGuardResult(result) {\n if (result instanceof UrlSnapshot) {\n return result.urlTree;\n } else {\n return result;\n }\n }\n\n // @Trace()\n protected async authorisePlaceThen(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot, runPlaceGuards: (placeDefinition: PlaceDefinition) => Promise<boolean | UrlTree>) {\n if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {\n const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);\n const authoriseResult = placeDefinition.authenticate ? await this.isAuthorised(activatedRoute, state) : true;\n if (authoriseResult === true) {\n // we're authorised, now run the place guards.\n return runPlaceGuards(placeDefinition);\n } else {\n console.log('not authorised result', authoriseResult);\n return authoriseResult;\n }\n } else {\n return lang.illegalState(`expected component to be an instance of PlaceComponent, got ${activatedRoute.component}`);\n }\n }\n\n // @Trace()\n async isAuthorised(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\n const authorised = this.getAuthGuard(this.injector).canActivate(activatedRoute, state);\n return (authorised instanceof Observable) ? authorised.toPromise() : authorised;\n }\n\n abstract getAuthGuard(injector: Injector): CanActivate;\n\n // @Trace()\n async cleanInteractionState(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, then: () => Promise<boolean | UrlSnapshot>): Promise<boolean | UrlSnapshot> {\n const url = this.urlService.parseUrl(state.url);\n if (!this.interactionService.isActive() && url.hasInteractions()) {\n // This happens if we reload the page or the url was pasted as the route should only be activated\n // after the interaction context has become active.\n return url.removeInteractionIds();\n } else {\n return then();\n }\n }\n\n}\n"]}
1
+ {"version":3,"file":"place.guard.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/guards/place.guard.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n CanDeactivate,\n Router,\n RouterStateSnapshot,\n UrlSerializer,\n UrlTree\n} from '@angular/router';\nimport { lang, Trace } from '@coolon/pectin';\nimport { Observable } from 'rxjs';\nimport { InteractionService } from '../../interaction/services/interaction.service';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\nimport { PlaceHistory } from '../place-history';\nimport { PlaceRouter } from '../place-router';\nimport { VisitSanitiser } from '../route/visit-sanitiser';\nimport { UrlService } from '../url-service';\nimport { UrlSnapshot } from '../url-snapshot';\nimport { Visit } from '../visit';\nimport { ConsolidatedParameterMap } from './consolidated-param-map';\n\n\nexport abstract class PlaceGuard implements CanActivate, CanDeactivate<PlaceComponent> {\n\n\n constructor(private readonly router: Router,\n private urlService: UrlService,\n private readonly placeRouter: PlaceRouter,\n private readonly placeHistory: PlaceHistory,\n private readonly interactionService: InteractionService,\n private readonly injector: Injector) {\n }\n\n // @Trace()\n async canActivate(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\n\n // TODO: this is ugly now that I'm return UrlSnapshots and not UrlTrees. It'd be better if the functions\n // weren't nested or if I implemented a handler chain.\n return this.authorisePlaceThen(activatedRoute, state, async (placeDefinition) => {\n\n const result = await this.cleanInteractionState(activatedRoute, state, async () => {\n // Parse our route params.\n const params = new ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);\n const parsedParams = placeDefinition.parseRouteParams(params);\n\n const navigationSession = this.placeRouter.navigationSession;\n const initialVisit = navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);\n const sanitiser = new VisitSanitiser(navigationSession, activatedRoute, this.router, this.placeHistory, this.injector);\n const sanitisedVisit = await sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams));\n\n // Save the visit with any updated parameters. We need to save it so we remember any non route parameters\n navigationSession.storeVisit(sanitisedVisit);\n if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {\n // Regenerate the url\n const urlSnapshot = this.urlService.parseUrl(state.url).updateVisitSegments(sanitisedVisit);\n // console.log('##### Place Guard Redirect', urlSnapshot);\n return urlSnapshot;\n } else {\n return true;\n }\n });\n return this.handleGuardResult(result);\n\n });\n }\n\n // @Trace()\n async canDeactivate(component: PlaceComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Promise<boolean | UrlTree> {\n const currentUrl = this.urlService.parseUrl(currentState.url);\n const nextUrl = this.urlService.parseUrl(nextState.url);\n const result = await this.placeRouter.navigationSession.canDeactivatePlace(component, currentUrl, nextUrl);\n return this.handleGuardResult(result);\n }\n\n // @Trace()\n private handleGuardResult(result) {\n if (result instanceof UrlSnapshot) {\n return result.urlTree;\n } else {\n return result;\n }\n }\n\n // @Trace()\n protected async authorisePlaceThen(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot, runPlaceGuards: (placeDefinition: PlaceDefinition) => Promise<boolean | UrlTree>) {\n if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {\n const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);\n const authoriseResult = placeDefinition.authenticate ? await this.isAuthorised(activatedRoute, state) : true;\n if (authoriseResult === true) {\n // we're authorised, now run the place guards.\n return runPlaceGuards(placeDefinition);\n } else {\n console.log('not authorised result', authoriseResult);\n return authoriseResult;\n }\n } else {\n return lang.illegalState(`expected component to be an instance of PlaceComponent, got ${activatedRoute.component}`);\n }\n }\n\n // @Trace()\n async isAuthorised(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\n const authorised = this.getAuthGuard(this.injector).canActivate(activatedRoute, state);\n return (authorised instanceof Observable) ? authorised.toPromise() : authorised;\n }\n\n abstract getAuthGuard(injector: Injector): CanActivate;\n\n // @Trace()\n async cleanInteractionState(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, then: () => Promise<boolean | UrlSnapshot>): Promise<boolean | UrlSnapshot> {\n const url = this.urlService.parseUrl(state.url);\n if (!this.interactionService.isActive() && url.hasInteractions()) {\n // This happens if we reload the page or the url was pasted as the route should only be activated\n // after the interaction context has become active.\n return url.removeInteractionIds();\n } else {\n return then();\n }\n }\n\n}\n"]}
@@ -49,11 +49,11 @@ var PlaceComponent = /** @class */ (function (_super) {
49
49
  var binding = this.registerDisposable(new Binding(this.visitModel, model, {
50
50
  toRight: function (visit) {
51
51
  var value = visit.getParameter(parameterDef.name);
52
- console.log('push to component', { name: parameterDef.name, value: value, visit: visit });
52
+ // console.log('push to component', { name: parameterDef.name, value, visit });
53
53
  return value;
54
54
  },
55
55
  toLeft: function (value, currentVisit) {
56
- console.log('push to route', { name: parameterDef.name, value: value, currentVisit: currentVisit });
56
+ // console.log('push to route', { name: parameterDef.name, value, currentVisit });
57
57
  return currentVisit.replace(parameterDef, value);
58
58
  }
59
59
  }));
@@ -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 { Directive } from '@angular/core';\nimport {\n assert,\n Binding,\n Constructable,\n DebugContext,\n Dsl,\n Guard,\n IMutableHasValue,\n lang,\n MutableValueModel\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\n@Directive()\nexport class PlaceComponent extends DisposableComponent {\n\n private visitModel = new MutableValueModel<Visit>();\n private _inVisitUpdate = new Guard();\n\n interactionContext?: InteractionContext;\n\n canDeactivate?(interactionContext: InteractionContext): boolean | Promise<boolean>;\n\n constructor() {\n super();\n }\n\n // @Trace()\n public initialiseVisit(visit: Visit, notifyVisitChanged: (current: Visit, previous:Visit) => void) {\n assert.isNil(this.visitModel.value);\n\n const { when } = Dsl.disposeWith(this);\n\n this.visitModel.value = visit;\n DebugContext.get(this.visitModel).tag(`${this.placeDefinition.component.name}.visitModel`);\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => this.installBinding(parameterDef));\n when.valueOf(this.visitModel).changes((current,previous) => {\n notifyVisitChanged(current, previous);\n }, {unless: this._inVisitUpdate});\n }\n\n public updateVisit(visit: Visit) {\n assert.isTruthy(this.isInitialised());\n assert.notNil(visit);\n this._inVisitUpdate.whileTrue(() => {\n this.visitModel.value = visit;\n });\n }\n\n isInitialised() {\n return !!this.visitModel.value;\n }\n\n // @Trace()\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);\n const binding = this.registerDisposable(new Binding(this.visitModel, 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 binding.writeRight();\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) as ParameterDefinition<any>[];\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 { Directive } from '@angular/core';\nimport {\n assert,\n Binding,\n Constructable,\n DebugContext,\n Dsl,\n Guard,\n IMutableHasValue,\n lang,\n MutableValueModel\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\n@Directive()\nexport class PlaceComponent extends DisposableComponent {\n\n private visitModel = new MutableValueModel<Visit>();\n private _inVisitUpdate = new Guard();\n\n interactionContext?: InteractionContext;\n\n canDeactivate?(interactionContext: InteractionContext): boolean | Promise<boolean>;\n\n constructor() {\n super();\n }\n\n // @Trace()\n public initialiseVisit(visit: Visit, notifyVisitChanged: (current: Visit, previous:Visit) => void) {\n assert.isNil(this.visitModel.value);\n\n const { when } = Dsl.disposeWith(this);\n\n this.visitModel.value = visit;\n DebugContext.get(this.visitModel).tag(`${this.placeDefinition.component.name}.visitModel`);\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => this.installBinding(parameterDef));\n when.valueOf(this.visitModel).changes((current,previous) => {\n notifyVisitChanged(current, previous);\n }, {unless: this._inVisitUpdate});\n }\n\n public updateVisit(visit: Visit) {\n assert.isTruthy(this.isInitialised());\n assert.notNil(visit);\n this._inVisitUpdate.whileTrue(() => {\n this.visitModel.value = visit;\n });\n }\n\n isInitialised() {\n return !!this.visitModel.value;\n }\n\n // @Trace()\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);\n const binding = this.registerDisposable(new Binding(this.visitModel, 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 binding.writeRight();\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) as ParameterDefinition<any>[];\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,22 +1,36 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Injectable } from '@angular/core';
3
+ import { assert } from '@coolon/pectin';
3
4
  import _ from 'lodash';
4
5
  import * as i0 from "@angular/core";
5
6
  var PlaceHistory = /** @class */ (function () {
6
7
  function PlaceHistory() {
7
- this._history = new Map();
8
+ this._archive = new Map();
9
+ this.placeHistoryDepth = 4;
8
10
  }
9
- // @Trace()
10
- PlaceHistory.prototype.add = function (state) {
11
- var history = this.getHistory(state.placeDefinition);
12
- var previousState = _.first(history);
13
- if (!previousState || state.hasChangedFrom(previousState)) {
14
- history.unshift(state); // LIFO
15
- this.setHistory(state.placeDefinition, history.slice(0, 3)); // limit our history to 4 visits
11
+ PlaceHistory_1 = PlaceHistory;
12
+ PlaceHistory.prototype.notifyNavigationStarted = function () {
13
+ if (this._activeVisits) {
14
+ this.archive(this._activeVisits.visits);
15
+ this._previousVisits = this._activeVisits;
16
16
  }
17
17
  };
18
+ PlaceHistory.prototype.notifyNavigationFinished = function (visits) {
19
+ this._activeVisits = new PlaceHistory_1.VisitRecord(visits);
20
+ };
21
+ PlaceHistory.prototype.updateVisit = function (visit) {
22
+ assert.isTruthy(this._activeVisits);
23
+ this._activeVisits.update(visit);
24
+ };
25
+ PlaceHistory.prototype.lastVisitIncluded = function (placeDef) {
26
+ var _a;
27
+ return !!((_a = this._previousVisits) === null || _a === void 0 ? void 0 : _a.getVisitFor(placeDef));
28
+ };
29
+ PlaceHistory.prototype.getMostRecentVisitFor = function (placeDef) {
30
+ return _.first(this.getHistory(placeDef));
31
+ };
18
32
  PlaceHistory.prototype.getHistory = function (placeDef) {
19
- var history = this._history.get(placeDef);
33
+ var history = this._archive.get(placeDef);
20
34
  if (!history) {
21
35
  history = [];
22
36
  this.setHistory(placeDef, history);
@@ -24,10 +38,22 @@ var PlaceHistory = /** @class */ (function () {
24
38
  return history;
25
39
  };
26
40
  PlaceHistory.prototype.setHistory = function (placeDef, history) {
27
- this._history.set(placeDef, history);
41
+ this._archive.set(placeDef, history);
42
+ };
43
+ PlaceHistory.prototype.archive = function (visits) {
44
+ var _this = this;
45
+ visits.forEach(function (state) {
46
+ var history = _this.getHistory(state.placeDefinition);
47
+ var previousState = _.first(history);
48
+ if (!previousState || state.hasChangedFrom(previousState)) {
49
+ history.unshift(state); // LIFO
50
+ _this.setHistory(state.placeDefinition, history.slice(0, _this.placeHistoryDepth));
51
+ }
52
+ });
28
53
  };
54
+ var PlaceHistory_1;
29
55
  PlaceHistory.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlaceHistory_Factory() { return new PlaceHistory(); }, token: PlaceHistory, providedIn: "root" });
30
- PlaceHistory = __decorate([
56
+ PlaceHistory = PlaceHistory_1 = __decorate([
31
57
  Injectable({
32
58
  providedIn: 'root'
33
59
  }),
@@ -36,4 +62,84 @@ var PlaceHistory = /** @class */ (function () {
36
62
  return PlaceHistory;
37
63
  }());
38
64
  export { PlaceHistory };
65
+ (function (PlaceHistory) {
66
+ var VisitRecord = /** @class */ (function () {
67
+ function VisitRecord(visits) {
68
+ this.visits = visits;
69
+ }
70
+ VisitRecord.prototype.update = function (visit) {
71
+ this.visits = this.visits.filter(function (v) { return v.placeDefinition !== visit.placeDefinition; }).concat(visit);
72
+ };
73
+ VisitRecord.prototype.getVisitFor = function (placeDef) {
74
+ return this.visits.find(function (v) { return v.placeDefinition === placeDef; });
75
+ };
76
+ return VisitRecord;
77
+ }());
78
+ PlaceHistory.VisitRecord = VisitRecord;
79
+ // export class Query {
80
+ // private _history: Visit.State[];
81
+ // private _places: Place[];
82
+ // private _predicate: (visit: any) => boolean;
83
+ // private _limit: number;
84
+ //
85
+ // constructor(history, limit = history.length) {
86
+ // this._history = history;
87
+ // this._places = [];
88
+ // this._predicate = (visit => true);
89
+ // this._limit = limit;
90
+ // }
91
+ //
92
+ // to(...places:Place[]):this {
93
+ // this._places = places;
94
+ // return this;
95
+ // }
96
+ //
97
+ // with(parameters: { [parameter: string]: any }): this {
98
+ // this.matching(state => {
99
+ // return Object.keys(parameters).reduce((acc, key) => {
100
+ // const matchValue = parameters[key];
101
+ // const visitValue = state.get(key);
102
+ // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;
103
+ // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);
104
+ // return acc && matched;
105
+ // }, true);
106
+ // });
107
+ // return this;
108
+ // }
109
+ //
110
+ // last(): Visit.State {
111
+ // return _.findLast(this._history, visit => this._matches(visit))
112
+ // }
113
+ //
114
+ // // @trace
115
+ // allThatMatch(): Visit.State[] {
116
+ // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);
117
+ // }
118
+ //
119
+ // // @trace
120
+ // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {
121
+ // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));
122
+ // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);
123
+ // }
124
+ //
125
+ // limit(limit: number): this {
126
+ // this._limit = limit;
127
+ // return this;
128
+ // }
129
+ //
130
+ // matching(predicate: (visit: Visit.State) => boolean): this {
131
+ // this._predicate = predicate;
132
+ // return this;
133
+ // }
134
+ //
135
+ // _matches(visit: Visit.State) {
136
+ // return this._isPlaceMatch(visit) && this._predicate(visit);
137
+ // }
138
+ //
139
+ // _isPlaceMatch(visit: Visit.State) {
140
+ // return this._places.length < 1 || this._places.includes(visit.place)
141
+ // }
142
+ //
143
+ // }
144
+ })(PlaceHistory || (PlaceHistory = {}));
39
145
  //# sourceMappingURL=place-history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"place-history.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/place-history.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,CAAC,MAAM,QAAQ,CAAC;;AAOvB;IAIE;QAFQ,aAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAGvD,CAAC;IAED,WAAW;IACX,0BAAG,GAAH,UAAI,KAAY;QACd,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACvD,IAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;YACzD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;YAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;SAC9F;IACH,CAAC;IAED,iCAAU,GAAV,UAAW,QAAyB;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACpC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iCAAU,GAAlB,UAAmB,QAAyB,EAAE,OAAgB;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;;IA5BU,YAAY;QAHxB,UAAU,CAAC;YACV,UAAU,EAAE,MAAM;SACnB,CAAC;;OACW,YAAY,CA0CxB;uBApDD;CAoDC,AA1CD,IA0CC;SA1CY,YAAY","sourcesContent":["import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceHistory {\n\n private _history = new Map<PlaceDefinition, Visit[]>();\n\n constructor() {\n }\n\n // @Trace()\n add(state: Visit) {\n const history = this.getHistory(state.placeDefinition);\n const previousState = _.first(history);\n if (!previousState || state.hasChangedFrom(previousState)) {\n history.unshift(state); // LIFO\n this.setHistory(state.placeDefinition, history.slice(0, 3)); // limit our history to 4 visits\n }\n }\n\n getHistory(placeDef: PlaceDefinition): Visit[] {\n let history = this._history.get(placeDef);\n if (!history) {\n history = [];\n this.setHistory(placeDef, history);\n }\n return history;\n }\n\n private setHistory(placeDef: PlaceDefinition, history: Visit[]) {\n this._history.set(placeDef, history);\n }\n\n// previousVisit(): Visit {\n // return _.last(this._history);\n // }\n //\n // withPreviousVisit<R>(callback:(previousVisit:Visit)=>R, defaultValue:R = null):R{\n // const visit = this.previousVisit();\n // return visit ? callback(visit) : defaultValue;\n // }\n //\n // previousVisitTo(place: Place): Visit {\n // return new VisitHistory.Query(this._history).to(place).last();\n // }\n}\n\nexport namespace VisitHistory {\n\n // export class Query {\n // private _history: Visit.State[];\n // private _places: Place[];\n // private _predicate: (visit: any) => boolean;\n // private _limit: number;\n //\n // constructor(history, limit = history.length) {\n // this._history = history;\n // this._places = [];\n // this._predicate = (visit => true);\n // this._limit = limit;\n // }\n //\n // to(...places:Place[]):this {\n // this._places = places;\n // return this;\n // }\n //\n // with(parameters: { [parameter: string]: any }): this {\n // this.matching(state => {\n // return Object.keys(parameters).reduce((acc, key) => {\n // const matchValue = parameters[key];\n // const visitValue = state.get(key);\n // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;\n // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);\n // return acc && matched;\n // }, true);\n // });\n // return this;\n // }\n //\n // last(): Visit.State {\n // return _.findLast(this._history, visit => this._matches(visit))\n // }\n //\n // // @trace\n // allThatMatch(): Visit.State[] {\n // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);\n // }\n //\n // // @trace\n // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {\n // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));\n // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);\n // }\n //\n // limit(limit: number): this {\n // this._limit = limit;\n // return this;\n // }\n //\n // matching(predicate: (visit: Visit.State) => boolean): this {\n // this._predicate = predicate;\n // return this;\n // }\n //\n // _matches(visit: Visit.State) {\n // return this._isPlaceMatch(visit) && this._predicate(visit);\n // }\n //\n // _isPlaceMatch(visit: Visit.State) {\n // return this._places.length < 1 || this._places.includes(visit.place)\n // }\n //\n // }\n\n}\n"]}
1
+ {"version":3,"file":"place-history.js","sourceRoot":"ng://@coolon/angular-ui-powerups/","sources":["lib/place/place-history.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAS,MAAM,gBAAgB,CAAC;AAC/C,OAAO,CAAC,MAAM,QAAQ,CAAC;;AAOvB;IAQE;QAHQ,aAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;QACtC,sBAAiB,GAAW,CAAC,CAAC;IAG/C,CAAC;qBATU,YAAY;IAWvB,8CAAuB,GAAvB;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;SAC3C;IACH,CAAC;IAED,+CAAwB,GAAxB,UAAyB,MAAe;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,cAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,kCAAW,GAAX,UAAY,KAAY;QACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,wCAAiB,GAAjB,UAAkB,QAAyB;;QACzC,OAAO,CAAC,QAAC,IAAI,CAAC,eAAe,0CAAE,WAAW,CAAC,QAAQ,EAAC,CAAC;IACvD,CAAC;IAED,4CAAqB,GAArB,UAAsB,QAAyB;QAC7C,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,iCAAU,GAAV,UAAW,QAAyB;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACpC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iCAAU,GAAlB,UAAmB,QAAyB,EAAE,OAAgB;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAES,8BAAO,GAAjB,UAAkB,MAAe;QAAjC,iBASC;QARC,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;YAClB,IAAM,OAAO,GAAG,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvD,IAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;gBACzD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;gBAC/B,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;aAClF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;;IAzDU,YAAY;QAHxB,UAAU,CAAC;YACV,UAAU,EAAE,MAAM;SACnB,CAAC;;OACW,YAAY,CA4DxB;uBArED;CAqEC,AA5DD,IA4DC;SA5DY,YAAY;AA8DzB,WAAiB,YAAY;IAE3B;QACE,qBAAmB,MAAe;YAAf,WAAM,GAAN,MAAM,CAAS;QAClC,CAAC;QAED,4BAAM,GAAN,UAAO,KAAY;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,EAA3C,CAA2C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnG,CAAC;QAED,iCAAW,GAAX,UAAY,QAAyB;YACnC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,KAAK,QAAQ,EAA9B,CAA8B,CAAC,CAAC;QAC/D,CAAC;QACH,kBAAC;IAAD,CAAC,AAXD,IAWC;IAXY,wBAAW,cAWvB,CAAA;IAED,uBAAuB;IACvB,qCAAqC;IACrC,8BAA8B;IAC9B,iDAAiD;IACjD,4BAA4B;IAC5B,EAAE;IACF,mDAAmD;IACnD,+BAA+B;IAC/B,yBAAyB;IACzB,yCAAyC;IACzC,2BAA2B;IAC3B,MAAM;IACN,EAAE;IACF,iCAAiC;IACjC,6BAA6B;IAC7B,mBAAmB;IACnB,MAAM;IACN,EAAE;IACF,2DAA2D;IAC3D,+BAA+B;IAC/B,8DAA8D;IAC9D,8CAA8C;IAC9C,6CAA6C;IAC7C,gGAAgG;IAChG,kFAAkF;IAClF,iCAAiC;IACjC,kBAAkB;IAClB,UAAU;IACV,mBAAmB;IACnB,MAAM;IACN,EAAE;IACF,0BAA0B;IAC1B,sEAAsE;IACtE,MAAM;IACN,EAAE;IACF,cAAc;IACd,oCAAoC;IACpC,yFAAyF;IACzF,MAAM;IACN,EAAE;IACF,cAAc;IACd,yEAAyE;IACzE,uGAAuG;IACvG,yFAAyF;IACzF,MAAM;IACN,EAAE;IACF,iCAAiC;IACjC,2BAA2B;IAC3B,mBAAmB;IACnB,MAAM;IACN,EAAE;IACF,iEAAiE;IACjE,mCAAmC;IACnC,mBAAmB;IACnB,MAAM;IACN,EAAE;IACF,mCAAmC;IACnC,kEAAkE;IAClE,MAAM;IACN,EAAE;IACF,wCAAwC;IACxC,2EAA2E;IAC3E,MAAM;IACN,EAAE;IACF,IAAI;AAEN,CAAC,EAjFgB,YAAY,KAAZ,YAAY,QAiF5B","sourcesContent":["import { Injectable } from '@angular/core';\nimport { assert, Trace } from '@coolon/pectin';\nimport _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceHistory {\n\n private _activeVisits: PlaceHistory.VisitRecord;\n private _previousVisits: PlaceHistory.VisitRecord;\n\n private _archive = new Map<PlaceDefinition, Visit[]>();\n private readonly placeHistoryDepth: number = 4;\n\n constructor() {\n }\n\n notifyNavigationStarted() {\n if (this._activeVisits) {\n this.archive(this._activeVisits.visits);\n this._previousVisits = this._activeVisits;\n }\n }\n\n notifyNavigationFinished(visits: Visit[]) {\n this._activeVisits = new PlaceHistory.VisitRecord(visits);\n }\n\n updateVisit(visit: Visit) {\n assert.isTruthy(this._activeVisits);\n this._activeVisits.update(visit);\n }\n\n lastVisitIncluded(placeDef: PlaceDefinition): boolean {\n return !!this._previousVisits?.getVisitFor(placeDef);\n }\n\n getMostRecentVisitFor(placeDef: PlaceDefinition) {\n return _.first(this.getHistory(placeDef));\n }\n\n getHistory(placeDef: PlaceDefinition): Visit[] {\n let history = this._archive.get(placeDef);\n if (!history) {\n history = [];\n this.setHistory(placeDef, history);\n }\n return history;\n }\n\n private setHistory(placeDef: PlaceDefinition, history: Visit[]) {\n this._archive.set(placeDef, history);\n }\n\n protected archive(visits: Visit[]) {\n visits.forEach(state => {\n const history = this.getHistory(state.placeDefinition);\n const previousState = _.first(history);\n if (!previousState || state.hasChangedFrom(previousState)) {\n history.unshift(state); // LIFO\n this.setHistory(state.placeDefinition, history.slice(0, this.placeHistoryDepth));\n }\n });\n }\n\n\n}\n\nexport namespace PlaceHistory {\n\n export class VisitRecord {\n constructor(public visits: Visit[]) {\n }\n\n update(visit: Visit) {\n this.visits = this.visits.filter(v => v.placeDefinition !== visit.placeDefinition).concat(visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition): Visit | undefined {\n return this.visits.find(v => v.placeDefinition === placeDef);\n }\n }\n\n // export class Query {\n // private _history: Visit.State[];\n // private _places: Place[];\n // private _predicate: (visit: any) => boolean;\n // private _limit: number;\n //\n // constructor(history, limit = history.length) {\n // this._history = history;\n // this._places = [];\n // this._predicate = (visit => true);\n // this._limit = limit;\n // }\n //\n // to(...places:Place[]):this {\n // this._places = places;\n // return this;\n // }\n //\n // with(parameters: { [parameter: string]: any }): this {\n // this.matching(state => {\n // return Object.keys(parameters).reduce((acc, key) => {\n // const matchValue = parameters[key];\n // const visitValue = state.get(key);\n // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;\n // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);\n // return acc && matched;\n // }, true);\n // });\n // return this;\n // }\n //\n // last(): Visit.State {\n // return _.findLast(this._history, visit => this._matches(visit))\n // }\n //\n // // @trace\n // allThatMatch(): Visit.State[] {\n // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);\n // }\n //\n // // @trace\n // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {\n // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));\n // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);\n // }\n //\n // limit(limit: number): this {\n // this._limit = limit;\n // return this;\n // }\n //\n // matching(predicate: (visit: Visit.State) => boolean): this {\n // this._predicate = predicate;\n // return this;\n // }\n //\n // _matches(visit: Visit.State) {\n // return this._isPlaceMatch(visit) && this._predicate(visit);\n // }\n //\n // _isPlaceMatch(visit: Visit.State) {\n // return this._places.length < 1 || this._places.includes(visit.place)\n // }\n //\n // }\n\n}\n"]}