@@ -2747,6 +2747,10 @@ defineExpose({
|
||||
* @returns {void}
|
||||
*/
|
||||
const closeMediaPicker = () => {
|
||||
if (isUploading.value) {
|
||||
return
|
||||
}
|
||||
|
||||
isMediaPickerOpen.value = false
|
||||
selectedMediaUrls.value = []
|
||||
activeMediaPickerTab.value = 'library'
|
||||
@@ -2999,7 +3003,7 @@ const handleFileInput = async (event, target) => {
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 모달 업로드 탭에서 파일을 삽입한다.
|
||||
* 미디어 모달 업로드 탭에서 파일을 업로드하고 라이브러리 목록을 갱신한다.
|
||||
* @param {FileList|Array<File>} files - 업로드 파일 목록
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
@@ -3008,10 +3012,6 @@ const uploadFromMediaModal = async (files) => {
|
||||
return
|
||||
}
|
||||
|
||||
const target = mediaPickerTarget.value === 'gallery' || mediaPickerTarget.value === 'active-gallery'
|
||||
? 'gallery'
|
||||
: mediaPickerTarget.value
|
||||
|
||||
isUploading.value = true
|
||||
|
||||
try {
|
||||
@@ -3020,8 +3020,10 @@ const uploadFromMediaModal = async (files) => {
|
||||
...uploadedFiles,
|
||||
...mediaItems.value
|
||||
])
|
||||
insertSelectedMediaItems(target === 'gallery' ? uploadedFiles : uploadedFiles.slice(0, 1))
|
||||
closeMediaPicker()
|
||||
selectedMediaUrls.value = []
|
||||
activeMediaPickerTab.value = 'library'
|
||||
mediaSearchQuery.value = ''
|
||||
showToast('success', '업로드가 완료되었습니다. 목록에서 파일을 선택해 삽입해 주세요.')
|
||||
} catch (error) {
|
||||
showToast('error', resolveUploadFetchErrorMessage(error))
|
||||
} finally {
|
||||
@@ -3360,7 +3362,12 @@ const handleKeydown = (event) => {
|
||||
{{ selectedMediaUrls.length }}개 선택됨
|
||||
</p>
|
||||
</div>
|
||||
<button class="admin-markdown-editor__media-close rounded px-3 py-1.5 text-sm font-semibold text-[#394047] hover:bg-[#eff1f2]" type="button" @click="closeMediaPicker">
|
||||
<button
|
||||
class="admin-markdown-editor__media-close rounded px-3 py-1.5 text-sm font-semibold text-[#394047] hover:bg-[#eff1f2] disabled:cursor-not-allowed disabled:opacity-40"
|
||||
type="button"
|
||||
:disabled="isUploading"
|
||||
@click="closeMediaPicker"
|
||||
>
|
||||
닫기
|
||||
</button>
|
||||
</header>
|
||||
@@ -3483,13 +3490,18 @@ const handleKeydown = (event) => {
|
||||
</div>
|
||||
|
||||
<footer v-if="activeMediaPickerTab === 'library'" class="admin-markdown-editor__media-footer flex items-center justify-end gap-2 border-t border-[#e3e6e8] px-5 py-4">
|
||||
<button class="admin-markdown-editor__media-cancel rounded px-4 py-2 text-sm font-semibold text-[#394047] hover:bg-[#eff1f2]" type="button" @click="closeMediaPicker">
|
||||
<button
|
||||
class="admin-markdown-editor__media-cancel rounded px-4 py-2 text-sm font-semibold text-[#394047] hover:bg-[#eff1f2] disabled:cursor-not-allowed disabled:opacity-40"
|
||||
type="button"
|
||||
:disabled="isUploading"
|
||||
@click="closeMediaPicker"
|
||||
>
|
||||
취소
|
||||
</button>
|
||||
<button
|
||||
class="admin-markdown-editor__media-apply rounded bg-[#15171a] px-4 py-2 text-sm font-semibold text-white disabled:cursor-not-allowed disabled:opacity-40"
|
||||
type="button"
|
||||
:disabled="selectedMediaUrls.length === 0"
|
||||
:disabled="isUploading || selectedMediaUrls.length === 0"
|
||||
@click="applyMediaSelection"
|
||||
>
|
||||
삽입
|
||||
|
||||
Reference in New Issue
Block a user