From 279d689980ce2fac50b008761aafb2697c0ed931 Mon Sep 17 00:00:00 2001 From: "akito.nishiwaki" Date: Mon, 9 Jun 2025 11:54:22 +0900 Subject: [PATCH 1/6] first commit --- frontend/package-lock.json | 63 ++++++++++++++++++++++++++++++++++++++ frontend/package.json | 3 ++ package-lock.json | 20 +----------- 3 files changed, 67 insertions(+), 19 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b073615..eabdacc 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,6 +10,9 @@ "dependencies": { "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/react": "^6.1.17", "@mui/icons-material": "^5.15.10", "@mui/material": "^5.15.10", "@testing-library/jest-dom": "^5.17.0", @@ -2454,6 +2457,32 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fullcalendar/core": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.17.tgz", + "integrity": "sha512-0W7lnIrv18ruJ5zeWBeNZXO8qCWlzxDdp9COFEsZnyNjiEhUVnrW/dPbjRKYpL0edGG0/Lhs0ghp1z/5ekt8ZA==", + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.17.tgz", + "integrity": "sha512-K7m+pd7oVJ9fW4h7CLDdDGJbc9szJ1xDU1DZ2ag+7oOo1aCNLv44CehzkkknM6r8EYlOOhgaelxQpKAI4glj7A==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@fullcalendar/react": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.17.tgz", + "integrity": "sha512-AA8soHhlfRH5dUeqHnfAtzDiXa2vrgWocJSK/F5qzw/pOxc9MqpuoS/nQBROWtHHg6yQUg3DoGqOOhi7dmylXQ==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.17", + "react": "^16.7.0 || ^17 || ^18 || ^19", + "react-dom": "^16.7.0 || ^17 || ^18 || ^19" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -13068,6 +13097,15 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -18406,6 +18444,26 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==" }, + "@fullcalendar/core": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.17.tgz", + "integrity": "sha512-0W7lnIrv18ruJ5zeWBeNZXO8qCWlzxDdp9COFEsZnyNjiEhUVnrW/dPbjRKYpL0edGG0/Lhs0ghp1z/5ekt8ZA==", + "requires": { + "preact": "~10.12.1" + } + }, + "@fullcalendar/daygrid": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.17.tgz", + "integrity": "sha512-K7m+pd7oVJ9fW4h7CLDdDGJbc9szJ1xDU1DZ2ag+7oOo1aCNLv44CehzkkknM6r8EYlOOhgaelxQpKAI4glj7A==", + "requires": {} + }, + "@fullcalendar/react": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.17.tgz", + "integrity": "sha512-AA8soHhlfRH5dUeqHnfAtzDiXa2vrgWocJSK/F5qzw/pOxc9MqpuoS/nQBROWtHHg6yQUg3DoGqOOhi7dmylXQ==", + "requires": {} + }, "@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -25831,6 +25889,11 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==" + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index d268744..4c4efb8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,6 +7,9 @@ "dependencies": { "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/react": "^6.1.17", "@mui/icons-material": "^5.15.10", "@mui/material": "^5.15.10", "@testing-library/jest-dom": "^5.17.0", diff --git a/package-lock.json b/package-lock.json index dbdf2f4..ab49b58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,23 +2,5 @@ "name": "joint_exc", "lockfileVersion": 3, "requires": true, - "packages": { - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-icons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", - "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", - "peerDependencies": { - "react": "*" - } - } - } + "packages": {} } From 348f6c9a3e4eef33d0c6ccdb39363130b16c4486 Mon Sep 17 00:00:00 2001 From: "akito.nishiwaki" Date: Mon, 9 Jun 2025 14:20:16 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=E5=BA=97=E8=88=97=E5=85=A5=E5=8A=9B?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskListPage.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/TaskListPage.tsx b/frontend/src/pages/TaskListPage.tsx index 411b115..dc0a810 100644 --- a/frontend/src/pages/TaskListPage.tsx +++ b/frontend/src/pages/TaskListPage.tsx @@ -337,14 +337,18 @@ const TaskListPage: React.FC = () => { margin="dense" label="消費・賞味期限(yyyy/MM/dd)" fullWidth - multiline /> {/* 購入日入力フィールド */} + {/* 購入店舗入力フィールド */} + From e44ac9fe4d7d4d6ef0d05d7eb9f2b813a83e3414 Mon Sep 17 00:00:00 2001 From: "akito.nishiwaki" Date: Mon, 9 Jun 2025 14:33:55 +0900 Subject: [PATCH 3/6] commit --- frontend/src/pages/TaskListPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/TaskListPage.tsx b/frontend/src/pages/TaskListPage.tsx index dc0a810..21bb759 100644 --- a/frontend/src/pages/TaskListPage.tsx +++ b/frontend/src/pages/TaskListPage.tsx @@ -344,7 +344,7 @@ const TaskListPage: React.FC = () => { label="購入日(yyyy/MM/dd)" fullWidth /> - {/* 購入店舗入力フィールド */} + {/* 購入店舗入力フィールド */} Date: Mon, 9 Jun 2025 14:34:40 +0900 Subject: [PATCH 4/6] calender --- frontend/src/App.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 2f0c096..618fe8c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -14,6 +14,9 @@ import './App.css'; // 必要なインポートを追加 import AddDishes1 from './pages/AddDishes1'; import AddDishes2 from './pages/AddDishes2'; +//カレンダーライブラリ +import FullCalendar from '@fullcalendar/react'; +import dayGridPlugin from "@fullcalendar/daygrid"; /** * アプリケーション全体のMaterial UIテーマを定義 @@ -55,6 +58,15 @@ const theme = createTheme({ }, }); +const Calendar = () => { + return ( + + ); +} + /** * 認証が必要なルートを保護するためのコンポーネント * ローカルストレージにトークンがない場合はログインページにリダイレクト From 26d65a4384c9f117129663d09b5212dbd6ca6b2c Mon Sep 17 00:00:00 2001 From: "akito.nishiwaki" Date: Mon, 9 Jun 2025 16:09:26 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=E8=B3=BC=E5=85=A5=E6=97=A5=E3=80=81?= =?UTF-8?q?=E8=B3=9E=E5=91=B3=E6=9C=9F=E9=99=90=E3=81=AE=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=82=92=E9=80=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskListPage.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/TaskListPage.tsx b/frontend/src/pages/TaskListPage.tsx index 21bb759..4182e75 100644 --- a/frontend/src/pages/TaskListPage.tsx +++ b/frontend/src/pages/TaskListPage.tsx @@ -332,16 +332,16 @@ const TaskListPage: React.FC = () => { label="価格" fullWidth /> - {/* 消費・賞味期限入力フィールド */} + {/* 購入日入力フィールド */} - {/* 購入日入力フィールド */} + {/* 消費・賞味期限入力フィールド */} {/* 購入店舗入力フィールド */} From dc98e438c5ee25fe5e64280445d94b546af25972 Mon Sep 17 00:00:00 2001 From: "akito.nishiwaki" Date: Tue, 10 Jun 2025 16:06:48 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BE=A1=E6=A0=BC=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=80=81=E5=BA=97=E8=88=97=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskListPage.tsx | 43 ++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/frontend/src/pages/TaskListPage.tsx b/frontend/src/pages/TaskListPage.tsx index 7c49132..d577f1e 100644 --- a/frontend/src/pages/TaskListPage.tsx +++ b/frontend/src/pages/TaskListPage.tsx @@ -34,7 +34,7 @@ import { Add as AddIcon, Delete as DeleteIcon, ShoppingBasket as ShoppingBasketIcon, SoupKitchen as SoupKitchenIcon } from '@mui/icons-material'; -import { ToBuy, Stuff, Stock } from '../types/types'; +import { ToBuy, Stuff, /*Stock*/ } from '../types/types'; import { TOBUY_ERRORS } from '../constants/errorMessages'; //import { FaCarrot } from "react-icons/fa6"; //エラー起きる いったん保留 @@ -64,7 +64,7 @@ const TaskListPage: React.FC = () => { //在庫登録ダイアログの表示状態 const [openInfoDialog, setOpenInfoDialog] = useState(false); - + const [selectedTask, setSelectedTask] = useState(0); const [newToBuy, setNewToBuy] = useState(EMPTY_TOBUY); @@ -73,6 +73,8 @@ const TaskListPage: React.FC = () => { const [newStock, setNewStock] = useState(EMPTY_STOCK); + const [newPrice, setNewPrice] = useState("");//入力用の価格(文字列) + // コンポーネントマウント時にタスク一覧を取得 useEffect(() => { @@ -126,14 +128,21 @@ const TaskListPage: React.FC = () => { console.error(`${TOBUY_ERRORS.DELETE_FAILED}:`, error); } }; - + /** * 買うものリストの在庫登録(購入処理)を行うハンドラー */ const handleBuy = async (tobuyId: number) => { try { const today = new Date().toISOString().substring(0, 10); - await toBuyApi.buy({tobuyId, ...newStock, lastUpdate: today}); + const parsedPrice = parseInt(newPrice, 10); + if (!isNaN(parsedPrice)) { + setNewStock({ ...newStock, price: parsedPrice }); + }else{ + alert('入力が無効です') + return + } + await toBuyApi.buy({ tobuyId, ...newStock, lastUpdate: today }); //データベースに送信 fetchTasks(); // 削除後の買うもの一覧を再取得 } catch (error) { console.error(`${TOBUY_ERRORS.BUY_FAILED}:`, error); @@ -253,12 +262,13 @@ const TaskListPage: React.FC = () => { {setOpenDialog(true); - //handleNavigate('/AddDishies1'); + onClick={() => { + setOpenDialog(true); + //handleNavigate('/AddDishies1'); }} - //selected={isSelected('/test')} + //selected={isSelected('/test')} + - > @@ -286,7 +296,7 @@ const TaskListPage: React.FC = () => {