|
@@ -4,121 +4,53 @@ import { connect } from 'react-redux';
|
|
|
import PageHeader from 'app/core/components/PageHeader/PageHeader';
|
|
import PageHeader from 'app/core/components/PageHeader/PageHeader';
|
|
|
import appEvents from 'app/core/app_events';
|
|
import appEvents from 'app/core/app_events';
|
|
|
import { getNavModel } from 'app/core/selectors/navModel';
|
|
import { getNavModel } from 'app/core/selectors/navModel';
|
|
|
-import { NavModel, StoreState } from 'app/types';
|
|
|
|
|
-import { getFolderByUid } from './state/actions';
|
|
|
|
|
|
|
+import { NavModel, StoreState, FolderState } from 'app/types';
|
|
|
|
|
+import { getFolderByUid, setFolderTitle, saveFolder, deleteFolder } from './state/actions';
|
|
|
|
|
|
|
|
export interface Props {
|
|
export interface Props {
|
|
|
navModel: NavModel;
|
|
navModel: NavModel;
|
|
|
folderUid: string;
|
|
folderUid: string;
|
|
|
|
|
+ folder: FolderState;
|
|
|
getFolderByUid: typeof getFolderByUid;
|
|
getFolderByUid: typeof getFolderByUid;
|
|
|
|
|
+ setFolderTitle: typeof setFolderTitle;
|
|
|
|
|
+ saveFolder: typeof saveFolder;
|
|
|
|
|
+ deleteFolder: typeof deleteFolder;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export class FolderSettingsPage extends PureComponent<Props> {
|
|
export class FolderSettingsPage extends PureComponent<Props> {
|
|
|
- // formSnapshot: any;
|
|
|
|
|
- //
|
|
|
|
|
componentDidMount() {
|
|
componentDidMount() {
|
|
|
this.props.getFolderByUid(this.props.folderUid);
|
|
this.props.getFolderByUid(this.props.folderUid);
|
|
|
}
|
|
}
|
|
|
- //
|
|
|
|
|
- // 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');
|
|
|
|
|
- // });
|
|
|
|
|
- // },
|
|
|
|
|
- // });
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
|
|
+ onTitleChange = evt => {
|
|
|
|
|
+ this.props.setFolderTitle(evt.target.value);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ onSave = async evt => {
|
|
|
|
|
+ evt.preventDefault();
|
|
|
|
|
+ evt.stopPropagation();
|
|
|
|
|
+
|
|
|
|
|
+ await this.props.saveFolder(this.props.folder);
|
|
|
|
|
+ appEvents.emit('alert-success', ['Folder saved']);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ onDelete = 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: () => {
|
|
|
|
|
+ this.props.deleteFolder(this.props.folder.uid);
|
|
|
|
|
+ },
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
render() {
|
|
render() {
|
|
|
- const { navModel } = this.props;
|
|
|
|
|
|
|
+ const { navModel, folder } = this.props;
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<div>
|
|
<div>
|
|
@@ -127,25 +59,21 @@ export class FolderSettingsPage extends PureComponent<Props> {
|
|
|
<h2 className="page-sub-heading">Folder Settings</h2>
|
|
<h2 className="page-sub-heading">Folder Settings</h2>
|
|
|
|
|
|
|
|
<div className="section gf-form-group">
|
|
<div className="section gf-form-group">
|
|
|
- <form name="folderSettingsForm" onSubmit={this.save.bind(this)}>
|
|
|
|
|
|
|
+ <form name="folderSettingsForm" onSubmit={this.onSave}>
|
|
|
<div className="gf-form">
|
|
<div className="gf-form">
|
|
|
<label className="gf-form-label width-7">Name</label>
|
|
<label className="gf-form-label width-7">Name</label>
|
|
|
<input
|
|
<input
|
|
|
type="text"
|
|
type="text"
|
|
|
className="gf-form-input width-30"
|
|
className="gf-form-input width-30"
|
|
|
- value={folder.folder.title}
|
|
|
|
|
- onChange={this.onTitleChange.bind(this)}
|
|
|
|
|
|
|
+ value={folder.title}
|
|
|
|
|
+ onChange={this.onTitleChange}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
<div className="gf-form-button-row">
|
|
<div className="gf-form-button-row">
|
|
|
- <button
|
|
|
|
|
- type="submit"
|
|
|
|
|
- className="btn btn-success"
|
|
|
|
|
- disabled={!folder.folder.canSave || !folder.folder.hasChanged}
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <button type="submit" className="btn btn-success" disabled={!folder.canSave || !folder.hasChanged}>
|
|
|
<i className="fa fa-save" /> Save
|
|
<i className="fa fa-save" /> Save
|
|
|
</button>
|
|
</button>
|
|
|
- <button className="btn btn-danger" onClick={this.delete.bind(this)} disabled={!folder.folder.canSave}>
|
|
|
|
|
|
|
+ <button className="btn btn-danger" onClick={this.onDelete} disabled={!folder.canSave}>
|
|
|
<i className="fa fa-trash" /> Delete
|
|
<i className="fa fa-trash" /> Delete
|
|
|
</button>
|
|
</button>
|
|
|
</div>
|
|
</div>
|
|
@@ -159,7 +87,6 @@ export class FolderSettingsPage extends PureComponent<Props> {
|
|
|
|
|
|
|
|
const mapStateToProps = (state: StoreState) => {
|
|
const mapStateToProps = (state: StoreState) => {
|
|
|
const uid = state.location.routeParams.uid;
|
|
const uid = state.location.routeParams.uid;
|
|
|
-
|
|
|
|
|
return {
|
|
return {
|
|
|
navModel: getNavModel(state.navIndex, `folder-settings-${uid}`),
|
|
navModel: getNavModel(state.navIndex, `folder-settings-${uid}`),
|
|
|
folderUid: uid,
|
|
folderUid: uid,
|
|
@@ -169,6 +96,9 @@ const mapStateToProps = (state: StoreState) => {
|
|
|
|
|
|
|
|
const mapDispatchToProps = {
|
|
const mapDispatchToProps = {
|
|
|
getFolderByUid,
|
|
getFolderByUid,
|
|
|
|
|
+ saveFolder,
|
|
|
|
|
+ setFolderTitle,
|
|
|
|
|
+ deleteFolder,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(FolderSettingsPage));
|
|
export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(FolderSettingsPage));
|