UNPKG

@intuitionrobotics/thunderstorm

Version:
68 lines 2.26 kB
import * as React from "react"; import { NavLink, Link, Route } from "react-router-dom"; import { ReactEntryComponentInjector } from "../component-loader/ReactEntryComponentInjector.js"; export class RoutePath { key; path; component; exact = false; logMessage; label; visible = () => !!this.label; enabled; constructor(key, route, component) { this.key = key; this.path = route; this.component = component; } setLogMessage(logMessage) { this.logMessage = logMessage; return this; } setLabel(label) { this.label = label; return this; } setVisible(visible) { this.visible = visible; return this; } setEnabled(enabled) { this.enabled = enabled; return this; } setExact(exact) { this.exact = exact; return this; } compose(params) { const paramsAsString = RoutePath.composeStringQuery(params); return this.path + paramsAsString; } static composeStringQuery(params) { let paramsAsString = ""; if (params) paramsAsString = Object.keys(params).reduce((toRet, key) => { let param = params[key]; if (typeof param === "function") param = param(); return `${toRet}&${key}=${param}`; }, paramsAsString); if (paramsAsString.length > 0) paramsAsString = `?${paramsAsString.substring(1)}`; return paramsAsString; } } const activeStyle = { color: 'blue' }; export const defaultNavLinkNode = (route) => { return React.createElement(NavLink, { key: route.key, to: route.path, activeStyle: activeStyle }, route.label); }; export const defaultLinkNode = (route, node) => { return React.createElement(Link, { key: route.key, to: route.path }, node || route.label || route.key); }; export const defaultRouteNode = (route) => { if (typeof route.component === "string") return React.createElement(ReactEntryComponentInjector, { src: route.component }); return React.createElement(Route, { exact: route.exact, key: route.key, path: route.path, component: route.component }); }; //# sourceMappingURL=route.js.map