入力欄の修正,購入日に今日の日付を設定

feature-frontend-stock-fix
Masaharu.Kato 4 months ago
parent fcf96bbf97
commit 9775fa7fdf
  1. 8
      frontend/src/components/BuyDialog.tsx
  2. 83
      frontend/src/pages/StockPage.tsx
  3. 2
      frontend/src/pages/TaskListPage.tsx

@ -9,9 +9,13 @@ import {
Box,
} from '@mui/material';
import { NewStock } from '../types/types';
import DatePicker from 'react-datepicker';
import DatePicker, { registerLocale } from 'react-datepicker';
import { ja } from 'date-fns/locale/ja'; // date-fnsの日本語ロケールをインポート
// 日本語ロケールを登録
registerLocale('ja', ja);
const BuyDialog = ({
openDialog,
setOpenDialog,
@ -25,7 +29,7 @@ const BuyDialog = ({
setNewStock: (tobuy: NewStock) => void,
onSubmit: () => void,
}) => {
return (

@ -27,21 +27,26 @@ import {
MenuItem,
} from '@mui/material';
import { STOCK_ERRORS } from '../constants/errorMessages';
import DatePicker, { registerLocale } from 'react-datepicker';
import { ja } from 'date-fns/locale/ja'; // date-fnsの日本語ロケールをインポート
// 新規在庫の初期状態
const EMPTY_STOCK: Omit<Stock, 'stockId' | 'stuffId'> & { stuffId: number | null } & { newAddition: boolean } = {
stuffId: null,
stuffName: '',
amount: 0,
amount: 1,
price: 0,
lastUpdate: '',
buyDate: '',
buyDate: new Date().toISOString(),
expDate: '',
category: '',
newAddition: false, // 材料を新規作成するか否か
// shop '',
}
// 日本語ロケールを登録
registerLocale('ja', ja);
const StockPage: React.FC = () => {
const [stocks, setStocks] = useState<Stock[]>([]);
@ -86,6 +91,9 @@ const StockPage: React.FC = () => {
if (newStock.newAddition) {
newStock.stuffId = null;
}
if (isNaN(newStock.amount)) return;
if (isNaN(newStock.price)) return;
console.log(newStock)
const today = new Date().toISOString().substring(0, 10);
@ -381,7 +389,7 @@ const StockPage: React.FC = () => {
</Typography>
<Box sx={{textAlign: 'right'}}>
<Box sx={{ textAlign: 'right' }}>
{/* 在庫の食材追加ボタン */}
<Button variant="contained" color="primary" onClick={handleOpenAdd} sx={{ mt: 3, mb: 2, mr: 1 }}>
@ -453,7 +461,7 @@ const StockPage: React.FC = () => {
onChange={(e) => {
const value = e.target.value;
const parsedValue = parseInt(value, 10); // 数値に変換
if (!isNaN(parsedValue)) {
if (isNaN(parsedValue) || parsedValue >= 1) { // 入力欄をいったん空欄にできるようにする,ただし空欄でない場合は1以上のみOK
setNewStock({ ...newStock, amount: parsedValue }); // number型で保存
}
}}
@ -470,7 +478,7 @@ const StockPage: React.FC = () => {
onChange={(e) => {
const value = e.target.value;
const parsedValue = parseInt(value, 10); // 数値に変換
if (!isNaN(parsedValue)) {
if (isNaN(parsedValue) || parsedValue >= 0) { // 入力欄をいったん空欄にできるようにする,ただし空欄でない場合は0以上のみOK
setNewStock({ ...newStock, price: parsedValue }); // number型で保存
}
}}
@ -479,23 +487,54 @@ const StockPage: React.FC = () => {
inputProps={{ inputMode: "numeric", pattern: "[0-9]*" }} // ここで整数のみ許可
/>
{/* 購入日入力フィールド */}
<TextField
margin="dense"
label="購入日(yyyy/MM/dd)"
fullWidth
value={newStock.buyDate}
onChange={(e) => setNewStock({ ...newStock, buyDate: e.target.value })}
/>
{/* 賞味・消費期限入力フィールド */}
<TextField
margin="dense"
label="消費・賞味期限(yyyy/MM/dd)"
fullWidth
value={newStock.expDate}
onChange={(e) => setNewStock({ ...newStock, expDate: e.target.value })}
/>
{/* 購入日・消費期限を横並びに */}
<Box sx={{ display: 'flex', gap: 2, mb: 2 }}>
{/* 購入日入力フィールド */}
<DatePicker
popperClassName="custom-datepicker-popper"
selected={newStock.buyDate ? new Date(newStock.buyDate) : null}
onChange={(date) =>
setNewStock({ ...newStock, buyDate: date ? date.toISOString().split('T')[0] : '' })
}
dateFormat="yyyy/MM/dd"
customInput={
<TextField
margin="dense"
label="購入日(yyyy/MM/dd)"
fullWidth
/>
}
isClearable
//withPortal // ← 他の文字との重なり対策
/>
{/*
<TextField
margin="dense"
label="購入日(yyyy/MM/dd)"
fullWidth
value={newStock.buyDate}
onChange={(e) => setNewStock({ ...newStock, buyDate: e.target.value })}
/>
*/}
{/* 消費・賞味期限入力フィールド */}
<DatePicker
popperClassName="custom-datepicker-popper"
selected={newStock.expDate ? new Date(newStock.expDate) : null}
onChange={(date) =>
setNewStock({ ...newStock, expDate: date ? date.toISOString().split('T')[0] : '' })
}
dateFormat="yyyy/MM/dd"
customInput={
<TextField
margin="dense"
label="消費・賞味期限(yyyy/MM/dd)"
fullWidth
/>
}
isClearable
//withPortal
/>
</Box>
</Box>
</DialogContent>
<DialogActions>

@ -65,7 +65,7 @@ const TaskListPage: React.FC = () => {
const [newStock, setNewStock] = useState<NewStock>({
price: '', // ここではstring
buyDate: '',
buyDate: new Date().toISOString(),
expDate: '',
});

Loading…
Cancel
Save