diff --git a/view/next-project/src/components/purchasereports/DetailEditModal.tsx b/view/next-project/src/components/purchasereports/DetailEditModal.tsx new file mode 100644 index 000000000..08cba4a6f --- /dev/null +++ b/view/next-project/src/components/purchasereports/DetailEditModal.tsx @@ -0,0 +1,114 @@ +import router from 'next/router'; +import { useEffect, useState } from 'react'; +import { Expense, PurchaseOrder, PurchaseReport } from '@/type/common'; +import { put } from '@/utils/api/purchaseOrder'; +import { get } from '@api/api_methods'; +import { + CloseButton, + Input, + Modal, + OutlinePrimaryButton, + PrimaryButton, + Select, +} from '@components/common'; + +export const DetailEditModal: React.FC<{ + purchaseReportId: number; + isOpen: boolean; + setIsOpen: () => void; + onOpenInitial: () => void; +}> = ({ purchaseReportId, setIsOpen, onOpenInitial }) => { + const [expenses, setExpenses] = useState([]); + const [purchaseOrder, setPurchaseOrder] = useState({ + id: 0, + deadline: '', + userID: 0, + expenseID: 0, + financeCheck: false, + }); + + useEffect(() => { + const fetchData = async () => { + try { + const purchaseReportRes: PurchaseReport = await get( + `${process.env.CSR_API_URI}/purchasereports/${purchaseReportId}`, + ); + const purchaseOrderId = purchaseReportRes.purchaseOrderID; + const expensesRes: Expense[] = await get(`${process.env.CSR_API_URI}/expenses`); + const purchaseOrderRes: PurchaseOrder = await get( + `${process.env.CSR_API_URI}/purchaseorders/${purchaseOrderId}`, + ); + setExpenses(expensesRes); + setPurchaseOrder(purchaseOrderRes); + } catch (error) { + console.error('Failed to fetch data:', error); + } + }; + fetchData(); + }, [purchaseReportId]); + + const formatDate = (date: string) => { + const d = new Date(date); + const year = d.getFullYear(); + const month = (1 + d.getMonth()).toString().padStart(2, '0'); + const day = d.getDate().toString().padStart(2, '0'); + return `${year}-${month}-${day}`; + }; + + const submit = async () => { + try { + const updatePurchaseOrderUrl = `${process.env.CSR_API_URI}/purchaseorders/${purchaseOrder.id}`; + await put(updatePurchaseOrderUrl, purchaseOrder); + } finally { + router.reload(); + } + }; + + const handleInputChange = (key: keyof PurchaseOrder, value: string | number) => { + setPurchaseOrder((prev) => ({ ...prev, [key]: value })); + }; + + return ( + +
+ +
+
+

購入した局と期限日を修正

+
+
+

購入した局

+
+ +
+

期限日

+
+ handleInputChange('deadline', e.target.value)} + className='w-full' + /> +
+
+
+ + 戻る + + + 編集完了 + +
+
+ ); +}; diff --git a/view/next-project/src/components/purchasereports/EditModal.tsx b/view/next-project/src/components/purchasereports/EditModal.tsx index 7095bb82a..571bbf920 100644 --- a/view/next-project/src/components/purchasereports/EditModal.tsx +++ b/view/next-project/src/components/purchasereports/EditModal.tsx @@ -22,6 +22,7 @@ interface ModalProps { purchaseReportId: number; isOpen: boolean; setIsOpen: (isOpen: boolean) => void; + onOpenInitial: () => void; } export default function EditModal(props: ModalProps) { @@ -309,12 +310,12 @@ export default function EditModal(props: ModalProps) {
{formDataList.length > 0 ? (
- {/* stepが1より大きい時のみ戻るボタンを表示 */} - {activeStep > 1 && ( - - 戻る - - )} + 1 ? prevStep : props.onOpenInitial} + className={'mx-2'} + > + 戻る + { diff --git a/view/next-project/src/components/purchasereports/OpenEditModalButton.tsx b/view/next-project/src/components/purchasereports/OpenEditModalButton.tsx index 0bd901767..8349ebfd2 100644 --- a/view/next-project/src/components/purchasereports/OpenEditModalButton.tsx +++ b/view/next-project/src/components/purchasereports/OpenEditModalButton.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; import { useState } from 'react'; -import { EditButton } from '@components/common'; +import { DetailEditModal } from './DetailEditModal'; +import { CloseButton, EditButton, Modal, PrimaryButton } from '@components/common'; import EditModal from '@components/purchasereports/EditModal'; interface Props { @@ -10,15 +11,55 @@ interface Props { isDisabled: boolean; } +const InitialModal: React.FC<{ setStep: (step: string) => void; closeModal: () => void }> = ({ + setStep, + closeModal, +}) => ( + +
+ +
+
+

購入報告の修正

+
+
+ setStep('editDetails')}>局と期限日を編集 + setStep('editPurchases')}>購入物品を編集 +
+
+); + const OpenEditModalButton: React.FC = (props) => { - const [isOpen, setIsOpen] = useState(false); - const onOpen = () => { - setIsOpen(true); + const [step, setStep] = useState(null); + + const onOpenInitial = () => { + setStep('initial'); }; + + const closeModal = () => { + setStep(null); + }; + return ( <> - - {isOpen && } + + {step === 'initial' && } + {step === 'editDetails' && ( + + )} + {step === 'editPurchases' && ( + + )} ); };