import React, { useCallback, useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import AppState from 'App/State/AppState'; import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal'; import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; import usePrevious from 'Helpers/Hooks/usePrevious'; import { icons, kinds, sizes } from 'Helpers/Props'; import RootFolders from 'RootFolder/RootFolders'; import { addRootFolder, fetchRootFolders, } from 'Store/Actions/rootFolderActions'; import useIsWindows from 'System/useIsWindows'; import { InputChanged } from 'typings/inputs'; import translate from 'Utilities/String/translate'; import styles from './ImportSeriesSelectFolder.css'; function ImportSeriesSelectFolder() { const dispatch = useDispatch(); const { isFetching, isPopulated, isSaving, error, saveError, items } = useSelector((state: AppState) => state.rootFolders); const isWindows = useIsWindows(); const [isAddNewRootFolderModalOpen, setIsAddNewRootFolderModalOpen] = useState(false); const wasSaving = usePrevious(isSaving); const hasRootFolders = items.length > 0; const goodFolderExample = isWindows ? 'C:\\tv shows' : '/tv shows'; const badFolderExample = isWindows ? 'C:\\tv shows\\the simpsons' : '/tv shows/the simpsons'; const handleAddNewRootFolderPress = useCallback(() => { setIsAddNewRootFolderModalOpen(true); }, []); const handleAddRootFolderModalClose = useCallback(() => { setIsAddNewRootFolderModalOpen(false); }, []); const handleNewRootFolderSelect = useCallback( ({ value }: InputChanged) => { dispatch(addRootFolder({ path: value })); }, [dispatch] ); useEffect(() => { dispatch(fetchRootFolders()); }, [dispatch]); useEffect(() => { if (!isSaving && wasSaving && !saveError) { items.reduce((acc, item) => { if (item.id > acc) { return item.id; } return acc; }, 0); } }, [isSaving, wasSaving, saveError, items]); return ( {isFetching && !isPopulated ? : null} {!isFetching && error ? ( {translate('RootFoldersLoadError')} ) : null} {!error && isPopulated && (
{translate('LibraryImportSeriesHeader')}
{translate('LibraryImportTips')}
  • {translate('LibraryImportTipsDontUseDownloadsFolder')}
{hasRootFolders ? (
) : null} {!isSaving && saveError ? ( {translate('AddRootFolderError')}
    {Array.isArray(saveError.responseJSON) ? ( saveError.responseJSON.map((e, index) => { return
  • {e.errorMessage}
  • ; }) ) : (
  • {JSON.stringify(saveError.responseJSON)}
  • )}
) : null}
)}
); } export default ImportSeriesSelectFolder;