{"version":3,"file":"index.mjs","sources":["../src/helpers/openFileDialog.ts","../src/validators/useValidators.ts","../src/useFilePicker.ts","../src/useImperativeFilePicker.ts"],"sourcesContent":["export function openFileDialog(\n  accept: string,\n  multiple: boolean,\n  callback: (arg: Event) => void,\n  initializeWithCustomAttributes?: (arg: HTMLInputElement) => void\n): void {\n  // this function must be called from a user\n  // activation event (ie an onclick event)\n\n  // Create an input element\n  const inputElement = document.createElement('input');\n  // Hide element and append to body (required to run on iOS safari)\n  inputElement.style.display = 'none';\n  document.body.appendChild(inputElement);\n  // Set its type to file\n  inputElement.type = 'file';\n  // Set accept to the file types you want the user to select.\n  // Include both the file extension and the mime type\n  // if accept is \"*\" then dont set the accept attribute\n  if (accept !== '*') inputElement.accept = accept;\n  // Accept multiple files\n  inputElement.multiple = multiple;\n  // set onchange event to call callback when user has selected file\n  //inputElement.addEventListener('change', callback);\n  inputElement.addEventListener('change', arg => {\n    callback(arg);\n    // remove element\n    document.body.removeChild(inputElement);\n  });\n\n  inputElement.addEventListener('cancel', () => {\n    // remove element\n    document.body.removeChild(inputElement);\n  });\n\n  if (initializeWithCustomAttributes) {\n    initializeWithCustomAttributes(inputElement);\n  }\n  // dispatch a click event to open the file dialog\n  inputElement.dispatchEvent(new MouseEvent('click'));\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from 'react';\nimport type {\n  SelectedFilesOrErrors,\n  ExtractContentTypeFromConfig,\n  UseFilePickerConfig,\n  SelectedFiles,\n  FileErrors,\n} from '../interfaces.js';\n\nexport const useValidators = <ConfigType extends UseFilePickerConfig<CustomErrors>, CustomErrors>({\n  onFilesSelected: onFilesSelectedProp,\n  onFilesSuccessfullySelected: onFilesSuccessfullySelectedProp,\n  onFilesRejected: onFilesRejectedProp,\n  onClear: onClearProp,\n  validators,\n}: ConfigType) => {\n  // setup validators' event handlers\n  const onFilesSelected = useCallback(\n    (data: SelectedFilesOrErrors<ExtractContentTypeFromConfig<ConfigType>, CustomErrors>) => {\n      onFilesSelectedProp?.(data as any);\n      validators?.forEach(validator => {\n        validator.onFilesSelected(data as any);\n      });\n    },\n    [onFilesSelectedProp, validators]\n  );\n  const onFilesSuccessfullySelected = useCallback(\n    (data: SelectedFiles<ExtractContentTypeFromConfig<ConfigType>>) => {\n      onFilesSuccessfullySelectedProp?.(data as any);\n      validators?.forEach(validator => {\n        validator.onFilesSuccessfullySelected(data as any);\n      });\n    },\n    [validators, onFilesSuccessfullySelectedProp]\n  );\n  const onFilesRejected = useCallback(\n    (errors: FileErrors<CustomErrors>) => {\n      onFilesRejectedProp?.(errors);\n      validators?.forEach(validator => {\n        validator.onFilesRejected(errors);\n      });\n    },\n    [validators, onFilesRejectedProp]\n  );\n  const onClear = useCallback(() => {\n    onClearProp?.();\n    validators?.forEach(validator => {\n      validator.onClear?.();\n    });\n  }, [validators, onClearProp]);\n\n  return {\n    onFilesSelected,\n    onFilesSuccessfullySelected,\n    onFilesRejected,\n    onClear,\n  };\n};\n","import { useState, useCallback } from 'react';\nimport { fromEvent, type FileWithPath } from 'file-selector';\nimport type {\n  UseFilePickerConfig,\n  FileContent,\n  FilePickerReturnTypes,\n  UseFilePickerError,\n  ReaderMethod,\n  ExtractContentTypeFromConfig,\n} from './interfaces.js';\nimport { openFileDialog } from './helpers/openFileDialog.js';\nimport { useValidators } from './validators/useValidators.js';\nimport { Validator } from './validators.js';\n\n// empty array reference in order to avoid re-renders when no validators are passed as props\nconst EMPTY_ARRAY: Validator[] = [];\n\nfunction useFilePicker<\n  CustomErrors = unknown,\n  ConfigType extends UseFilePickerConfig<CustomErrors> = UseFilePickerConfig<CustomErrors>,\n>(props: ConfigType = {} as ConfigType): FilePickerReturnTypes<ExtractContentTypeFromConfig<ConfigType>, CustomErrors> {\n  const {\n    accept = '*',\n    multiple = true,\n    readAs = 'Text',\n    readFilesContent = true,\n    validators = EMPTY_ARRAY,\n    initializeWithCustomParameters,\n  } = props;\n\n  const [plainFiles, setPlainFiles] = useState<File[]>([]);\n  const [filesContent, setFilesContent] = useState<FileContent<ExtractContentTypeFromConfig<ConfigType>>[]>([]);\n  const [fileErrors, setFileErrors] = useState<UseFilePickerError<CustomErrors>[]>([]);\n  const [loading, setLoading] = useState<boolean>(false);\n  const { onFilesSelected, onFilesSuccessfullySelected, onFilesRejected, onClear } = useValidators<\n    ConfigType,\n    CustomErrors\n  >(props);\n\n  const clear: () => void = useCallback(() => {\n    setPlainFiles([]);\n    setFilesContent([]);\n    setFileErrors([]);\n  }, []);\n\n  const clearWithEventListener: () => void = useCallback(() => {\n    clear();\n    onClear?.();\n  }, [clear, onClear]);\n\n  const parseFile = useCallback(\n    (file: FileWithPath) =>\n      new Promise<FileContent<ExtractContentTypeFromConfig<ConfigType>>>(\n        (\n          resolve: (fileContent: FileContent<ExtractContentTypeFromConfig<ConfigType>>) => void,\n          reject: (reason: UseFilePickerError) => void\n        ) => {\n          const reader = new FileReader();\n\n          //availible reader methods: readAsText, readAsBinaryString, readAsArrayBuffer, readAsDataURL\n          const readStrategy = reader[`readAs${readAs}` as ReaderMethod] as typeof reader.readAsText;\n          readStrategy.call(reader, file, props.readAs === 'Text' ? props.encoding : undefined);\n\n          const addError = ({ ...others }: UseFilePickerError) => {\n            reject({ ...others });\n          };\n\n          reader.onload = async () =>\n            Promise.all(\n              validators.map(validator =>\n                validator\n                  .validateAfterParsing(props, file, reader)\n                  .catch((err: UseFilePickerError) => Promise.reject(addError(err)))\n              )\n            )\n              .then(() =>\n                resolve({\n                  content: reader.result as string,\n                  name: file.name,\n                  lastModified: file.lastModified,\n                  path: file.path,\n                  size: file.size,\n                  type: file.type,\n                } as FileContent<ExtractContentTypeFromConfig<ConfigType>>)\n              )\n              .catch(() => {});\n\n          reader.onerror = () => {\n            addError({ name: 'FileReaderError', readerError: reader.error, causedByFile: file });\n          };\n        }\n      ),\n    [props, readAs, validators]\n  );\n\n  const openFilePicker = useCallback(() => {\n    const fileExtensions = accept instanceof Array ? accept.join(',') : accept;\n    openFileDialog(\n      fileExtensions,\n      multiple,\n      async evt => {\n        clear();\n        setLoading(true);\n        const plainFileObjects = (await fromEvent(evt)) as FileWithPath[];\n\n        const validationsBeforeParsing = (\n          await Promise.all(\n            validators.map(validator =>\n              validator\n                .validateBeforeParsing(props, plainFileObjects)\n                .catch((err: UseFilePickerError | UseFilePickerError[]) => (Array.isArray(err) ? err : [err]))\n            )\n          )\n        )\n          .flat(1)\n          .filter(Boolean) as UseFilePickerError<CustomErrors>[];\n\n        setPlainFiles(plainFileObjects);\n        setFileErrors(validationsBeforeParsing);\n        if (validationsBeforeParsing.length) {\n          setPlainFiles([]);\n          onFilesRejected?.({ errors: validationsBeforeParsing });\n          onFilesSelected?.({ errors: validationsBeforeParsing });\n          setLoading(false);\n          return;\n        }\n\n        if (!readFilesContent) {\n          onFilesSelected?.({ plainFiles: plainFileObjects, filesContent: [] });\n          setLoading(false);\n          return;\n        }\n\n        const validationsAfterParsing: UseFilePickerError<CustomErrors>[] = [];\n        const filesContent = (await Promise.all(\n          plainFileObjects.map(file =>\n            parseFile(file).catch(\n              (fileError: UseFilePickerError<CustomErrors> | UseFilePickerError<CustomErrors>[]) => {\n                validationsAfterParsing.push(...(Array.isArray(fileError) ? fileError : [fileError]));\n              }\n            )\n          )\n        )) as FileContent<ExtractContentTypeFromConfig<ConfigType>>[];\n        setLoading(false);\n\n        if (validationsAfterParsing.length) {\n          setPlainFiles([]);\n          setFilesContent([]);\n          setFileErrors(errors => [...errors, ...validationsAfterParsing]);\n          onFilesRejected?.({ errors: validationsAfterParsing });\n          onFilesSelected?.({\n            errors: validationsBeforeParsing.concat(validationsAfterParsing),\n          });\n          return;\n        }\n\n        setFilesContent(filesContent);\n        setPlainFiles(plainFileObjects);\n        setFileErrors([]);\n        onFilesSuccessfullySelected?.({ filesContent: filesContent, plainFiles: plainFileObjects });\n        onFilesSelected?.({\n          plainFiles: plainFileObjects,\n          filesContent: filesContent,\n        });\n      },\n      initializeWithCustomParameters\n    );\n  }, [\n    props,\n    accept,\n    clear,\n    initializeWithCustomParameters,\n    multiple,\n    onFilesRejected,\n    onFilesSelected,\n    onFilesSuccessfullySelected,\n    parseFile,\n    readFilesContent,\n    validators,\n  ]);\n\n  return {\n    openFilePicker,\n    filesContent,\n    errors: fileErrors,\n    loading,\n    plainFiles,\n    clear: clearWithEventListener,\n  };\n}\n\nexport default useFilePicker;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback, useState } from 'react';\nimport type {\n  ExtractContentTypeFromConfig,\n  FileContent,\n  ImperativeFilePickerReturnTypes,\n  SelectedFiles,\n  SelectedFilesOrErrors,\n  useImperativeFilePickerConfig,\n} from './interfaces.js';\nimport useFilePicker from './useFilePicker.js';\n\n/**\n * A version of useFilePicker hook that keeps selected files between selections. On top of that it allows to remove files from the selection.\n */\nfunction useImperativeFilePicker<\n  CustomErrors = unknown,\n  ConfigType extends useImperativeFilePickerConfig<CustomErrors> = useImperativeFilePickerConfig<CustomErrors>,\n>(props: ConfigType): ImperativeFilePickerReturnTypes<ExtractContentTypeFromConfig<ConfigType>, CustomErrors> {\n  const { onFilesSelected, onFilesSuccessfullySelected, validators, onFileRemoved } = props;\n\n  const [allPlainFiles, setAllPlainFiles] = useState<File[]>([]);\n  const [allFilesContent, setAllFilesContent] = useState<FileContent<ExtractContentTypeFromConfig<ConfigType>>[]>([]);\n\n  const { openFilePicker, loading, errors, clear } = useFilePicker<CustomErrors, ConfigType>({\n    ...props,\n    onFilesSelected: (data: SelectedFilesOrErrors<ExtractContentTypeFromConfig<ConfigType>, CustomErrors>) => {\n      if (!onFilesSelected) return;\n      if (data.errors?.length) {\n        return onFilesSelected(data);\n      }\n      // override the files property to return all files that were selected previously and in the current batch\n      onFilesSelected({\n        errors: undefined,\n        plainFiles: [...allPlainFiles, ...(data.plainFiles || [])],\n        filesContent: [...allFilesContent, ...(data.filesContent || [])] as any,\n      });\n    },\n    onFilesSuccessfullySelected: (data: SelectedFiles<any>) => {\n      setAllPlainFiles(previousPlainFiles => previousPlainFiles.concat(data.plainFiles));\n      setAllFilesContent(previousFilesContent => previousFilesContent.concat(data.filesContent));\n\n      if (!onFilesSuccessfullySelected) return;\n      // override the files property to return all files that were selected previously and in the current batch\n      onFilesSuccessfullySelected({\n        plainFiles: [...allPlainFiles, ...(data.plainFiles || [])],\n        filesContent: [...allFilesContent, ...(data.filesContent || [])],\n      });\n    },\n  });\n\n  const clearAll = useCallback(() => {\n    clear();\n    // clear previous files\n    setAllPlainFiles([]);\n    setAllFilesContent([]);\n  }, [clear]);\n\n  const removeFileByIndex = useCallback(\n    (index: number) => {\n      setAllFilesContent(previousFilesContent => [\n        ...previousFilesContent.slice(0, index),\n        ...previousFilesContent.slice(index + 1),\n      ]);\n      setAllPlainFiles(previousPlainFiles => {\n        const removedFile = previousPlainFiles[index];\n        if (!removedFile) {\n          return previousPlainFiles;\n        }\n        validators?.forEach(validator => validator.onFileRemoved?.(removedFile, index));\n        onFileRemoved?.(removedFile, index);\n        return [...previousPlainFiles.slice(0, index), ...previousPlainFiles.slice(index + 1)];\n      });\n    },\n    [validators, onFileRemoved]\n  );\n\n  const removeFileByReference = useCallback(\n    (file: File) => {\n      const index = allPlainFiles.findIndex(f => f === file);\n      if (index === -1) return;\n      removeFileByIndex(index);\n    },\n    [removeFileByIndex, allPlainFiles]\n  );\n\n  return {\n    openFilePicker,\n    plainFiles: allPlainFiles,\n    filesContent: allFilesContent,\n    loading,\n    errors,\n    clear: clearAll,\n    removeFileByIndex,\n    removeFileByReference,\n  };\n}\n\nexport default useImperativeFilePicker;\n"],"names":["__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues"],"mappings":"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"}