in packages/component/src/hooks/useSendFiles.ts [23:83]
export default function useSendFiles(): (files: File[]) => void {
const sendFiles = useAPISendFiles();
const [
{
enableUploadThumbnail,
uploadThumbnailContentType,
uploadThumbnailHeight,
uploadThumbnailQuality,
uploadThumbnailWidth
}
] = useStyleOptions();
const trackTiming = useTrackTiming();
return useCallback(
async files => {
if (files && files.length) {
files = [].slice.call(files);
// TODO: [P3] We need to find revokeObjectURL on the UI side
// Redux store should not know about the browser environment
// One fix is to use ArrayBuffer instead of object URL, but that would requires change to DirectLineJS
const attachments: DirectLineAttachment[] = await Promise.all(
[].map.call(files, async file => {
let thumbnail;
if (downscaleImageToDataURL && enableUploadThumbnail && canMakeThumbnail(file)) {
thumbnail = await trackTiming(
'sendFiles:makeThumbnail',
makeThumbnail(
file,
uploadThumbnailWidth,
uploadThumbnailHeight,
uploadThumbnailContentType,
uploadThumbnailQuality
)
);
}
return {
name: file.name,
size: file.size,
url: window.URL.createObjectURL(file),
...(thumbnail && { thumbnail })
};
})
);
sendFiles(attachments);
}
},
[
enableUploadThumbnail,
sendFiles,
trackTiming,
uploadThumbnailContentType,
uploadThumbnailHeight,
uploadThumbnailQuality,
uploadThumbnailWidth
]
);
}