MCPcopy Create free account
hub / github.com/0010aor/FlashNotes / useCard

Function useCard

frontend/src/hooks/useCard.ts:17–100  ·  view source on GitHub ↗
(collectionId: string, cardId?: string)

Source from the content-addressed store, hash-verified

15}
16
17export function useCard(collectionId: string, cardId?: string) {
18 const { t } = useTranslation()
19 const queryClient = useQueryClient()
20 const [card, setCard] = useState<CardData>({ front: '', back: '' })
21 const [originalCard, setOriginalCard] = useState<CardData>({
22 front: '',
23 back: '',
24 })
25
26 const [currentSide, setCurrentSide] = useState<'front' | 'back'>('front')
27 const [isFlipped, setIsFlipped] = useState(false)
28 const [isLoading, setIsLoading] = useState(!!cardId)
29
30 useEffect(() => {
31 if (!cardId) {
32 setIsLoading(false)
33 return
34 }
35
36 const fetchCard = async () => {
37 try {
38 const data = await getCardById(collectionId, cardId)
39 if (data) {
40 setCard(data)
41 setOriginalCard(data)
42 }
43 } catch (error) {
44 toaster.create({
45 title: t('general.errors.errorLoadingCard'),
46 type: 'error',
47 })
48 } finally {
49 setIsLoading(false)
50 }
51 }
52 fetchCard()
53 }, [cardId, collectionId, t])
54
55 const saveCard = useCallback(
56 async (cardData: CardData) => {
57 if (cardData.front === '' && cardData.back === '') return
58
59 const hasChanged = hasCardContentChanged(originalCard, cardData)
60
61 if (!cardData.id || hasChanged) {
62 try {
63 let savedCard: CardData
64 if (cardData.id) {
65 savedCard = await updateCard(collectionId, cardData.id, cardData)
66 setOriginalCard(cardData)
67 } else {
68 savedCard = await createCard(collectionId, cardData)
69 setCard((prev) => ({ ...prev, id: savedCard.id }))
70 setOriginalCard({ ...cardData, id: savedCard.id })
71 }
72
73 queryClient.invalidateQueries({
74 queryKey: ['collections', collectionId, 'cards'],

Callers 2

CardComponentFunction · 0.90
NewCardFunction · 0.90

Calls 6

updateCardFunction · 0.90
createCardFunction · 0.90
fetchCardFunction · 0.85
hasCardContentChangedFunction · 0.85
tFunction · 0.85
createMethod · 0.65

Tested by

no test coverage detected