料理に必要な食材をタスク一覧に表示されるよう修正

dev-frontend-add_dishes
masato.fujita 5 months ago
parent fbc186bcc0
commit 43d69e2f8e
  1. 20
      frontend/src/pages/AddDishes1.tsx
  2. 57
      frontend/src/pages/AddDishes2.tsx

@ -34,16 +34,16 @@ const AddDishes1: React.FC = () => {
setDish(event.target.value); setDish(event.target.value);
}; };
const handleSubmit = async (e: React.FormEvent) => { const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault(); // フォームのデフォルト送信動作を防止 e.preventDefault(); // フォームのデフォルト送信動作を防止
if (!dish.trim()) { if (!dish.trim()) {
alert("エラー"); alert("エラー");
setError(true); setError(true);
} else { } else {
alert("送信成功!"); alert("送信成功!");
localStorage.setItem("dishName", dish); // ローカルストレージにフォームに入力された料理名を保存 localStorage.setItem("dishName", dish); // ローカルストレージにフォームに入力された料理名を保存
navigate('/add2', { state: dish }); // 料理名から材料名追加ページにリダイレクト navigate('/add2', { state: dish }); // 料理名から材料名追加ページにリダイレクト
} }
}; };
return ( return (
<div> <div>

@ -36,8 +36,11 @@ import { TASK_ERRORS } from '../constants/errorMessages';
import { GENERAL_ERRORS } from '../constants/errorMessages'; import { GENERAL_ERRORS } from '../constants/errorMessages';
import CategoryDropDown from "../components/CategoryDropDown"; import CategoryDropDown from "../components/CategoryDropDown";
// 新規タスクの初期状態 // 新規タスクの初期状態(画面表示用)
const EMPTY_TASK = { title: '', amount: 0, completed: false }; const EMPTY_TASK = { id: 0, title: '', amount: 0, completed: false };
// 新規タスクの初期状態(データベース登録用)
const EMPTY_TASK_DATA_BASE = { id: 0, title: '', amount: 0, completed: false };
interface Empty_Task { interface Empty_Task {
title: string; // 食材名 title: string; // 食材名
@ -49,6 +52,7 @@ const AddDishes2: React.FC = () => {
const receivedData = localStorage.getItem("dishName"); const receivedData = localStorage.getItem("dishName");
// タスク一覧の状態管理 // タスク一覧の状態管理
const [tasks, setTasks] = useState<Task[]>([]); const [tasks, setTasks] = useState<Task[]>([]);
const [addtasks, setAddTasks] = useState<Empty_Task[]>([]); const [addtasks, setAddTasks] = useState<Empty_Task[]>([]);
// エラーメッセージの状態管理 // エラーメッセージの状態管理
const [error, setError] = useState(false); const [error, setError] = useState(false);
@ -57,19 +61,23 @@ const AddDishes2: React.FC = () => {
// 新規タスクの入力内容 // 新規タスクの入力内容
const [newTask, setNewTask] = useState(EMPTY_TASK); const [newTask, setNewTask] = useState(EMPTY_TASK);
// const fetchTasks = async () => {
// try {
// const tasks = await taskApi.getTasks();
// setTasks(tasks);
// } catch (error) {
// console.error(`${TASK_ERRORS.FETCH_FAILED}:`, error);
// }
// };
// コンポーネントマウント時にタスク一覧を取得 // コンポーネントマウント時にタスク一覧を取得
// useEffect(() => { useEffect(() => {
// fetchTasks(); fetchTasks();
// }, []); }, []);
/**
* APIからタスク一覧を取得する関数
* state(tasks)
*/
const fetchTasks = async () => {
try {
const tasks = await taskApi.getTasks();
setTasks(tasks);
} catch (error) {
console.error(`${TASK_ERRORS.FETCH_FAILED}:`, error);
}
};
/** /**
* *
* IDのタスクをAPIを通じて削除 * IDのタスクをAPIを通じて削除
@ -94,14 +102,15 @@ const AddDishes2: React.FC = () => {
e.preventDefault(); // フォームのデフォルト送信動作を防止 e.preventDefault(); // フォームのデフォルト送信動作を防止
if (addtasks[0] == null) { if (addtasks[0] == null) {
setError(true); setError(true);
alert("食材を追加してください") alert("食材を追加してください");
} else { } else {
alert("送信成功!"); alert("送信成功!");
handleCreateTask_DataBase();
// localStorage.setItem("dishName", dish); // ローカルストレージにフォームに入力された料理名を保存 // localStorage.setItem("dishName", dish); // ローカルストレージにフォームに入力された料理名を保存
// navigate('/add2', { state: dish }); // 料理名から材料名追加ページにリダイレクト // navigate('/add2', { state: dish }); // 料理名から材料名追加ページにリダイレクト
} }
}; };
const handleCreateTask = async () => { const handleCreateTask_Temp = async () => {
try { try {
// await taskApi.createTask(newTask); // await taskApi.createTask(newTask);
let newAddTasks = [...addtasks]; // 配列をコピー let newAddTasks = [...addtasks]; // 配列をコピー
@ -114,6 +123,20 @@ const AddDishes2: React.FC = () => {
console.error(`${TASK_ERRORS.CREATE_FAILED}:`, error); console.error(`${TASK_ERRORS.CREATE_FAILED}:`, error);
} }
}; };
const handleCreateTask_DataBase = async () => {
try {
for (let i = 0; i < addtasks.length; i++) {
await taskApi.createTask(addtasks[i]);
}
setOpenDialog(false); // ダイアログを閉じる
setNewTask(EMPTY_TASK); // 入力内容をリセット
// fetchTasks(); // 作成後のタスク一覧を再取得
} catch (error) {
console.error(`${TASK_ERRORS.CREATE_FAILED}:`, error);
}
};
return ( return (
<Box> <Box>
<div> <div>
@ -243,7 +266,7 @@ const AddDishes2: React.FC = () => {
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Button onClick={() => setOpenDialog(false)}></Button> <Button onClick={() => setOpenDialog(false)}></Button>
<Button onClick={handleCreateTask} variant="contained"> <Button onClick={handleCreateTask_Temp} variant="contained">
</Button> </Button>
</DialogActions> </DialogActions>

Loading…
Cancel
Save