Untitled
unknown
plain_text
2 years ago
15 kB
2
Indexable
import React, { useState, useEffect } from 'react'; import { Link } from "react-router-dom"; import Sidebar from '../Sidebar'; import TextField from '@mui/material/TextField'; import Button from '@mui/material/Button'; import TextareaAutosize from '@mui/material/TextareaAutosize'; import MenuItem from '@mui/material/MenuItem'; import Select from '@mui/material/Select'; import InputLabel from '@mui/material/InputLabel'; import FormControl from '@mui/material/FormControl'; import Autocomplete from '@mui/material/Autocomplete'; import DropFilePDF from './DropFilePDF'; import DropFileMP3 from './DropFileMP3'; import UploadIcon from '../assets/iconos_upload_24px.svg'; import { Generos } from '../Constants/Generos'; import { Idiomas } from '../Constants/Idiomas'; import { Roles } from '../Constants/Roles'; import { Titulo } from '../Constants/Titulo'; import axios from 'axios'; const Form = () => { // change to useParams const submittingAgency = 100; let today = new Date().toISOString().slice(0, 10); const [fileHeader, setHeader] = useState({ submittingAgency: submittingAgency, fileCreationDateTime: new Date(), receivingAgency: 61 }); const [addWorks, setData] = useState({ submissionId: 1, agency: submittingAgency, originalTitle: "", albumTitle: "", duration: "00:00", genre: "", unpublishedDndaNumberLetter: 0, unpublishedDndaNumberMusic: 0, unpublishedDate: today, editedDate: today, lyrics: "", interestedParties:[ { nameNumber: "", role: "", porcentPer: 0, fullName: "", dni: "" }, { nameNumber: "", role: "", porcentPer: 0, fullName: "", dni: "" }, { nameNumber: "", role: "", porcentPer: 0, fullName: "", dni: "" }, { nameNumber: "", role: "", porcentPer: 0, fullName: "", dni: "" } ] }); const [interestedParties, setState] = useState([]); const handleInputChange = (e, index) => { const { name, value } = e.target; const list = [...addWorks.interestedParties]; list[index][name] = value; setState(list); }; const [audioFile, setDocuments] = useState(''); const [sheetMusicFile, setDocuments2] = useState(''); const handleInputsChange = (event) => { const value = event.target.value; setData({ ...addWorks, [event.target.name]: value }); }; const sum = [parseInt(addWorks.interestedParties[0].porcentPer), parseInt(addWorks.interestedParties[1].porcentPer), parseInt(addWorks.interestedParties[2].porcentPer), parseInt(addWorks.interestedParties[3].porcentPer)].reduce((a, b) => a + b, 0); const handleSubmit = async (e) => { e.preventDefault(); //setLoading(true) const body = { fileHeader, addWorks:[addWorks] }; const send = JSON.stringify(body) const upload = { body: send, songs: audioFile, documents: sheetMusicFile } const formData = new FormData() for (const property in upload) { formData.append( property, upload[property] ) } if(addWorks.interestedParties[0].porcentPer == ""){ alert('Por favor agregar datos de integrantes') }else if(sum !== 100 ){ alert('Por favor chequear distrubucion porcentajes') }else if(audioFile == "" ){ alert('Por favor agregar archivo de partitura y archivo de audio') }else{ try { const resp = await axios.post('http://localhost:3001/api/uploads', formData, { headers: { "Content-Type": "application/json", }, }); console.log(resp); alert('Carga enviada!') } catch (err) { // Handle Error Here console.log(err); } } }; return ( <> <Sidebar/> <form onSubmit={handleSubmit} className='frame'> <br /> <div className='d-flex justify-content-between align-items-center'> <h2 className='title' style={{ marginBottom: '0' }}>Registro de obras</h2> </div> <hr /> {/* addWorks (addWorks) */} <div className='row px-2'> <div className='col-xs-12 col-md-4'> <p className='fw-bold'>Trámite# </p> <p className='subtitle fw-bold'>Titulo original de la obra*</p> <p className='subtitle fw-bold mt-5 mb-5'>Titulo de la obra*</p> <p className='subtitle fw-bold mt-5 mb-5'>Duración</p> <p className='subtitle fw-bold mb-5' style={{marginTop: '60px'}}>Género</p> <p className='subtitle fw-bold mb-5' style={{marginTop: '65px'}}>DNDA Expediente N (Letra)</p> <p className='subtitle fw-bold mt-5'>DNDA Expediente N (Musica)</p> </div> <div className='col-xs-12 col-md-4'> <p className='fw-bold'>{submittingAgency}</p> <TextField required name='originalTitle' value={addWorks.originalTitle} onChange={handleInputsChange} label="Nombre" style={{ width: '100%' }} /> <br /> <br /> <TextField required name='albumTitle' value={addWorks.albumTitle} onChange={handleInputsChange} label="Nombre" style={{ width: '100%' }} /> <br /> <br /> <TextField required type='time' name='duration' value={addWorks.duration} onChange={handleInputsChange} label="duración" style={{ width: '100%' }} /> <br /> <br /> <FormControl style={{width: '100%'}}> <InputLabel id="demo-simple-select-label">género</InputLabel> <Select defaultValue= "" required name='genre' labelId="demo-simple-select-label" id="demo-simple-select" value={addWorks.genre} label="género" onChange={handleInputsChange} > {Generos.map((item, i) => { return ( <MenuItem value={item.code} key={i}>{item.description}</MenuItem> ) })} </Select> </FormControl> <br /> <br /> <div className='d-flex'> <TextField required type='number' name='unpublishedDndaNumberLetter' value={addWorks.unpublishedDndaNumberLetter} onChange={handleInputsChange} label="letra" /> <span className='d-flex align-items-center'> fecha </span> <TextField required name='unpublishedDate' type="date" placeholder="1990-12-24" value={addWorks.unpublishedDate} onChange={handleInputsChange} label="fecha" /> </div> <div className='d-flex mt-3'> <TextField required type='number' name='unpublishedDndaNumberMusic' value={addWorks.unpublishedDndaNumberMusic} onChange={handleInputsChange} label="musica" /> <span className='d-flex align-items-center'> fecha </span> <TextField required name='editedDate' type="date" //defaultValue="1990-12-24" value={addWorks.editedDate} onChange={handleInputsChange} label="fecha" /> </div> </div> <div className='row mt-3'> <div className='col-xs-12 col-md-4'> <p className='fw-bold'>Letra (texto)</p> </div> <div className='col-xs-12 col-md-4'> <TextareaAutosize required name='lyrics' aria-label="minimum height" value={addWorks.lyrics} onChange={handleInputsChange} minRows={3} placeholder="letra..." style={{ width: 375, marginLeft: '9px' }} /> </div> </div> {/* FILES */} <div className='row'> <div className='col-xs-12 col-md-4'> <div className='pt-2' style={{ marginTop: '10px', marginBottom: '5px' }}> <p className='subtitle'> <img src={UploadIcon} className='sidebar-icons'/>Archivo de Partitura (PDF)</p> <div className='wrapper' style={{ height: 'auto' }}> <DropFilePDF setDocuments={setDocuments}/> <p className='standard-text mt-3'>.PDF</p> </div> </div> </div> <div className='col-xs-12 col-md-4 ps-3 pe-0 ms-1'> <div className='pt-2' style={{ marginTop: '10px', marginBottom: '5px' }}> <p className='subtitle'> <img src={UploadIcon} className='sidebar-icons'/>Archivo de audio (MP3)</p> <div className='wrapper' style={{ height: 'auto' }}> <DropFileMP3 setDocuments2={setDocuments2}/> <p className='standard-text mt-3'>.MP3</p> </div> </div> </div> </div> {/* MEMBERS (state) */} {addWorks.interestedParties.map((item, i) => { return ( <div className='row mt-3' key={i}> <div className='col'> <div className='d-flex'> <FormControl style={{width: '20%'}}> <InputLabel id="demo-simple-select-label">Funcion</InputLabel> <Select defaultValue= "" name='role' labelId="demo-simple-select-label" id="demo-simple-select" value={interestedParties.role} label="funcion" onChange={e => handleInputChange(e, i)} > {Roles.map((item, i) => { return ( <MenuItem value={item.role} key={i}>{item.description}</MenuItem> ) })} </Select> </FormControl> <TextField name='nameNumber' type='number' value={interestedParties.nameNumber} onChange={e => handleInputChange(e, i)} label="socio #" style={{width: '10%'}} /> <TextField name='fullName' value={interestedParties.fullName} onChange={e => handleInputChange(e, i)} label="nombre y apellido" /> <TextField name='dni' type='number' value={interestedParties.dni} onChange={e => handleInputChange(e, i)} label="dni" style={{width: '10%'}} InputProps={{ inputProps: { min: 1000000 } }} /> <TextField name='porcentPer' type='number' value={interestedParties.porcentPer} onChange={e => handleInputChange(e, i)} label="%" style={{width: '10%'}} InputProps={{ inputProps: { min: 1, max: 100 } }} /> </div> </div> </div> );})} </div> <div className='row mt-2'> <div className='col'> <div className='text-end'> <Link to={'/'} style={{textDecoration: 'none'}}><Button variant="outlined">Cancelar</Button></Link> <Button variant="contained" type="submit">Finalizar</Button> </div> </div> </div> </form> </> ) } export default Form;
Editor is loading...