@wordpress/nux
Version:
NUX (New User eXperience) module for WordPress.
115 lines (81 loc) • 4.24 kB
Markdown
# New User eXperience (NUX)
The NUX module exposes components, and `wp.data` methods useful for onboarding a new user to the WordPress admin interface. Specifically, it exposes _tips_ and _guides_.
A _tip_ is a component that points to an element in the UI and contains text that explains the element's functionality. The user can dismiss a tip, in which case it never shows again. The user can also disable tips entirely. Information about tips is persisted between sessions using `localStorage`.
A _guide_ allows a series of tips to be presented to the user one by one. When a user dismisses a tip that is in a guide, the next tip in the guide is shown.
## Installation
Install the module
```bash
npm install /nux --save
```
_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._
## DotTip
`DotTip` is a React component that renders a single _tip_ on the screen. The tip will point to the React element that `DotTip` is nested within. Each tip is uniquely identified by a string passed to `tipId`.
See [the component's README][dot-tip-readme] for more information.
[dot-tip-readme]: https://github.com/WordPress/gutenberg/tree/HEAD/packages/nux/src/components/dot-tip/README.md
```jsx
<button onClick={ ... }>
Add to Cart
<DotTip tipId="acme/add-to-cart">
Click here to add the product to your shopping cart.
</DotTip>
</button>
}
```
## Determining if a tip is visible
You can programmatically determine if a tip is visible using the `isTipVisible` select method.
```jsx
const isVisible = select( 'core/nux' ).isTipVisible( 'acme/add-to-cart' );
console.log( isVisible ); // true or false
```
## Manually dismissing a tip
`dismissTip` is a dispatch method that allows you to programmatically dismiss a tip.
```jsx
<button
onClick={ () => {
dispatch( 'core/nux' ).dismissTip( 'acme/add-to-cart' );
} }
>
Dismiss tip
</button>
```
## Disabling and enabling tips
Tips can be programmatically disabled or enabled using the `disableTips` and `enableTips` dispatch methods. You can query the current setting by using the `areTipsEnabled` select method.
Calling `enableTips` will also un-dismiss all previously dismissed tips.
```jsx
const areTipsEnabled = select( 'core/nux' ).areTipsEnabled();
return (
<button
onClick={ () => {
if ( areTipsEnabled ) {
dispatch( 'core/nux' ).disableTips();
} else {
dispatch( 'core/nux' ).enableTips();
}
} }
>
{ areTipsEnabled ? 'Disable tips' : 'Enable tips' }
</button>
);
```
## Triggering a guide
You can group a series of tips into a guide by calling the `triggerGuide` dispatch method. The given tips will then appear one by one.
A tip cannot be added to more than one guide.
```jsx
dispatch( 'core/nux' ).triggerGuide( [
'acme/product-info',
'acme/add-to-cart',
'acme/checkout',
] );
```
## Getting information about a guide
`getAssociatedGuide` is a select method that returns useful information about the state of the guide that a tip is associated with.
```jsx
const guide = select( 'core/nux' ).getAssociatedGuide( 'acme/add-to-cart' );
console.log( 'Tips in this guide:', guide.tipIds );
console.log( 'Currently showing:', guide.currentTipId );
console.log( 'Next to show:', guide.nextTipId );
```
## Contributing to this package
This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects.
To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md).
<br /><br /><p align="center"><img src="https://s.w.org/style/images/codeispoetry.png?1" alt="Code is Poetry." /></p>