Skip to content

Commit b360e42

Browse files
committed
storybook-react-native: fix story discovery glob base and restore GestureHandlerRootView decorator\n\n- Strip '**' and everything after from glob when deriving base dir in generate-storybook-requires.js to avoid resolving non-existent 'src/**' directories that yield zero stories.\n- Wrap all stories with GestureHandlerRootView in preview.js to ensure react-native-gesture-handler gestures function correctly in Storybook.
1 parent dc6779a commit b360e42

2 files changed

Lines changed: 19 additions & 4 deletions

File tree

apps/storybook-react-native/.rnstorybook/preview.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import React from 'react';
22
import { useColorScheme } from 'react-native';
3+
import { GestureHandlerRootView } from 'react-native-gesture-handler';
34
import { ThemeProvider, Theme } from '@metamask/design-system-twrnc-preset';
45

56
const ThemeDecorator = ({ children }) => {
67
const colorScheme = useColorScheme();
78
const theme = colorScheme === 'dark' ? Theme.Dark : Theme.Light;
89

910
return (
10-
<ThemeProvider theme={theme}>
11-
{children}
12-
</ThemeProvider>
11+
<GestureHandlerRootView style={{ flex: 1 }}>
12+
<ThemeProvider theme={theme}>
13+
{children}
14+
</ThemeProvider>
15+
</GestureHandlerRootView>
1316
);
1417
};
1518

apps/storybook-react-native/scripts/generate-storybook-requires.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,19 @@ const config = require(configPath);
2828
* @returns {string[]} Matching file paths relative to rnstorybookDir.
2929
*/
3030
function findStoryFiles(pattern, cwd) {
31-
const resolvedBase = path.resolve(cwd, path.dirname(pattern));
31+
// Derive a real base directory from the glob pattern.
32+
// path.dirname on a pattern with "**" yields a non-existent "src/**" folder.
33+
// Strip "**" and everything after it to get the actual base directory.
34+
let baseFromPattern = pattern;
35+
const recursiveIdx = baseFromPattern.indexOf('**');
36+
if (recursiveIdx !== -1) {
37+
baseFromPattern = baseFromPattern.slice(0, recursiveIdx);
38+
} else {
39+
baseFromPattern = path.dirname(baseFromPattern);
40+
}
41+
// Remove any trailing path separators left after slicing
42+
baseFromPattern = baseFromPattern.replace(/[\\/]+$/u, '') || '.';
43+
const resolvedBase = path.resolve(cwd, baseFromPattern);
3244

3345
// Extract extensions from @(js|jsx|ts|tsx) pattern
3446
const extMatch = pattern.match(/@\(([^)]+)\)/u);

0 commit comments

Comments
 (0)