58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
export default {
|
|
methods: {
|
|
route(
|
|
routeName: string,
|
|
parameters: Record<string, number | string> = {}
|
|
): string | null {
|
|
let route =
|
|
Object.keys(window.__SYSTEM._routes).indexOf(routeName) !== -1
|
|
? window.__SYSTEM._routes[routeName]
|
|
: null;
|
|
if (!route) {
|
|
return route;
|
|
}
|
|
// copy parameters
|
|
const iParameters = Object.assign({}, parameters),
|
|
origin = window.location.origin,
|
|
hash = window.location.hash;
|
|
let pathname = route.replace(origin, ""),
|
|
search = window.location.search;
|
|
|
|
// Replace in path name.
|
|
for (const paramName in iParameters) {
|
|
const paramValue = parameters[paramName];
|
|
if (pathname.indexOf(paramName) !== -1) {
|
|
pathname = pathname.replace(
|
|
paramName,
|
|
paramValue as string
|
|
);
|
|
}
|
|
delete parameters[paramName];
|
|
}
|
|
|
|
for (let paramName in parameters) {
|
|
let paramValue = parameters[paramName];
|
|
if (search.indexOf(paramName + "=") >= 0) {
|
|
const prefix = search.substring(
|
|
0,
|
|
search.indexOf(paramName + "=")
|
|
);
|
|
let suffix = search.substring(
|
|
search.indexOf(paramName + "=")
|
|
);
|
|
suffix = suffix.substring(suffix.indexOf("=") + 1);
|
|
suffix =
|
|
suffix.indexOf("&") >= 0
|
|
? suffix.substring(suffix.indexOf("&"))
|
|
: "";
|
|
search = `${prefix}${paramName}=${paramValue}${suffix}`;
|
|
} else if (search.indexOf("?") < 0) {
|
|
search += `?${paramName}=${paramValue}`;
|
|
} else {
|
|
search += `&${paramName}=${paramValue}`;
|
|
}
|
|
}
|
|
return `${origin}${pathname}${search}${hash}`;
|
|
},
|
|
},
|
|
};
|