Skip to content

New hook: useCopyOnClick#22224

Merged
ellatrix merged 7 commits intomasterfrom
try/use-copy-on-click
May 20, 2020
Merged

New hook: useCopyOnClick#22224
ellatrix merged 7 commits intomasterfrom
try/use-copy-on-click

Conversation

@ellatrix
Copy link
Copy Markdown
Member

@ellatrix ellatrix commented May 8, 2020

Description

This is meant to replace ClipboardButton, which now also uses this hook.

const ref = useRef();
const hasCopied = useCopyOnClick( ref, () => text );

return <Button ref={ ref }>{ hasCopied ? 'Copied!' : 'Copy' }</Button>;

Why?

Because it's currently only possible to render a button. With a hook, the behaviour could be added to any component. This is handy if you want to use it for a menu item for example.

It also enables us to absorb some common logic by all of the ClipboardButton implementations. They all have to implement a hasCopied state, because the component cannot pass it to the parent. With a hook, you can easily pass state.

I converted the "copy all content" menu item as a demonstration.

How has this been tested?

Screenshots

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

} }
onFinishCopy={ () => setState( { hasCopied: false } ) }
>
<MenuItem ref={ ref }>
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is now a proper menu item component.

@github-actions
Copy link
Copy Markdown

github-actions bot commented May 8, 2020

Size Change: +3 B (0%)

Total Size: 1.11 MB

Filename Size Change
build/components/index.js 180 kB -2.52 kB (1%)
build/compose/index.js 9.24 kB +2.57 kB (27%) 🚨
build/edit-post/index.js 302 kB -41 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.02 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.39 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.93 kB 0 B
build/block-directory/style-rtl.css 790 B 0 B
build/block-directory/style.css 791 B 0 B
build/block-editor/index.js 105 kB 0 B
build/block-editor/style-rtl.css 10.8 kB 0 B
build/block-editor/style.css 10.8 kB 0 B
build/block-library/editor-rtl.css 7.22 kB 0 B
build/block-library/editor.css 7.22 kB 0 B
build/block-library/index.js 119 kB 0 B
build/block-library/style-rtl.css 7.48 kB 0 B
build/block-library/style.css 7.48 kB 0 B
build/block-library/theme-rtl.css 683 B 0 B
build/block-library/theme.css 685 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/style-rtl.css 17.1 kB 0 B
build/components/style.css 17.1 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.42 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.11 kB 0 B
build/edit-navigation/index.js 6.6 kB 0 B
build/edit-navigation/style-rtl.css 857 B 0 B
build/edit-navigation/style.css 856 B 0 B
build/edit-post/style-rtl.css 12.2 kB 0 B
build/edit-post/style.css 12.2 kB 0 B
build/edit-site/index.js 12.8 kB 0 B
build/edit-site/style-rtl.css 5.22 kB 0 B
build/edit-site/style.css 5.22 kB 0 B
build/edit-widgets/index.js 7.73 kB 0 B
build/edit-widgets/style-rtl.css 4.59 kB 0 B
build/edit-widgets/style.css 4.59 kB 0 B
build/editor/editor-styles-rtl.css 425 B 0 B
build/editor/editor-styles.css 428 B 0 B
build/editor/index.js 44.3 kB 0 B
build/editor/style-rtl.css 5.07 kB 0 B
build/editor/style.css 5.08 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.64 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.13 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.29 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14.8 kB 0 B
build/server-side-render/index.js 2.68 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.02 kB 0 B
build/viewport/index.js 1.84 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@ellatrix ellatrix mentioned this pull request May 8, 2020
6 tasks
import { useRef, useEffect } from '@wordpress/element';

function CopyContentMenuItem( { createNotice, editedPostContent } ) {
const ref = useRef();
Copy link
Copy Markdown
Member

@gziolo gziolo May 8, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

copyRef will make it easier to read. Otherwise it’s a beautiful piece of magic 😃

It took me some time to connect the dots because of the missing click handler.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah it's hard to see that the clipboard package is handling the click behaviour. Imo the name is a bit misleading. It pretty much only handles copying something to the clipboard on click.

@chrisvanpatten
Copy link
Copy Markdown
Contributor

I love this!

@ellatrix ellatrix force-pushed the try/use-copy-on-click branch 2 times, most recently from 1e1710e to 96cd36e Compare May 11, 2020 17:18
@gziolo gziolo added [Type] Feature New feature to highlight in changelogs. [Package] Compose /packages/compose labels May 12, 2020
Copy link
Copy Markdown
Contributor

@mcsf mcsf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice one.

@ellatrix ellatrix force-pushed the try/use-copy-on-click branch from 7812f5c to 2433eeb Compare May 20, 2020 12:22
@ellatrix ellatrix merged commit d70e94f into master May 20, 2020
@ellatrix ellatrix deleted the try/use-copy-on-click branch May 20, 2020 13:48
@github-actions github-actions bot added this to the Gutenberg 8.2 milestone May 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Package] Compose /packages/compose [Type] Feature New feature to highlight in changelogs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants