Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navigation Component: Split Stories to Improve Their Consumption #25572

Merged
merged 4 commits into from
Sep 25, 2020

Conversation

Copons
Copy link
Contributor

@Copons Copons commented Sep 23, 2020

Description

While working on the Navigation component, I've realized that every time we add a new feature, we just update the one story with, for example, a new navigation item using the new feature.
IMHO this has quickly become unreadable, the story a mix of all kinds of stuff (its navigation is sometimes controlled and sometimes uncontrolled, there are examples hidden in sub-menus, etc.)

In this PR I've split it into 3 separate stories:

  • Default: the Navigation component at its minimum. Folks can start here to understand how it can be composed.
  • Controlled State: this is what we expect to be the most likely usage. The state is controlled externally, items control their own active state, etc.
  • More Examples: this is where we should add minor features that we think are worthy of being showcased, but are not big enough to deserve their own full-fledged story.

When we introduce a new feature (e.g. the Search), we should consider if it's concise enough that can belong to an existing story, or if we should create a new one instead.

How has this been tested?

npm run storybook:dev

Types of changes

Component Storybook update.

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.

@Copons Copons added the [Feature] Navigation Component A navigational waterfall component for hierarchy of items. label Sep 23, 2020
@Copons Copons self-assigned this Sep 23, 2020
@github-actions
Copy link

github-actions bot commented Sep 23, 2020

Size Change: +1.91 kB (0%)

Total Size: 1.17 MB

Filename Size Change
build/block-directory/index.js 8.53 kB +1 B
build/block-editor/index.js 128 kB +100 B (0%)
build/block-library/editor-rtl.css 8.58 kB -17 B (0%)
build/block-library/editor.css 8.58 kB -17 B (0%)
build/block-library/index.js 135 kB -21 B (0%)
build/block-library/style-rtl.css 7.61 kB +9 B (0%)
build/block-library/style.css 7.6 kB +12 B (0%)
build/blocks/index.js 47.5 kB -2 B (0%)
build/components/style-rtl.css 15.5 kB +7 B (0%)
build/components/style.css 15.5 kB +8 B (0%)
build/core-data/index.js 12 kB -1 B
build/data-controls/index.js 1.27 kB +2 B (0%)
build/data/index.js 8.43 kB +5 B (0%)
build/edit-navigation/index.js 10.7 kB +239 B (2%)
build/edit-post/index.js 306 kB +1 B
build/edit-post/style-rtl.css 6.25 kB +10 B (0%)
build/edit-post/style.css 6.24 kB +10 B (0%)
build/edit-site/index.js 20.5 kB +763 B (3%)
build/edit-site/style-rtl.css 3.54 kB +239 B (6%) 🔍
build/edit-site/style.css 3.54 kB +237 B (6%) 🔍
build/edit-widgets/index.js 17.9 kB +316 B (1%)
build/edit-widgets/style-rtl.css 2.82 kB +24 B (0%)
build/edit-widgets/style.css 2.82 kB +24 B (0%)
build/editor/index.js 45.4 kB -69 B (0%)
build/editor/style-rtl.css 3.83 kB +26 B (0%)
build/editor/style.css 3.82 kB +24 B (0%)
build/element/index.js 4.44 kB -8 B (0%)
build/rich-text/index.js 13.7 kB -11 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.52 kB 0 B
build/api-fetch/index.js 3.35 kB 0 B
build/autop/index.js 2.72 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/style-rtl.css 11.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 741 B 0 B
build/block-serialization-default-parser/index.js 1.78 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/components/index.js 167 kB 0 B
build/compose/index.js 9.42 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.42 kB 0 B
build/edit-navigation/style-rtl.css 868 B 0 B
build/edit-navigation/style.css 871 B 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.49 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 1.74 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.55 kB 0 B
build/is-shallow-equal/index.js 709 B 0 B
build/keyboard-shortcuts/index.js 2.39 kB 0 B
build/keycodes/index.js 1.85 kB 0 B
build/list-reusable-blocks/index.js 3.02 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.12 kB 0 B
build/notices/index.js 1.69 kB 0 B
build/nux/index.js 3.27 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.44 kB 0 B
build/primitives/index.js 1.34 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/server-side-render/index.js 2.61 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.24 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.74 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

Copy link
Contributor

@psealock psealock left a comment

Choose a reason for hiding this comment

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

Indeed, this is a much needed change. Thank you @Copons, this will make adoption much easier.

Default: the Navigation component at its minimum. Folks can start here to understand how it can be composed.

Since we removed internal activeItem logic, even the default will need activeItem logic.

const [ activeItem, setActiveItem ] = useState( 'item-1' );

You can see in the storybook it doesn't work very well.

I think the distinction in stories lies more in the various ways NavigationItem can be used. I do like the default being the bare minimum to making something useful. What it if had the minimum state and a few NavigationMenu and NavigationItem with no custom content, only titles and hrefs?

Then subsequent stories can highlight groups, custom content, and various ways of setting the active item from outside or mocked router links?

@Copons Copons force-pushed the update/navigation-component-stories branch from 369e653 to 2edb1d4 Compare September 24, 2020 09:03
@Copons
Copy link
Contributor Author

Copons commented Sep 24, 2020

@psealock Thanks for the suggestions! I've done almost all you said in 369e653.

As you might notice, items have no href in the Default story, even though they are arguably part of a "default" usage.
I wanted to use internal anchors (#) just to showcase their use, but for some reasons clicking on an internal link in the Storybook opens the story in a "standalone" page (without the Storybook UI).
I'm not sure how to work around this, and also I'd avoid using the mock Link component (in the Controlled State story), as it would probably be confusing.


I've also noticed a bug with "half-controlled" menus caused by a useEffect being triggered too often.
It's noticeable in the new Default story, when trying to activate items in nested menus, which will (incorrectly) activate the root menu.
I'll take care of it separately.

(With "half-controlled" I mean "active item controlled externally, active menu controlled by the Nav itself".)

EDIT: issue should be sorted out by #25608.
The fix PR is already based on this PR to make it easier to test.

EDIT 2: fixed

@Copons
Copy link
Contributor Author

Copons commented Sep 25, 2020

I'm merging this now, but of course feel free to update it as you see fit, in case you notice some odd behaviour or think of a clearer way to showcase the component! ✨

@Copons Copons merged commit f92b5d0 into master Sep 25, 2020
@Copons Copons deleted the update/navigation-component-stories branch September 25, 2020 16:12
@github-actions github-actions bot added this to the Gutenberg 9.1 milestone Sep 25, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Navigation Component A navigational waterfall component for hierarchy of items.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants