3
3
/* eslint-disable @typescript-eslint/no-unused-vars */
4
4
import 'github-markdown-css/github-markdown.css' ;
5
5
6
- import { addons , types } from '@storybook/addons' ;
6
+ import {
7
+ addons ,
8
+ types ,
9
+ useStorybookApi ,
10
+ useChannel ,
11
+ } from '@storybook/manager-api' ;
7
12
import { AddonPanel } from '@storybook/components' ;
8
13
import { STORY_RENDERED } from '@storybook/core-events' ;
9
14
import React , { useEffect , useState } from 'react' ;
@@ -18,24 +23,22 @@ import remarkGfm from 'remark-gfm';
18
23
const ADDON_ID = 'readme' ;
19
24
const PANEL_ID = `${ ADDON_ID } /panel` ;
20
25
21
- const Readme = props => {
26
+ const Readme = ( ) => {
27
+ const api = useStorybookApi ( ) ;
22
28
const [ markdown , setMarkdown ] = useState ( ) ;
23
29
const [ useDarkMode , setUseDarkMode ] = useState ( ) ;
24
30
25
- useEffect ( ( ) => {
26
- setUseDarkMode ( window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) ;
27
- window
28
- . matchMedia ( '(prefers-color-scheme: dark)' )
29
- . addEventListener ( 'change' , updateUseDarkMode ) ;
30
-
31
- const api = props . api ;
32
- api . on ( STORY_RENDERED , ( ) => {
31
+ useChannel ( {
32
+ [ STORY_RENDERED ] : async ( ) => {
33
33
setMarkdown ( '' ) ;
34
- const component = api . getCurrentStoryData ( ) . component ;
34
+ const componentPath = api . getCurrentStoryData ( ) . importPath . split ( '/' ) ;
35
+ const component = componentPath [ componentPath . length - 1 ] . split ( '.' ) [ 0 ] ;
35
36
if ( component ) {
36
37
try {
37
- const readme =
38
- require ( `!raw-loader!../../packages/${ component } /README.md` ) . default ;
38
+ const readmeUrl = `../../packages/${ component } /README.md` ;
39
+ const readme = await fetch ( readmeUrl , {
40
+ headers : { 'Content-Type' : 'text/plain' } ,
41
+ } ) . then ( res => res . text ( ) ) ;
39
42
40
43
setMarkdown ( readme ) ;
41
44
@@ -55,7 +58,18 @@ const Readme = props => {
55
58
console . warn ( 'No README file found for' , component ) ;
56
59
}
57
60
}
58
- } ) ;
61
+ } ,
62
+ } ) ;
63
+
64
+ const updateUseDarkMode = event => {
65
+ setUseDarkMode ( event . matches ) ;
66
+ } ;
67
+
68
+ useEffect ( ( ) => {
69
+ setUseDarkMode ( window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) ;
70
+ window
71
+ . matchMedia ( '(prefers-color-scheme: dark)' )
72
+ . addEventListener ( 'change' , updateUseDarkMode ) ;
59
73
60
74
return function cleanup ( ) {
61
75
window
@@ -64,10 +78,6 @@ const Readme = props => {
64
78
} ;
65
79
} , [ ] ) ;
66
80
67
- const updateUseDarkMode = event => {
68
- setUseDarkMode ( event . matches ) ;
69
- } ;
70
-
71
81
const renderReadme = ( ) => (
72
82
< ReactMarkdown
73
83
children = { markdown }
@@ -99,7 +109,7 @@ const Readme = props => {
99
109
100
110
const renderNoReadme = ( ) => (
101
111
< div >
102
- < h3 > There's no readme for this component</ h3 >
112
+ < h3 > There's no readme wgr for this component</ h3 >
103
113
</ div >
104
114
) ;
105
115
@@ -116,7 +126,7 @@ addons.register(ADDON_ID, api => {
116
126
title : 'Readme' ,
117
127
render : ( { active, key } ) => (
118
128
< AddonPanel active = { active } key = { key } >
119
- < Readme api = { api } />
129
+ < Readme />
120
130
</ AddonPanel >
121
131
) ,
122
132
} ) ;
0 commit comments