diff --git a/web/src/components/Add/AddDialog.jsx b/web/src/components/Add/AddDialog.jsx index cb9e1d7..6e5bdbf 100644 --- a/web/src/components/Add/AddDialog.jsx +++ b/web/src/components/Add/AddDialog.jsx @@ -1,46 +1,23 @@ import { useEffect, useMemo, useState } from 'react' import Button from '@material-ui/core/Button' -import TextField from '@material-ui/core/TextField' import Dialog from '@material-ui/core/Dialog' import { torrentsHost, torrentUploadHost } from 'utils/Hosts' import axios from 'axios' import { useTranslation } from 'react-i18next' -import { NoImageIcon, AddItemIcon, TorrentIcon } from 'icons' import debounce from 'lodash/debounce' -import { v4 as uuidv4 } from 'uuid' import useChangeLanguage from 'utils/useChangeLanguage' -import { Cancel as CancelIcon } from '@material-ui/icons' -import { useDropzone } from 'react-dropzone' import { useMediaQuery } from '@material-ui/core' import CircularProgress from '@material-ui/core/CircularProgress' import usePreviousState from 'utils/usePreviousState' import { checkImageURL, getMoviePosters, chechTorrentSource, parseTorrentTitle } from './helpers' -import { - ButtonWrapper, - CancelIconWrapper, - ClearPosterButton, - PosterLanguageSwitch, - Content, - Header, - IconWrapper, - RightSide, - Poster, - PosterSuggestions, - PosterSuggestionsItem, - PosterWrapper, - LeftSide, - LeftSideBottomSectionFileSelected, - LeftSideBottomSectionNoFile, - LeftSideTopSection, - TorrentIconWrapper, - RightSideContainer, -} from './style' +import { ButtonWrapper, Content, Header } from './style' +import RightSideComponent from './RightSideComponent' +import LeftSideComponent from './LeftSideComponent' export default function AddDialog({ handleClose }) { const { t } = useTranslation() const [torrentSource, setTorrentSource] = useState('') - const [isTorrentSourceActive, setIsTorrentSourceActive] = useState(false) const [title, setTitle] = useState('') const [posterUrl, setPosterUrl] = useState('') const [isPosterUrlCorrect, setIsPosterUrlCorrect] = useState(false) @@ -138,26 +115,6 @@ export default function AddDialog({ handleClose }) { } }, [selectedFile, torrentSource]) - const handleCapture = files => { - const [file] = files - if (!file) return - - setIsUserInteractedWithPoster(false) - setSelectedFile(file) - setTorrentSource(file.name) - } - - const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop: handleCapture, accept: '.torrent' }) - - const handleTorrentSourceChange = ({ target: { value } }) => setTorrentSource(value) - const handleTitleChange = ({ target: { value } }) => setTitle(value) - const handlePosterUrlChange = ({ target: { value } }) => { - setPosterUrl(value) - checkImageURL(value).then(setIsPosterUrlCorrect) - setIsUserInteractedWithPoster(!!value) - setPosterList() - } - const handleSave = () => { setIsLoadingButton(true) @@ -177,17 +134,6 @@ export default function AddDialog({ handleClose }) { } } - const clearSelectedFile = () => { - setSelectedFile() - setTorrentSource('') - } - - const userChangesPosterUrl = url => { - setPosterUrl(url) - checkImageURL(url).then(setIsPosterUrlCorrect) - setIsUserInteractedWithPoster(true) - } - return ( {t('AddNewTorrent')} - - - setIsTorrentSourceActive(true)} - onBlur={() => setIsTorrentSourceActive(false)} - inputProps={{ autoComplete: 'off' }} - disabled={!!selectedFile} - /> - + - {selectedFile ? ( - - - - - - - - - - ) : ( - - -
{t('AppendFile.Or')}
- - - -
{t('AppendFile.ClickOrDrag')}
-
-
- )} -
- - - - - - - - - {isPosterUrlCorrect ? poster : } - - - - {posterList - ?.filter(url => url !== posterUrl) - .slice(0, 12) - .map(url => ( - userChangesPosterUrl(url)} key={uuidv4()}> - poster - - ))} - - - {currentLang !== 'en' && ( - { - const newLanguage = posterSearchLanguage === 'en' ? 'ru' : 'en' - setPosterSearchLanguage(newLanguage) - posterSearch(title, newLanguage, { shouldRefreshMainPoster: true }) - }} - showbutton={+isPosterUrlCorrect} - color='primary' - variant='contained' - size='small' - > - {posterSearchLanguage === 'en' ? 'EN' : 'RU'} - - )} - - { - removePoster() - setIsUserInteractedWithPoster(true) - }} - color='primary' - variant='contained' - size='small' - > - {t('Clear')} - - - - - - +
diff --git a/web/src/components/Add/LeftSideComponent.jsx b/web/src/components/Add/LeftSideComponent.jsx new file mode 100644 index 0000000..11c9df9 --- /dev/null +++ b/web/src/components/Add/LeftSideComponent.jsx @@ -0,0 +1,87 @@ +import { useTranslation } from 'react-i18next' +import { useDropzone } from 'react-dropzone' +import { AddItemIcon, TorrentIcon } from 'icons' +import TextField from '@material-ui/core/TextField' +import { Cancel as CancelIcon } from '@material-ui/icons' +import { useState } from 'react' + +import { + CancelIconWrapper, + IconWrapper, + LeftSide, + LeftSideBottomSectionFileSelected, + LeftSideBottomSectionNoFile, + LeftSideTopSection, + TorrentIconWrapper, +} from './style' + +export default function LeftSideComponent({ + setIsUserInteractedWithPoster, + setSelectedFile, + torrentSource, + setTorrentSource, + selectedFile, +}) { + const { t } = useTranslation() + + const handleCapture = files => { + const [file] = files + if (!file) return + + setIsUserInteractedWithPoster(false) + setSelectedFile(file) + setTorrentSource(file.name) + } + + const clearSelectedFile = () => { + setSelectedFile() + setTorrentSource('') + } + + const [isTorrentSourceActive, setIsTorrentSourceActive] = useState(false) + const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop: handleCapture, accept: '.torrent' }) + + const handleTorrentSourceChange = ({ target: { value } }) => setTorrentSource(value) + + return ( + + + setIsTorrentSourceActive(true)} + onBlur={() => setIsTorrentSourceActive(false)} + inputProps={{ autoComplete: 'off' }} + disabled={!!selectedFile} + /> + + + {selectedFile ? ( + + + + + + + + + + ) : ( + + +
{t('AppendFile.Or')}
+ + + +
{t('AppendFile.ClickOrDrag')}
+
+
+ )} +
+ ) +} diff --git a/web/src/components/Add/RightSideComponent.jsx b/web/src/components/Add/RightSideComponent.jsx new file mode 100644 index 0000000..b76e917 --- /dev/null +++ b/web/src/components/Add/RightSideComponent.jsx @@ -0,0 +1,120 @@ +import { useTranslation } from 'react-i18next' +import { v4 as uuidv4 } from 'uuid' +import { NoImageIcon } from 'icons' +import { TextField } from '@material-ui/core' + +import { + ClearPosterButton, + PosterLanguageSwitch, + RightSide, + Poster, + PosterSuggestions, + PosterSuggestionsItem, + PosterWrapper, + RightSideContainer, +} from './style' +import { checkImageURL } from './helpers' + +export default function RightSideComponent({ + setTitle, + setPosterUrl, + setIsPosterUrlCorrect, + setIsUserInteractedWithPoster, + setPosterList, + isTorrentSourceCorrect, + title, + posterUrl, + isPosterUrlCorrect, + posterList, + currentLang, + posterSearchLanguage, + setPosterSearchLanguage, + posterSearch, + removePoster, + torrentSource, +}) { + const { t } = useTranslation() + + const handleTitleChange = ({ target: { value } }) => setTitle(value) + const handlePosterUrlChange = ({ target: { value } }) => { + setPosterUrl(value) + checkImageURL(value).then(setIsPosterUrlCorrect) + setIsUserInteractedWithPoster(!!value) + setPosterList() + } + const userChangesPosterUrl = url => { + setPosterUrl(url) + checkImageURL(url).then(setIsPosterUrlCorrect) + setIsUserInteractedWithPoster(true) + } + + return ( + + + + + + + + {isPosterUrlCorrect ? poster : } + + + + {posterList + ?.filter(url => url !== posterUrl) + .slice(0, 12) + .map(url => ( + userChangesPosterUrl(url)} key={uuidv4()}> + poster + + ))} + + + {currentLang !== 'en' && ( + { + const newLanguage = posterSearchLanguage === 'en' ? 'ru' : 'en' + setPosterSearchLanguage(newLanguage) + posterSearch(title, newLanguage, { shouldRefreshMainPoster: true }) + }} + showbutton={+isPosterUrlCorrect} + color='primary' + variant='contained' + size='small' + > + {posterSearchLanguage === 'en' ? 'EN' : 'RU'} + + )} + + { + removePoster() + setIsUserInteractedWithPoster(true) + }} + color='primary' + variant='contained' + size='small' + > + {t('Clear')} + + + + + + + ) +}