12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import type {Location} from 'history';
- import capitalize from 'lodash/capitalize';
- import snakeCase from 'lodash/snakeCase';
- import type {PlainRoute} from 'sentry/types/legacyReactRouter';
- import getRouteStringFromRoutes from 'sentry/utils/getRouteStringFromRoutes';
- /**
- * This converts parameters in a route to be the upper version of it with a slight adjustment with IDs
- * some_word becomes SomeWord
- * And :projectId becomes :ProjectId
- */
- const camelCaseRouteParameter = (word: string) => {
- const tokens = word.match(/:(\w+)/);
- if (tokens) {
- const idToken = tokens[1]!;
- // only capitalize the first letter of the id
- // to keep 'Id' instead of 'id'
- return `:${capitalize(idToken[0])}${idToken.slice(1)}`;
- }
- return capitalize(word);
- };
- /**
- * @param routes Routes from React Router
- * @returns A string representing the route path
- * Ex: /organizations/:orgid/alerts/new/:alerttype/ ->
- * Organizations :orgid Alerts New :alerttype
- */
- export function getEventPath(routes: PlainRoute[]) {
- const routeString = getRouteStringFromRoutes(routes);
- return routeString
- .split('/')
- .map(camelCaseRouteParameter)
- .filter(s => !!s)
- .join(' ');
- }
- /**
- * @param location Location from React Router
- * @returns A string representing the route path
- */
- export function getUrlFromLocation(location: Location) {
- const previousUrlObj = new URL(window.location.origin + location.pathname);
- previousUrlObj.search = location.search;
- previousUrlObj.hash = location.hash;
- return previousUrlObj.toString();
- }
- /**
- * @param string representing the route path in Amplitude format
- * @return Reload representation of the route path
- * Ex: Organizations :OrgId Alerts New :AlertType ->
- * organizations.:org_id.alerts.new.:alert_type
- */
- export function convertToReloadPath(routeString: string) {
- return routeString
- .split(' ')
- .map(tok => tok.replace(/[\w ]+/g, snakeCase))
- .join('.');
- }
|