@coolon/angular-ui-powerups 0.0.89 → 0.0.90

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 (34) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +208 -127
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.metadata.json +1 -1
  6. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +2 -2
  7. package/esm2015/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +2 -2
  8. package/esm2015/lib/interaction/interaction-context.js +18 -2
  9. package/esm2015/lib/interaction/services/dialog-interaction.service.js +2 -2
  10. package/esm2015/lib/place/place-definition.js +16 -19
  11. package/esm2015/lib/place/place-router.js +122 -18
  12. package/esm2015/lib/place/route/guards/enter-place-guard.service.js +3 -38
  13. package/esm2015/lib/place/visit.js +4 -11
  14. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +2 -2
  15. package/esm5/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +2 -2
  16. package/esm5/lib/interaction/interaction-context.js +29 -2
  17. package/esm5/lib/interaction/services/dialog-interaction.service.js +2 -2
  18. package/esm5/lib/place/place-definition.js +17 -39
  19. package/esm5/lib/place/place-router.js +143 -16
  20. package/esm5/lib/place/route/guards/enter-place-guard.service.js +3 -44
  21. package/esm5/lib/place/visit.js +4 -14
  22. package/fesm2015/coolon-angular-ui-powerups.js +160 -85
  23. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  24. package/fesm5/coolon-angular-ui-powerups.js +195 -113
  25. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  26. package/lib/interaction/components/activity-container/activity-container.component.d.ts +1 -1
  27. package/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.d.ts +1 -1
  28. package/lib/interaction/interaction-context.d.ts +2 -1
  29. package/lib/interaction/services/dialog-interaction.service.d.ts +1 -1
  30. package/lib/place/place-definition.d.ts +0 -4
  31. package/lib/place/place-router.d.ts +18 -2
  32. package/lib/place/route/guards/enter-place-guard.service.d.ts +0 -1
  33. package/lib/place/visit.d.ts +0 -2
  34. package/package.json +1 -1
@@ -3,7 +3,6 @@
3
3
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  import * as tslib_1 from "tslib";
6
- import { UrlSegment } from '@angular/router';
7
6
  import * as _ from 'lodash';
8
7
  /**
9
8
  * @record
@@ -125,8 +124,10 @@ var Visit = /** @class */ (function () {
125
124
  else {
126
125
  // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
127
126
  // defaults and remember sanitisation process.
127
+ /** @type {?} */
128
+ var value = _this.getParameter(def.name);
128
129
  if (_this.hasParameter(def.name)) {
129
- params[def.name] = _this.getParameter(def.name);
130
+ params[def.name] = value;
130
131
  }
131
132
  }
132
133
  }));
@@ -160,17 +161,6 @@ var Visit = /** @class */ (function () {
160
161
  var sameNonRouteParameters = _.isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
161
162
  return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
162
163
  };
163
- /**
164
- * @return {?}
165
- */
166
- Visit.prototype.getUrlSegments = /**
167
- * @return {?}
168
- */
169
- function () {
170
- return this.placeDefinition.hasRouteId() ?
171
- [new UrlSegment(this.placeDefinition.path, {}), new UrlSegment(this.placeDefinition.getFormattedRouteId(this), this.placeDefinition.getFormattedRouteParameters(this))] :
172
- [new UrlSegment(this.placeDefinition.path, this.placeDefinition.getFormattedRouteParameters(this))];
173
- };
174
164
  return Visit;
175
165
  }());
176
166
  export { Visit };
@@ -183,4 +173,4 @@ if (false) {
183
173
  */
184
174
  Visit.prototype.visitParameters;
185
175
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaXQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2UvdmlzaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7QUFJNUIscUJBRUM7QUFHRDtJQUVFLGVBQXFCLGVBQWdDLEVBQW1CLGVBQTRCO1FBQTVCLGdDQUFBLEVBQUEsb0JBQTRCO1FBQS9FLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFtQixvQkFBZSxHQUFmLGVBQWUsQ0FBYTtJQUNwRyxDQUFDO0lBRUQsV0FBVzs7Ozs7SUFDWCwwQkFBVTs7Ozs7SUFBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFdBQVc7Ozs7O0lBQ1gsMEJBQVU7Ozs7O0lBQVY7UUFDRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7O09BS0c7Ozs7Ozs7O0lBQ0gsNEJBQVk7Ozs7Ozs7SUFBWixVQUFhLGFBQXFCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVzs7Ozs7O0lBQ1gsNEJBQVk7Ozs7OztJQUFaLFVBQWEsYUFBcUI7UUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkUsQ0FBQzs7Ozs7OztJQUVELHVCQUFPOzs7Ozs7SUFBUCxVQUFXLFNBQXNDLEVBQUUsS0FBUTs7UUFDekQsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENB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YXIvcm91dGVyJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGxhY2UtZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9yb3V0ZS9wYXJhbWV0ZXItZGVmaW5pdGlvbi5jbGFzcyc7XG5cbmludGVyZmFjZSBQYXJhbXMge1xuICBbcDogc3RyaW5nXTogYW55XG59XG5cblxuZXhwb3J0IGNsYXNzIFZpc2l0IHtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBwbGFjZURlZmluaXRpb246IFBsYWNlRGVmaW5pdGlvbiwgcHJpdmF0ZSByZWFkb25seSB2aXNpdFBhcmFtZXRlcnM6IFBhcmFtcyA9IHt9KSB7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBnZXRSb3V0ZUlkKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucGxhY2VEZWZpbml0aW9uLmdldFJvdXRlSWRGcm9tKHRoaXMpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgaGFzUm91dGVJZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIV8uaXNOaWwodGhpcy5nZXRSb3V0ZUlkKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwbGFjZSBwYXJhbWV0ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuICBUaGUgcGFyYW1ldGVyXG4gICAqIG5hbWUgaXMgdGFrZW4gZnJvbSB0aGUgYGFzYCBvcHRpb24sIGUuZy4ge2FzOiAnYUN1c3RvbU5hbWUnfSBvdGhlcndpc2UgaXQgaXMgdGhlXG4gICAqIHNhbWUgYXMgdGhlIHRoZSBWYWx1ZU1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIHRoZSBmaWVsZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBtb2RlbCBvciB0aGUgYGFzYCBvcHRpb24gaWYgc3BlY2lmaWVkLlxuICAgKi9cbiAgZ2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaXRQYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgaGFzUGFyYW1ldGVyKHBhcmFtZXRlck5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZpc2l0UGFyYW1ldGVycykuaW5jbHVkZXMocGFyYW1ldGVyTmFtZSk7XG4gIH1cblxuICByZXBsYWNlPFM+KHBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnksIFM+LCB2YWx1ZTogUyk6IFZpc2l0IHtcbiAgICByZXR1cm4gbmV3IFZpc2l0KHRoaXMucGxhY2VEZWZpbml0aW9uLCB7IC4uLnRoaXMudmlzaXRQYXJhbWV0ZXJzLCBbcGFyYW1ldGVyLm5hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIG1lcmdlUm91dGVQYXJhbWV0ZXJzPFM+KHJvdXRlUGFyYW1zOiB7IFtwOiBzdHJpbmddOiBhbnkgfSk6IFZpc2l0IHtcbiAgICAvLyB0b2RvOiB3aGl0ZWxpc3QgcGFyYW1ldGVycy5cbiAgICBjb25zdCByb3V0ZVBhcmFtZXRlcktleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVBhcmFtcyk7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgdGhpcy5wbGFjZURlZmluaXRpb24uZ2V0VmlzaXRQYXJhbWV0ZXJEZWZzKCkuZm9yRWFjaChkZWYgPT4ge1xuICAgICAgaWYgKGRlZi5pc1JvdXRlSWQgfHwgZGVmLmlzUm91dGVQYXJhbWV0ZXIpIHtcbiAgICAgICAgaWYgKHJvdXRlUGFyYW1ldGVyS2V5cy5pbmNsdWRlcyhkZWYubmFtZSkpIHtcbiAgICAgICAgICBwYXJhbXNbZGVmLm5hbWVdID0gcm91dGVQYXJhbXNbZGVmLm5hbWVdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb3B5IG5vbiByb3V0ZSBwYXJhbXMgYXMgaXMsIGJ1dCBvbmx5IGlmIHRoZXkgYWxyZWFkeSBleGlzdCBvdGhlcndpc2Ugd2UnbGwgaW5qZWN0IG5pbCB2YWx1ZXMgYW5kIGJyZWFrIHRoZVxuICAgICAgICAvLyBkZWZhdWx0cyBhbmQgcmVtZW1iZXIgc2FuaXRpc2F0aW9uIHByb2Nlc3MuXG4gICAgICAgIGlmICh0aGlzLmhhc1BhcmFtZXRlcihkZWYubmFtZSkpIHtcbiAgICAgICAgICBwYXJhbXNbZGVmLm5hbWVdID0gdGhpcy5nZXRQYXJhbWV0ZXIoZGVmLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBWaXNpdCh0aGlzLnBsYWNlRGVmaW5pdGlvbiwgcGFyYW1zKTtcbiAgfVxuXG4gIGhhc1JvdXRpbmdDaGFuZ2VkRnJvbShvdGhlcjogVmlzaXQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYW1lUGxhY2UgPSBvdGhlci5wbGFjZURlZmluaXRpb24gPT09IHRoaXMucGxhY2VEZWZpbml0aW9uO1xuICAgIGNvbnN0IHNhbWVSb3V0ZVBhcmFtZXRlcnMgPSBfLmlzRXF1YWwoXG4gICAgICB0aGlzLnBsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModGhpcywgdHJ1ZSksXG4gICAgICB0aGlzLnBsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnMob3RoZXIsIHRydWUpXG4gICAgKTtcbiAgICByZXR1cm4gIXNhbWVQbGFjZSB8fCAhc2FtZVJvdXRlUGFyYW1ldGVycztcbiAgfVxuXG4gIGhhc0NoYW5nZWRGcm9tKG90aGVyOiBWaXNpdCkge1xuICAgIGNvbnN0IHNhbWVOb25Sb3V0ZVBhcmFtZXRlcnMgPSBfLmlzRXF1YWwoXG4gICAgICB0aGlzLnBsYWNlRGVmaW5pdGlvbi5nZXROb25Sb3V0ZVBhcmFtZXRlcnModGhpcyksXG4gICAgICB0aGlzLnBsYWNlRGVmaW5pdGlvbi5nZXROb25Sb3V0ZVBhcmFtZXRlcnMob3RoZXIpXG4gICAgKTtcbiAgICByZXR1cm4gIXNhbWVOb25Sb3V0ZVBhcmFtZXRlcnMgfHwgdGhpcy5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ob3RoZXIpO1xuICB9XG5cbiAgZ2V0VXJsU2VnbWVudHMoKTogVXJsU2VnbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5wbGFjZURlZmluaXRpb24uaGFzUm91dGVJZCgpID9cbiAgICAgIFtuZXcgVXJsU2VnbWVudCh0aGlzLnBsYWNlRGVmaW5pdGlvbi5wYXRoLCB7fSksIG5ldyBVcmxTZWdtZW50KHRoaXMucGxhY2VEZWZpbml0aW9uLmdldEZvcm1hdHRlZFJvdXRlSWQodGhpcyksIHRoaXMucGxhY2VEZWZpbml0aW9uLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh0aGlzKSldIDpcbiAgICAgIFtuZXcgVXJsU2VnbWVudCh0aGlzLnBsYWNlRGVmaW5pdGlvbi5wYXRoLCB0aGlzLnBsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModGhpcykpXTtcbiAgfVxufVxuIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaXQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2UvdmlzaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7OztBQUk1QixxQkFFQztBQUdEO0lBRUUsZUFBcUIsZUFBZ0MsRUFBbUIsZUFBNEI7UUFBNUIsZ0NBQUEsRUFBQSxvQkFBNEI7UUFBL0Usb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQW1CLG9CQUFlLEdBQWYsZUFBZSxDQUFhO0lBQ3BHLENBQUM7SUFFRCxXQUFXOzs7OztJQUNYLDBCQUFVOzs7OztJQUFWO1FBQ0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsV0FBVzs7Ozs7SUFDWCwwQkFBVTs7Ozs7SUFBVjtRQUNFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7T0FLRzs7Ozs7Ozs7SUFDSCw0QkFBWTs7Ozs7OztJQUFaLFVBQWEsYUFBcUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXOzs7Ozs7SUFDWCw0QkFBWTs7Ozs7O0lBQVosVUFBYSxhQUFxQjtRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRSxDQUFDOzs7Ozs7O0lBRUQsdUJBQU87Ozs7OztJQUFQLFVBQVcsU0FBc0MsRUFBRSxLQUFROztRQUN6RCxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLHVCQUFPLElBQUksQ0FBQyxlQUFlLGVBQUcsU0FBUyxDQUFDLElBQUksSUFBRyxLQUFLLE9BQUcsQ0FBQztJQUMvRixDQUFDOzs7Ozs7SUFFRCxvQ0FBb0I7Ozs7O0lBQXBCLFVBQXdCLFdBQWlDO1FBQXpELGlCQW1CQzs7O1lBakJPLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDOztZQUM3QyxNQUFNLEdBQUcsRUFBRTtRQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixFQUFFLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsR0FBRztZQUN0RCxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDMUM7YUFDRjtpQkFBTTs7OztvQkFHQyxLQUFLLEdBQUcsS0FBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDMUI7YUFDRjtRQUNILENBQUMsRUFBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7Ozs7O0lBRUQscUNBQXFCOzs7O0lBQXJCLFVBQXNCLEtBQVk7O1lBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlOztZQUMxRCxtQkFBbUIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzlEO1FBQ0QsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQzVDLENBQUM7Ozs7O0lBRUQsOEJBQWM7Ozs7SUFBZCxVQUFlLEtBQVk7O1lBQ25CLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQ2xEO1FBQ0QsT0FBTyxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUgsWUFBQztBQUFELENBQUMsQUF4RUQsSUF3RUM7Ozs7SUF0RWEsZ0NBQXlDOzs7OztJQUFFLGdDQUE2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVybFNlZ21lbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUGxhY2VEZWZpbml0aW9uIH0gZnJvbSAnLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7IFBhcmFtZXRlckRlZmluaXRpb24gfSBmcm9tICcuL3JvdXRlL3BhcmFtZXRlci1kZWZpbml0aW9uLmNsYXNzJztcblxuaW50ZXJmYWNlIFBhcmFtcyB7XG4gIFtwOiBzdHJpbmddOiBhbnlcbn1cblxuXG5leHBvcnQgY2xhc3MgVmlzaXQge1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHBsYWNlRGVmaW5pdGlvbjogUGxhY2VEZWZpbml0aW9uLCBwcml2YXRlIHJlYWRvbmx5IHZpc2l0UGFyYW1ldGVyczogUGFyYW1zID0ge30pIHtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGdldFJvdXRlSWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wbGFjZURlZmluaXRpb24uZ2V0Um91dGVJZEZyb20odGhpcyk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBoYXNSb3V0ZUlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhXy5pc05pbCh0aGlzLmdldFJvdXRlSWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHBsYWNlIHBhcmFtZXRlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gIFRoZSBwYXJhbWV0ZXJcbiAgICogbmFtZSBpcyB0YWtlbiBmcm9tIHRoZSBgYXNgIG9wdGlvbiwgZS5nLiB7YXM6ICdhQ3VzdG9tTmFtZSd9IG90aGVyd2lzZSBpdCBpcyB0aGVcbiAgICogc2FtZSBhcyB0aGUgdGhlIFZhbHVlTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHBhcmFtZXRlck5hbWUgdGhlIGZpZWxkIG5hbWUgb2YgdGhlIHByb3BlcnR5IG1vZGVsIG9yIHRoZSBgYXNgIG9wdGlvbiBpZiBzcGVjaWZpZWQuXG4gICAqL1xuICBnZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52aXNpdFBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV07XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBoYXNQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmlzaXRQYXJhbWV0ZXJzKS5pbmNsdWRlcyhwYXJhbWV0ZXJOYW1lKTtcbiAgfVxuXG4gIHJlcGxhY2U8Uz4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueSwgUz4sIHZhbHVlOiBTKTogVmlzaXQge1xuICAgIHJldHVybiBuZXcgVmlzaXQodGhpcy5wbGFjZURlZmluaXRpb24sIHsgLi4udGhpcy52aXNpdFBhcmFtZXRlcnMsIFtwYXJhbWV0ZXIubmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgbWVyZ2VSb3V0ZVBhcmFtZXRlcnM8Uz4ocm91dGVQYXJhbXM6IHsgW3A6IHN0cmluZ106IGFueSB9KTogVmlzaXQge1xuICAgIC8vIHRvZG86IHdoaXRlbGlzdCBwYXJhbWV0ZXJzLlxuICAgIGNvbnN0IHJvdXRlUGFyYW1ldGVyS2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlUGFyYW1zKTtcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICB0aGlzLnBsYWNlRGVmaW5pdGlvbi5nZXRWaXNpdFBhcmFtZXRlckRlZnMoKS5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICBpZiAoZGVmLmlzUm91dGVJZCB8fCBkZWYuaXNSb3V0ZVBhcmFtZXRlcikge1xuICAgICAgICBpZiAocm91dGVQYXJhbWV0ZXJLZXlzLmluY2x1ZGVzKGRlZi5uYW1lKSkge1xuICAgICAgICAgIHBhcmFtc1tkZWYubmFtZV0gPSByb3V0ZVBhcmFtc1tkZWYubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvcHkgbm9uIHJvdXRlIHBhcmFtcyBhcyBpcywgYnV0IG9ubHkgaWYgdGhleSBhbHJlYWR5IGV4aXN0IG90aGVyd2lzZSB3ZSdsbCBpbmplY3QgbmlsIHZhbHVlcyBhbmQgYnJlYWsgdGhlXG4gICAgICAgIC8vIGRlZmF1bHRzIGFuZCByZW1lbWJlciBzYW5pdGlzYXRpb24gcHJvY2Vzcy5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFBhcmFtZXRlcihkZWYubmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmhhc1BhcmFtZXRlcihkZWYubmFtZSkpIHtcbiAgICAgICAgICBwYXJhbXNbZGVmLm5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFZpc2l0KHRoaXMucGxhY2VEZWZpbml0aW9uLCBwYXJhbXMpO1xuICB9XG5cbiAgaGFzUm91dGluZ0NoYW5nZWRGcm9tKG90aGVyOiBWaXNpdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhbWVQbGFjZSA9IG90aGVyLnBsYWNlRGVmaW5pdGlvbiA9PT0gdGhpcy5wbGFjZURlZmluaXRpb247XG4gICAgY29uc3Qgc2FtZVJvdXRlUGFyYW1ldGVycyA9IF8uaXNFcXVhbChcbiAgICAgIHRoaXMucGxhY2VEZWZpbml0aW9uLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh0aGlzLCB0cnVlKSxcbiAgICAgIHRoaXMucGxhY2VEZWZpbml0aW9uLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyhvdGhlciwgdHJ1ZSlcbiAgICApO1xuICAgIHJldHVybiAhc2FtZVBsYWNlIHx8ICFzYW1lUm91dGVQYXJhbWV0ZXJzO1xuICB9XG5cbiAgaGFzQ2hhbmdlZEZyb20ob3RoZXI6IFZpc2l0KSB7XG4gICAgY29uc3Qgc2FtZU5vblJvdXRlUGFyYW1ldGVycyA9IF8uaXNFcXVhbChcbiAgICAgIHRoaXMucGxhY2VEZWZpbml0aW9uLmdldE5vblJvdXRlUGFyYW1ldGVycyh0aGlzKSxcbiAgICAgIHRoaXMucGxhY2VEZWZpbml0aW9uLmdldE5vblJvdXRlUGFyYW1ldGVycyhvdGhlcilcbiAgICApO1xuICAgIHJldHVybiAhc2FtZU5vblJvdXRlUGFyYW1ldGVycyB8fCB0aGlzLmhhc1JvdXRpbmdDaGFuZ2VkRnJvbShvdGhlcik7XG4gIH1cblxufVxuIl19
@@ -7,7 +7,7 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
7
7
  import { GarbageCollector, assert, UnaryCommand, lang, Dsl, Logger, DelegatingFormValueModel, UseDelegate, ValueModel, ListModel, StoreInListModel, DelegatingValueModel, MutableStream, MutableListModel, DelegatingListModel, Binding, MutableValueModel, Trace, Guard as Guard$1, Command, StoreInValueModel, OptionsHelper, ValueHolder } from '@coolon/pectin';
8
8
  import { __decorate, __metadata, __awaiter } from 'tslib';
9
9
  import { PortalModule } from '@angular/cdk/portal';
10
- import { Router, RouterModule, UrlSegment, NavigationStart, NavigationEnd, NavigationError, ActivatedRouteSnapshot, RouterStateSnapshot, UrlSerializer } from '@angular/router';
10
+ import { Router, RouterModule, NavigationStart, NavigationEnd, NavigationError, UrlSerializer, UrlSegment, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
11
11
  import ___default, { last, isNil, isEqual } from 'lodash';
12
12
  import { assert as assert$1, Opts, Klass } from '@coolon/typescript-utilities';
13
13
  import { MatDialogConfig, MAT_DIALOG_DEFAULT_OPTIONS, MatDialog as MatDialog$1 } from '@angular/material/dialog';
@@ -750,6 +750,21 @@ class InteractionContext extends GarbageCollector {
750
750
  get currentActivity() {
751
751
  return last(this.activityList.value);
752
752
  }
753
+ /**
754
+ * @param {?} confirm
755
+ * @return {?}
756
+ */
757
+ confirm(confirm) {
758
+ return __awaiter(this, void 0, void 0, function* () {
759
+ try {
760
+ yield this.confirmOrReject(confirm);
761
+ return true;
762
+ }
763
+ catch (_a) {
764
+ return false;
765
+ }
766
+ });
767
+ }
753
768
  }
754
769
  if (false) {
755
770
  /**
@@ -777,7 +792,7 @@ if (false) {
777
792
  * @param {?} confirm
778
793
  * @return {?}
779
794
  */
780
- InteractionContext.prototype.confirm = function (confirm) { };
795
+ InteractionContext.prototype.confirmOrReject = function (confirm) { };
781
796
  /**
782
797
  * Presents the confirmation to the user and runs the activity only if the user confirms.
783
798
  * @abstract
@@ -1422,7 +1437,7 @@ class ActivityContainerComponent extends InteractionContext {
1422
1437
  * @param {?} confirm
1423
1438
  * @return {?}
1424
1439
  */
1425
- confirm(confirm) {
1440
+ confirmOrReject(confirm) {
1426
1441
  return this.startActivity(ConfirmationDialogComponent, confirm);
1427
1442
  }
1428
1443
  /**
@@ -1607,7 +1622,7 @@ class InplaceInteractionContextComponent extends InteractionContext {
1607
1622
  * @param {?} confirm
1608
1623
  * @return {?}
1609
1624
  */
1610
- confirm(confirm) {
1625
+ confirmOrReject(confirm) {
1611
1626
  return this._startActivity(ConfirmationDialogComponent, confirm);
1612
1627
  }
1613
1628
  /**
@@ -1903,7 +1918,7 @@ class DialogInteractionService extends InteractionContext {
1903
1918
  * @param {?} confirm
1904
1919
  * @return {?}
1905
1920
  */
1906
- confirm(confirm) {
1921
+ confirmOrReject(confirm) {
1907
1922
  return this._startActivity(ConfirmationDialogComponent, confirm, true);
1908
1923
  }
1909
1924
  /**
@@ -2343,20 +2358,15 @@ class PlaceDefinition {
2343
2358
  return routeIdParameterDef ? visit.getParameter(routeIdParameterDef.name) : null;
2344
2359
  }
2345
2360
  /**
2346
- * Returns angular router commands that specify the route id and any route parameters. The result does
2347
- * not include any path information.
2348
2361
  * @param {?} visit
2349
2362
  * @return {?}
2350
2363
  */
2351
- // getFormattedRouterCommands(visit: Visit): any[] {
2352
- // return this.hasRouteId() ?
2353
- // [this.getFormattedRouteId(visit), this.getFormattedRouteParameters(visit)] :
2354
- // [this.getFormattedRouteParameters(visit)];
2355
- // }
2356
2364
  getFormattedRouteId(visit) {
2357
- return visit.hasRouteId() ? this.getRouteIdParameterDef().urlFormat.format(visit.getRouteId()) : null;
2365
+ // Note: RouteIds are always present in the url and are just empty strings when not defined. This is
2366
+ // mandated by the fact that redirects from <path> to <path>/:id always include the id parameter as
2367
+ // an empty string.
2368
+ return visit.hasRouteId() ? this.getRouteIdParameterDef().urlFormat.format(visit.getRouteId()) : "";
2358
2369
  }
2359
- // @Trace()
2360
2370
  /**
2361
2371
  * @param {?} visit
2362
2372
  * @param {?=} includeRouteId
@@ -2441,15 +2451,17 @@ class PlaceDefinition {
2441
2451
  }
2442
2452
  else {
2443
2453
  /** @type {?} */
2444
- const value = def.urlFormat.parse(params.get(def.name));
2445
- // because our id routes redirect if the id isn't pressent we always have a id
2446
- // parameter in our params. This will bugger our remember and defaultvalue sanitisation
2447
- // as it'll see that the id is present (event thought its null). The sanitisation can't
2448
- // check for null as that's a valid value for the id.
2449
- /** @type {?} */
2450
- const isEmptyRouteId = def.isRouteId && def.isEmptyValue(value);
2451
- if (!isEmptyRouteId) {
2452
- result[def.name] = value;
2454
+ const value = params.get(def.name);
2455
+ if (def.isRouteId) { // TODO: Move this to parameter def so it's a strategy pattern
2456
+ // because our id routes redirect if the id isn't present we always have a id
2457
+ // parameter in our params. This will bugger our remember and defaultvalue sanitisation
2458
+ // as it'll see that the id is present (event thought its a blank string).
2459
+ if (!___default.isEmpty(value)) {
2460
+ result[def.name] = def.urlFormat.parse(value);
2461
+ }
2462
+ }
2463
+ else {
2464
+ result[def.name] = def.urlFormat.parse(value);
2453
2465
  }
2454
2466
  }
2455
2467
  }
@@ -2736,8 +2748,10 @@ class Visit {
2736
2748
  else {
2737
2749
  // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
2738
2750
  // defaults and remember sanitisation process.
2751
+ /** @type {?} */
2752
+ const value = this.getParameter(def.name);
2739
2753
  if (this.hasParameter(def.name)) {
2740
- params[def.name] = this.getParameter(def.name);
2754
+ params[def.name] = value;
2741
2755
  }
2742
2756
  }
2743
2757
  }));
@@ -2763,14 +2777,6 @@ class Visit {
2763
2777
  const sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
2764
2778
  return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
2765
2779
  }
2766
- /**
2767
- * @return {?}
2768
- */
2769
- getUrlSegments() {
2770
- return this.placeDefinition.hasRouteId() ?
2771
- [new UrlSegment(this.placeDefinition.path, {}), new UrlSegment(this.placeDefinition.getFormattedRouteId(this), this.placeDefinition.getFormattedRouteParameters(this))] :
2772
- [new UrlSegment(this.placeDefinition.path, this.placeDefinition.getFormattedRouteParameters(this))];
2773
- }
2774
2780
  }
2775
2781
  if (false) {
2776
2782
  /** @type {?} */
@@ -3013,12 +3019,14 @@ if (false) {
3013
3019
  class PlaceRouter extends GarbageCollector {
3014
3020
  /**
3015
3021
  * @param {?} router
3022
+ * @param {?} urlSerializer
3016
3023
  * @param {?} angularLocation
3017
3024
  * @param {?} placeHistory
3018
3025
  */
3019
- constructor(router, angularLocation, placeHistory) {
3026
+ constructor(router, urlSerializer, angularLocation, placeHistory) {
3020
3027
  super();
3021
3028
  this.router = router;
3029
+ this.urlSerializer = urlSerializer;
3022
3030
  this.angularLocation = angularLocation;
3023
3031
  this.placeHistory = placeHistory;
3024
3032
  this.firstRoute = true;
@@ -3124,21 +3132,19 @@ class PlaceRouter extends GarbageCollector {
3124
3132
  * @return {?}
3125
3133
  */
3126
3134
  router => {
3127
- // we have to to use the definition for route id as our redirection always includes
3128
- // the id in the url segements (but leaves it blank when there's no id). I.e. in the
3129
- // no id case we're doing the following redirect [<placePath>, ""] -> ["..", <id>]
3130
- /** @type {?} */
3131
- const relativePath = !!previous.placeDefinition.hasRouteId() ? '..' : '.';
3132
3135
  /** @type {?} */
3133
- const commands = [
3134
- relativePath,
3135
- ...this.createRouteParameters(next),
3136
- ...this.extractChildPath(activatedRoute.snapshot)
3137
- ];
3138
- console.log('### Push Changes to route Redirect', { commands, relativeTo: activatedRoute.snapshot.url });
3139
- return router.navigate(commands, {
3140
- relativeTo: activatedRoute
3141
- });
3136
+ const commands = this.createUrlManipulator(this.router.routerState.snapshot).createRedirectCommandsFor(next);
3137
+ // // we have to to use the definition for route id as our redirection always includes
3138
+ // // the id in the url segements (but leaves it blank when there's no id). I.e. in the
3139
+ // // no id case we're doing the following redirect [<placePath>, ""] -> ["..", <id>]
3140
+ // const relativePath = !!previous.placeDefinition.hasRouteId() ? '..' : '.';
3141
+ // const commands = [
3142
+ // relativePath,
3143
+ // ...this.createRouteParameters(next),
3144
+ // ...this.extractChildPath(activatedRoute.snapshot)
3145
+ // ];
3146
+ console.log('### Push Changes to route Redirect', { commands });
3147
+ return router.navigate(commands);
3142
3148
  }));
3143
3149
  }
3144
3150
  });
@@ -3224,6 +3230,13 @@ class PlaceRouter extends GarbageCollector {
3224
3230
  */
3225
3231
  child => child.url)));
3226
3232
  }
3233
+ /**
3234
+ * @param {?} snapshot
3235
+ * @return {?}
3236
+ */
3237
+ createUrlManipulator(snapshot) {
3238
+ return new PlaceRouter.UrlManipulator(this.urlSerializer.parse(snapshot.url));
3239
+ }
3227
3240
  }
3228
3241
  PlaceRouter.decorators = [
3229
3242
  { type: Injectable, args: [{
@@ -3233,10 +3246,11 @@ PlaceRouter.decorators = [
3233
3246
  /** @nocollapse */
3234
3247
  PlaceRouter.ctorParameters = () => [
3235
3248
  { type: Router },
3249
+ { type: UrlSerializer },
3236
3250
  { type: Location },
3237
3251
  { type: PlaceHistory }
3238
3252
  ];
3239
- /** @nocollapse */ PlaceRouter.ngInjectableDef = ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(ɵɵinject(Router), ɵɵinject(Location), ɵɵinject(PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
3253
+ /** @nocollapse */ PlaceRouter.ngInjectableDef = ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(ɵɵinject(Router), ɵɵinject(UrlSerializer), ɵɵinject(Location), ɵɵinject(PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
3240
3254
  __decorate([
3241
3255
  Trace(),
3242
3256
  __metadata("design:type", Function),
@@ -3268,11 +3282,107 @@ if (false) {
3268
3282
  * @private
3269
3283
  */
3270
3284
  PlaceRouter.prototype.router;
3285
+ /**
3286
+ * @type {?}
3287
+ * @private
3288
+ */
3289
+ PlaceRouter.prototype.urlSerializer;
3271
3290
  /** @type {?} */
3272
3291
  PlaceRouter.prototype.angularLocation;
3273
3292
  /** @type {?} */
3274
3293
  PlaceRouter.prototype.placeHistory;
3275
3294
  }
3295
+ (function (PlaceRouter) {
3296
+ class UrlManipulator {
3297
+ /**
3298
+ * @param {?} urlTree
3299
+ */
3300
+ constructor(urlTree) {
3301
+ this.urlTree = urlTree;
3302
+ console.log({ segments: this.urlTree.root.children.primary.segments });
3303
+ }
3304
+ /**
3305
+ * @return {?}
3306
+ */
3307
+ cloneUrlSegmentList() {
3308
+ return [...this.urlTree.root.children.primary.segments];
3309
+ }
3310
+ /**
3311
+ * @param {?} visit
3312
+ * @return {?}
3313
+ */
3314
+ updateVisitSegments(visit) {
3315
+ // Ugly, but it works for now.
3316
+ /** @type {?} */
3317
+ const segments = this.cloneUrlSegmentList();
3318
+ /** @type {?} */
3319
+ const visitSegments = this.convertToUrlSegments(visit);
3320
+ /** @type {?} */
3321
+ const replaceAt = segments.findIndex((/**
3322
+ * @param {?} segment
3323
+ * @return {?}
3324
+ */
3325
+ segment => segment.path === visitSegments[0].path));
3326
+ // do not use the return value, it's the items that were removed!
3327
+ segments.splice(replaceAt, visitSegments.length, ...visitSegments);
3328
+ return segments;
3329
+ }
3330
+ /**
3331
+ * Converts the visit into segments. Please not that these segments are not e
3332
+ * @param {?} visit
3333
+ * @return {?}
3334
+ */
3335
+ convertToUrlSegments(visit) {
3336
+ return visit.placeDefinition.hasRouteId() ?
3337
+ [
3338
+ // NOTE:
3339
+ // It's important to attach the params to the root path and not the id. If we attach them
3340
+ // to an empty id then the angular router won't match the pattern.
3341
+ new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit)),
3342
+ new UrlSegment(visit.placeDefinition.getFormattedRouteId(visit), {})
3343
+ ]
3344
+ :
3345
+ [
3346
+ new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit))
3347
+ ];
3348
+ }
3349
+ /**
3350
+ * @param {?} visit
3351
+ * @return {?}
3352
+ */
3353
+ createRedirectCommandsFor(visit) {
3354
+ /** @type {?} */
3355
+ const segments = this.updateVisitSegments(visit);
3356
+ /** @type {?} */
3357
+ const commands = [];
3358
+ segments.forEach((/**
3359
+ * @param {?} s
3360
+ * @return {?}
3361
+ */
3362
+ s => {
3363
+ commands.push(s.path);
3364
+ if (s.parameterMap.keys.length > 0) {
3365
+ commands.push(s.parameters);
3366
+ }
3367
+ }));
3368
+ return commands;
3369
+ }
3370
+ }
3371
+ __decorate([
3372
+ Trace(),
3373
+ __metadata("design:type", Function),
3374
+ __metadata("design:paramtypes", [Visit]),
3375
+ __metadata("design:returntype", Array)
3376
+ ], UrlManipulator.prototype, "createRedirectCommandsFor", null);
3377
+ PlaceRouter.UrlManipulator = UrlManipulator;
3378
+ if (false) {
3379
+ /**
3380
+ * @type {?}
3381
+ * @private
3382
+ */
3383
+ UrlManipulator.prototype.urlTree;
3384
+ }
3385
+ })(PlaceRouter || (PlaceRouter = {}));
3276
3386
 
3277
3387
  /**
3278
3388
  * @fileoverview added by tsickle
@@ -4851,10 +4961,9 @@ class EnterPlaceGuard {
4851
4961
  // Save the visit with any updated parameters. We need to save it so we remember any non route parameters
4852
4962
  this.placeRouter.navigationSession.storeVisit(sanitisedVisit);
4853
4963
  if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {
4854
- /** @type {?} */
4855
- const routerStateUrlTree = this.urlSerializer.parse(state.url);
4856
4964
  // Regenerate the url
4857
- const { commands } = this.createRedirectCommands(sanitisedVisit, [...routerStateUrlTree.root.children.primary.segments]);
4965
+ /** @type {?} */
4966
+ const commands = this.placeRouter.createUrlManipulator(state).createRedirectCommandsFor(sanitisedVisit);
4858
4967
  console.log('##### Place Guard Redirect', commands);
4859
4968
  return this.router.createUrlTree(commands, {
4860
4969
  replaceUrl: true,
@@ -4870,40 +4979,6 @@ class EnterPlaceGuard {
4870
4979
  }
4871
4980
  });
4872
4981
  }
4873
- /**
4874
- * @private
4875
- * @param {?} sanitisedVisit
4876
- * @param {?} path
4877
- * @return {?}
4878
- */
4879
- createRedirectCommands(sanitisedVisit, path) {
4880
- // Ugly, but it works for now.
4881
- /** @type {?} */
4882
- const newSegments = sanitisedVisit.getUrlSegments();
4883
- /** @type {?} */
4884
- const replaceAt = path.findIndex((/**
4885
- * @param {?} segment
4886
- * @return {?}
4887
- */
4888
- segment => segment.path === newSegments[0].path));
4889
- /** @type {?} */
4890
- const newPath = [...path];
4891
- newPath.splice(replaceAt, newSegments.length, ...newSegments); // do not use the return value, it's the items that were removed!
4892
- // do not use the return value, it's the items that were removed!
4893
- /** @type {?} */
4894
- const commands = [];
4895
- newPath.forEach((/**
4896
- * @param {?} s
4897
- * @return {?}
4898
- */
4899
- s => {
4900
- commands.push(s.path);
4901
- if (s.parameterMap.keys.length > 0) {
4902
- commands.push(s.parameters);
4903
- }
4904
- }));
4905
- return { newPath, commands };
4906
- }
4907
4982
  }
4908
4983
  EnterPlaceGuard.decorators = [
4909
4984
  { type: Injectable, args: [{