mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Add mechanism for imperatively showing modals * Migration work in progress * Reorganise save modal components * use app events emmiter instead of root scope one * Add center alignment to layoout component * Make save buttons wotk * Prettier * Remove save dashboard logic from dashboard srv * Remove unused code * Dont show error notifications * Save modal when dashboard is overwritten * For tweaks * Folder picker tweaks * Save dashboard tweaks * Copy provisioned dashboard to clipboard * Enable saving dashboard json to file * Use SaveDashboardAsButton * Review * Align buttons in dashboard settings * Migrate SaveDashboardAs tests * TS fixes * SaveDashboardForm tests migrated * Fixe some failing tests * Fix folder picker tests * Fix HistoryListCtrl tests * Remove old import * Enable fixed positioning for folder picker select menu * Modal: show react modals with appEvents * Open react modals using event * Move save dashboard modals to dashboard feature * Make e2e pass * Update public/app/features/dashboard/components/SaveDashboard/SaveDashboardButton.tsx * Hacking old vs new buttons to make all the things look like it's old good Grafana ;) Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
68 lines
1.4 KiB
TypeScript
68 lines
1.4 KiB
TypeScript
import React, { PureComponent, ReactNode } from 'react';
|
|
import ClipboardJS from 'clipboard';
|
|
|
|
interface Props {
|
|
text: () => string;
|
|
elType?: string | React.RefForwardingComponent<any, any>;
|
|
onSuccess?: (evt: any) => void;
|
|
onError?: (evt: any) => void;
|
|
className?: string;
|
|
children?: ReactNode;
|
|
}
|
|
|
|
export class CopyToClipboard extends PureComponent<Props> {
|
|
clipboardjs?: ClipboardJS;
|
|
myRef: any;
|
|
|
|
constructor(props: Props) {
|
|
super(props);
|
|
this.myRef = React.createRef();
|
|
}
|
|
|
|
componentDidMount() {
|
|
const { text, onSuccess, onError } = this.props;
|
|
|
|
this.clipboardjs = new ClipboardJS(this.myRef.current, {
|
|
text: text,
|
|
});
|
|
|
|
if (onSuccess) {
|
|
this.clipboardjs.on('success', evt => {
|
|
evt.clearSelection();
|
|
onSuccess(evt);
|
|
});
|
|
}
|
|
|
|
if (onError) {
|
|
this.clipboardjs.on('error', evt => {
|
|
console.error('Action:', evt.action);
|
|
console.error('Trigger:', evt.trigger);
|
|
onError(evt);
|
|
});
|
|
}
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
if (this.clipboardjs) {
|
|
this.clipboardjs.destroy();
|
|
}
|
|
}
|
|
|
|
getElementType = () => {
|
|
return this.props.elType || 'button';
|
|
};
|
|
|
|
render() {
|
|
const { elType, text, children, onError, onSuccess, ...restProps } = this.props;
|
|
|
|
return React.createElement(
|
|
this.getElementType(),
|
|
{
|
|
ref: this.myRef,
|
|
...restProps,
|
|
},
|
|
this.props.children
|
|
);
|
|
}
|
|
}
|