Skip to content

fix: ensure router subpath is always matching against string starting with /

TheLD requested to merge theld/router-subpath-match into master

wer ist dagegen beim router immer zu garantieren dass die zu matchende route mit / beginnt? Problem: nested routers, top component hat einen parameter als letzten pfadteil:

// top component
@state() private readonly _router = new Router(this, [
  { name: 'root', render: params => this._content() },
  // Das geht nicht weil dann der parameter den ganzen rest des
  // pfades frisst und nichts an das nested component weitergegeben wird
  //  { name: 'content', path: '/:subPage*', render: params => this._content(params.subPage) },
  { name: 'content', path: '/:subPage', render: params => this._content(params.subPage) },
  // das frisst jetzt meinen slash D:
  { name: 'content-deep', path: '/:subPage/*', render: params => this._content(params.subPage) },
]);

// nested component
@state() private readonly _router = new Router<Record<string, any>, string, 'root' | Action>(this, [
  { name: 'root', render: params => this._content(this._table()) },
  // wenn ich nur ein name angebe defaulted der zu matchende path auf `/${name}*`
  { name: Action.CREATE, render: params => this._content(html` <wu-game-add-edit></wu-game-add-edit> `) },
  {
    name: Action.EDIT,
    path: `/${Action.EDIT}/:gameID`,
    render: params => this._content(html` <wu-game-add-edit .gameID=${params.gameID}></wu-game-add-edit> `),
  },
  {
    name: Action.DETAIL,
    path: `/${Action.DETAIL}/:gameID`,
    render: params => this._content(html` <wu-game-detail .gameID=${params.gameID}></wu-game-detail> `),
  },
]);

auf dem pfad /cms/game/create findet sich jetzt natürlich kein router, da im nested component der pfad create gegen /create* gematcht wird wäre auch interessant das im top component vereinfachen zu können irgendwie

das löst lustigerweise auch unser root route problem

Merge request reports