diff --git a/frontend/src/pages/StockPage.tsx b/frontend/src/pages/StockPage.tsx index e97a294..b8f3041 100644 --- a/frontend/src/pages/StockPage.tsx +++ b/frontend/src/pages/StockPage.tsx @@ -27,6 +27,7 @@ import { MenuItem, } from '@mui/material'; import { GENERAL_ERRORS, STOCK_ERRORS } from '../constants/errorMessages'; +import { Add as AddIcon } from '@mui/icons-material'; import DatePicker, { registerLocale } from 'react-datepicker'; import { ja } from 'date-fns/locale/ja'; // date-fnsの日本語ロケールをインポート import { useMessage } from '../components/MessageContext'; @@ -115,6 +116,27 @@ const StockPage: React.FC = () => { newStock.shop = newStock.shop || null; console.log(newStock) + + // 購入日と消費・賞味期限の整合性チェック + const buy = new Date(newStock.buyDate); + const exp = new Date(newStock.expDate); + // 時間をリセットして純粋な“日付のみ”のタイムスタンプを取得 + const buyDateOnly = new Date(buy); + buyDateOnly.setHours(0, 0, 0, 0); + const expDateOnly = new Date(exp); + expDateOnly.setHours(0, 0, 0, 0); + + // console.log("新規作成buy:", buy); + // console.log("新規作成exp:", exp); + // console.log("新規作成buyDateOnly:", buyDateOnly); + // console.log("新規作成expDateOnly:", expDateOnly); + + if (buyDateOnly.getTime() > expDateOnly.getTime()) { + // alert("購入日は消費・賞味期限より前の日付を設定してください。"); + showErrorMessage('購入日は消費・賞味期限より前の日付を設定してください.'); + return; + } + const today = new Date().toISOString().substring(0, 10); const updatedStock = { ...newStock, lastUpdate: today }; // lastUpdate に today を設定 @@ -197,37 +219,42 @@ const StockPage: React.FC = () => { }; /** - * セルを選択する関数. 再度クリックで選択解除 → 行選択ではなくチェックボックスにしたため不要 + * セルを選択して編集画面 */ - // const handleRowClick = (stock: Stock) => { - // setSelectedRow(prev => (prev?.stockId === stock.stockId ? null : stock)); - // }; - // チェックボックス切り替え - const handleCheckboxChange = (stock: Stock) => { - setSelectedRow(prev => (prev?.stockId === stock.stockId ? null : stock)); + const handleRowClick = (stock: Stock) => { + setSelectedRow(stock); // 行選択 + setEditStock({ ...stock }); // 編集対象にセット + setIsEditOpen(true); // 編集ダイアログを開く }; - - /** 編集ボタンを押したときにダイアログを開く */ - // ダイアログを開く際に `selectedRow` の値を `editStock` にセット - const handleOpenEdit = () => { - if (selectedRow) { - setEditStock({ ...selectedRow }); - setIsEditOpen(true); - } else { - showWarningMessage("編集する食材を選択してください。"); - } - }; // 変更を適用. 数量に0を入力したとき、削除ダイアログに飛ぶ機能を追加 const handleApplyChanges = async () => { if (!editStock) return; const {stockId, amount, buyAmount, price, shop, buyDate, expDate, lastUpdate} = editStock; + // 購入日が消費・賞味期限より未来の場合はエラー表示 + const buy = new Date(buyDate); + const exp = new Date(expDate); + // 時間をリセットして純粋な“日付のみ”のタイムスタンプを取得 + const buyDateOnly = new Date(buy); + buyDateOnly.setHours(0, 0, 0, 0); + const expDateOnly = new Date(exp); + expDateOnly.setHours(0, 0, 0, 0); + // console.log("編集buy:", buy); + // console.log("編集exp:", exp); + // console.log("編集buyDateOnly:", buyDateOnly); + // console.log("編集expDateOnly:", expDateOnly); + + if (buy > exp) { + // alert("購入日は消費・賞味期限より前の日付を設定してください。"); + showErrorMessage('購入日は消費・賞味期限より前の日付を設定してください.'); + return; + } try { if (amount === 0) { // 数量が 0 の場合は削除処理へ誘導 - setIsEditOpen(false); // 編集ダイアログを閉じる + // setIsEditOpen(false); // 編集ダイアログを閉じる setSelectedRow(editStock); // 削除対象をセット setIsDeleteOpen(true); // 削除ダイアログを開く return; @@ -297,7 +324,6 @@ const StockPage: React.FC = () => { } }; - /** 編集ダイアログを閉じる */ const handleCloseEdit = () => { setIsEditOpen(false); @@ -308,7 +334,8 @@ const StockPage: React.FC = () => { if (selectedRow) { setIsDeleteOpen(true); } else { - showWarningMessage("削除する食材を選択してください。"); + // showWarningMessage("削除する食材を選択してください。"); + showErrorMessage('削除する食材を選択してください.'); } }; /** 削除ダイアログを閉じる */ @@ -328,37 +355,38 @@ const StockPage: React.FC = () => {