| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import coreModule from 'app/core/core_module';
- const hitTypes = {
- FOLDER: 'dash-folder',
- DASHBOARD: 'dash-db',
- };
- export class ValidationSrv {
- rootName = 'general';
- /** @ngInject */
- constructor(private $q, private backendSrv) {}
- validateNewDashboardName(folderId, name) {
- return this.validate(folderId, name, 'A dashboard in this folder with the same name already exists');
- }
- validateNewFolderName(name) {
- return this.validate(0, name, 'A folder or dashboard in the general folder with the same name already exists');
- }
- private validate(folderId, name, existingErrorMessage) {
- name = (name || '').trim();
- const nameLowerCased = name.toLowerCase();
- if (name.length === 0) {
- return this.$q.reject({
- type: 'REQUIRED',
- message: 'Name is required',
- });
- }
- if (folderId === 0 && nameLowerCased === this.rootName) {
- return this.$q.reject({
- type: 'EXISTING',
- message: 'This is a reserved name and cannot be used for a folder.',
- });
- }
- const deferred = this.$q.defer();
- 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 }));
- this.$q.all(promises).then(res => {
- let hits = [];
- 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()) {
- deferred.reject({
- type: 'EXISTING',
- message: existingErrorMessage,
- });
- break;
- }
- }
- deferred.resolve();
- });
- return deferred.promise;
- }
- }
- coreModule.service('validationSrv', ValidationSrv);
|