Cannot mix static and dynamic routes even if conditional
steinybot opened this issue · 0 comments
steinybot commented
I was expecting something like this to work:
val id = dsl.string("[^/]+")
(emptyRule
| staticRoute("products", Products) ~> render(<.div("Products"))
| (staticRoute("products" / "add", AddProduct) ~> render(<.div("Add Product"))).addCondition(CallbackTo(true))
| dynamicRouteCT("products" / id.caseClass[ProductInfo]) ~> dynRender((info: ProductInfo) => <.div(s"Product ${info.id}"))
).notFound(redirectToPage(AddProduct)(HistoryReplace))
But going to products/add
fails with:
RoutingRulesF.scala:85 Uncaught japgolly.scalajs.react.extra.router.RoutingRulesF$Exception: Multiple (2) (unconditional) routes specified for path products/add
at http://localhost:8081/bug-reports-fastopt-bundle.js:3092:11
at $c_sjsr_AnonFunction0.apply__O (http://localhost:8081/bug-reports-fastopt-bundle.js:10644:43)
at $c_Ljapgolly_scalajs_react_callback_Trampoline$.run__Ljapgolly_scalajs_react_callback_Trampoline__O (http://localhost:8081/bug-reports-fastopt-bundle.js:1693:158)
at http://localhost:8081/bug-reports-fastopt-bundle.js:1860:62
at $c_sjsr_AnonFunction0.apply__O (http://localhost:8081/bug-reports-fastopt-bundle.js:10644:43)
at __webpack_modules__../bug-reports-fastopt.js.$c_Ljapgolly_scalajs_react_component_builder_ComponentBuilder$Step1$.initialState$extension__T__F0__Ljapgolly_scalajs_react_component_builder_ComponentBuilder$Step2 (http://localhost:8081/bug-reports-fastopt-bundle.js:1851:19)
at $c_sjsr_AnonFunction1.apply__O__O (http://localhost:8081/bug-reports-fastopt-bundle.js:10668:43)
at $c_Ljapgolly_scalajs_react_component_builder_ViaReactComponent$.japgolly$scalajs$react$component$builder$ViaReactComponent$$$anonfun$apply$2__Ljapgolly_scalajs_react_facade_React$Component__Ljapgolly_scalajs_react_internal_Box__sr_ObjectRef__F1__F1__Ljapgolly_scalajs_react_facade_React$Component (http://localhost:8081/bug-reports-fastopt-bundle.js:2244:31)
at new <anonymous> (http://localhost:8081/bug-reports-fastopt-bundle.js:2080:78)
at constructClassInstance (http://localhost:8081/bug-reports-fastopt-bundle.js:38596:18)
Ideally it would be without the condition as that was my attempt to trigger the rule that says "conditional routes are selected over unconditional routes" but that makes no difference.
It seems that this was unexpectedly encountered by others in the past after a new release: https://gitter.im/japgolly/scalajs-react?at=5e2ef481da04a624f49145d5
prepareParseFn
in japgolly.scalajs.react.extra.router.RoutingRulesF
only ever seems to return a static
route no matter if it was created by dynamicRoute
or not.
Reproduction: https://github.com/steinybot/bug-reports/tree/scalajs-react/static-and-dynamic-route