Example: Using the router
See also: API documentation RouterService
The Router is optimized to support routing for host-applications with embedded SWIDGETS.
If you don’t use SWIDGETS and don’t plan to use it ever within your project, you can also use any other React-based Router. ___
Define routes
Every route-definition implements the IRouteConfig-Interface:
interface IRouteConfig {
    name: string;
    pattern: string;
    component: React.ComponentType<any>;
}
Name and pattern of each route should be unique.
The third parameter defines the root-component of the route.
Within the Bionic Boilerplate, the route-definition is done within ./src/routes/index.tsx:
import * as React from 'react';
import DemoContent from './DemoContent';
import Home from './Home';
import { IRouteConfig } from '@daimler/ftk-core';
const routes: IRouteConfig[] = [
  {
    component: Home,
    name: 'home',
    pattern: '/',
  },
  {
    component: DemoContent,
    name: 'demoContent',
    pattern: '/demoContent',
  },
];
export default routes;
Display route
To display the route content within your application, simply load the Route-Compontent within the DOM-tree of the App:
//...
import { Route } from '@daimler/ftk-core';
import routes from './routes';
//...
const swidget: ISwidget = (): JSX.Element => {
  return (
    <App name="my-app" init={init} config={config}>
        <Route />
    </App>
  );
};
//...
In the Bionic boilerplate this is done within ./src/App.tsx ___
Get route-link
To get a link based on the route-name, use the linkTo-Method from the RouterService:
import * as React from 'react';
import { inject, withInject, RouterService } from '@daimler/ftk-core';
class Home extends React.Component<{}, {}> {
    @inject()
    public router!: RouterService;
    public render(): JSX.Element {
        return (
            <React.Fragment>
                <a href={this.router.linkTo('demoContent')}>Link to demo-content</a>
            </React.Fragment>
        );
    }
}
export default withInject(Home);
To link to the home-route, you can use the linkToHome method. ___
Navigate to route
To navigate to a url, use the navigate-Method from the RouterService.
this.router.navigate(this.router.linkTo('demoContent'));
Notice: a navigateTo(routeName: string) method will be implemented soon.
To navigate to the home-route, you can use the navigateToHome method. ___
Route-parameters
Route-parameters can be set and accessed dynamically.
See the following route configuration:
const routes: IRouteConfig[] = [
  {
    component: Details,
    name: 'details',
    pattern: '/details/:group/:part',
  },
];
Set Route-parameters
this.router.linkTo(
    'details',
    { group: 'foo', part: 'bar' }
);
This will result to: /#!/details/foo/bar
Read Route-parameters
The route-parameters are attached to the parameter-member of every route:
import * as React from 'react';
import { inject, withInject, RouterService } from '@daimler/ftk-core';
class Details extends React.Component<{}, {}> {
    @inject()
    public router!: RouterService;
    public render(): JSX.Element {
        return (
            <React.Fragment>
                <p>Group: {this.router.getRoute().parameter.group}</p>
                <p>Part: {this.router.getRoute().parameter.part}</p>
            </React.Fragment>
        );
    }
}
export default withInject(Details);
As route-parameters are always dynamically, make sure, that you check if the value of each parameter is set (correctly), before you use it.
Query-parameters
Query-parameters can be set and accessed dynamically.
Set Query-parameters
this.router.linkTo(
    'demoContent',
    {},
    { queryParamOne: 'value1', queryParamTwo: 'value2' }
);
This will result to: /#!/demoContent?queryParamOne=value1&queryParamTwo=value2
Read Query-parameters
The query-parameters are attached to the query-member of every route:
import * as React from 'react';
import { inject, withInject, RouterService } from '@daimler/ftk-core';
class DemoContent extends React.Component<{}, {}> {
    @inject()
    public router!: RouterService;
    public render(): JSX.Element {
        return (
            <React.Fragment>
                Set queryParamOne: {this.router.getRoute().query.queryParamOne}
            </React.Fragment>
        );
    }
}
export default withInject(DemoContent);
As queries are always dynamically, make sure, that you check if the value of each parameter is set (correctly), before you use it.