import React from 'react' import { usePreloadedQuery } from 'react-relay/hooks' import ReactMarkdown from 'react-markdown' import graphql from 'babel-plugin-relay/macro' import { PreloadedQuery } from 'react-relay/lib/relay-experimental/EntryPointTypes' import SuspenseImage from './SuspenseImage' import IssueDetailComments from './IssueDetailComments' import IssueActions from './IssueActions' import { IssueDetailRootQuery } from './__generated__/IssueDetailRootQuery.graphql' interface Props { prepared: { issueDetailQuery: PreloadedQuery } } /** * The root component for the issue detail route. */ const IssueDetailRoot: React.FC = props => { // Defines *what* data the component needs via a query. The responsibility of // actually fetching this data belongs to the route definition: it calls // preloadQuery() with the query and variables, and the result is passed // on props.prepared.issueDetailQuery - see src/routes.js const { node: issue } = usePreloadedQuery( graphql` query IssueDetailRootQuery($id: ID!) { node(id: $id) { ... on Issue { title number author { login avatarUrl } body closed url ...IssueDetailComments_issue ...IssueActions_issue } } } `, props.prepared.issueDetailQuery, ) if (issue == null) { return
Issue not found
} return (
#{issue.number} - {issue.title} - {issue.closed ? 'Closed' : 'Open'} View on GitHub
{issue.author!.login}
) } export default IssueDetailRoot