55 * -------------------------------------------------------------------------------------------
66 */
77
8- import addonAPI from '@storybook/addons' ;
8+ import React , { useState } from 'react' ;
9+ import { addons , types } from '@storybook/addons' ;
910import { STORIES_CONFIGURED , STORY_MISSING } from '@storybook/core-events' ;
11+ import { AddonPanel } from '@storybook/components' ;
12+ import { useParameter , useChannel } from '@storybook/api' ;
13+ import { Providers , MsalProvider , LoginType , ProviderState } from '../dist/commonjs' ;
14+ import { CLIENTID , GETPROVIDER_EVENT , SETPROVIDER_EVENT } from './env' ;
1015
11- addonAPI . register ( 'microsoft/graph-toolkit' , storybookAPI => {
16+ const PARAM_KEY = 'signInAddon' ;
17+
18+ const msalProvider = new MsalProvider ( {
19+ clientId : CLIENTID ,
20+ loginType : LoginType . Popup
21+ } ) ;
22+
23+ Providers . globalProvider = msalProvider ;
24+
25+ const SignInPanel = ( ) => {
26+ const value = useParameter ( PARAM_KEY , null ) ;
27+
28+ const [ state , setState ] = useState ( Providers . globalProvider . state ) ;
29+
30+ const emit = useChannel ( {
31+ STORY_RENDERED : id => {
32+ console . log ( 'storyRendered' , id ) ;
33+ } ,
34+ [ GETPROVIDER_EVENT ] : params => {
35+ emitProvider ( state ) ;
36+ }
37+ } ) ;
38+
39+ const emitProvider = loginState => {
40+ emit ( SETPROVIDER_EVENT , { state : loginState } ) ;
41+ } ;
42+
43+ Providers . onProviderUpdated ( ( ) => {
44+ setState ( Providers . globalProvider . state ) ;
45+ emitProvider ( Providers . globalProvider . state ) ;
46+ } ) ;
47+
48+ emitProvider ( state ) ;
49+
50+ return (
51+ < div >
52+ { state === ProviderState . SignedIn
53+ ? 'You are Signed In and all components are using real data'
54+ : 'All components are using mock data - sign in to use real data' }
55+ < mgt-login />
56+ { /* {JSON.stringify(value)} */ }
57+ </ div >
58+ ) ;
59+ } ;
60+
61+ addons . register ( 'microsoft/graph-toolkit' , storybookAPI => {
1262 storybookAPI . on ( STORIES_CONFIGURED , ( kind , story ) => {
1363 if ( storybookAPI . getUrlState ( ) . path === '/story/*' ) {
1464 storybookAPI . selectStory ( 'mgt-login' , 'login' ) ;
@@ -17,4 +67,17 @@ addonAPI.register('microsoft/graph-toolkit', storybookAPI => {
1767 storybookAPI . on ( STORY_MISSING , ( kind , story ) => {
1868 storybookAPI . selectStory ( 'mgt-login' , 'login' ) ;
1969 } ) ;
70+
71+ const render = ( { active, key } ) => (
72+ < AddonPanel active = { active } key = { key } >
73+ < SignInPanel />
74+ </ AddonPanel >
75+ ) ;
76+
77+ addons . add ( 'mgt/sign-in' , {
78+ type : types . PANEL ,
79+ title : 'Sign In' ,
80+ render,
81+ paramKey : PARAM_KEY
82+ } ) ;
2083} ) ;
0 commit comments