How do you create routes with optional parameters in Sapper?
Asked Answered
J

3

7

Let's say I have a /foo route. But sometimes people hit /foo with a language parameter: /fr/foo. And other times they might hit it with a language and a country: /ca/fr/foo

So I need a routing table like

[country]/[language]/foo 
[language]/foo 
/foo 

That all direct to the same page.

Should I create a tree like this?

src/routes
└── [country]
    └── [language]
        └── foo.svelte

If that's the answer then how do I direct [language]/foo to [country]/[language]/foo?

I don't see any optional params in the docs

Jadwigajae answered 1/6, 2019 at 0:46 Comment(0)
S
8

Optional parameters aren't yet supported, but you can almost fake it with 'rest routes' (which I've just realised aren't yet documented 🤦‍♂️) — routes/[...parts]/foo.svelte would render foo.svelte with a page.params.parts array that contained the preceding segments.

Unfortunately that doesn't match /foo, which it arguably should. I've raised an issue: https://github.com/sveltejs/sapper/issues/765

Selfcongratulation answered 24/6, 2019 at 13:33 Comment(0)
K
1

In my case I needed /dashboard/reset/TOKEN/ID route. I made it worked with the following structure:

[acool@localhost cool-sapper-project]$ tree src/routes/
src/routes/
├── dashboard
│   ├── reset
│   │   └── [...parts].svelte

The above will make TOKEN and ID parameters available in params in your page:

<script context="module">
 export async function preload({ params }, session) {
 console.log(JSON.stringify(params));
}
</script>

Output:

{"parts":["2fd4e1c67a2d28fced849ee1bb76e7391b93eb12","1"]}

Good Luck!

Ketchan answered 8/1, 2020 at 19:54 Comment(0)
C
0

For any one looking for an answer. This is now supported.

src/routes
└── [country]
    └── [[language]]
        └── foo.svelte
Coxa answered 29/7, 2023 at 19:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.