druid/web-console/src/links.ts

95 lines
2.8 KiB
TypeScript

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 hasOwnProp from 'has-own-prop';
// This is set to the latest available version and should be updated to the next version before release
const DRUID_DOCS_VERSION = '0.20.0';
function fillVersion(str: string): string {
return str.replace(/\{\{VERSION}}/g, DRUID_DOCS_VERSION);
}
export interface Links {
websiteHref: string;
githubHref: string;
docsHref: string;
communityHref: string;
slackHref: string;
userGroup: string;
developerGroup: string;
}
const DEFAULT_LINKS: Links = {
websiteHref: 'https://druid.apache.org',
githubHref: 'https://github.com/apache/druid',
docsHref: fillVersion('https://druid.apache.org/docs/{{VERSION}}'),
communityHref: 'https://druid.apache.org/community/',
slackHref: 'https://druid.apache.org/community/join-slack',
userGroup: 'https://groups.google.com/forum/#!forum/druid-user',
developerGroup: 'https://lists.apache.org/list.html?dev@druid.apache.org',
};
const links = DEFAULT_LINKS;
export function setLinkOverrides(linkOverrides: Links) {
const keys = Object.keys(DEFAULT_LINKS) as (keyof Links)[];
for (const k of keys) {
if (hasOwnProp(linkOverrides, k)) {
links[k] = fillVersion(String(linkOverrides[k]));
}
}
}
export type LinkNames =
| 'WEBSITE'
| 'GITHUB'
| 'DOCS'
| 'DOCS_SQL'
| 'DOCS_RUNE'
| 'DOCS_API'
| 'COMMUNITY'
| 'SLACK'
| 'USER_GROUP'
| 'DEVELOPER_GROUP';
export function getLink(linkName: LinkNames): string {
switch (linkName) {
case 'WEBSITE':
return links.websiteHref;
case 'GITHUB':
return links.githubHref;
case 'DOCS':
return links.docsHref;
case 'DOCS_SQL':
return `${links.docsHref}/querying/sql.html`;
case 'DOCS_RUNE':
return `${links.docsHref}/querying/querying.html`;
case 'DOCS_API':
return `${links.docsHref}/operations/api-reference.html`;
case 'COMMUNITY':
return links.communityHref;
case 'SLACK':
return links.slackHref;
case 'USER_GROUP':
return links.userGroup;
case 'DEVELOPER_GROUP':
return links.developerGroup;
}
}