Front-end
Abrimos visual studio code y seleccionamos el siguiente comando:
npm create vite@latest
![phyton project](../img/buscapy11.png)
Nos va a preguntar si procedemos de decimos Y y luego ponemos el nombre de proyecto:buscafrase
![phyton project](../img/buscapy12.png)
Seleccionamos el framework React
![phyton project](../img/buscapy13.png)
Seleccionamos Javascript
![phyton project](../img/buscapy14.png)
Presionamos los siguientes comandos:
cd buscafrase
npm install
![phyton project](../img/buscapy15.png)
Probamos si todo esta bien con el siguiente comando
npm run dev
![phyton project](../img/buscapy16.png)
Si te aparece este error actualiza tu node a una versión mas reciente con el siguiente comando
npm install -g npm@latest
Y si no se puede desinstala node y descargalo de nuevo y vuelvelo a instalar. Una ves instalado tendras la versión mas reciente con el comando en caso mi sistema opetativo es windows 10
node -v
vuelves a probar con el siguiente comando
npm run dev
![phyton project](../img/buscapy17.png)
![phyton project](../img/buscapy18.png)
Instalamos primereact con el siguiente comando
npm install primereact primeicons
![phyton project](../img/buscapy19.png)
Instalamos primeflex con el siguiente comando
npm install primeflex
Instalamos axios para consumir el api rest
npm install --save axios
![phyton project](../img/buscapy20.png)
Para realizar el formulario vamos a instalar la siguiente dependencia
npm install --save final-form react-final-form
![phyton project](../img/buscapy21.png)
Modificamos el archivo main.jsx quedando de la siguiente manera:
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App.jsx'
import 'primereact/resources/themes/lara-light-indigo/theme.css'; //theme
import 'primereact/resources/primereact.min.css'; //core css
import 'primeicons/primeicons.css'; //icons
import 'primeflex/primeflex.css';
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)
El archivo App.jsx nos queda de la siguiente forma:
import { useState } from 'react'
import { DataView } from 'primereact/dataview';
import { Form, Field } from 'react-final-form';
import { InputText } from 'primereact/inputtext';
import { Dropdown } from 'primereact/dropdown';
import { Button } from 'primereact/button';
import axios from 'axios';
function App() {
const [formData, setFormData] = useState({});
const directorios = [
{ nombre: 'Frases I', code: 'frases1' },
{ nombre: 'Frases II', code: 'frases2' },
{ nombre: 'Frases III', code: 'frases3' },
{ nombre: 'Frases IV', code: 'frases4' },
{ nombre: 'Frases V', code: 'frases5' },
{ nombre: 'Frases VI', code: 'frases6' }
];
const [resultados,setResultados] = useState([])
let arreglo =[];
const onSubmit = (data, form) => {
console.log(data.texto);
console.log(data.directorio)
setFormData(data);
axios.post('http://127.0.0.1:8000/busqueda',data) .then((res) => {
//setBusquedas(res.data);
console.log(res.data);
/*
busquedas.busquedas.map((busca) => {
console.log(busca.link);
console.log(busca.text);
setLinks(busca.link);
setTextos(busca.text)
});
*/
for(let i=0;i<res.data.link.length;i++){
let link=res.data.link[i];
let text=res.data.text[i];
arreglo.push(link);
arreglo.push(text);
}
console.log(arreglo);
setResultados(arreglo)
})
.catch((err) => {
console.log(err.message);
});
form.restart();
};
const listTemplate = (items) => {
const listItems = items.map((item,index) =>
index % 2 === 0 ? <li><a href={item}>{item}</a></li> : <li>{item}</li>
);
return (
<ul>{listItems}</ul>
);
};
return (
<>
<h1>Buscafrase</h1>
<div className="card">
<h5>Introducir Búsqueda</h5>
<Form onSubmit={onSubmit} initialValues={{ texto: '', directorio: '' }} render={({ handleSubmit }) => (
<form onSubmit={handleSubmit} >
<Field name="texto" render={({ input }) => (
<InputText id="texto"{...input} />
)} />
<Field name="directorio" render={({ input }) => (
<Dropdown id="directorio" options={directorios} {...input} optionLabel="nombre" optionValue='code' placeholder="Seleccciona un directorio" />
)} />
<Button label="Buscar" className="p-button-success" type='submit' />
</form>
)} />
<DataView value={resultados} listTemplate={listTemplate} paginator rows={10} ></DataView>
</div>
</>
)
}
export default App