에디터 미디어 선택 대상 계산 분리
This commit is contained in:
@@ -130,6 +130,77 @@ export const isUploadFileAllowedForMediaTarget = (file, target) => {
|
||||
return !type.startsWith('image/') && !type.startsWith('video/') && !type.startsWith('audio/')
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 선택 대상이 갤러리 다중 선택인지 반환한다.
|
||||
* @param {string} target - 선택 대상
|
||||
* @returns {boolean} 갤러리 다중 선택 여부
|
||||
*/
|
||||
export const isGalleryMediaPickerTarget = (target) => target === 'gallery' || target === 'active-gallery'
|
||||
|
||||
/**
|
||||
* 미디어 선택 대상에 맞는 파일 입력 accept 값을 반환한다.
|
||||
* @param {string} target - 선택 대상
|
||||
* @returns {string} 파일 입력 accept 값
|
||||
*/
|
||||
export const getMediaPickerAcceptForTarget = (target) => {
|
||||
if (['image', 'gallery', 'active-gallery'].includes(target)) {
|
||||
return 'image/*'
|
||||
}
|
||||
|
||||
if (target === 'video') {
|
||||
return 'video/*'
|
||||
}
|
||||
|
||||
if (target === 'audio') {
|
||||
return 'audio/*'
|
||||
}
|
||||
|
||||
return '.pdf,.zip,.txt,.csv,.docx,.xlsx,.pptx'
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 선택 대상에 맞는 미디어 API kind 값을 반환한다.
|
||||
* @param {string} target - 선택 대상
|
||||
* @returns {string} API kind 값
|
||||
*/
|
||||
export const getMediaPickerKindForTarget = (target) => {
|
||||
if (['image', 'gallery', 'active-gallery'].includes(target)) {
|
||||
return 'image'
|
||||
}
|
||||
|
||||
if (['video', 'audio', 'file'].includes(target)) {
|
||||
return target
|
||||
}
|
||||
|
||||
return 'all'
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 선택 대상별 업로드 안내 문구를 만든다.
|
||||
* @param {string} target - 선택 대상
|
||||
* @param {{ image: number, video: number, audio: number, document: number }} uploadSizeLimits - 종류별 업로드 한도
|
||||
* @returns {string} 업로드 안내 문구
|
||||
*/
|
||||
export const buildMediaPickerUploadHint = (target, uploadSizeLimits) => {
|
||||
if (isGalleryMediaPickerTarget(target)) {
|
||||
return `여러 이미지를 한 번에 선택할 수 있습니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.image)})`
|
||||
}
|
||||
|
||||
if (target === 'video') {
|
||||
return `MP4, WebM, MOV 비디오를 업로드할 수 있습니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.video)})`
|
||||
}
|
||||
|
||||
if (target === 'audio') {
|
||||
return `MP3, WAV, OGG, M4A 오디오를 업로드할 수 있습니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.audio)})`
|
||||
}
|
||||
|
||||
if (target === 'file') {
|
||||
return `PDF, ZIP, 문서 파일을 업로드할 수 있습니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.document)})`
|
||||
}
|
||||
|
||||
return `단일 이미지가 본문에 삽입됩니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.image)})`
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 항목으로 Prose 미디어 블록을 만든다.
|
||||
* @param {'video'|'audio'|'file'} blockType - 블록 유형
|
||||
|
||||
Reference in New Issue
Block a user