관리자 미디어 업로드 규칙 분리
This commit is contained in:
@@ -263,6 +263,33 @@ export const buildMediaPickerApplyState = ({
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 선택 모달의 목록 조회 query를 만든다.
|
||||
* @param {Object} options - 조회 옵션
|
||||
* @param {number} options.page - 페이지 번호
|
||||
* @param {number} options.pageSize - 페이지 크기
|
||||
* @param {string} options.kind - 미디어 종류
|
||||
* @param {string} options.searchQuery - 검색어
|
||||
* @returns {Record<string, string|number|undefined>} 미디어 API query
|
||||
*/
|
||||
export const createMediaPickerFetchQuery = ({
|
||||
page,
|
||||
pageSize,
|
||||
kind,
|
||||
searchQuery
|
||||
}) => {
|
||||
const normalizedSearchQuery = String(searchQuery || '').trim()
|
||||
|
||||
return {
|
||||
paged: '1',
|
||||
tab: 'library',
|
||||
page,
|
||||
pageSize,
|
||||
kind,
|
||||
search: normalizedSearchQuery || undefined
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 항목으로 Prose 미디어 블록을 만든다.
|
||||
* @param {'video'|'audio'|'file'} blockType - 블록 유형
|
||||
@@ -381,6 +408,57 @@ export const createSelectedMediaInsertPlan = ({
|
||||
return { kind: 'none' }
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 입력 파일 목록을 배열로 정규화한다.
|
||||
* @param {FileList|Array<File>|null|undefined} files - 업로드 입력 파일 목록
|
||||
* @returns {File[]} 파일 배열
|
||||
*/
|
||||
export const normalizeMediaUploadFiles = (files) => {
|
||||
return Array.from(files || []).filter(Boolean)
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 파일 목록으로 multipart FormData를 만든다.
|
||||
* @param {FileList|Array<File>} files - 업로드 파일 목록
|
||||
* @returns {FormData} 업로드 요청 본문
|
||||
*/
|
||||
export const createMediaUploadFormData = (files) => {
|
||||
const formData = new FormData()
|
||||
|
||||
normalizeMediaUploadFiles(files).forEach((file) => {
|
||||
formData.append('files', file)
|
||||
})
|
||||
|
||||
return formData
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 API 응답에서 파일 목록을 추출한다.
|
||||
* @param {Object|null|undefined} response - 업로드 API 응답
|
||||
* @returns {Object[]} 업로드된 파일 목록
|
||||
*/
|
||||
export const resolveUploadedMediaFiles = (response) => {
|
||||
return Array.isArray(response?.files) ? response.files : []
|
||||
}
|
||||
|
||||
/**
|
||||
* 이미지 파일 목록에 맞는 기본 삽입 대상을 반환한다.
|
||||
* @param {FileList|Array<File>} files - 이미지 파일 목록
|
||||
* @returns {'image'|'gallery'} 삽입 대상
|
||||
*/
|
||||
export const resolveImageUploadInsertTarget = (files) => {
|
||||
return normalizeMediaUploadFiles(files).length > 1 ? 'gallery' : 'image'
|
||||
}
|
||||
|
||||
/**
|
||||
* 파일 목록에서 이미지 파일만 반환한다.
|
||||
* @param {FileList|Array<File>} files - 입력 파일 목록
|
||||
* @returns {File[]} 이미지 파일 목록
|
||||
*/
|
||||
export const filterImageUploadFiles = (files) => {
|
||||
return normalizeMediaUploadFiles(files).filter((file) => String(file?.type || '').startsWith('image/'))
|
||||
}
|
||||
|
||||
/**
|
||||
* 갤러리 미디어 선택 순서를 반환한다.
|
||||
* @param {string[]} selectedUrls - 선택된 URL 목록
|
||||
|
||||
Reference in New Issue
Block a user