documentation/wowl_markdown_doc/services/router.md

92 lines
2.6 KiB
Markdown
Raw Permalink Normal View History

# Router service
| Technical name | Dependencies |
| -------------- | ------------ |
| `router` | |
## Overview
The `router` service provides three features:
- information about the current route
- provides a way for the application to update the url, depending on its state
- listens to every hash change, and notifies the rest of the application
## Current route
The current route can be accessed with the `current` key. It contains the following
information:
- `pathname (string)`: the path for the current location (most likely `/web`)
- `search (object)`: a dictionary mapping each search keyword from the url to
its value. An empty string is the value if no value was explicitely given
- `hash (object)`: same as above, but for values described in the hash.
For example:
```js
// url = /web?debug=assets#action=123&owl&menu_id=174
const { pathname, search, hash } = env.services.router.current;
console.log(pathname); // /web
console.log(search); // { debug="assets" }
console.log(hash); // { action:123, owl: "", menu_id: 174 }
```
## Updating the URL
URL updates need to use the `pushState` method:
```js
pushState(hash: object, replace?: boolean)
```
The `hash` argument is an object containing a mapping from some key to some values.
If a value is set to an empty string, the key will be simply added to the url
without any value at all.
If true, the `replace` argument tells the router that the url hash should be
completely replaced. Otherwise, the new values will be added to the current url.
For example:
```ts
// url = /web#action_id=123
env.services.router.pushState({ menu_id: 321 });
// url is now /web#action_id=123&menu_id=321
env.services.router.pushState({ yipyip: "" }, replace: true);
// url is now /web#yipyip
```
Note that using `pushState` does not trigger a `hashchange` event, nor a
`ROUTE_CHANGE` in the main bus. This is because this method is intended to be
used "from the inside", to update the url so that it matches the actual current
displayed state.
## Reacting to hash changes
This is mostly useful for the action manager, which needs to act when something
in the url changed.
When created, the router listens to every (external) hash changes, and trigger a
`ROUTE_CHANGE` event on the main bus,
## Redirect URL
The `redirect` method will redirect the browser to `url`. If `wait` is true, sleep 1s and wait for the server (e.g. after a restart).
```js
redirect(url: string, wait?: boolean)
```
For example:
```ts
// The complete url is "www.localhost/wowl"
env.services.router.redirect("/wowl/tests");
// The complete url is "www.localhost/wowl/tests"
```