에디터 미디어 선택 상태 로직 분리

This commit is contained in:
2026-07-24 17:51:02 +09:00
parent 401dc64238
commit 6cc820d2a2
7 changed files with 176 additions and 32 deletions

View File

@@ -23,10 +23,13 @@ import {
} from '../../lib/markdown-editor-history.js'
import {
createMediaBlockMarkdown,
getGallerySelectionOrder as getGallerySelectionOrderFromSelection,
getMediaItemKind,
getMediaPickerPreviewUrl,
isMediaItemSelectableForTarget,
isUploadFileAllowedForMediaTarget
isUploadFileAllowedForMediaTarget,
resolveSelectedMediaItems,
toggleMediaSelectionState
} from '../../lib/markdown-editor-media.js'
import {
filterSlashCommands,
@@ -3131,8 +3134,7 @@ const getGallerySelectionOrder = (url) => {
return 0
}
const index = selectedMediaUrls.value.indexOf(url)
return index >= 0 ? index + 1 : 0
return getGallerySelectionOrderFromSelection(selectedMediaUrls.value, url)
}
/**
@@ -3169,27 +3171,15 @@ watch(activeMediaPickerTab, async (tab) => {
* @returns {void}
*/
const toggleMediaSelection = (mediaItem) => {
if (!isGalleryMediaPicker.value) {
selectedMediaUrls.value = [mediaItem.url]
selectedMediaItemMap.value = {
[mediaItem.url]: mediaItem
}
return
}
const nextSelection = toggleMediaSelectionState({
selectedUrls: selectedMediaUrls.value,
selectedItemMap: selectedMediaItemMap.value,
mediaItem,
isGallery: isGalleryMediaPicker.value
})
if (selectedMediaUrls.value.includes(mediaItem.url)) {
selectedMediaUrls.value = selectedMediaUrls.value.filter((url) => url !== mediaItem.url)
const nextMap = { ...selectedMediaItemMap.value }
delete nextMap[mediaItem.url]
selectedMediaItemMap.value = nextMap
return
}
selectedMediaUrls.value = [...selectedMediaUrls.value, mediaItem.url]
selectedMediaItemMap.value = {
...selectedMediaItemMap.value,
[mediaItem.url]: mediaItem
}
selectedMediaUrls.value = nextSelection.selectedUrls
selectedMediaItemMap.value = nextSelection.selectedItemMap
}
/**
@@ -3268,9 +3258,11 @@ const insertSelectedMediaItems = (selectedItems) => {
* @returns {void}
*/
const applyMediaSelection = () => {
const selectedItems = selectedMediaUrls.value
.map((url) => selectedMediaItemMap.value[url] || mediaItems.value.find((item) => item.url === url))
.filter(Boolean)
const selectedItems = resolveSelectedMediaItems(
selectedMediaUrls.value,
selectedMediaItemMap.value,
mediaItems.value
)
insertSelectedMediaItems(selectedItems)
closeMediaPicker()