何人分かを入力するダイアログを表示(自分の画面では動かない)

feature-frontend-top
masato.fujita 4 months ago
parent 4fa35de3ac
commit bd95369479
  1. 97
      frontend/src/pages/AddRecipe.tsx

@ -21,6 +21,7 @@ import {
TextField, TextField,
Button, Button,
Box, Box,
FormGroup,
MenuItem, MenuItem,
Select, Select,
FormControl, FormControl,
@ -43,6 +44,9 @@ const AddRecipe: React.FC = () => {
const navigate = useNavigate(); const navigate = useNavigate();
// 何人分かを格納する
const [numOfPeaple, setNumOfPeaple] = useState<number>(1);
const [openNumOfPeapleDialog, setOpenNumOfPeapleDialog] = useState(false);
// 料理名,説明 // 料理名,説明
const [recipeName, setRecipeName] = useState<string>(''); const [recipeName, setRecipeName] = useState<string>('');
const [recipeSummary, setRecipeSummary] = useState<string>(''); const [recipeSummary, setRecipeSummary] = useState<string>('');
@ -71,17 +75,20 @@ const AddRecipe: React.FC = () => {
const handleSaveRecipe = async () => { const handleSaveRecipe = async () => {
if (!recipeName) { // if (!recipeName) {
alert('レシピ名が入力されていません!') // alert('レシピ名が入力されていません!')
return false; // console.log("yes1");
} // return false;
// }
if (!items.length) { // if (!items.length) {
alert('材料が追加されていません!') // alert('材料が追加されていません!')
return false; // console.log("yes2");
} // return false;
// }
if (!recipeId) { if (!recipeId) {
console.log("yes3");
// 新規追加 // 新規追加
const response = await recipeApi.addRecipe({ const response = await recipeApi.addRecipe({
recipeName, recipeName,
@ -97,10 +104,25 @@ const AddRecipe: React.FC = () => {
summary: recipeSummary, summary: recipeSummary,
stuffAndAmountArray: items, stuffAndAmountArray: items,
}) })
console.log("yes4");
return recipeId; return recipeId;
} }
const checkRecipeAndItems = async () => {
if (!recipeName) {
alert('レシピ名が入力されていません!')
console.log("yes1");
return false;
}
if (!items.length) {
alert('材料が追加されていません!')
console.log("yes2");
return false;
}
}
const handleSubmit = async () => { const handleSubmit = async () => {
const recipeId = await handleSaveRecipe(); const recipeId = await handleSaveRecipe();
// alert('レシピが保存されました!'); // alert('レシピが保存されました!');
@ -109,13 +131,27 @@ const AddRecipe: React.FC = () => {
} }
const handleSubmitAndAddToBuy = async () => { const handleSubmitAndAddToBuy = async () => {
console.log(recipeName);
const recipeId = await handleSaveRecipe(); const recipeId = await handleSaveRecipe();
console.log("before");
if (!recipeId) return false; if (!recipeId) return false;
console.log("ds");
await toBuyApi.addByRecipe(recipeId); await toBuyApi.addByRecipe(recipeId);
// alert('レシピが保存されて買うものリストに追加されました!'); // alert('レシピが保存されて買うものリストに追加されました!');
navigate('/tasks'); navigate('/tasks');
} }
const openNumOfPeopleDialog = async () => {
await checkRecipeAndItems();
setOpenNumOfPeapleDialog(true);
}
const cancelNumOfPeopleDialog = async () => {
const recipeId = await handleSaveRecipe();
if (!recipeId) return false;
setOpenNumOfPeapleDialog(false);
}
// コンポーネントマウント時にタスク一覧を取得 // コンポーネントマウント時にタスク一覧を取得
useEffect(() => { useEffect(() => {
loadRecipe(); loadRecipe();
@ -138,7 +174,7 @@ const AddRecipe: React.FC = () => {
value={recipeSummary} onChange={(e) => setRecipeSummary(e.target.value)} value={recipeSummary} onChange={(e) => setRecipeSummary(e.target.value)}
/> />
</div> </div>
<h2 style={{marginTop: "0.5em" }}> <h2 style={{ marginTop: "0.5em" }}>
</h2> </h2>
{/* すべての材料情報を表示 */} {/* すべての材料情報を表示 */}
@ -190,6 +226,7 @@ const AddRecipe: React.FC = () => {
))}</List>)} ))}</List>)}
<div style={{ position: "fixed", left: "80%", transform: 'translateX(-50%)', bottom: "10%" }}> <div style={{ position: "fixed", left: "80%", transform: 'translateX(-50%)', bottom: "10%" }}>
<Box sx={{ textAlign: 'center' }}> <Box sx={{ textAlign: 'center' }}>
@ -205,7 +242,7 @@ const AddRecipe: React.FC = () => {
<SaveIcon sx={{ fontSize: "1.5rem", marginRight: "0.5rem" }} /> <SaveIcon sx={{ fontSize: "1.5rem", marginRight: "0.5rem" }} />
</Button> </Button>
<Button variant='contained' color="primary" onClick={handleSubmitAndAddToBuy}> <Button variant='contained' color="primary" onClick={openNumOfPeopleDialog}>
<ListAltIcon sx={{ fontSize: "1.5rem", marginRight: "0.5rem" }} /> <ListAltIcon sx={{ fontSize: "1.5rem", marginRight: "0.5rem" }} />
</Button> </Button>
@ -228,6 +265,44 @@ const AddRecipe: React.FC = () => {
setOpenAmountDialog(false); setOpenAmountDialog(false);
}} /> }} />
<Dialog open={openNumOfPeapleDialog} onClose={() => setOpenNumOfPeapleDialog(false)} disableScrollLock={true}
style={{ width : '100%', position : 'fixed', left: '50%', transform: 'translateX(-50%)' }}
>
<Box display="flex" alignItems="center"
>
<DialogTitle sx={{ flexGrow: 1 }}></DialogTitle>
</Box>
<DialogContent>
<div>
{/* 人数入力フィールド */}
<TextField
margin="dense"
label="何人前"
fullWidth
value={numOfPeaple}
onChange={(e) => {
const value = e.target.value;
const parsedValue = parseInt(value, 10); // 数値に変換
if (/*!isNaN(parsedValue) && */ isNaN(parsedValue) || parsedValue >= 1) { //負数除外
setNumOfPeaple(parsedValue); // number型で保存
}
}}
sx={{ minWidth: "8px", width: "100%" }}
type="number"
inputProps={{ inputMode: "numeric", pattern: "[0-9]*" }} // ここで整数のみ許可
/>
</div>
</DialogContent>
<DialogActions>
<Button onClick={() => setOpenNumOfPeapleDialog(false)}></Button>
<Button onClick={() => handleSubmitAndAddToBuy} variant="contained"
style={{ width: '40%', fontSize: '1vw' }}
>
</Button>
</DialogActions>
</Dialog>
</Box> </Box>
); );
}; };

Loading…
Cancel
Save