2017-12-20 05:33:33 -06:00
|
|
|
import coreModule from 'app/core/core_module';
|
2019-07-18 01:03:04 -05:00
|
|
|
import { BackendSrv } from 'app/core/services/backend_srv';
|
2017-12-19 06:33:34 -06:00
|
|
|
|
2018-02-03 03:03:01 -06:00
|
|
|
const hitTypes = {
|
|
|
|
FOLDER: 'dash-folder',
|
|
|
|
DASHBOARD: 'dash-db',
|
|
|
|
};
|
|
|
|
|
2017-12-19 06:33:34 -06:00
|
|
|
export class ValidationSrv {
|
2018-02-02 03:33:31 -06:00
|
|
|
rootName = 'general';
|
2017-12-19 06:33:34 -06:00
|
|
|
|
2019-12-14 10:50:31 -06:00
|
|
|
/** @ngInject */
|
2019-12-05 03:04:03 -06:00
|
|
|
constructor(private backendSrv: BackendSrv) {}
|
2017-12-19 06:33:34 -06:00
|
|
|
|
2019-07-18 01:03:04 -05:00
|
|
|
validateNewDashboardName(folderId: any, name: string) {
|
2018-02-03 03:03:01 -06:00
|
|
|
return this.validate(folderId, name, 'A dashboard in this folder with the same name already exists');
|
|
|
|
}
|
|
|
|
|
2019-07-18 01:03:04 -05:00
|
|
|
validateNewFolderName(name: string) {
|
2018-02-03 03:03:01 -06:00
|
|
|
return this.validate(0, name, 'A folder or dashboard in the general folder with the same name already exists');
|
|
|
|
}
|
|
|
|
|
2019-07-18 01:03:04 -05:00
|
|
|
private validate(folderId: any, name: string, existingErrorMessage: string) {
|
2017-12-20 05:33:33 -06:00
|
|
|
name = (name || '').trim();
|
2018-02-03 03:03:01 -06:00
|
|
|
const nameLowerCased = name.toLowerCase();
|
2017-12-19 06:33:34 -06:00
|
|
|
|
|
|
|
if (name.length === 0) {
|
2019-12-05 03:04:03 -06:00
|
|
|
return Promise.reject({
|
2017-12-20 05:33:33 -06:00
|
|
|
type: 'REQUIRED',
|
|
|
|
message: 'Name is required',
|
2017-12-19 06:33:34 -06:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-02-03 03:03:01 -06:00
|
|
|
if (folderId === 0 && nameLowerCased === this.rootName) {
|
2019-12-05 03:04:03 -06:00
|
|
|
return Promise.reject({
|
2017-12-20 05:33:33 -06:00
|
|
|
type: 'EXISTING',
|
2018-02-02 03:33:31 -06:00
|
|
|
message: 'This is a reserved name and cannot be used for a folder.',
|
2017-12-19 06:33:34 -06:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-02-03 03:03:01 -06:00
|
|
|
const promises = [];
|
|
|
|
promises.push(this.backendSrv.search({ type: hitTypes.FOLDER, folderIds: [folderId], query: name }));
|
|
|
|
promises.push(this.backendSrv.search({ type: hitTypes.DASHBOARD, folderIds: [folderId], query: name }));
|
|
|
|
|
2019-12-05 03:04:03 -06:00
|
|
|
return Promise.all(promises).then(res => {
|
2019-07-18 01:03:04 -05:00
|
|
|
let hits: any[] = [];
|
2018-02-03 03:03:01 -06:00
|
|
|
|
|
|
|
if (res.length > 0 && res[0].length > 0) {
|
|
|
|
hits = res[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (res.length > 1 && res[1].length > 0) {
|
|
|
|
hits = hits.concat(res[1]);
|
|
|
|
}
|
|
|
|
|
2018-08-26 10:14:40 -05:00
|
|
|
for (const hit of hits) {
|
2018-02-03 03:03:01 -06:00
|
|
|
if (nameLowerCased === hit.title.toLowerCase()) {
|
2019-12-05 03:04:03 -06:00
|
|
|
throw {
|
2017-12-20 05:33:33 -06:00
|
|
|
type: 'EXISTING',
|
2018-02-03 03:03:01 -06:00
|
|
|
message: existingErrorMessage,
|
2019-12-05 03:04:03 -06:00
|
|
|
};
|
2017-12-19 06:33:34 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-12-05 03:04:03 -06:00
|
|
|
return;
|
2017-12-19 06:33:34 -06:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-20 05:33:33 -06:00
|
|
|
coreModule.service('validationSrv', ValidationSrv);
|