diff --git a/frontend/src/pages/JobSelectionPage.jsx b/frontend/src/pages/JobSelectionPage.jsx index 974e888..5f79a55 100644 --- a/frontend/src/pages/JobSelectionPage.jsx +++ b/frontend/src/pages/JobSelectionPage.jsx @@ -1,5 +1,6 @@ import React, { useEffect, useState } from 'react'; import { fetchJobs } from '../api'; +import api from '../api'; const JobSelectionPage = ({ onJobSelect }) => { const [jobs, setJobs] = useState([]); @@ -7,6 +8,36 @@ const JobSelectionPage = ({ onJobSelect }) => { const [selectedJobName, setSelectedJobName] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); + const [editingJobNo, setEditingJobNo] = useState(null); + const [editedName, setEditedName] = useState(''); + + // 프로젝트 이름 수정 + const updateJobName = async (jobNo) => { + try { + const project = jobs.find(j => j.job_no === jobNo); + if (!project) return; + + const response = await api.patch(`/dashboard/projects/${project.id}?job_name=${encodeURIComponent(editedName)}`); + + if (response.data.success) { + // 로컬 상태 업데이트 + setJobs(jobs.map(j => + j.job_no === jobNo ? { ...j, job_name: editedName } : j + )); + + // 선택된 프로젝트 이름도 업데이트 + if (selectedJobNo === jobNo) { + setSelectedJobName(editedName); + } + + setEditingJobNo(null); + setEditedName(''); + } + } catch (error) { + console.error('프로젝트 이름 수정 실패:', error); + alert('프로젝트 이름 수정에 실패했습니다.'); + } + }; useEffect(() => { async function loadJobs() { @@ -126,9 +157,99 @@ const JobSelectionPage = ({ onJobSelect }) => { borderRadius: '8px', padding: '12px 16px', marginBottom: '20px', - color: '#2f855a' + color: '#2f855a', + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center' }}> - 선택된 프로젝트: {selectedJobNo} - {selectedJobName} +
+ 선택된 프로젝트: {selectedJobNo} - {selectedJobName} +
+ + + )} + + {editingJobNo && ( +
+
+ 프로젝트 이름 수정 +
+
+ setEditedName(e.target.value)} + onKeyPress={(e) => { + if (e.key === 'Enter') updateJobName(editingJobNo); + }} + placeholder="새 프로젝트 이름" + autoFocus + style={{ + flex: 1, + padding: '10px', + border: '2px solid #3b82f6', + borderRadius: '6px', + fontSize: '14px' + }} + /> + + +
)}