114 lines
3.9 KiB
JavaScript
114 lines
3.9 KiB
JavaScript
import { editorPath } from '../lib/paths'
|
|
|
|
export function useAdminTemplateRequests({
|
|
api,
|
|
activeTemplateRequest,
|
|
refreshTemplateRequests,
|
|
setTab,
|
|
openTemplateCreateModal,
|
|
newTemplateId,
|
|
newTemplateName,
|
|
selectAdminTemplate,
|
|
mergeRequestItemsIntoDrafts,
|
|
resetMessages,
|
|
success,
|
|
error,
|
|
}) {
|
|
function updateActiveTemplateRequest(request) {
|
|
if (!request?.id) return
|
|
activeTemplateRequest.value = {
|
|
id: request.id,
|
|
type: request.type,
|
|
status: request.status,
|
|
thumbnailSrc: request.thumbnailSrc || '',
|
|
draftGameId: request.draftGameId || '',
|
|
draftGameName: request.draftGameName || '',
|
|
draftGameIsPublic: !!request.draftGameIsPublic,
|
|
sourceTierListId: request.sourceTierListId || '',
|
|
sourceGameId: request.sourceGameId || '',
|
|
sourceTierListTitle: request.sourceTierListTitle || '',
|
|
targetGameId: request.targetGameId || '',
|
|
targetGameName: request.targetGameName || '',
|
|
requesterName: request.requesterName || '',
|
|
}
|
|
}
|
|
|
|
function templateRequestStatusLabel(request) {
|
|
return request.status === 'reviewing' ? '확인함' : '미확인'
|
|
}
|
|
|
|
function templateRequestSourceUrl(request) {
|
|
if (!request?.sourceGameId || !request?.sourceTierListId) return ''
|
|
return editorPath(request.sourceGameId, request.sourceTierListId, { preview: true })
|
|
}
|
|
|
|
function templateRequestReviewHint(request) {
|
|
if (request.type === 'create') return '템플릿 생성 후 필요한 아이템만 골라 추가하고, 끝나면 여기서 처리 완료하세요.'
|
|
return '확인하기를 누르면 템플릿 관리 화면에 요청 아이템이 임시 추가되어 필요한 것만 선별 저장할 수 있어요.'
|
|
}
|
|
|
|
async function startTemplateRequestReview(request) {
|
|
resetMessages()
|
|
try {
|
|
request.isHandling = true
|
|
const data = await api.startAdminTemplateRequestReview(request.id)
|
|
const syncedRequest = {
|
|
...request,
|
|
...(data.request || {}),
|
|
draftGameId: request.draftGameId || '',
|
|
draftGameName: request.draftGameName || '',
|
|
draftGameIsPublic: !!request.draftGameIsPublic,
|
|
}
|
|
Object.assign(request, syncedRequest)
|
|
request.status = syncedRequest.status || 'reviewing'
|
|
updateActiveTemplateRequest(syncedRequest)
|
|
setTab('game-admin')
|
|
|
|
if (request.type === 'create') {
|
|
const linkedGameId = syncedRequest.targetGameId || ''
|
|
if (linkedGameId) {
|
|
await selectAdminTemplate(linkedGameId)
|
|
} else {
|
|
openTemplateCreateModal()
|
|
newTemplateId.value = (syncedRequest.draftGameId || '').trim()
|
|
newTemplateName.value = (syncedRequest.draftGameName || '').trim()
|
|
}
|
|
mergeRequestItemsIntoDrafts(syncedRequest)
|
|
} else {
|
|
const nextGameId = syncedRequest.targetGameId || syncedRequest.sourceGameId || ''
|
|
if (nextGameId) await selectAdminTemplate(nextGameId)
|
|
mergeRequestItemsIntoDrafts(syncedRequest)
|
|
}
|
|
success.value = '요청 아이템을 템플릿 관리 화면으로 가져왔어요. 필요한 항목만 골라서 추가해 주세요.'
|
|
} catch (e) {
|
|
error.value = '요청 확인 단계로 이동하지 못했어요.'
|
|
} finally {
|
|
request.isHandling = false
|
|
}
|
|
}
|
|
|
|
async function completeTemplateRequest(request) {
|
|
resetMessages()
|
|
try {
|
|
request.isHandling = true
|
|
await api.completeAdminTemplateRequest(request.id)
|
|
if (activeTemplateRequest.value?.id === request.id) activeTemplateRequest.value = null
|
|
await refreshTemplateRequests()
|
|
success.value = '요청 카드를 처리 완료로 정리했어요.'
|
|
} catch (e) {
|
|
error.value = '요청 완료 처리에 실패했어요.'
|
|
} finally {
|
|
request.isHandling = false
|
|
}
|
|
}
|
|
|
|
return {
|
|
updateActiveTemplateRequest,
|
|
templateRequestStatusLabel,
|
|
templateRequestSourceUrl,
|
|
templateRequestReviewHint,
|
|
startTemplateRequestReview,
|
|
completeTemplateRequest,
|
|
}
|
|
}
|