1
+ /* eslint-disable react-hooks/rules-of-hooks */
2
+
1
3
import { IconButton } from '@storybook/components' ;
2
4
import { addons , types } from '@storybook/manager-api' ;
3
- import { ActionSheet , Button } from '@ui5/webcomponents-react' ;
5
+ import '@ui5/webcomponents/dist/Menu.js' ;
6
+ import '@ui5/webcomponents/dist/MenuItem.js' ;
4
7
import * as React from 'react' ;
5
8
6
9
const ADDON_ID = 'version-switch' ;
7
10
const TOOL_ID = `${ ADDON_ID } /toolbar` ;
8
11
9
- addons . register ( ADDON_ID , ( api ) => {
12
+ const handleVersionSelect = ( e ) => {
13
+ const { slug } = e . detail . item . dataset ;
14
+ window . location . href = `https://sap.github.io/ui5-webcomponents-react/${ slug } /` ;
15
+ } ;
16
+
17
+ addons . register ( ADDON_ID , ( ) => {
10
18
addons . add ( TOOL_ID , {
11
19
type : types . TOOLEXTRA ,
12
20
title : 'Version Switch' ,
13
21
render : ( ) => {
14
22
const [ open , setOpen ] = React . useState ( false ) ;
15
-
16
- const handleVersionSelect = ( e ) => {
17
- const { slug } = e . target . dataset ;
18
- window . location . href = `https://sap.github.io/ui5-webcomponents-react/${ slug } /` ;
19
- } ;
23
+ const menuRef = React . useRef ( null ) ;
20
24
21
25
const activeVersionSlug =
22
26
window . location . pathname . replace ( '/ui5-webcomponents-react/' , '' ) . replaceAll ( '/' , '' ) || 'nightly' ;
23
27
const activeVersion = activeVersionSlug . at ( 0 ) . toUpperCase ( ) + activeVersionSlug . slice ( 1 ) ;
28
+
29
+ React . useEffect ( ( ) => {
30
+ const menu = menuRef . current ;
31
+ if ( menu ) {
32
+ menuRef . current . open = open ;
33
+ }
34
+ } , [ open ] ) ;
35
+
36
+ React . useEffect ( ( ) => {
37
+ const menu = menuRef . current ;
38
+ const handleClose = ( ) => {
39
+ setOpen ( false ) ;
40
+ } ;
41
+
42
+ if ( menu ) {
43
+ menu . addEventListener ( 'item-click' , handleVersionSelect ) ;
44
+ menu . addEventListener ( 'close' , handleClose ) ;
45
+ }
46
+
47
+ return ( ) => {
48
+ if ( menu ) {
49
+ menu . removeEventListener ( 'item-click' , handleVersionSelect ) ;
50
+ menu . removeEventListener ( 'close' , handleClose ) ;
51
+ }
52
+ } ;
53
+ } , [ ] ) ;
54
+
24
55
return (
25
56
< >
26
57
< IconButton
@@ -35,24 +66,12 @@ addons.register(ADDON_ID, (api) => {
35
66
>
36
67
Version: { activeVersion }
37
68
</ IconButton >
38
- < ActionSheet
39
- placement = "Bottom"
40
- open = { open }
41
- opener = { TOOL_ID }
42
- onClose = { ( ) => {
43
- setOpen ( false ) ;
44
- } }
45
- >
46
- < Button onClick = { handleVersionSelect } data-slug = { 'v2' } >
47
- Version 2
48
- </ Button >
49
- < Button onClick = { handleVersionSelect } data-slug = { 'v1' } >
50
- Version 1
51
- </ Button >
52
- < Button onClick = { handleVersionSelect } data-slug = { 'nightly' } >
53
- 🚧 Nightly
54
- </ Button >
55
- </ ActionSheet >
69
+ { /*todo: use wcr components once supported*/ }
70
+ < ui5-menu opener = { TOOL_ID } ref = { menuRef } >
71
+ < ui5-menu-item text = "Version 2" data-slug = { 'v2' } > </ ui5-menu-item >
72
+ < ui5-menu-item text = "Version 1" data-slug = { 'v1' } > </ ui5-menu-item >
73
+ < ui5-menu-item text = "🚧 Nightly" data-slug = { 'nightly' } > </ ui5-menu-item >
74
+ </ ui5-menu >
56
75
</ >
57
76
) ;
58
77
}
0 commit comments