/
yeliseyevv
/
AudioLibrary
Обзор
Документация
Войти
/
yeliseyevv
/
AudioLibrary
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
client/src/components/modals/CreateAudio.js
140 строк
5 KB
Viktor
Загрузка на GitHub AudioLibrary Final
10 мар 2023, 23:25
10 мар 2023, 23:25
f3b1327
Код
Авторство
О чём код?
import React, {useContext, useEffect, useState} from 'react'; import Modal from "react-bootstrap/Modal"; import {Button, Dropdown, Form, Row, Col} from "react-bootstrap"; import {Context} from "../../index"; import {createAudio, fetchAudios, fetchCategories} from "../../http/audioAPI"; import {observer} from "mobx-react-lite"; const CreateAudio = observer(({show, onHide}) => { const {audio} = useContext(Context) const [name, setName] = useState('') const [price, setPrice] = useState(0) const [file, setFile] = useState(null) const [audiofile, setAudioFile] = useState(null) const [info, setInfo] = useState([]) useEffect(() => { fetchCategories().then(data => audio.setCategories(data)) }, []) const addInfo = () => { setInfo([...info, {title: '', description: '', number: Date.now()}]) } const removeInfo = (number) => { setInfo(info.filter(i => i.number !== number)) } const changeInfo = (key, value, number) => { setInfo(info.map(i => i.number === number ? {...i, [key]: value} : i)) } const selectFile = e => { setFile(e.target.files[0]) } const selectAudio = e => { setAudioFile(e.target.files[0]) } const addAudio = () => { const formData = new FormData() formData.append('name', name) formData.append('price', `${price}`) formData.append('img', file) formData.append('file', audiofile) formData.append('categoryId', audio.selectedCategory.id) formData.append('info', JSON.stringify(info)) createAudio(formData).then(data => onHide()) } return ( <Modal show={show} onHide={onHide} centered > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> Добавить аудио </Modal.Title> </Modal.Header> <Modal.Body> <Form> <Dropdown className="mt-2 mb-2"> <Dropdown.Toggle>{audio.selectedCategory.name || "Выберите категорию"}</Dropdown.Toggle> <Dropdown.Menu> {audio.categories.map(category => <Dropdown.Item onClick={() => audio.setSelectedCategory(category)} key={category.id} > {category.name} </Dropdown.Item> )} </Dropdown.Menu> </Dropdown> <Form.Control value={name} onChange={e => setName(e.target.value)} className="mt-3" placeholder="Введите название аудио" /> <Form.Control value={price} onChange={e => setPrice(Number(e.target.value))} className="mt-3" placeholder="Введите стоимость аудио" type="number" /> <Form.Control className="mt-3" type="file" onChange={selectFile} /> <Form.Control className="mt-3" type="file" onChange={selectAudio} /> <Button variant={"outline-dark"} onClick={addInfo} > Добавить описание </Button> {info.map(i => <Row className="mt-4" key={i.number}> <Col md={4}> <Form.Control value={i.title} onChange={(e) => changeInfo('title', e.target.value, i.number)} placeholder="Введите название описания" /> </Col> <Col md={4}> <Form.Control value={i.description} onChange={(e) => changeInfo('description', e.target.value, i.number)} placeholder="Введите описание" /> </Col> <Col md={4}> <Button onClick={() => removeInfo(i.number)} variant={"outline-danger"} > Удалить </Button> </Col> </Row> )} </Form> </Modal.Body> <Modal.Footer> <Button variant="outline-danger" onClick={onHide}>Закрыть</Button> <Button variant="outline-success" onClick={addAudio}>Добавить</Button> </Modal.Footer> </Modal> ); }); export default CreateAudio;