| Age | Commit message (Collapse) | Author |
|
Previously when the session expired, the API client cleared tokens but
the UI displayed "Invalid or expired token" instead of redirecting to
the login page. The root cause was that isAuthenticatedAtom was derived
from userAtom only as a re-evaluation trigger, while the actual value
came from apiClient.isAuthenticated(). On page reload userAtom is null,
so setting it to null on session expiry did not trigger a re-render and
ProtectedRoute never redirected.
Make userAtom (persisted via atomWithStorage) the single source of truth
for auth state, derive isAuthenticatedAtom from it, drop the redundant
apiClient.isAuthenticated(), and explicitly navigate to /login on
session expiry. Also trigger session expiry when a 401 comes back with
no refresh token available.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
|
Allow each deck to specify a default note type that is auto-selected
when creating new notes. Includes DB schema migration, server API
updates, sync layer support, and UI for editing the default in the
deck settings modal.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Show per-card difficulty (D: X.X) in the card list alongside existing
metrics (reps, lapses). Hidden for unreviewed cards (difficulty = 0).
https://claude.ai/code/session_019XoFbra6drKrZpHASUzKDq
|
|
Add totalCardCount and reviewCardCount to deck API responses and
display a progress bar on the home page for each deck with cards.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Card and StudyCard interfaces used generic number for state, causing
type errors when indexing Record<CardStateType, ...> maps. Also adds
missing FSRS fields to client Card interface to match API response.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Add newCardCount alongside Total and Due stats in the deck detail view,
queried from cards with state=New via a new countNewCards repository method.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
REVIEW_CARDS_LIMIT(復習カード80枚制限)とnewCardsPerDay(1日の新規カード制限)
を削除し、期日が来たすべてのカードを制限なく返すように変更。
削除した主な要素:
- REVIEW_CARDS_LIMIT定数とカード取得時のlimitパラメータ
- newCardsPerDayフィールド(DB schema, 型定義, Zod schema, sync, CRDT)
- countDueNewCards, countDueReviewCards, findDueNewCardsForStudy,
findDueReviewCardsForStudy(CardRepository)
- countTodayNewCardReviews(ReviewLogRepository)
- デッキルートからのReviewLogRepository依存
https://claude.ai/code/session_018hrEJ9vg3RPoeAPyEc17gS
|
|
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
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>
|
|
Separate the card list view from the deck learning page to prevent users
from seeing cards they are about to study. The deck detail page now shows
only study statistics with a "Study Now" button and a "View Cards" link.
- Add new DeckCardsPage component at /decks/:deckId/cards for managing cards
- Simplify DeckDetailPage to show deck stats and navigation buttons
- Update routing in App.tsx with proper route ordering
- Add comprehensive tests for both pages
|