Skip to content

Commit d8ced0e

Browse files
fix(_official-realtime-app): fix useActionData/useLoaderData usage (#85)
1 parent 7eeb2a5 commit d8ced0e

File tree

5 files changed

+24
-27
lines changed

5 files changed

+24
-27
lines changed

_official-realtime-app/app/root.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { LinksFunction, MetaFunction } from "@remix-run/node";
2+
import { json } from "@remix-run/node";
23
import {
34
Links,
45
Meta,
@@ -52,6 +53,6 @@ function useRealtimeIssuesRevalidation() {
5253

5354
// FIXME: Pointless action for revalidation until:
5455
// https://github.com/remix-run/remix/issues/4485
55-
export function action() {
56-
return { ok: true };
56+
export async function action() {
57+
return json({ ok: true });
5758
}

_official-realtime-app/app/routes/index.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1+
import { json } from "@remix-run/node";
12
import { Link, useFetcher, useNavigate } from "@remix-run/react";
23
import { useLoaderData } from "@remix-run/react";
34
import classNames from "classnames";
45
import { useEffect, useRef } from "react";
56

6-
import { getIssues } from "../data";
7-
import type { Issue } from "../data";
8-
import * as AmalgoBox from "../amalgo-box.client";
9-
import icons from "../icons.svg";
7+
import * as AmalgoBox from "~/amalgo-box.client";
8+
import type { Issue } from "~/data";
9+
import { getIssues } from "~/data";
10+
import icons from "~/icons.svg";
1011

11-
export function loader() {
12-
return getIssues();
12+
export async function loader() {
13+
return json(await getIssues());
1314
}
1415

1516
export default function Index() {
16-
const issues = useLoaderData() as Issue[];
17+
const issues = useLoaderData<typeof loader>();
1718

1819
useEffect(() => AmalgoBox.registerCustomElements(), []);
1920
return (

_official-realtime-app/app/routes/issues-events.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { type DataFunctionArgs } from "@remix-run/node";
1+
import type { LoaderArgs } from "@remix-run/node";
22
import { eventStream } from "remix-utils";
33

4-
import { emitter, EVENTS } from "../events";
4+
import { emitter, EVENTS } from "~/events";
55

6-
export const loader = ({ request }: DataFunctionArgs) => {
6+
export const loader = async ({ request }: LoaderArgs) => {
77
return eventStream(request.signal, (send) => {
88
const handler = (message: string) => {
99
send({ data: message });

_official-realtime-app/app/routes/issues.$id.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
1+
import type { LoaderArgs, MetaFunction } from "@remix-run/node";
12
import { json } from "@remix-run/node";
2-
import type { DataFunctionArgs, SerializeFrom } from "@remix-run/node";
33
import { useFetcher, useLoaderData } from "@remix-run/react";
44
import invariant from "tiny-invariant";
55

66
import { getIssue } from "~/data";
77

8-
export const loader = async ({ params }: DataFunctionArgs) => {
8+
export const loader = async ({ params }: LoaderArgs) => {
99
invariant(params.id, "Missing issue id");
1010
const issue = await getIssue(params.id);
1111
if (!issue) {
1212
throw json("Issue not found", { status: 404 });
1313
}
14-
return issue;
14+
return json(issue);
1515
};
1616

17-
export const meta = ({
18-
data: issue,
19-
}: {
20-
data: SerializeFrom<typeof loader>;
21-
}) => {
22-
return {
23-
title: issue?.title || "Not Found",
24-
};
25-
};
17+
export const meta: MetaFunction<typeof loader> = ({ data: issue }) => ({
18+
title: issue?.title || "Not Found",
19+
});
2620

2721
export default function Issue() {
2822
const issue = useLoaderData<typeof loader>();
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import { type DataFunctionArgs } from "@remix-run/node";
1+
import type { ActionArgs } from "@remix-run/node";
2+
import { json } from "@remix-run/node";
23
import invariant from "tiny-invariant";
34

45
import { updateIssue } from "~/data";
56
import { emitter, EVENTS } from "~/events";
67

7-
export const action = async ({ params, request }: DataFunctionArgs) => {
8+
export const action = async ({ params, request }: ActionArgs) => {
89
const updates = Object.fromEntries(await request.formData());
910
invariant(params.id, "Missing issue id");
1011
const result = await updateIssue(params.id, updates);
1112
emitter.emit(EVENTS.ISSUE_CHANGED, Date.now());
12-
return result;
13+
return json(result);
1314
};

0 commit comments

Comments
 (0)