1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { backendSrv } from 'app/core/services/backend_srv';
- const hitTypes = {
- FOLDER: 'dash-folder',
- DASHBOARD: 'dash-db',
- };
- export class ValidationSrv {
- rootName = 'general';
- validateNewDashboardName(folderId: any, name: string) {
- return this.validate(folderId, name, 'A dashboard or a folder with the same name already exists');
- }
- validateNewFolderName(name?: string) {
- return this.validate(0, name, 'A folder or dashboard in the general folder with the same name already exists');
- }
- private async validate(folderId: any, name: string | undefined, existingErrorMessage: string) {
- name = (name || '').trim();
- const nameLowerCased = name.toLowerCase();
- if (name.length === 0) {
- throw {
- type: 'REQUIRED',
- message: 'Name is required',
- };
- }
- if (folderId === 0 && nameLowerCased === this.rootName) {
- throw {
- type: 'EXISTING',
- message: 'This is a reserved name and cannot be used for a folder.',
- };
- }
- const promises = [];
- promises.push(backendSrv.search({ type: hitTypes.FOLDER, folderIds: [folderId], query: name }));
- promises.push(backendSrv.search({ type: hitTypes.DASHBOARD, folderIds: [folderId], query: name }));
- const res = await Promise.all(promises);
- let hits: any[] = [];
- if (res.length > 0 && res[0].length > 0) {
- hits = res[0];
- }
- if (res.length > 1 && res[1].length > 0) {
- hits = hits.concat(res[1]);
- }
- for (const hit of hits) {
- if (nameLowerCased === hit.title.toLowerCase()) {
- throw {
- type: 'EXISTING',
- message: existingErrorMessage,
- };
- }
- }
- return;
- }
- }
- export const validationSrv = new ValidationSrv();
|