Skip to content

Commit c6cfb2e

Browse files
committed
fixed linting issues
1 parent bf0e5c8 commit c6cfb2e

16 files changed

+87
-127
lines changed

.eslintrc.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module.exports = {
1414
jsx: true,
1515
},
1616
},
17+
ignorePatterns: ["app/components/ui/*", "*.config.ts"],
1718
env: {
1819
browser: true,
1920
commonjs: true,

app/components/CreateTodoPageTabItem.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { Form, Link } from "@remix-run/react";
2-
import { TrashIcon } from "lucide-react";
1+
import { Link } from "@remix-run/react";
32

43
export default function CreateTodoPageTabItem({ date }: { date: string }) {
54
return (

app/components/DatePicker.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
1-
"use client";
2-
3-
import * as React from "react";
4-
import { Dispatch, SetStateAction } from "react";
1+
import type { NavigateFunction } from "@remix-run/react";
52
import { format } from "date-fns";
63
import { CalendarIcon } from "lucide-react";
4+
import { Dispatch, SetStateAction } from "react";
75

8-
import { cn } from "~/lib/utils";
96
import { Button } from "~/components/ui/button";
107
import { Calendar } from "~/components/ui/calendar";
118
import {
129
Popover,
1310
PopoverContent,
1411
PopoverTrigger,
1512
} from "~/components/ui/popover";
16-
import type { NavigateFunction } from "@remix-run/react";
13+
import { cn } from "~/lib/utils";
1714

1815
export function DatePicker({
1916
date,

app/components/TodoCheckbox.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { TrashIcon } from "lucide-react";
21
import type { FetcherWithComponents } from "@remix-run/react";
2+
import { TrashIcon } from "lucide-react";
33

44
export default function TodoCheckbox({
55
content,

app/routes/__tests__/_todos.$date.$todoPageId.test.tsx

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
import { describe, it, expect, vi, type Mock } from "vitest";
21
import type { AppLoadContext } from "@remix-run/node";
32
import { json } from "@remix-run/node";
4-
5-
import { screen, render, fireEvent, waitFor } from "@testing-library/react";
6-
import { createRemixStub } from "@remix-run/testing";
7-
83
import { useNavigation, useFetcher, useActionData } from "@remix-run/react";
9-
10-
import TodoPageDetails, {
11-
loader,
12-
action,
13-
ErrorBoundary,
14-
} from "../_todos.$date.$todoPageId";
4+
import { createRemixStub } from "@remix-run/testing";
5+
import { screen, render, fireEvent, waitFor } from "@testing-library/react";
6+
import { describe, it, expect, vi, type Mock } from "vitest";
157

168
import {
179
getTodoPage,
@@ -20,10 +12,15 @@ import {
2012
modifyTodoStatus,
2113
deleteTodo,
2214
} from "~/models/todo.server";
23-
2415
import { requireUserId } from "~/session.server";
2516
import { validateTodoContent } from "~/utils";
2617

18+
import TodoPageDetails, {
19+
loader,
20+
action,
21+
ErrorBoundary,
22+
} from "../_todos.$date.$todoPageId";
23+
2724
vi.mock("~/models/todo.server");
2825
vi.mock("~/session.server");
2926
vi.mock("~/utils");
@@ -266,17 +263,19 @@ describe("TodoPageDetails component", () => {
266263
) as HTMLInputElement;
267264

268265
expect(input.value).toBe("");
266+
});
269267

270-
fireEvent.change(input, { target: { value: "New Todo" } });
268+
const input = screen.getByPlaceholderText(
269+
"Buy groceries",
270+
) as HTMLInputElement;
271271

272-
expect(input.value).toBe("New Todo");
272+
fireEvent.change(input, { target: { value: "New Todo" } });
273273

274-
fireEvent.submit(screen.getByText("Add"));
274+
expect(input.value).toBe("New Todo");
275275

276-
(useNavigation as Mock).mockReturnValue({ state: "submitting" });
276+
fireEvent.submit(screen.getByText("Add"));
277277

278-
screen.debug();
279-
});
278+
(useNavigation as Mock).mockReturnValue({ state: "submitting" });
280279

281280
rerender(<RemixStub />);
282281

app/routes/__tests__/_todos.$date.new.test.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
import { describe, it, expect, vi } from "vitest";
2-
import type { Mock } from "vitest";
3-
41
import { createRemixStub } from "@remix-run/testing";
52
import { render, screen, fireEvent } from "@testing-library/react";
6-
7-
import NewTodoPage, { action, ErrorBoundary } from "../_todos.$date.new";
3+
import type { Mock } from "vitest";
4+
import { describe, it, expect, vi } from "vitest";
85

96
import { createTodoPage } from "~/models/todo.server";
107
import { requireUserId } from "~/session.server";
118
import { validateTodoPageName } from "~/utils";
129

10+
import NewTodoPage, { action, ErrorBoundary } from "../_todos.$date.new";
11+
1312
vi.mock("~/models/todo.server", () => ({
1413
createTodoPage: vi.fn(),
1514
}));

app/routes/__tests__/_todos.$date.test.tsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import { describe, it, beforeEach, vi } from "vitest";
2-
import type { Mock } from "vitest";
3-
import { render, screen, waitFor } from "@testing-library/react";
4-
import { createRemixStub } from "@remix-run/testing";
5-
61
import type { AppLoadContext } from "@remix-run/node";
72
import { useRouteError } from "@remix-run/react";
3+
import { createRemixStub } from "@remix-run/testing";
4+
import { render, screen, waitFor } from "@testing-library/react";
5+
import type { Mock } from "vitest";
6+
import { describe, it, beforeEach, expect, vi } from "vitest";
7+
8+
import { getTodoPageListItems, deleteTodoPage } from "~/models/todo.server";
9+
import { requireUserId } from "~/session.server";
10+
import { extractNameFromEmail, useUser } from "~/utils";
811

912
import {
1013
loader,
@@ -14,10 +17,6 @@ import {
1417
default as Index,
1518
} from "../_todos.$date";
1619

17-
import { extractNameFromEmail, useUser } from "~/utils";
18-
import { getTodoPageListItems, deleteTodoPage } from "~/models/todo.server";
19-
import { requireUserId } from "~/session.server";
20-
2120
vi.mock("~/utils");
2221
vi.mock("~/models/todo.server");
2322
vi.mock("~/session.server");
@@ -123,8 +122,10 @@ describe("Index Route", () => {
123122

124123
render(<RemixStub />);
125124

126-
expect(await screen.findByText("Test Todo 1")).toBeInTheDocument();
127-
expect(await screen.findByText("Test Todo 2")).toBeInTheDocument();
125+
await waitFor(async () => {
126+
await screen.findByText("Test Todo 1");
127+
await screen.findByText("Test Todo 2");
128+
});
128129
});
129130

130131
it("meta function returns correct title", () => {

app/routes/_index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import type { MetaFunction, LoaderFunctionArgs } from "@remix-run/node";
22
import { Link, redirect } from "@remix-run/react";
3-
import { requireUserId } from "~/session.server";
43

4+
import { requireUserId } from "~/session.server";
55
import { useOptionalUser } from "~/utils";
66

77
export const meta: MetaFunction = () => [{ title: "Remix Notes" }];
88

9-
export const loader = async ({ params, request }: LoaderFunctionArgs) => {
9+
export const loader = async ({ request }: LoaderFunctionArgs) => {
1010
const userId = await requireUserId(request);
1111
const todayDate = new Date();
1212
const date = todayDate.toISOString().split("T")[0]; // in the correct yyyy-mm-dd format

app/routes/_todos.$date.$todoPageId.tsx

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { useEffect, useRef } from "react";
21
import type { ActionFunctionArgs, LoaderFunctionArgs } from "@remix-run/node";
32
import { json, redirect } from "@remix-run/node";
43
import {
@@ -10,8 +9,14 @@ import {
109
useNavigation,
1110
useActionData,
1211
} from "@remix-run/react";
12+
import { useEffect, useRef } from "react";
1313
import invariant from "tiny-invariant";
1414

15+
// UI components
16+
import InputErrorText from "~/components/InputErrorText";
17+
import TodoCheckbox from "~/components/TodoCheckbox";
18+
import { Button } from "~/components/ui/button";
19+
import { Input } from "~/components/ui/input";
1520
import {
1621
getTodoPage,
1722
getAllTodos,
@@ -20,15 +25,8 @@ import {
2025
deleteTodo,
2126
} from "~/models/todo.server";
2227
import { requireUserId } from "~/session.server";
23-
2428
import { validateTodoContent } from "~/utils";
2529

26-
// UI components
27-
import InputErrorText from "~/components/InputErrorText";
28-
import TodoCheckbox from "~/components/TodoCheckbox";
29-
import { Input } from "~/components/ui/input";
30-
import { Button } from "~/components/ui/button";
31-
3230
export const loader = async ({ params, request }: LoaderFunctionArgs) => {
3331
invariant(params.todoPageId, "todoPageId not found");
3432

@@ -100,11 +98,11 @@ export const action = async ({ params, request }: ActionFunctionArgs) => {
10098

10199
export default function TodoPageDetails() {
102100
const data = useLoaderData<typeof loader>();
103-
let navigation = useNavigation();
101+
const navigation = useNavigation();
104102
const fetcher = useFetcher();
105-
let formRef = useRef<HTMLFormElement>(null);
106-
let inputRef = useRef<HTMLInputElement>(null);
107-
let isAddingTodo = navigation.state === "submitting";
103+
const formRef = useRef<HTMLFormElement>(null);
104+
const inputRef = useRef<HTMLInputElement>(null);
105+
const isAddingTodo = navigation.state === "submitting";
108106

109107
const actionData = useActionData<typeof action>();
110108

app/routes/_todos.$date.new.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { useEffect, useRef } from "react";
21
import type { ActionFunctionArgs } from "@remix-run/node";
32
import { json, redirect } from "@remix-run/node";
43
import {
@@ -7,14 +6,13 @@ import {
76
useRouteError,
87
isRouteErrorResponse,
98
} from "@remix-run/react";
9+
import { useEffect, useRef } from "react";
1010

11-
import { Input } from "~/components/ui/input";
12-
import { Button } from "~/components/ui/button";
1311
import InputErrorText from "~/components/InputErrorText";
14-
12+
import { Button } from "~/components/ui/button";
13+
import { Input } from "~/components/ui/input";
1514
import { createTodoPage } from "~/models/todo.server";
1615
import { requireUserId } from "~/session.server";
17-
1816
import { validateTodoPageName } from "~/utils";
1917

2018
export const action = async ({ params, request }: ActionFunctionArgs) => {

app/routes/_todos.$date.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,21 @@ import { json, redirect } from "@remix-run/node";
77
import {
88
Form,
99
Outlet,
10-
useFetcher,
1110
useLoaderData,
1211
useNavigate,
1312
useRouteError,
1413
isRouteErrorResponse,
1514
} from "@remix-run/react";
1615
import { useState } from "react";
1716

18-
import { extractNameFromEmail, useUser } from "~/utils";
19-
20-
import { getTodoPageListItems, deleteTodoPage } from "~/models/todo.server";
21-
import { requireUserId } from "~/session.server";
22-
17+
import CreateTodoPageTabItem from "~/components/CreateTodoPageTabItem";
2318
import { DatePicker } from "~/components/DatePicker";
2419
import TodoPageTabItem from "~/components/TodoPageTabItem";
25-
import CreateTodoPageTabItem from "~/components/CreateTodoPageTabItem";
26-
import { Separator } from "~/components/ui/separator";
2720
import { Button } from "~/components/ui/button";
21+
import { Separator } from "~/components/ui/separator";
22+
import { getTodoPageListItems, deleteTodoPage } from "~/models/todo.server";
23+
import { requireUserId } from "~/session.server";
24+
import { extractNameFromEmail, useUser } from "~/utils";
2825

2926
export const meta: MetaFunction = () => [{ title: "Remix Notes" }];
3027

@@ -58,7 +55,9 @@ export default function Index() {
5855
return (
5956
<div className="flex w-full max-w-[1000px] flex-col items-center">
6057
<div className="mb-5 flex w-full flex-row items-start justify-between gap-5">
61-
{user.email && <h1>{extractNameFromEmail(user.email)}'s To-Dos</h1>}
58+
{user.email ? (
59+
<h1>{extractNameFromEmail(user.email)}&apos;s To-Dos</h1>
60+
) : null}
6261
<DatePicker date={date} setDate={setDate} navigate={navigate} />
6362
<Form action="/logout" method="post">
6463
<Button

app/routes/join.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@ import { json, redirect } from "@remix-run/node";
77
import { Form, Link, useActionData, useSearchParams } from "@remix-run/react";
88
import { useEffect, useRef } from "react";
99

10+
import InputErrorText from "~/components/InputErrorText";
1011
import { Button } from "~/components/ui/button";
1112
import { Input } from "~/components/ui/input";
12-
13-
import InputErrorText from "~/components/InputErrorText";
14-
1513
import { createUser, getUserByEmail } from "~/models/user.server";
1614
import { createUserSession, getUserId } from "~/session.server";
1715
import { safeRedirect, validateEmail } from "~/utils";

app/routes/login.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ import { json, redirect } from "@remix-run/node";
77
import { Form, Link, useActionData, useSearchParams } from "@remix-run/react";
88
import { useEffect, useRef } from "react";
99

10+
import InputErrorText from "~/components/InputErrorText";
11+
import { Button } from "~/components/ui/button";
12+
import { Input } from "~/components/ui/input";
1013
import { verifyLogin } from "~/models/user.server";
1114
import { createUserSession, getUserId } from "~/session.server";
1215
import { safeRedirect, validateEmail } from "~/utils";
1316

14-
import { Input } from "~/components/ui/input";
15-
import { Button } from "~/components/ui/button";
16-
17-
import InputErrorText from "~/components/InputErrorText";
18-
1917
export const loader = async ({ request }: LoaderFunctionArgs) => {
2018
const userId = await getUserId(request);
2119
if (userId) return redirect("/");

0 commit comments

Comments
 (0)