import React from 'react'; import { hot } from 'react-hot-loader'; import { inject, observer } from 'mobx-react'; import { toJS } from 'mobx'; import PageHeader from 'app/core/components/PageHeader/PageHeader'; import IContainerProps from 'app/containers/IContainerProps'; import { getSnapshot } from 'mobx-state-tree'; import appEvents from 'app/core/app_events'; @inject('nav', 'folder', 'view') @observer export class FolderSettings extends React.Component { formSnapshot: any; componentDidMount() { this.loadStore(); } loadStore() { const { nav, folder, view } = this.props; return folder.load(view.routeParams.get('uid') as string).then(res => { this.formSnapshot = getSnapshot(folder); view.updatePathAndQuery(`${res.url}/settings`, {}, {}); return nav.initFolderNav(toJS(folder.folder), 'manage-folder-settings'); }); } onTitleChange(evt) { this.props.folder.setTitle(this.getFormSnapshot().folder.title, evt.target.value); } getFormSnapshot() { if (!this.formSnapshot) { this.formSnapshot = getSnapshot(this.props.folder); } return this.formSnapshot; } save(evt) { if (evt) { evt.stopPropagation(); evt.preventDefault(); } const { nav, folder, view } = this.props; folder .saveFolder({ overwrite: false }) .then(newUrl => { view.updatePathAndQuery(newUrl, {}, {}); appEvents.emit('dashboard-saved'); appEvents.emit('alert-success', ['Folder saved']); }) .then(() => { return nav.initFolderNav(toJS(folder.folder), 'manage-folder-settings'); }) .catch(this.handleSaveFolderError.bind(this)); } delete(evt) { if (evt) { evt.stopPropagation(); evt.preventDefault(); } const { folder, view } = this.props; const title = folder.folder.title; 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 folder.deleteFolder().then(() => { appEvents.emit('alert-success', ['Folder Deleted', `${title} has been deleted`]); view.updatePathAndQuery('dashboards', '', ''); }); }, }); } handleSaveFolderError(err) { if (err.data && err.data.status === 'version-mismatch') { err.isHandled = true; const { nav, folder, view } = this.props; 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: () => { folder .saveFolder({ overwrite: true }) .then(newUrl => { view.updatePathAndQuery(newUrl, {}, {}); appEvents.emit('dashboard-saved'); appEvents.emit('alert-success', ['Folder saved']); }) .then(() => { return nav.initFolderNav(toJS(folder.folder), 'manage-folder-settings'); }); }, }); } } render() { const { nav, folder } = this.props; if (!folder.folder || !nav.main) { return

Loading

; } return (

Folder Settings

); } } export default hot(module)(FolderSettings);