@@ -33,16 +33,22 @@ export const toPascalCase = (str: string) =>
3333 str . charAt ( 0 ) . toUpperCase ( ) + str . slice ( 1 ) ;
3434
3535/* Helpers for React specific checks */
36+ const isReactElement = ( el : any ) : el is ReactElement => el . type !== undefined ;
37+ const isExoticComponent = ( el : any ) : el is ExoticComponent =>
38+ el . $$typeof !== undefined ;
39+
3640export const isMemo = ( component : ExoticComponent ) =>
3741 component . $$typeof === Symbol . for ( 'react.memo' ) ;
38- export const isForwardRef = ( component : ExoticComponent ) =>
39- component . $$typeof === Symbol . for ( 'react.forward_ref' ) ;
42+ export const isForwardRef = ( component : ReactElement | ExoticComponent ) => {
43+ // use type guards to ensure keys are available
44+ return isReactElement ( component ) && isExoticComponent ( component . type )
45+ ? component . type ?. $$typeof === Symbol . for ( 'react.forward_ref' )
46+ : isExoticComponent ( component )
47+ ? component . $$typeof === Symbol . for ( 'react.forward_ref' )
48+ : false ;
49+ } ;
4050export const isFragment = ( component : ReactElement | ExoticComponent ) => {
4151 // use type guards to ensure keys are available
42- const isReactElement = ( el : any ) : el is ReactElement => el . type !== undefined ;
43- const isExoticComponent = ( el : any ) : el is ExoticComponent =>
44- el . $$typeof !== undefined ;
45-
4652 return isReactElement ( component )
4753 ? component . type ?. toString ( ) . includes ( 'fragment' )
4854 : isExoticComponent ( component )
@@ -265,7 +271,10 @@ export const getStoryComponent = (
265271 const resolvedDisplayName =
266272 getEmotionComponentDisplayName ( resolvedChild ) ;
267273
268- if ( resolvedDisplayName && resolvedDisplayName !== displayName ) {
274+ if (
275+ ( resolvedDisplayName && resolvedDisplayName !== displayName ) ||
276+ isForwardRef ( resolvedChild )
277+ ) {
269278 resolveChildren ( resolvedChild ) ;
270279 } else if ( typeof resolvedChild . type !== 'string' ) {
271280 storyNode = resolvedChild ;
0 commit comments