Created
July 15, 2025 17:15
-
-
Save sibelius/d839ce274f9c8d2b24b95fd7f089245a to your computer and use it in GitHub Desktop.
RelayStorybook
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import type { ReactNode } from 'react'; | |
import React, { useEffect, useState } from 'react'; | |
import { RelayEnvironmentProvider } from 'react-relay'; | |
import type { IEnvironment } from 'relay-runtime'; | |
import { createMockEnvironment, MockPayloadGenerator } from 'relay-test-utils'; | |
type RelayStorybookProps = { | |
children: ReactNode; | |
mockResolvers: Record<string, unknown>; | |
suspense: boolean; | |
}; | |
export const RelayStorybook = ({ | |
children, | |
mockResolvers, | |
suspense = false, | |
}: RelayStorybookProps): ReactNode => { | |
const [environment] = useState<IEnvironment>(() => createMockEnvironment()); | |
useEffect(() => { | |
try { | |
environment.mock.resolveMostRecentOperation((operation) => | |
MockPayloadGenerator.generate(operation, mockResolvers), | |
); | |
if (suspense) { | |
environment.mock.resolveMostRecentOperation((operation) => | |
MockPayloadGenerator.generate(operation, mockResolvers), | |
); | |
} | |
} catch (err) { | |
// handle no operation | |
// eslint-disable-next-line | |
console.log({ | |
err, | |
}); | |
} | |
}, []); | |
return ( | |
<RelayEnvironmentProvider environment={environment}> | |
{children} | |
</RelayEnvironmentProvider> | |
); | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import type { ReactNode } from 'react'; | |
import React, { useEffect, useState } from 'react'; | |
import { RelayEnvironmentProvider } from 'react-relay'; | |
import type { IEnvironment } from 'relay-runtime'; | |
import { createMockEnvironment, MockPayloadGenerator } from 'relay-test-utils'; | |
type RelayStorybookProps = { | |
children: ReactNode; | |
mockResolvers: Record<string, unknown>; | |
suspense: boolean; | |
}; | |
export const RelayStorybook = ({ | |
children, | |
mockResolvers, | |
suspense = false, | |
}: RelayStorybookProps): ReactNode => { | |
const [environment] = useState<IEnvironment>(() => createMockEnvironment()); | |
useEffect(() => { | |
try { | |
environment.mock.resolveMostRecentOperation((operation) => | |
MockPayloadGenerator.generate(operation, mockResolvers), | |
); | |
if (suspense) { | |
environment.mock.resolveMostRecentOperation((operation) => | |
MockPayloadGenerator.generate(operation, mockResolvers), | |
); | |
} | |
} catch (err) { | |
// handle no operation | |
// eslint-disable-next-line | |
console.log({ | |
err, | |
}); | |
} | |
}, []); | |
return ( | |
<RelayEnvironmentProvider environment={environment}> | |
{children} | |
</RelayEnvironmentProvider> | |
); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment