@@ -20,6 +20,8 @@ import React, { useState, useEffect } from "react";
2020
2121import TableCellCenter from "./TableCellCenter" ;
2222
23+ import { toastAlert } from "@/utils/ToastAlert" ;
24+
2325import { OrderStatus } from "@/types/orderStatus" ;
2426import { FilterStatus } from "./types/filterStatus" ;
2527
@@ -28,7 +30,6 @@ import { SERVER_URL } from "@/constants/ServerURL";
2830import DownloadSvg from "../../assets/image/component/DownloadSvg" ;
2931import AcceptSvg from "../../assets/image/component/AcceptSvg" ;
3032import DenySvg from "../../assets/image/component/DenySvg" ;
31- import { toastAlert } from "@/utils/ToastAlert" ;
3233
3334type PlayType = "LONG" | "SHORT" | null ; // undefined: 선택 안함
3435
@@ -57,6 +58,10 @@ const AdminScriptManage = () => {
5758 const [ page , setPage ] = useState < number > ( 1 ) ;
5859 const [ totalPages , setTotalPages ] = useState < number > ( 1 ) ;
5960
61+ // 작품 제목 / 작가명 변경
62+ const [ tempTitleMap , setTempTitleMap ] = useState < Record < string , string > > ( { } ) ;
63+ const [ tempWriterMap , setTempWriterMap ] = useState < Record < string , string > > ( { } ) ;
64+
6065 // 전체
6166 const [ totalCount , setTotalCount ] = useState < number > ( 0 ) ;
6267 // 수락
@@ -116,6 +121,68 @@ const AdminScriptManage = () => {
116121 setPage ( value ) ;
117122 } ;
118123
124+ // 제목 변경
125+ const handleUpdateTitle = async ( id : string ) => {
126+ const newTitle = tempTitleMap [ id ] ;
127+ // 새로 입력하지 않았거나 기존 제목과 같으면 API 호출 X
128+ if ( ! newTitle || newTitle === data . find ( ( item ) => item . id === id ) ?. title ) {
129+ return ;
130+ }
131+
132+ toastAlert ( "수정사항 반영 중..." , "info" ) ;
133+ try {
134+ await axios . patch (
135+ `${ SERVER_URL } admin/products/title` ,
136+ {
137+ productId : id ,
138+ title : newTitle ,
139+ } ,
140+ {
141+ headers : {
142+ "Content-Type" : "application/json" ,
143+ Authorization : Cookies . get ( "accessToken" )
144+ ? `Bearer ${ Cookies . get ( "accessToken" ) } `
145+ : undefined ,
146+ } ,
147+ }
148+ ) ;
149+ toastAlert ( "수정사항이 반영되었습니다." , "success" ) ;
150+ } catch ( error ) {
151+ toastAlert ( "오류가 발생했습니다. 새로고침 후 다시 시도해주세요." , "error" ) ;
152+ }
153+ } ;
154+
155+ // 작가명 변경
156+ const handleUpdateWriter = async ( id : string ) => {
157+ const newWriter = tempWriterMap [ id ] ;
158+ // 새로 입력하지 않았거나 기존 제목과 같으면 API 호출 X
159+ if ( ! newWriter || newWriter === data . find ( ( item ) => item . id === id ) ?. writer ) {
160+ return ;
161+ }
162+
163+ toastAlert ( "수정사항 반영 중..." , "info" ) ;
164+ try {
165+ await axios . patch (
166+ `${ SERVER_URL } admin/products/writer` ,
167+ {
168+ productId : id ,
169+ writer : newWriter ,
170+ } ,
171+ {
172+ headers : {
173+ "Content-Type" : "application/json" ,
174+ Authorization : Cookies . get ( "accessToken" )
175+ ? `Bearer ${ Cookies . get ( "accessToken" ) } `
176+ : undefined ,
177+ } ,
178+ }
179+ ) ;
180+ toastAlert ( "수정사항이 반영되었습니다." , "success" ) ;
181+ } catch ( error ) {
182+ toastAlert ( "오류가 발생했습니다. 새로고침 후 다시 시도해주세요." , "error" ) ;
183+ }
184+ } ;
185+
119186 // 장편극 / 단편극 변경
120187 const onChangeClassification = ( id : string , newClassification : PlayType ) => {
121188 const updatedData = data . map ( ( item ) =>
@@ -283,8 +350,30 @@ const AdminScriptManage = () => {
283350 < TableRow key = { item . id } >
284351 < TableCellCenter > { totalCount - ( ( page - 1 ) * 10 + index ) } </ TableCellCenter >
285352 < TableCellCenter > { item . createdAt } </ TableCellCenter >
286- < TableCellCenter > { item . title } </ TableCellCenter >
287- < TableCellCenter > { item . writer } </ TableCellCenter >
353+ < TableCellCenter >
354+ < TextField
355+ variant = "standard"
356+ value = { tempTitleMap [ item . id ] ?? item . title }
357+ onChange = { ( event ) => {
358+ setTempTitleMap ( ( prev ) => ( { ...prev , [ item . id ] : event . target . value } ) ) ;
359+ } }
360+ onBlur = { ( ) => {
361+ handleUpdateTitle ( item . id ) ;
362+ } }
363+ > </ TextField >
364+ </ TableCellCenter >
365+ < TableCellCenter >
366+ < TextField
367+ variant = "standard"
368+ value = { tempWriterMap [ item . id ] ?? item . writer }
369+ onChange = { ( event ) => {
370+ setTempWriterMap ( ( prev ) => ( { ...prev , [ item . id ] : event . target . value } ) ) ;
371+ } }
372+ onBlur = { ( ) => {
373+ handleUpdateWriter ( item . id ) ;
374+ } }
375+ > </ TextField >
376+ </ TableCellCenter >
288377 < TableCellCenter
289378 sx = { {
290379 backgroundColor :
0 commit comments