@intuitionrobotics/thunderstorm
Version:
68 lines • 2.26 kB
JavaScript
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