Compare commits
No commits in common. 'c3594a7575fe6d126cc3e36b7a4ca683d2dc51d7' and 'c490af748971b83bacbf6d15f7a2da8a9714f9a1' have entirely different histories.
c3594a7575
...
c490af7489
@ -1,124 +0,0 @@ |
|||||||
import React, { useEffect, useState } from 'react'; |
|
||||||
import { |
|
||||||
Dialog, |
|
||||||
DialogTitle, |
|
||||||
DialogContent, |
|
||||||
DialogActions, |
|
||||||
Button, |
|
||||||
Box, |
|
||||||
} from '@mui/material'; |
|
||||||
|
|
||||||
import { toBuyApi } from '../services/api'; |
|
||||||
import { recipeApi } from '../services/api'; |
|
||||||
|
|
||||||
import CloseIcon from '@mui/icons-material/Close'; |
|
||||||
import { RecipeDetailWithId, StuffNameAndAmount } from '../types/types'; |
|
||||||
|
|
||||||
const AddByRecipeDialog = ({ |
|
||||||
openDialog, |
|
||||||
setOpenDialog, |
|
||||||
recipeId, |
|
||||||
numOfPeople, |
|
||||||
setNumOfPeaple, |
|
||||||
checked, |
|
||||||
setChecked |
|
||||||
}: { |
|
||||||
openDialog: boolean, |
|
||||||
setOpenDialog: (open: boolean) => void, |
|
||||||
recipeId: number, |
|
||||||
numOfPeople: number, |
|
||||||
setNumOfPeaple: (num: number) => void, |
|
||||||
checked: boolean, |
|
||||||
setChecked: (checked: boolean) => void |
|
||||||
}) => { |
|
||||||
const [recipe, setRecipe] = useState<RecipeDetailWithId>(); |
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => { |
|
||||||
console.log("called AddByRecipeDialog useEffect recipeId: ", recipeId); |
|
||||||
if (recipeId) { |
|
||||||
const fetchRecipe = async () => { |
|
||||||
console.log("Fetching recipe with ID:", recipeId); |
|
||||||
setRecipe(await recipeApi.getById(recipeId)); |
|
||||||
}; |
|
||||||
fetchRecipe(); |
|
||||||
} |
|
||||||
}, [recipeId]); |
|
||||||
|
|
||||||
return ( |
|
||||||
recipe ?
|
|
||||||
<Dialog open={openDialog} onClose={() => setOpenDialog(false)} disableScrollLock={true} PaperProps={{ sx: { minWidth: '300px', maxHeight: '80vh' } }}> |
|
||||||
<DialogTitle sx={{ m: 0, p: 2, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}> |
|
||||||
|
|
||||||
買うものリストへ追加 |
|
||||||
<CloseIcon |
|
||||||
onClick={() => setOpenDialog(false)} |
|
||||||
sx={{ |
|
||||||
cursor: 'pointer', |
|
||||||
color: (theme) => theme.palette.grey[500], |
|
||||||
}} |
|
||||||
/> |
|
||||||
</DialogTitle> |
|
||||||
<DialogContent dividers sx={{ padding: 2 }}> |
|
||||||
<div> |
|
||||||
<strong>レシピ名:</strong> {recipe.recipeName} |
|
||||||
</div> |
|
||||||
<div> |
|
||||||
({recipe.maxServings}人分在庫あり) |
|
||||||
</div> |
|
||||||
<div> |
|
||||||
<strong>材料(1人前):</strong> |
|
||||||
<ul> |
|
||||||
{recipe.stuffAndAmountArray.map((item, index) => ( |
|
||||||
<li key={index}> |
|
||||||
{item.stuffName} - {item.amount}個 |
|
||||||
</li> |
|
||||||
))} |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
|
|
||||||
{/* 在庫との差分を取るかのチェックボックス */} |
|
||||||
<div> |
|
||||||
<label> |
|
||||||
<input |
|
||||||
type="checkbox" |
|
||||||
checked={checked} |
|
||||||
onChange={(e) => setChecked(e.target.checked)} |
|
||||||
/> |
|
||||||
在庫との差分を取る |
|
||||||
</label> |
|
||||||
</div> |
|
||||||
|
|
||||||
{/* レシピを追加する人数分を入力 */} |
|
||||||
<div> |
|
||||||
<strong>人数:</strong> |
|
||||||
<input |
|
||||||
type="number" |
|
||||||
min="1" |
|
||||||
defaultValue={1} |
|
||||||
onChange={(e) => { |
|
||||||
setNumOfPeaple(parseInt(e.target.value, 10)); |
|
||||||
}} |
|
||||||
/> |
|
||||||
</div> |
|
||||||
|
|
||||||
{/* 買うものリストに追加するボタン */} |
|
||||||
<Box sx={{ mt: 2 }}> |
|
||||||
<Button |
|
||||||
variant="contained" |
|
||||||
color="primary" |
|
||||||
onClick={() => { |
|
||||||
toBuyApi.addByRecipe(recipe.recipeId, numOfPeople, checked); |
|
||||||
setOpenDialog(false); |
|
||||||
}} |
|
||||||
> |
|
||||||
</Button> |
|
||||||
</Box> |
|
||||||
</DialogContent> |
|
||||||
|
|
||||||
</Dialog> |
|
||||||
: <></> |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
export default AddByRecipeDialog; |
|
Loading…
Reference in new issue