Merge branch 'iipbs/wr/drgtPopup' into iipbs/wr/dev

This commit is contained in:
swcho
2025-09-22 17:23:28 +09:00
4 changed files with 48 additions and 9 deletions
@@ -459,7 +459,7 @@ export function PbnstMngForm({
setFiles={(files: File[] | null) => {
if (files) fileHandler(files, "relation");
}}
fileTypes="PDF"
fileTypes=".pdf"
onFileClick={(index) => {
fileDownLoad(
relationfiles?.find(
@@ -497,7 +497,7 @@ export function PbnstMngForm({
setFiles={(files: File[] | null) => {
if (files) fileHandler(files, "plan");
}}
fileTypes="PDF"
fileTypes=".pdf"
onFileClick={(index) => {
fileDownLoad(
planFiles?.find(
@@ -162,7 +162,7 @@ export default function PbnPrfExcelModal({
setFiles={(files: File[] | null) => {
if (files) setFiles(files);
}}
fileTypes="xlsx"
fileTypes=".xlsx"
maxFiles={1}
@@ -51,9 +51,9 @@ export const FileUpload =
{files&&
files.length > 0 &&
files.map((file:File, i:number) => (
<FileUploaderItem key={i} index={i} onFileClick={onFileClick }>
<FileUploaderItem key={i} index={i} onFileClick={onFileClick }>
<Paperclip className="h-4 w-4 stroke-current" />
<span className="w-4/5 overflow-hidden">{file.name}</span>
<span className="w-72 truncate">{file.name}</span>
</FileUploaderItem>
))}
</FileUploaderContent>
@@ -79,10 +79,49 @@ export const FileUploader = forwardRef<
const [isFileTooBig, setIsFileTooBig] = useState(false);
const [isLOF, setIsLOF] = useState(false);
const [activeIndex, setActiveIndex] = useState(-1);
// MIME 타입 매핑 함수 추가
const getAcceptObject = (fileTypes?: string): Record<string, string[]> => {
if (!fileTypes) {
return { "image/*": [".jpg", ".jpeg", ".png", ".gif"] };
}
// 파일 확장자 별 MIME 타입 매핑
const extensionToMimeType: Record<string, string> = {
".pdf": "application/pdf",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".png": "image/png",
".gif": "image/gif",
".doc": "application/msword",
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".xls": "application/vnd.ms-excel",
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".txt": "text/plain",
};
// fileTypes 문자열을 개별 확장자로 분리
const extensions = fileTypes.split(",").map(ext => ext.trim());
const acceptObj: Record<string, string[]> = {};
extensions.forEach(ext => {
// 확장자 앞에 점(.)이 없으면 추가
const normalizedExt = ext.startsWith(".") ? ext : `.${ext}`;
// 매핑된 MIME 타입 찾기, 없으면 기본값 사용
const mimeType = extensionToMimeType[normalizedExt] || "application/octet-stream";
if (!acceptObj[mimeType]) {
acceptObj[mimeType] = [];
}
acceptObj[mimeType].push(normalizedExt);
});
return acceptObj;
};
const {
accept = {
"image/*": acceptName?acceptName.split(",").map(extend=>("."+extend)):[".jpg", ".jpeg", ".png", ".gif"],
},
accept = getAcceptObject(acceptName),
maxFiles = 1,
maxSize = 4 * 1024 * 1024,
multiple = true,
@@ -208,7 +247,7 @@ export const FileUploader = forwardRef<
}, [value, maxFiles]);
const opts = dropzoneOptions
? dropzoneOptions
? { ...dropzoneOptions, accept: getAcceptObject(acceptName) }
: { accept, maxFiles, maxSize, multiple };
const dropzoneState = useDropzone({