import { mixed } from 'yup'; import { MixedSchema } from 'yup/lib/mixed'; type FileSchema = MixedSchema; export function file(): FileSchema { return mixed(); } export function withFileSize(fileValidation: FileSchema, maxSize: number) { return fileValidation.test( 'fileSize', 'Selected file is too big.', validateFileSize ); function validateFileSize(file?: File) { if (!file) { return true; } return file.size <= maxSize; } } export function withFileExtension( fileValidation: FileSchema, allowedExtensions: string[] ) { return fileValidation.test( 'fileExtension', 'Selected file has invalid extension.', validateFileExtension ); function validateFileExtension(file?: File) { if (!file) { return true; } const fileExtension = file.name.split('.').pop(); return allowedExtensions.includes(fileExtension || ''); } }