import { Modal, Button, Text, Group, Grid, TextInput, ScrollArea } from '@mantine/core'; import { IconSearch } from '@tabler/icons-react'; import { useEffect, useState } from 'react'; import ModalAddFile from './add'; import SelectorItem from '../../components/select-item'; import API from '../../services/api'; import setNotification from '../errors/error-notification'; const ModalFileSelector = ({ opened, handleClose, handleSubmit, ...props }) => { const [files, setFiles] = useState([]); const [showAdd, setShowAdd] = useState(false); const [search, setSearch] = useState(''); let resfiless = []; const toggleShowAdd = () => setShowAdd(!showAdd); const clickHandler = (files) => { if (props.multi) { // eslint-disable-next-line eqeqeq const indexfiles = resfiless.findIndex((item) => item._id == files._id); if (indexfiles === -1) { resfiless.push(files); } else { resfiless.splice(indexfiles, 1); } } else { handleSubmitLocal(files); } }; const handleSubmitLocal = (files) => { handleSubmit(props.multi ? resfiless : files); handleClose(); }; useEffect(() => { API.getFiles() .then((res) => { if (res.status === 200) { setFiles(res.data); } }) .catch((err) => { setNotification(true, err.response.data.error); }); return () => {}; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { if (search.length >= 2) { API.searchfiles(search) .then((res) => { if (res.status === 200) { setFiles(res.data); } }) .catch((err) => { setNotification(true, err.response.data.error); }); } else if (search.length === 0) { API.getFiles() .then((res) => { if (res.status === 200) { setFiles(res.data); } }) .catch((err) => { setNotification(true, err.response.data.error); }); } }, [search]); return ( Select file{props.multi ? 's' : ''} setSearch(e.target.value)} icon={} /> {files.map((file) => ( ))} {props.multi && ( <> )} {showAdd && ( setFiles((prev) => [...prev, files])} /> )} ); }; export default ModalFileSelector;