aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/pages/NoteTypesPage.tsx
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-01 10:16:35 +0900
committernsfisis <nsfisis@gmail.com>2026-02-01 10:16:38 +0900
commita07dada0c9ba80976692ee14e256da0a2d6b0112 (patch)
tree7de73126b4e69ed3e2128e19da2eca56fe4f9e68 /src/client/pages/NoteTypesPage.tsx
parent081498168fe25b377f4675637c57a08e4e399f95 (diff)
downloadkioku-a07dada0c9ba80976692ee14e256da0a2d6b0112.tar.gz
kioku-a07dada0c9ba80976692ee14e256da0a2d6b0112.tar.zst
kioku-a07dada0c9ba80976692ee14e256da0a2d6b0112.zip
refactor(atoms): migrate to jotai-tanstack-query from custom reloadable atoms
Replace custom createReloadableAtom/createReloadableAtomFamily with atomWithSuspenseQuery from jotai-tanstack-query, leveraging TanStack Query's built-in caching, invalidation, and Suspense support. - Add @tanstack/query-core and jotai-tanstack-query dependencies - Create shared QueryClient instance (src/client/queryClient.ts) - Migrate all data atoms (decks, cards, study, noteTypes) to atomWithSuspenseQuery - Update page components to use .data destructuring and queryClient.invalidateQueries() - Update all test files to use QueryClient for data hydration - Remove src/client/atoms/utils.ts (no longer needed) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/client/pages/NoteTypesPage.tsx')
-rw-r--r--src/client/pages/NoteTypesPage.tsx14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/client/pages/NoteTypesPage.tsx b/src/client/pages/NoteTypesPage.tsx
index 8e742a7..d838e5b 100644
--- a/src/client/pages/NoteTypesPage.tsx
+++ b/src/client/pages/NoteTypesPage.tsx
@@ -7,8 +7,8 @@ import {
faTrash,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import { useAtomValue, useSetAtom } from "jotai";
-import { Suspense, useState, useTransition } from "react";
+import { useAtomValue } from "jotai";
+import { Suspense, useState } from "react";
import { Link } from "wouter";
import { type NoteType, noteTypesAtom } from "../atoms";
import { CreateNoteTypeModal } from "../components/CreateNoteTypeModal";
@@ -16,6 +16,7 @@ import { DeleteNoteTypeModal } from "../components/DeleteNoteTypeModal";
import { ErrorBoundary } from "../components/ErrorBoundary";
import { LoadingSpinner } from "../components/LoadingSpinner";
import { NoteTypeEditor } from "../components/NoteTypeEditor";
+import { queryClient } from "../queryClient";
function NoteTypeList({
onEditNoteType,
@@ -24,7 +25,7 @@ function NoteTypeList({
onEditNoteType: (id: string) => void;
onDeleteNoteType: (noteType: NoteType) => void;
}) {
- const noteTypes = useAtomValue(noteTypesAtom);
+ const { data: noteTypes } = useAtomValue(noteTypesAtom);
if (noteTypes.length === 0) {
return (
@@ -114,9 +115,6 @@ function NoteTypeList({
}
export function NoteTypesPage() {
- const reloadNoteTypes = useSetAtom(noteTypesAtom);
- const [, startTransition] = useTransition();
-
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
const [editingNoteTypeId, setEditingNoteTypeId] = useState<string | null>(
null,
@@ -126,9 +124,7 @@ export function NoteTypesPage() {
);
const handleNoteTypeMutation = () => {
- startTransition(() => {
- reloadNoteTypes();
- });
+ queryClient.invalidateQueries({ queryKey: ["noteTypes"] });
};
return (