mirror of https://github.com/grafana/grafana
parent
89ea47e7fb
commit
19cbff658b
@ -1,94 +0,0 @@ |
||||
import { FolderPageLoader } from './folder_page_loader'; |
||||
import appEvents from 'app/core/app_events'; |
||||
|
||||
export class FolderSettingsCtrl { |
||||
folderPageLoader: FolderPageLoader; |
||||
navModel: any; |
||||
folderId: number; |
||||
uid: string; |
||||
canSave = false; |
||||
folder: any; |
||||
title: string; |
||||
hasChanged: boolean; |
||||
|
||||
/** @ngInject */ |
||||
constructor(private backendSrv, navModelSrv, private $routeParams, private $location) { |
||||
if (this.$routeParams.uid) { |
||||
this.uid = $routeParams.uid; |
||||
|
||||
this.folderPageLoader = new FolderPageLoader(this.backendSrv); |
||||
this.folderPageLoader.load(this, this.uid, 'manage-folder-settings').then(folder => { |
||||
if ($location.path() !== folder.meta.url) { |
||||
$location.path(`${folder.meta.url}/settings`).replace(); |
||||
} |
||||
|
||||
this.folder = folder; |
||||
this.canSave = this.folder.canSave; |
||||
this.title = this.folder.title; |
||||
}); |
||||
} |
||||
} |
||||
|
||||
save() { |
||||
this.titleChanged(); |
||||
|
||||
if (!this.hasChanged) { |
||||
return; |
||||
} |
||||
|
||||
this.folder.title = this.title.trim(); |
||||
|
||||
return this.backendSrv |
||||
.updateFolder(this.folder) |
||||
.then(result => { |
||||
if (result.url !== this.$location.path()) { |
||||
this.$location.url(result.url + '/settings'); |
||||
} |
||||
|
||||
appEvents.emit('dashboard-saved'); |
||||
appEvents.emit('alert-success', ['Folder saved']); |
||||
}) |
||||
.catch(this.handleSaveFolderError); |
||||
} |
||||
|
||||
titleChanged() { |
||||
this.hasChanged = this.folder.title.toLowerCase() !== this.title.trim().toLowerCase(); |
||||
} |
||||
|
||||
delete(evt) { |
||||
if (evt) { |
||||
evt.stopPropagation(); |
||||
evt.preventDefault(); |
||||
} |
||||
|
||||
appEvents.emit('confirm-modal', { |
||||
title: 'Delete', |
||||
text: `Do you want to delete this folder and all its dashboards?`, |
||||
icon: 'fa-trash', |
||||
yesText: 'Delete', |
||||
onConfirm: () => { |
||||
return this.backendSrv.deleteFolder(this.uid).then(() => { |
||||
appEvents.emit('alert-success', ['Folder Deleted', `${this.folder.title} has been deleted`]); |
||||
this.$location.url('dashboards'); |
||||
}); |
||||
}, |
||||
}); |
||||
} |
||||
|
||||
handleSaveFolderError(err) { |
||||
if (err.data && err.data.status === 'version-mismatch') { |
||||
err.isHandled = true; |
||||
|
||||
appEvents.emit('confirm-modal', { |
||||
title: 'Conflict', |
||||
text: 'Someone else has updated this folder.', |
||||
text2: 'Would you still like to save this folder?', |
||||
yesText: 'Save & Overwrite', |
||||
icon: 'fa-warning', |
||||
onConfirm: () => { |
||||
this.backendSrv.updateFolder(this.folder, { overwrite: true }); |
||||
}, |
||||
}); |
||||
} |
||||
} |
||||
} |
||||
@ -1,60 +0,0 @@ |
||||
import { types, getEnv, flow } from 'mobx-state-tree'; |
||||
|
||||
export const Folder = types.model('Folder', { |
||||
id: types.identifier(types.number), |
||||
uid: types.string, |
||||
title: types.string, |
||||
url: types.string, |
||||
canSave: types.boolean, |
||||
hasChanged: types.boolean, |
||||
version: types.number, |
||||
}); |
||||
|
||||
export const FolderStore = types |
||||
.model('FolderStore', { |
||||
folder: types.maybe(Folder), |
||||
}) |
||||
.actions(self => ({ |
||||
load: flow(function* load(uid: string) { |
||||
// clear folder state
|
||||
if (self.folder && self.folder.uid !== uid) { |
||||
self.folder = null; |
||||
} |
||||
|
||||
const backendSrv = getEnv(self).backendSrv; |
||||
const res = yield backendSrv.getFolderByUid(uid); |
||||
self.folder = Folder.create({ |
||||
id: res.id, |
||||
uid: res.uid, |
||||
title: res.title, |
||||
url: res.url, |
||||
canSave: res.canSave, |
||||
hasChanged: false, |
||||
version: res.version, |
||||
}); |
||||
|
||||
return res; |
||||
}), |
||||
|
||||
setTitle: (originalTitle: string, title: string) => { |
||||
self.folder.title = title; |
||||
self.folder.hasChanged = originalTitle.toLowerCase() !== title.trim().toLowerCase() && title.trim().length > 0; |
||||
}, |
||||
|
||||
saveFolder: flow(function* saveFolder(options: any) { |
||||
const backendSrv = getEnv(self).backendSrv; |
||||
self.folder.title = self.folder.title.trim(); |
||||
|
||||
const res = yield backendSrv.updateFolder(self.folder, options); |
||||
self.folder.url = res.url; |
||||
self.folder.version = res.version; |
||||
|
||||
return `${self.folder.url}/settings`; |
||||
}), |
||||
|
||||
deleteFolder: flow(function* deleteFolder() { |
||||
const backendSrv = getEnv(self).backendSrv; |
||||
|
||||
return backendSrv.deleteFolder(self.folder.uid); |
||||
}), |
||||
})); |
||||
Loading…
Reference in new issue