ValidationSrv.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import coreModule from 'app/core/core_module';
  2. import { IQService } from 'angular';
  3. import { BackendSrv } from 'app/core/services/backend_srv';
  4. const hitTypes = {
  5. FOLDER: 'dash-folder',
  6. DASHBOARD: 'dash-db',
  7. };
  8. export class ValidationSrv {
  9. rootName = 'general';
  10. /** @ngInject */
  11. constructor(private $q: IQService, private backendSrv: BackendSrv) {}
  12. validateNewDashboardName(folderId: any, name: string) {
  13. return this.validate(folderId, name, 'A dashboard in this folder with the same name already exists');
  14. }
  15. validateNewFolderName(name: string) {
  16. return this.validate(0, name, 'A folder or dashboard in the general folder with the same name already exists');
  17. }
  18. private validate(folderId: any, name: string, existingErrorMessage: string) {
  19. name = (name || '').trim();
  20. const nameLowerCased = name.toLowerCase();
  21. if (name.length === 0) {
  22. return this.$q.reject({
  23. type: 'REQUIRED',
  24. message: 'Name is required',
  25. });
  26. }
  27. if (folderId === 0 && nameLowerCased === this.rootName) {
  28. return this.$q.reject({
  29. type: 'EXISTING',
  30. message: 'This is a reserved name and cannot be used for a folder.',
  31. });
  32. }
  33. const deferred = this.$q.defer();
  34. const promises = [];
  35. promises.push(this.backendSrv.search({ type: hitTypes.FOLDER, folderIds: [folderId], query: name }));
  36. promises.push(this.backendSrv.search({ type: hitTypes.DASHBOARD, folderIds: [folderId], query: name }));
  37. this.$q.all(promises).then(res => {
  38. let hits: any[] = [];
  39. if (res.length > 0 && res[0].length > 0) {
  40. hits = res[0];
  41. }
  42. if (res.length > 1 && res[1].length > 0) {
  43. hits = hits.concat(res[1]);
  44. }
  45. for (const hit of hits) {
  46. if (nameLowerCased === hit.title.toLowerCase()) {
  47. deferred.reject({
  48. type: 'EXISTING',
  49. message: existingErrorMessage,
  50. });
  51. break;
  52. }
  53. }
  54. deferred.resolve();
  55. });
  56. return deferred.promise;
  57. }
  58. }
  59. coreModule.service('validationSrv', ValidationSrv);