Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions issue-tracker-next-v13/app/MainViewClientComponent.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
"use client";

import MainView from "src/components/MainView";
import { Suspense } from "react";
import { useRelayEnvironment } from "react-relay";
import { SerializablePreloadedQuery } from "src/relay/loadSerializableQuery";
import MainViewQueryNode, {
MainViewQuery,
} from "__generated__/MainViewQuery.graphql";
import { getCurrentEnvironment } from "src/relay/environment";
import { RelayEnvironmentProvider } from "react-relay";
import useSerializablePreloadedQuery from "src/relay/useSerializablePreloadedQuery";

const MainViewClientComponent = (props: {
Expand All @@ -16,19 +14,13 @@ const MainViewClientComponent = (props: {
MainViewQuery
>;
}) => {
const environment = getCurrentEnvironment();
const environment = useRelayEnvironment();
const queryRef = useSerializablePreloadedQuery(
environment,
props.preloadedQuery
);

return (
<RelayEnvironmentProvider environment={environment}>
<Suspense fallback="Loading...">
<MainView queryRef={queryRef} />
</Suspense>
</RelayEnvironmentProvider>
);
return <MainView queryRef={queryRef} />;
};

export default MainViewClientComponent;
Original file line number Diff line number Diff line change
@@ -1,29 +1,21 @@
"use client";

import { RelayEnvironmentProvider } from "react-relay";
import { useRelayEnvironment } from "react-relay";
import Issue from "src/components/Issue";
import { Suspense } from "react";
import IssueQueryNode, { IssueQuery } from "__generated__/IssueQuery.graphql";
import { SerializablePreloadedQuery } from "src/relay/loadSerializableQuery";
import { getCurrentEnvironment } from "src/relay/environment";
import useSerializablePreloadedQuery from "src/relay/useSerializablePreloadedQuery";

const Root = (props: {
preloadedQuery: SerializablePreloadedQuery<typeof IssueQueryNode, IssueQuery>;
}) => {
const environment = getCurrentEnvironment();
const environment = useRelayEnvironment();
const queryRef = useSerializablePreloadedQuery(
environment,
props.preloadedQuery
);

return (
<RelayEnvironmentProvider environment={environment}>
<Suspense fallback="Loading...">
<Issue queryRef={queryRef} />
</Suspense>
</RelayEnvironmentProvider>
);
return <Issue queryRef={queryRef} />;
};

export default Root;
7 changes: 1 addition & 6 deletions issue-tracker-next-v13/app/issues/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import loadSerializableQuery from "src/relay/loadSerializableQuery";
import IssueQueryNode, { IssueQuery } from "__generated__/IssueQuery.graphql";
import IssueViewClientComponent from "./IssueViewClientComponent";
import styles from "styles/Issue.module.css";

export default async function IssuePage({
params,
Expand All @@ -17,9 +16,5 @@ export default async function IssuePage({
issueNumber: parseInt(params.id, 10),
});

return (
<div className={styles.issue}>
<IssueViewClientComponent preloadedQuery={preloadedQuery} />
</div>
);
return <IssueViewClientComponent preloadedQuery={preloadedQuery} />;
}
12 changes: 11 additions & 1 deletion issue-tracker-next-v13/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
"use client";

import { RelayEnvironmentProvider } from "react-relay";
import { getCurrentEnvironment } from "src/relay/environment";
import "styles/globals.css";

import styles from "styles/layout.module.css";

export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
const environment = getCurrentEnvironment();

return (
<html>
<head>
<title>Github Issues: Relay</title>
</head>
<body>{children}</body>
<RelayEnvironmentProvider environment={environment}>
<body className={styles.layout}>{children}</body>
</RelayEnvironmentProvider>
</html>
);
}
3 changes: 3 additions & 0 deletions issue-tracker-next-v13/app/loading.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function Loading() {
return "Loading (server side)...";
}
7 changes: 1 addition & 6 deletions issue-tracker-next-v13/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import loadSerializableQuery from "src/relay/loadSerializableQuery";
import styles from "styles/MainView.module.css";
import MainViewQueryNode, {
MainViewQuery,
} from "__generated__/MainViewQuery.graphql";
Expand All @@ -14,11 +13,7 @@ const Page = async () => {
name: "relay",
});

return (
<div className={styles.main}>
<MainViewClientComponent preloadedQuery={preloadedQuery} />
</div>
);
return <MainViewClientComponent preloadedQuery={preloadedQuery} />;
};

export default Page;
Expand Down
5 changes: 3 additions & 2 deletions issue-tracker-next-v13/src/components/Issue.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Suspense } from "react";
import { graphql, PreloadedQuery, usePreloadedQuery } from "react-relay";
import { IssueQuery } from "__generated__/IssueQuery.graphql";

Expand All @@ -20,10 +21,10 @@ export default function Issue(props: { queryRef: PreloadedQuery<IssueQuery> }) {
);

return (
<>
<Suspense fallback="Loading (client side)...">
<h1>{data.repository?.issue?.title}</h1>
<p>{data.repository?.issue?.bodyText}</p>
<p>Author: {data.repository?.issue?.author?.login}</p>
</>
</Suspense>
);
}
11 changes: 10 additions & 1 deletion issue-tracker-next-v13/src/components/Issues.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import styles from "styles/Issues.module.css";
export default function Issues(props: {
repository: IssuesFragment$key | null;
}) {
const { data, loadNext, isLoadingNext } = usePaginationFragment<
const { data, loadNext, isLoadingNext, refetch } = usePaginationFragment<
IssuesPaginationQuery,
IssuesFragment$key
>(
Expand Down Expand Up @@ -67,6 +67,15 @@ export default function Issues(props: {
<button onClick={loadMore} disabled={isLoadingNext}>
{isLoadingNext ? "Loading..." : "Load More"}
</button>
<button
onClick={() =>
refetch({
count: 20,
})
}
>
Refetch with 20 items
</button>
</li>
</ul>
);
Expand Down
5 changes: 3 additions & 2 deletions issue-tracker-next-v13/src/components/MainView.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Suspense } from "react";
import { graphql, PreloadedQuery, usePreloadedQuery } from "react-relay";
import { MainViewQuery } from "__generated__/MainViewQuery.graphql";
import Issues from "./Issues";
Expand All @@ -21,11 +22,11 @@ export default function MainView(props: {
);

return (
<div>
<Suspense fallback="Loading (client side)...">
<h1>
{data.repository?.owner.login}/{data.repository?.name}
</h1>
<Issues repository={data.repository} />
</div>
</Suspense>
);
}
5 changes: 0 additions & 5 deletions issue-tracker-next-v13/styles/MainView.module.css

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.issue {
.layout {
padding: 4rem 0 0;
margin: 0 auto;
max-width: 800px;
Expand Down