2022-11-30 02:41:01 -06:00
|
|
|
import { DataSourceJsonData, DataSourceSettings, urlUtil, locationUtil } from '@grafana/data';
|
|
|
|
|
2022-07-20 02:25:09 -05:00
|
|
|
interface ItemWithName {
|
|
|
|
name: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function nameExits(dataSources: ItemWithName[], name: string) {
|
|
|
|
return (
|
|
|
|
dataSources.filter((dataSource) => {
|
|
|
|
return dataSource.name.toLowerCase() === name.toLowerCase();
|
|
|
|
}).length > 0
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function findNewName(dataSources: ItemWithName[], name: string) {
|
|
|
|
// Need to loop through current data sources to make sure
|
|
|
|
// the name doesn't exist
|
|
|
|
while (nameExits(dataSources, name)) {
|
|
|
|
// If there's a duplicate name that doesn't end with '-x'
|
|
|
|
// we can add -1 to the name and be done.
|
|
|
|
if (!nameHasSuffix(name)) {
|
|
|
|
name = `${name}-1`;
|
|
|
|
} else {
|
|
|
|
// if there's a duplicate name that ends with '-x'
|
|
|
|
// we can try to increment the last digit until the name is unique
|
|
|
|
|
|
|
|
// remove the 'x' part and replace it with the new number
|
|
|
|
name = `${getNewName(name)}${incrementLastDigit(getLastDigit(name))}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
function nameHasSuffix(name: string) {
|
|
|
|
return name.endsWith('-', name.length - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getLastDigit(name: string) {
|
|
|
|
return parseInt(name.slice(-1), 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
function incrementLastDigit(digit: number) {
|
|
|
|
return isNaN(digit) ? 1 : digit + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getNewName(name: string) {
|
|
|
|
return name.slice(0, name.length - 1);
|
|
|
|
}
|
2022-11-30 02:41:01 -06:00
|
|
|
|
|
|
|
export const constructDataSourceExploreUrl = (dataSource: DataSourceSettings<DataSourceJsonData, {}>) => {
|
|
|
|
const exploreState = JSON.stringify({ datasource: dataSource.name, context: 'explore' });
|
|
|
|
const exploreUrl = urlUtil.renderUrl(locationUtil.assureBaseUrl('/explore'), { left: exploreState });
|
|
|
|
|
|
|
|
return exploreUrl;
|
|
|
|
};
|