diff --git a/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.mdx b/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.mdx
new file mode 100644
index 00000000000..8bed9f4cd6d
--- /dev/null
+++ b/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.mdx
@@ -0,0 +1,21 @@
+import { Meta, Props } from '@storybook/addon-docs/blocks';
+import { ClipboardButton } from './ClipboardButton';
+
+
+
+# ClipboardButton
+
+A wrapper for [clipboard.js](https://github.com/zenorocha/clipboard.js) library that allows copying text to clipboard. The text to be copied should be provided via `getText` prop.
+
+# Usage
+
+```jsx
+ 'Text to be copied'}
+ onClipboardCopy={() => console.log('text copied')}
+>
+ Copy to clipboard
+
+````
+
diff --git a/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.story.internal.tsx b/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.story.internal.tsx
index f37b6a4a158..1a47f52be38 100644
--- a/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.story.internal.tsx
+++ b/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.story.internal.tsx
@@ -1,9 +1,9 @@
import React, { useState } from 'react';
-
+import { text } from '@storybook/addon-knobs';
import { withCenteredStory } from '../../utils/storybook/withCenteredStory';
import { ClipboardButton } from './ClipboardButton';
import { Input } from '../Forms/Legacy/Input/Input';
-import { text } from '@storybook/addon-knobs';
+import mdx from './ClipboardButton.mdx';
const getKnobs = () => {
return {
@@ -38,6 +38,11 @@ export default {
title: 'Buttons/ClipboardButton',
component: ClipboardButton,
decorators: [withCenteredStory],
+ parameters: {
+ docs: {
+ page: mdx,
+ },
+ },
};
export const copyToClipboard = () => ;
diff --git a/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.tsx b/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.tsx
index 33118fb34d7..52e8d105c0e 100644
--- a/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.tsx
+++ b/packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.tsx
@@ -2,17 +2,18 @@ import React, { PureComponent } from 'react';
import Clipboard from 'clipboard';
import { Button, ButtonProps } from '../Button';
-interface Props extends ButtonProps {
+export interface Props extends ButtonProps {
+ /** A function that returns text to be copied */
getText(): string;
+ /** Callback when the text has been successfully copied */
onClipboardCopy?(e: Clipboard.Event): void;
+ /** Callback when there was an error copying the text */
onClipboardError?(e: Clipboard.Event): void;
}
export class ClipboardButton extends PureComponent {
- // @ts-ignore
- private clipboard: Clipboard;
- // @ts-ignore
- private elem: HTMLButtonElement;
+ private clipboard!: Clipboard;
+ private elem!: HTMLButtonElement;
setRef = (elem: HTMLButtonElement) => {
this.elem = elem;