|
6 | 6 | */ |
7 | 7 |
|
8 | 8 | import { addons, types } from '@storybook/addons'; |
9 | | -import { STORIES_CONFIGURED, STORY_MISSING } from '@storybook/core-events'; |
10 | | - |
11 | 9 | import theme from './theme'; |
12 | 10 |
|
13 | | -// import React, { useState } from 'react'; |
14 | | -// import { AddonPanel } from '@storybook/components'; |
15 | | -// import { useParameter, useChannel } from '@storybook/api'; |
16 | | -// import { Providers, LoginType, MsalProvider } from '../packages/mgt/dist/es6'; |
17 | | -// import { CLIENTID, GETPROVIDER_EVENT, SETPROVIDER_EVENT } from './env'; |
18 | | - |
19 | | -// const PARAM_KEY = 'signInAddon'; |
20 | | -// const _allow_signin = false; |
21 | | - |
22 | | -// const msalProvider = new MsalProvider({ |
23 | | -// clientId: CLIENTID, |
24 | | -// loginType: LoginType.Popup |
25 | | -// }); |
26 | | - |
27 | | -// Providers.globalProvider = msalProvider; |
28 | | - |
29 | | -// const SignInPanel = () => { |
30 | | -// const value = useParameter(PARAM_KEY, null); |
31 | | - |
32 | | -// const [state, setState] = useState(Providers.globalProvider.state); |
33 | | - |
34 | | -// const emit = useChannel({ |
35 | | -// STORY_RENDERED: id => { |
36 | | -// console.log('storyRendered', id); |
37 | | -// }, |
38 | | -// [GETPROVIDER_EVENT]: params => { |
39 | | -// emitProvider(state); |
40 | | -// } |
41 | | -// }); |
42 | | - |
43 | | -// const emitProvider = loginState => { |
44 | | -// emit(SETPROVIDER_EVENT, { state: loginState }); |
45 | | -// }; |
46 | | - |
47 | | -// Providers.onProviderUpdated(() => { |
48 | | -// setState(Providers.globalProvider.state); |
49 | | -// emitProvider(Providers.globalProvider.state); |
50 | | -// }); |
51 | | - |
52 | | -// emitProvider(state); |
53 | | - |
54 | | -// return ( |
55 | | -// <div> |
56 | | -// {_allow_signin ? ( |
57 | | -// <mgt-login /> |
58 | | -// ) : ( |
59 | | -// 'All components are using mock data - sign in function will be available in a future release' |
60 | | -// )} |
61 | | -// </div> |
62 | | -// ); |
63 | | -// }; |
| 11 | +import React, { useState } from 'react'; |
| 12 | +import { useChannel } from '@storybook/api'; |
| 13 | +import { Providers } from '../packages/mgt-element/dist/es6/providers/Providers'; |
| 14 | +import { ProviderState, LoginType } from '../packages/mgt-element/dist/es6/providers/IProvider'; |
| 15 | +import { Msal2Provider } from '../packages/providers/mgt-msal2-provider/dist/es6/Msal2Provider'; |
| 16 | +import { CLIENTID, SETPROVIDER_EVENT, AUTH_PAGE } from './env'; |
| 17 | +import { MockProvider } from '@microsoft/mgt-element'; |
| 18 | +import { PACKAGE_VERSION } from '../packages/mgt-element/dist/es6/utils/version'; |
| 19 | +import '../packages/mgt-components/dist/es6/components/mgt-login/mgt-login'; |
| 20 | +import '../packages/mgt-components/dist/es6/components/mgt-person/mgt-person'; |
| 21 | + |
| 22 | +const isLoginEnabled = () => { |
| 23 | + const urlParams = new window.URL(window.location.href).searchParams; |
| 24 | + const canLogin = urlParams.get('login'); |
| 25 | + |
| 26 | + return canLogin === 'true'; |
| 27 | +}; |
| 28 | + |
| 29 | +const getClientId = () => { |
| 30 | + const urlParams = new window.URL(window.location.href).searchParams; |
| 31 | + const customClientId = urlParams.get('clientId'); |
| 32 | + |
| 33 | + return isLoginEnabled() && customClientId ? customClientId : CLIENTID; |
| 34 | +}; |
| 35 | + |
| 36 | +document.getElementById('mgt-version').innerText = PACKAGE_VERSION; |
| 37 | + |
| 38 | +const mockProvider = new MockProvider(true); |
| 39 | +const msal2Provider = new Msal2Provider({ |
| 40 | + clientId: getClientId(), |
| 41 | + redirectUri: window.location.origin + '/' + AUTH_PAGE, |
| 42 | + scopes: [ |
| 43 | + // capitalize all words in the scope |
| 44 | + 'user.read', |
| 45 | + 'user.read.all', |
| 46 | + 'mail.readBasic', |
| 47 | + 'people.read', |
| 48 | + 'people.read.all', |
| 49 | + 'sites.read.all', |
| 50 | + 'user.readbasic.all', |
| 51 | + 'contacts.read', |
| 52 | + 'presence.read', |
| 53 | + 'presence.read.all', |
| 54 | + 'tasks.readwrite', |
| 55 | + 'tasks.read', |
| 56 | + 'calendars.read', |
| 57 | + 'group.read.all', |
| 58 | + 'files.read', |
| 59 | + 'files.read.all', |
| 60 | + 'files.readwrite', |
| 61 | + 'files.readwrite.all' |
| 62 | + ], |
| 63 | + loginType: LoginType.Popup |
| 64 | +}); |
| 65 | + |
| 66 | +Providers.globalProvider = msal2Provider; |
| 67 | + |
| 68 | +const SignInPanel = () => { |
| 69 | + const [state, setState] = useState(Providers.globalProvider.state); |
| 70 | + const [loginEnabled] = useState(isLoginEnabled()); |
| 71 | + |
| 72 | + const emit = useChannel({ |
| 73 | + STORY_RENDERED: id => { |
| 74 | + console.log('storyRendered', id); |
| 75 | + } |
| 76 | + }); |
| 77 | + |
| 78 | + const emitProvider = loginState => { |
| 79 | + if (Providers.globalProvider.state === ProviderState.SignedOut && Providers.globalProvider !== mockProvider) { |
| 80 | + emit(SETPROVIDER_EVENT, { state: loginState, provider: mockProvider, name: 'MgtMockProvider' }); |
| 81 | + } else { |
| 82 | + emit(SETPROVIDER_EVENT, { state: loginState, provider: msal2Provider, name: 'MgtMsal2Provider' }); |
| 83 | + } |
| 84 | + }; |
| 85 | + |
| 86 | + Providers.onProviderUpdated(() => { |
| 87 | + setState(Providers.globalProvider.state); |
| 88 | + emitProvider(Providers.globalProvider.state); |
| 89 | + }); |
| 90 | + |
| 91 | + const onSignOut = () => { |
| 92 | + Providers.globalProvider.logout(); |
| 93 | + }; |
| 94 | + |
| 95 | + emitProvider(state); |
| 96 | + |
| 97 | + return ( |
| 98 | + <> |
| 99 | + {loginEnabled && ( |
| 100 | + <> |
| 101 | + {Providers.globalProvider.state !== ProviderState.SignedIn ? ( |
| 102 | + <mgt-login login-view="compact" style={{ marginTop: '3px' }}></mgt-login> |
| 103 | + ) : ( |
| 104 | + <> |
| 105 | + <mgt-person person-query="me" style={{ marginTop: '8px' }}></mgt-person> |
| 106 | + <fluent-button appearance="lightweight" style={{ marginTop: '3px' }} onClick={onSignOut}> |
| 107 | + Sign Out |
| 108 | + </fluent-button> |
| 109 | + </> |
| 110 | + )} |
| 111 | + </> |
| 112 | + )} |
| 113 | + </> |
| 114 | + ); |
| 115 | +}; |
64 | 116 |
|
65 | 117 | addons.setConfig({ |
66 | 118 | enableShortcuts: false, |
67 | 119 | theme |
68 | 120 | }); |
69 | 121 |
|
70 | 122 | addons.register('microsoft/graph-toolkit', storybookAPI => { |
71 | | - storybookAPI.on(STORIES_CONFIGURED, (kind, story) => { |
72 | | - if (storybookAPI.getUrlState().path === '/story/*') { |
73 | | - storybookAPI.selectStory('mgt-login', 'login'); |
74 | | - } |
75 | | - }); |
| 123 | + const render = ({ active }) => <SignInPanel />; |
76 | 124 |
|
77 | | - storybookAPI.on(STORY_MISSING, (kind, story) => { |
78 | | - storybookAPI.selectStory('mgt-login', 'login'); |
| 125 | + addons.add('mgt/sign-in', { |
| 126 | + type: types.TOOLEXTRA, |
| 127 | + title: 'Sign In', |
| 128 | + match: ({ viewMode }) => true, |
| 129 | + render |
79 | 130 | }); |
80 | | - |
81 | | - // const render = ({ active, key }) => ( |
82 | | - // <AddonPanel active={active} key={key}> |
83 | | - // <SignInPanel /> |
84 | | - // </AddonPanel> |
85 | | - // ); |
86 | | - |
87 | | - // addons.add('mgt/sign-in', { |
88 | | - // type: types.PANEL, |
89 | | - // title: 'Sign In', |
90 | | - // render, |
91 | | - // paramKey: PARAM_KEY |
92 | | - // }); |
93 | 131 | }); |
0 commit comments