-
Notifications
You must be signed in to change notification settings - Fork 145
/
url-builder.tsx
56 lines (53 loc) 路 1.93 KB
/
url-builder.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
* 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 { Action } from '../types';
import { ResourceType } from '../../../../common';
/**
* 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);
}