Předvyplnění posledně zvolené hodnoty

This commit is contained in:
Martin Berka 2023-06-02 23:07:15 +02:00
parent ec1cbf332b
commit 608dbd5e03
2 changed files with 18 additions and 2 deletions

View File

@ -7,6 +7,7 @@ Server je v adresáři /server, client v adresáři /client obojí lze spustit p
### `yarn start` ### `yarn start`
## TODO ## TODO
- Minimálně v klientovi nefunguje správně eslint - neřve, když chybí závislosti v useEffect
- Popsat Food API, nginx - Popsat Food API, nginx
- Popsat spuštění pro vývoj - Popsat spuštění pro vývoj
- Vyndat URL na Food API do .env - Vyndat URL na Food API do .env

View File

@ -1,4 +1,4 @@
import React, { useContext, useEffect, useState } from 'react'; import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import { EVENT_DISCONNECT, EVENT_MESSAGE, SocketContext } from './context/socket'; import { EVENT_DISCONNECT, EVENT_MESSAGE, SocketContext } from './context/socket';
import { getData, getFood, updateChoice } from './Api'; import { getData, getFood, updateChoice } from './Api';
@ -18,6 +18,7 @@ function App() {
const [food, setFood] = useState<any>(); const [food, setFood] = useState<any>();
// const [pizzy, setPizzy] = useState(); // const [pizzy, setPizzy] = useState();
const socket = useContext(SocketContext); const socket = useContext(SocketContext);
const choiceRef = useRef<HTMLSelectElement>(null);
// Prvotní načtení aktuálního stavu // Prvotní načtení aktuálního stavu
useEffect(() => { useEffect(() => {
@ -55,6 +56,20 @@ function App() {
} }
}, [socket]); }, [socket]);
useEffect(() => {
if (!auth || !auth.login) {
return
}
// TODO tohle občas náhodně nezafunguje, nutno přepsat, viz https://medium.com/@teh_builder/ref-objects-inside-useeffect-hooks-eb7c15198780
if (data?.choices && choiceRef.current) {
for (let entry of Object.entries(data.choices)) {
if (entry[1].includes(auth.login)) {
choiceRef.current.value = Object.values(Locations)[entry[0]]
}
}
}
}, [auth?.login, data?.choices, choiceRef?.current])
const changeChoice = async (event: React.ChangeEvent<HTMLSelectElement>) => { const changeChoice = async (event: React.ChangeEvent<HTMLSelectElement>) => {
const index = Object.values(Locations).indexOf(event.target.value as unknown as Locations); const index = Object.values(Locations).indexOf(event.target.value as unknown as Locations);
if (auth?.login) { if (auth?.login) {
@ -107,7 +122,7 @@ function App() {
<div className='content-wrapper'> <div className='content-wrapper'>
<div className='content'> <div className='content'>
<p>Jak to dnes vidíš s obědem?</p> <p>Jak to dnes vidíš s obědem?</p>
<Form.Select onChange={changeChoice}> <Form.Select ref={choiceRef} onChange={changeChoice}>
<option></option> <option></option>
<option value={Locations.SLADOVNICKA}>Sladovnická</option> <option value={Locations.SLADOVNICKA}>Sladovnická</option>
<option value={Locations.UMOTLIKU}>U Motlíků</option> <option value={Locations.UMOTLIKU}>U Motlíků</option>