@sendbird/uikit-react-native
Version:
Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
37 lines (28 loc) • 1.04 kB
text/typescript
import type { PartialNullable } from '@sendbird/uikit-utils';
import {
getFileExtension,
getFileExtensionFromMime,
getFileExtensionFromUri,
getMimeFromFileExtension,
normalizeFileName,
} from '@sendbird/uikit-utils';
import type { FilePickerResponse, FileType } from '../platform/types';
const normalizeFile = async ({ uri, size, name, type }: PartialNullable<FileType>): Promise<FilePickerResponse> => {
// URI is required property
if (!uri) return null;
let filename = name || String(Date.now());
let filetype = type || '';
const extension =
getFileExtension(filename) || getFileExtensionFromMime(filetype) || (await getFileExtensionFromUri(uri));
if (extension) {
filename = normalizeFileName(filename, extension);
if (!filetype || isNotMimeType(filetype)) {
filetype = getMimeFromFileExtension(extension);
}
}
return { uri, name: filename, type: filetype, size: size ?? 0 };
};
function isNotMimeType(str: string) {
return str.indexOf('/') === -1;
}
export default normalizeFile;