picker.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. ///<reference path="../../../headers/common.d.ts" />
  2. import coreModule from 'app/core/core_module';
  3. import appEvents from 'app/core/app_events';
  4. import _ from 'lodash';
  5. export class FolderPickerCtrl {
  6. folders: Folder[];
  7. selectedFolder: number;
  8. selectedFolderSegment: any;
  9. onChange: any;
  10. rootFolderName: string;
  11. /** @ngInject */
  12. constructor(private backendSrv, private $scope, private $sce, private uiSegmentSrv) {
  13. this.selectedFolderSegment = this.uiSegmentSrv.newSegment({value: this.rootFolderName || 'Root', selectMode: true});
  14. this.get();
  15. }
  16. get() {
  17. var params = {
  18. type: 'dash-folder',
  19. };
  20. return this.backendSrv.search(params).then(result => {
  21. this.folders = [{id: 0, title: this.rootFolderName || 'Root', type: 'dash-folder'}];
  22. this.folders.push(...result);
  23. if (this.selectedFolder) {
  24. const selected = _.find(this.folders, {id: this.selectedFolder});
  25. this.selectedFolderSegment.value = selected.title;
  26. this.selectedFolderSegment.text = selected.title;
  27. this.selectedFolderSegment.html = this.$sce.trustAsHtml(selected.title);
  28. }
  29. });
  30. }
  31. getOptions() {
  32. return Promise.resolve(this.folders.map(folder => {
  33. return this.uiSegmentSrv.newSegment(folder.title);
  34. }));
  35. }
  36. folderChanged() {
  37. const selected = _.find(this.folders, {title: this.selectedFolderSegment.value});
  38. if (selected) {
  39. this.onChange(selected.id);
  40. }
  41. }
  42. }
  43. export interface Folder {
  44. id: number;
  45. title: string;
  46. uri?: string;
  47. type: string;
  48. tags?: string[];
  49. isStarred?: boolean;
  50. parentId?: number;
  51. dashboards?: any;
  52. }
  53. export function folderPicker() {
  54. return {
  55. restrict: 'E',
  56. templateUrl: 'public/app/features/dashboard/folder_picker/picker.html',
  57. controller: FolderPickerCtrl,
  58. bindToController: true,
  59. controllerAs: 'ctrl',
  60. scope: {
  61. selectedFolder: "<",
  62. onChange: "<",
  63. rootFolderName: "@"
  64. }
  65. };
  66. }
  67. coreModule.directive('folderPicker', folderPicker);