|
| 1 | +import React from 'react'; |
| 2 | +import ThemeProvider from '../src/theme'; |
| 3 | +import { initialize, mswLoader, getWorker } from 'msw-storybook-addon' |
| 4 | +import { QueryClient, QueryClientProvider } from 'react-query'; |
| 5 | +import '../src/static/graphkb-env-config'; |
| 6 | +import { HttpResponse, http } from 'msw'; |
| 7 | +import { QueryBody } from '../src/components/types'; |
| 8 | +import { definePreview } from '@storybook/react-vite'; |
| 9 | +import addonTest from '@storybook/addon-vitest'; |
| 10 | +import { MswParameters } from 'msw-storybook-addon' |
| 11 | +import { PreviewAddon } from 'storybook/internal/csf'; |
| 12 | + |
| 13 | +export function mockQueryHandler(resolver: (body: QueryBody) => HttpResponse<any>) { |
| 14 | + return http.post(`${window._env_.API_BASE_URL}/api/query`, async ({ request }) => { |
| 15 | + const body = await request.clone().json(); |
| 16 | + return resolver(body as any); |
| 17 | + }) |
| 18 | +} |
| 19 | + |
| 20 | +// see https://github.com/mswjs/msw-storybook-addon/issues/180 |
| 21 | +try { |
| 22 | + getWorker(); |
| 23 | +} catch (_) { |
| 24 | + initialize({ |
| 25 | + onUnhandledRequest: ({ url }, print) => { |
| 26 | + if (url.startsWith(window._env_.API_BASE_URL)) { |
| 27 | + print.error(); |
| 28 | + } |
| 29 | + }, |
| 30 | + quiet: import.meta.env.CI === 'true', |
| 31 | + }) |
| 32 | +} |
| 33 | + |
| 34 | +type MswTypes = { |
| 35 | + parameters: MswParameters |
| 36 | +} |
| 37 | + |
| 38 | +const addonMsw = () => ({}) as PreviewAddon<MswTypes>; |
| 39 | + |
| 40 | +export default definePreview({ |
| 41 | + addons: [addonTest(), addonMsw()], |
| 42 | + parameters: { |
| 43 | + controls: { |
| 44 | + matchers: { |
| 45 | + color: /(background|color)$/i, |
| 46 | + date: /Date$/i, |
| 47 | + }, |
| 48 | + }, |
| 49 | + }, |
| 50 | + decorators: [ |
| 51 | + (Story) => <ThemeProvider><Story /></ThemeProvider>, |
| 52 | + (Story, context) => { |
| 53 | + return <QueryClientProvider client={context.loaded.queryClient}><Story /></QueryClientProvider> |
| 54 | + } |
| 55 | + ], |
| 56 | + loaders: [mswLoader, () => ({ queryClient: new QueryClient({ defaultOptions: { queries: { retry: false }}})})], |
| 57 | +}); |
0 commit comments