validation_srv.ts 1.9 KB

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