ui: Make our old TabNav component easily usable with a state machine (#13705)

* ui: Make our old TabNav component easily usable with a state machine

* Add an event handler that receives an object
pull/13734/head
John Cowen 2022-07-14 09:30:07 +01:00 committed by GitHub
parent aea0d6f6bf
commit 96d11465b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 6 deletions

View File

@ -11,14 +11,21 @@ Each item in the list should be a hash of `label`, `href` and `selected`.
- `label`: The text to show - `label`: The text to show
- `href`: a href, probably generated via `href-to` - `href`: a href, probably generated via `href-to`
- `selected`: whether the item is in the selected state or not, probably - `selected`: whether the item is in the selected state or not, probably
generated via `is-href` of the state to transition to.
There are two similar event handlers, `@onclick` and `@onTabClick`.
When using `@onclick`, the `item.label` is passed to the handler. When using
`@onTabClick` the entire 'item' is passed instead, therefore you can add
arbitrary properties to the 'item' to be used in the handler.
**Please note:** This component should probably be rebuilt using contextual **Please note:** This component should probably be rebuilt using contextual
components, alternatively this could be hand built with native HTML using the components, and real events. Alternatively this could be hand built with native
same `nav/ul/li/a` pattern and you could just use the CSS component to style HTML using the same `nav/ul/li/a` pattern and you could just use the CSS
it. Unless there is a reason to do this, this component should be used pending component to style it. Unless there is a reason to do this, this component
a refactor (please remove this note once refactored into contextual should be used pending a refactor (please remove this note once refactored into
components) contextual components)
```hbs preview-template ```hbs preview-template
<figure> <figure>
@ -36,6 +43,31 @@ components)
</figure> </figure>
``` ```
A TabNav with using a `StateMachine.dispatch`
```hbs
<figure>
<figcaption>A TabNav with using a StateMachine.dispatch</figcaption>
<TabNav @items={{
compact
(array
(hash
label="1"
selected=(state-matches fsm.state 'one')
state="ONE"
)
(hash
label="2"
selected=(state-matches fsm.state 'two')
state="TWO"
)
)
}}
@onTabClicked={{pick 'state' fsm.dispatch}}
/>
</figure>
```
```css ```css
.tab-nav { .tab-nav {
@extend %tab-nav; @extend %tab-nav;

View File

@ -36,6 +36,12 @@ as |select name|}}
(noop) (noop)
) )
}} }}
{{on 'click'
(if @onTabClicked
(fn @onTabClicked item)
(noop)
)
}}
@href={{item.href}} @href={{item.href}}
> >
{{item.label}} {{item.label}}