/* * Copyright OpenSearch Contributors * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ import { ResourceType, Action } from '../types'; /** * Build hash based url, encode the resourceId part * e.g. * buildUrl() => "/" (landing page) * buildUrl(ResourceType.roles) => "/roles" (role listing page) * buildUrl(ResourceType.roles, Action.create) => "/roles/create" (role creation page) * buildUrl(ResourceType.roles, Action.view, "../someRole") => "/roles/view/..%2FsomeRole" (role detail page) * buildUrl(ResourceType.roles, Action.view, "someRole", SubAction.mapuser) => "/roles/view/someRole/mapuser" (Map User page) * edge case (wrong usage) fallbacks: * buildUrl(undefined, Action.create) => "" * buildUrl(ResourceType.roles, undefined, "someRole") => "/roles" */ export function buildUrl( resouceType?: ResourceType, action?: Action, resourceId?: string, subAction?: string ) { const encodedResouceId = resourceId ? encodeURIComponent(resourceId) : undefined; const rawContents = [resouceType, action, encodedResouceId, subAction]; const contents = []; for (const content of rawContents) { if (content === undefined) { break; } contents.push(content); } return '/' + contents.join('/'); } export function buildHashUrl( resouceType?: ResourceType, action?: Action, resourceId?: string, subAction?: string ) { return '#' + buildUrl(resouceType, action, resourceId, subAction); }