Fix transaction delete type mismatch
The `onDelete` prop in `TransactionCard` and `RecentTransactionsSection` components was expecting a function that returns a boolean or a Promise resolving to a boolean, but was receiving a function that returns void. This commit updates the type definition and implementation to ensure the `onDelete` function returns the expected type.
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { Transaction } from './TransactionCard';
|
import { Transaction } from './TransactionCard';
|
||||||
import TransactionEditDialog from './TransactionEditDialog';
|
import TransactionEditDialog from './TransactionEditDialog';
|
||||||
@@ -6,10 +7,12 @@ import { useBudget } from '@/contexts/BudgetContext';
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { categoryIcons } from '@/constants/categoryIcons';
|
import { categoryIcons } from '@/constants/categoryIcons';
|
||||||
import TransactionIcon from './transaction/TransactionIcon';
|
import TransactionIcon from './transaction/TransactionIcon';
|
||||||
|
|
||||||
interface RecentTransactionsSectionProps {
|
interface RecentTransactionsSectionProps {
|
||||||
transactions: Transaction[];
|
transactions: Transaction[];
|
||||||
onUpdateTransaction?: (transaction: Transaction) => void;
|
onUpdateTransaction?: (transaction: Transaction) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
|
const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
|
||||||
transactions,
|
transactions,
|
||||||
onUpdateTransaction
|
onUpdateTransaction
|
||||||
@@ -20,10 +23,12 @@ const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
|
|||||||
updateTransaction,
|
updateTransaction,
|
||||||
deleteTransaction
|
deleteTransaction
|
||||||
} = useBudget();
|
} = useBudget();
|
||||||
|
|
||||||
const handleTransactionClick = (transaction: Transaction) => {
|
const handleTransactionClick = (transaction: Transaction) => {
|
||||||
setSelectedTransaction(transaction);
|
setSelectedTransaction(transaction);
|
||||||
setIsDialogOpen(true);
|
setIsDialogOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleUpdateTransaction = (updatedTransaction: Transaction) => {
|
const handleUpdateTransaction = (updatedTransaction: Transaction) => {
|
||||||
if (onUpdateTransaction) {
|
if (onUpdateTransaction) {
|
||||||
onUpdateTransaction(updatedTransaction);
|
onUpdateTransaction(updatedTransaction);
|
||||||
@@ -31,13 +36,23 @@ const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
|
|||||||
// 직접 컨텍스트를 통해 업데이트
|
// 직접 컨텍스트를 통해 업데이트
|
||||||
updateTransaction(updatedTransaction);
|
updateTransaction(updatedTransaction);
|
||||||
};
|
};
|
||||||
const handleDeleteTransaction = (id: string) => {
|
|
||||||
|
// 타입 불일치 해결: boolean 또는 Promise<boolean> 반환하도록 수정
|
||||||
|
const handleDeleteTransaction = async (id: string): Promise<boolean> => {
|
||||||
|
try {
|
||||||
// 직접 컨텍스트를 통해 삭제
|
// 직접 컨텍스트를 통해 삭제
|
||||||
deleteTransaction(id);
|
deleteTransaction(id);
|
||||||
|
return true; // 삭제 성공 시 true 반환
|
||||||
|
} catch (error) {
|
||||||
|
console.error('트랜잭션 삭제 중 오류:', error);
|
||||||
|
return false; // 삭제 실패 시 false 반환
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatCurrency = (amount: number) => {
|
const formatCurrency = (amount: number) => {
|
||||||
return amount.toLocaleString('ko-KR') + '원';
|
return amount.toLocaleString('ko-KR') + '원';
|
||||||
};
|
};
|
||||||
|
|
||||||
return <div className="mt-6 mb-[50px]">
|
return <div className="mt-6 mb-[50px]">
|
||||||
<div className="flex justify-between items-center mb-3">
|
<div className="flex justify-between items-center mb-3">
|
||||||
<h2 className="text-lg font-semibold">최근 지출</h2>
|
<h2 className="text-lg font-semibold">최근 지출</h2>
|
||||||
@@ -66,4 +81,5 @@ const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
|
|||||||
{selectedTransaction && <TransactionEditDialog transaction={selectedTransaction} open={isDialogOpen} onOpenChange={setIsDialogOpen} onSave={handleUpdateTransaction} onDelete={handleDeleteTransaction} />}
|
{selectedTransaction && <TransactionEditDialog transaction={selectedTransaction} open={isDialogOpen} onOpenChange={setIsDialogOpen} onSave={handleUpdateTransaction} onDelete={handleDeleteTransaction} />}
|
||||||
</div>;
|
</div>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default RecentTransactionsSection;
|
export default RecentTransactionsSection;
|
||||||
@@ -19,16 +19,30 @@ export type Transaction = {
|
|||||||
interface TransactionCardProps {
|
interface TransactionCardProps {
|
||||||
transaction: Transaction;
|
transaction: Transaction;
|
||||||
onUpdate?: (updatedTransaction: Transaction) => void;
|
onUpdate?: (updatedTransaction: Transaction) => void;
|
||||||
onDelete?: (id: string) => void; // onDelete 속성 추가
|
onDelete?: (id: string) => Promise<boolean> | boolean; // 타입 변경됨: boolean 또는 Promise<boolean> 반환
|
||||||
}
|
}
|
||||||
|
|
||||||
const TransactionCard: React.FC<TransactionCardProps> = ({
|
const TransactionCard: React.FC<TransactionCardProps> = ({
|
||||||
transaction,
|
transaction,
|
||||||
onDelete, // onDelete prop 추가
|
onDelete,
|
||||||
}) => {
|
}) => {
|
||||||
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
|
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
|
||||||
const { title, amount, date, category } = transaction;
|
const { title, amount, date, category } = transaction;
|
||||||
|
|
||||||
|
// 삭제 핸들러 - 인자로 받은 onDelete가 없거나 타입이 맞지 않을 때 기본 함수 제공
|
||||||
|
const handleDelete = async (id: string): Promise<boolean> => {
|
||||||
|
try {
|
||||||
|
if (onDelete) {
|
||||||
|
return await onDelete(id);
|
||||||
|
}
|
||||||
|
console.log('삭제 핸들러가 제공되지 않았습니다');
|
||||||
|
return false;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('트랜잭션 삭제 처리 중 오류:', error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div
|
<div
|
||||||
@@ -49,7 +63,7 @@ const TransactionCard: React.FC<TransactionCardProps> = ({
|
|||||||
transaction={transaction}
|
transaction={transaction}
|
||||||
open={isEditDialogOpen}
|
open={isEditDialogOpen}
|
||||||
onOpenChange={setIsEditDialogOpen}
|
onOpenChange={setIsEditDialogOpen}
|
||||||
onDelete={onDelete} // onDelete prop 전달
|
onDelete={handleDelete} // 래핑된 핸들러 사용
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user