릴리스: v1.4.9 경로 헬퍼 도입과 사용자 이동 경로 정리

This commit is contained in:
2026-04-02 18:55:12 +09:00
parent 6b6676ceec
commit 5af5202455
15 changed files with 99 additions and 41 deletions

View File

@@ -9,6 +9,7 @@ import addRowBelowIcon from '../assets/icons/add_row_below.svg'
import addPhotoAlternateIcon from '../assets/icons/add_photo_alternate.svg'
import shareIcon from '../assets/icons/share.svg'
import { api } from '../lib/api'
import { editorNewPath, editorPath, loginPath, mePath, topicPath } from '../lib/paths'
import { toApiUrl } from '../lib/runtime'
import { useAuthStore } from '../stores/auth'
import { useToast } from '../composables/useToast'
@@ -134,8 +135,8 @@ const templateRequestTargetLabel = computed(() => (templateId.value === 'freefor
const shareTierListUrl = computed(() => {
const savedTierListId = persistedTierListId.value || (tierListId.value && tierListId.value !== 'new' ? tierListId.value : '')
if (!savedTierListId) return ''
if (typeof window === 'undefined') return `/editor/${templateId.value}/${savedTierListId}?preview=1`
return new URL(`/editor/${templateId.value}/${savedTierListId}?preview=1`, window.location.origin).toString()
if (typeof window === 'undefined') return editorPath(templateId.value, savedTierListId, { preview: true })
return new URL(editorPath(templateId.value, savedTierListId, { preview: true }), window.location.origin).toString()
})
watch(error, (message) => {
@@ -697,7 +698,7 @@ async function persistTierList({ showModal = false } = {}) {
persistedTierListId.value = savedTierListId || ''
title.value = res.tierList?.title || payload.title
if (tierListId.value === 'new' && res.tierList?.id) {
await router.replace(`/editor/${templateId.value}/${res.tierList.id}`)
await router.replace(editorPath(templateId.value, res.tierList.id))
}
updatedAt.value = Number(res.tierList?.updatedAt || Date.now())
authorName.value = res.tierList?.authorName || effectiveAuthorName.value
@@ -793,7 +794,7 @@ async function confirmDeleteTierList() {
await api.deleteTierList(currentTierListId)
closeDeleteModal()
toast.success('티어표를 삭제했어요.')
router.push(templateId.value === 'freeform' ? '/me' : `/topics/${templateId.value}`)
router.push(templateId.value === 'freeform' ? mePath() : topicPath(templateId.value))
} catch (e) {
error.value = '티어표 삭제에 실패했어요.'
} finally {
@@ -808,7 +809,7 @@ async function duplicateCurrentTierList() {
const duplicatedId = data.tierList?.id
if (!duplicatedId) throw new Error('duplicate_failed')
toast.success('티어표를 복사해 내 작업으로 가져왔어요.')
router.push(`/editor/${templateId.value}/${duplicatedId}`)
router.push(editorPath(templateId.value, duplicatedId))
} catch (e) {
error.value = '티어표 복사에 실패했어요.'
}
@@ -892,7 +893,7 @@ onMounted(() => {
authorAccountName.value = ((auth.user?.email || '').trim().split('@')[0] || '').trim()
if (isNewTierList.value && !auth.user) {
router.replace(`/login?redirect=/editor/${templateId.value}/new`)
router.replace(loginPath(editorNewPath(templateId.value)))
return
}
@@ -1131,7 +1132,7 @@ onUnmounted(() => {
</div>
<div v-if="sourceTierListId" class="editorMain__sourceNote">
<span>복사본</span>
<button class="editorMain__sourceLink" type="button" @click="router.push(`/editor/${templateId}/${sourceTierListId}`)">{{ copiedFromLabel }}</button>
<button class="editorMain__sourceLink" type="button" @click="router.push(editorPath(templateId, sourceTierListId))">{{ copiedFromLabel }}</button>
</div>
</div>
</section>