Skip to content

Instantly share code, notes, and snippets.

@takumifukasawa
Created November 4, 2020 13:57
Show Gist options
  • Save takumifukasawa/cef85e7ce07872f32adae59c46789073 to your computer and use it in GitHub Desktop.
Save takumifukasawa/cef85e7ce07872f32adae59c46789073 to your computer and use it in GitHub Desktop.
typescritpt: get file input accept
import { filter, includes, map } from "lodash";
export const AcceptFileExtensions = <const>{
JPG: "jpg",
JPEG: "jpeg",
PNG: "png",
PDF: "pdf",
};
export type AcceptFileExtensions = typeof AcceptFileExtensions[keyof typeof AcceptFileExtensions];
/**
* 拡張子群を元に、input type="file" のaccept部分を生成
*
* @export
* @param {AcceptFileExtensions[]} fileExtensions
* @returns
*/
export default function getFileInputAccept(fileExtensions: AcceptFileExtensions[]) {
// type check してるのでいらないはずだけど一応 filter
const filteredExtensions = filter(fileExtensions, (ext) =>
includes(Object.values(AcceptFileExtensions), ext)
);
return map(filteredExtensions, (ext) => {
switch (ext) {
case AcceptFileExtensions.JPG:
case AcceptFileExtensions.JPEG:
case AcceptFileExtensions.PNG:
return `image/${ext}`;
case AcceptFileExtensions.PDF:
return `application/${ext}`;
// type check & filter してるのでdefaultは通らないはず
default:
console.error("[getFileAccept]: should set corrected file extension.");
return "";
}
}).join(",");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment