downloaders/index.js

import { useDownloader } from '../hooks/useDownloader';
import { MIME_TYPES } from '../constants';

/** @module Specific Downloaders */

/**
 * Specific manual downloading config
 * @interface
 * @global
 * @typedef SpecificManualDownloadConfig
 * @property data {string|Object} - Downloaded data. Required.
 * @property name {string} - Name of downloaded data. Optional. Default - "file"
 */

/**
 * Specific function to download file
 * @interface
 * @global
 * @typedef {function} SpecificDownloadFn
 * @param config {SpecificManualDownloadConfig} Specific manual downloading config
 * @return {Promise<void>} Promises resolves after downloading file.
 */

/**
 * Specific object to manage downloading files
 * @interface
 * @global
 * @typedef SpecificDownloadManager
 * @property {DownloadRefContainer} downloader - Object for inserting to html element.
 * @property {SpecificDownloadFn} download - Specific function to download file.
 */

/**
 * Specific downloading config
 * @interface
 * @global
 * @typedef SpecificDownloadConfig
 * @property data {string|Object} - Downloaded data. Required.
 * @property name {string} - Name of downloaded data. Optional. Default - "file"
 * @property event {string} - Event that triggers downloading. Optional. Default - "click"
 */

/**
 * Hook for downloading bmp images
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading bmp images
 * @function
 */
export const useBMPDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.BMP
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.BMP })
    };

};

/**
 * Hook for downloading gif images
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading gif images
 * @function
 */
export const useGIFDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.GIF
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.GIF })
    };

};

/**
 * Hook for downloading jpeg images
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading jpeg images
 * @function
 */
export const useJPEGDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.JPEG
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.JPEG })
    };

};

/**
 * Hook for downloading png images
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading png images
 * @function
 */
export const usePNGDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.PNG
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.PNG })
    };

};

/**
 * Hook for downloading svg images
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading svg images
 * @function
 */
export const useSVGDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.SVG
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.SVG })
    };

};

/**
 * Hook for downloading Microsoft Word files
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading Microsoft Word files
 * @function
 */
export const useMSWordDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.MS_WORD
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.MS_WORD })
    };

};

/**
 * Hook for downloading Microsoft Excel files
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading Microsoft Word files
 * @function
 */
export const useMSExcelDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.MS_EXCEL
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.MS_EXCEL })
    };

};

/**
 * Hook for downloading ZIP archive
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading ZIP archive
 * @function
 */
export const useZIPDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.ZIP
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.ZIP })
    };

};

/**
 * Hook for downloading PDF files
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading PDF files
 * @function
 */
export const usePDFDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.PDF
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.PDF })
    };

};

/**
 * Hook for downloading JSON files
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading JSON files
 * @function
 */
export const useJSONDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.JSON
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.JSON })
    };

};

/**
 * Hook for downloading binary files
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading binary files
 * @function
 */
export const useBinaryDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.BINARY
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.BINARY })
    };

};

/**
 * Hook for downloading text files
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading text files
 * @function
 */
export const useTextDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.PLAIN_TEXT
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.PLAIN_TEXT })
    };

};

/**
 * Hook for downloading form-data
 * @param options {SpecificDownloadConfig} - Specific downloading config
 * @return {SpecificDownloadManager} - Object to manage downloading form-data
 * @function
 */
export const useFormDataDownloader = (options = {}) => {

    const result = useDownloader({
        ...options,
        type: MIME_TYPES.FORM_DATA
    });

    return {
        ...result,
        download: (config) => result.download({ ...config, type: MIME_TYPES.FORM_DATA })
    };

};