export default function useSendFiles()

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
    ]
  );
}