Podpora víkendů

This commit is contained in:
Martin Berka 2023-06-02 21:12:38 +02:00
parent d59e439588
commit ec1cbf332b
5 changed files with 58 additions and 49 deletions

View File

@ -93,51 +93,53 @@ function App() {
<> <>
<Header /> <Header />
<div className='wrapper'> <div className='wrapper'>
<Alert variant={'primary'}> {data.isWeekend ? <h4>Užívejte víkend :)</h4> : <>
Tvé zobrazované jméno je {auth.login}. Změnu můžeš provést v local storage prohlížeče.<br /> <Alert variant={'primary'}>
<small>Pro gamer move: Změň si své jméno na cizí. Můžeš pak libovolně měnit jejich volbu.</small> Tvé zobrazované jméno je {auth.login}. Změnu můžeš provést v local storage prohlížeče.<br />
</Alert> <small>Pro gamer move: Změň si své jméno na cizí. Můžeš pak libovolně měnit jejich volbu.</small>
<h1 className='title'>Dnes je {data.date}</h1> </Alert>
<Row className='food-tables'> <h1 className='title'>Dnes je {data.date}</h1>
{renderFoodTable('Sladovnická', food.sladovnicka)} <Row className='food-tables'>
{renderFoodTable('U Motlíků', food["uMotliku:"])} {renderFoodTable('Sladovnická', food.sladovnicka)}
{renderFoodTable('TechTower', food.techTower)} {renderFoodTable('U Motlíků', food["uMotliku:"])}
</Row> {renderFoodTable('TechTower', food.techTower)}
<div className='content-wrapper'> </Row>
<div className='content'> <div className='content-wrapper'>
<p>Jak to dnes vidíš s obědem?</p> <div className='content'>
<Form.Select onChange={changeChoice}> <p>Jak to dnes vidíš s obědem?</p>
<option></option> <Form.Select onChange={changeChoice}>
<option value={Locations.SLADOVNICKA}>Sladovnická</option> <option></option>
<option value={Locations.UMOTLIKU}>U Motlíků</option> <option value={Locations.SLADOVNICKA}>Sladovnická</option>
<option value={Locations.TECHTOWER}>TechTower</option> <option value={Locations.UMOTLIKU}>U Motlíků</option>
<option value={Locations.SPSE}>SPŠE</option> <option value={Locations.TECHTOWER}>TechTower</option>
<option value={Locations.VLASTNI}>Mám vlastní</option> <option value={Locations.SPSE}>SPŠE</option>
<option value={Locations.OBJEDNAVAM}>Budu objednávat</option> <option value={Locations.VLASTNI}>Mám vlastní</option>
<option value={Locations.NEOBEDVAM}>Nebudu obědvat</option> <option value={Locations.OBJEDNAVAM}>Budu objednávat</option>
</Form.Select> <option value={Locations.NEOBEDVAM}>Nebudu obědvat</option>
<p style={{ fontSize: "12px", marginTop: "5px" }}> </Form.Select>
Aktuálně je možné vybrat pouze jednu variantu. Vyber prázdnou položku pro odstranění. <p style={{ fontSize: "12px", marginTop: "5px" }}>
</p> Aktuálně je možné vybrat pouze jednu variantu. Vyber prázdnou položku pro odstranění.
{Object.keys(data.choices).length > 0 ? </p>
<Table striped bordered hover className='results-table mt-5'> {Object.keys(data.choices).length > 0 ?
<tbody> <Table striped bordered hover className='results-table mt-5'>
{Object.keys(data.choices).map((key: string, index: number) => <tbody>
<tr key={index}> {Object.keys(data.choices).map((key: string, index: number) =>
<td>{Object.values(Locations)[Number(key)]}</td> <tr key={index}>
<td> <td>{Object.values(Locations)[Number(key)]}</td>
<ul> <td>
{data.choices[Number(key)].map((p: string, index: number) => <li key={index}>{p}</li>)} <ul>
</ul> {data.choices[Number(key)].map((p: string, index: number) => <li key={index}>{p}</li>)}
</td> </ul>
</tr> </td>
)} </tr>
</tbody> )}
</Table> </tbody>
: <div className='mt-5'><i>Zatím nikdo nehlasoval...</i></div> </Table>
} : <div className='mt-5'><i>Zatím nikdo nehlasoval...</i></div>
}
</div>
</div> </div>
</div> </>}
{/* {!pizzaDayExists && {/* {!pizzaDayExists &&
<div> <div>
<p>Pro dnešní den není aktuálně založen Pizza day.</p> <p>Pro dnešní den není aktuálně založen Pizza day.</p>

View File

@ -19,6 +19,7 @@ export interface Choices {
export interface ClientData { export interface ClientData {
date: string, // dnešní datum pro zobrazení date: string, // dnešní datum pro zobrazení
isWeekend: boolean, // příznak zda je dnešní den víkend
choices: Choices, // seznam voleb choices: Choices, // seznam voleb
} }

View File

@ -1,6 +1,6 @@
import { ClientData, Locations } from "./types"; import { ClientData, Locations } from "./types";
import { db } from "./database"; import { db } from "./database";
import { getTodayString } from "./utils"; import { getHumanDate, getIsWeekend } from "./utils";
import { getDate } from "./utils"; import { getDate } from "./utils";
// /** Jedna konkrétní pizza */ // /** Jedna konkrétní pizza */
@ -33,7 +33,7 @@ import { getDate } from "./utils";
/** Vrátí "prázdná" (implicitní) data, pokud ještě nikdo nehlasoval. */ /** Vrátí "prázdná" (implicitní) data, pokud ještě nikdo nehlasoval. */
function getEmptyData(): ClientData { function getEmptyData(): ClientData {
return { date: getTodayString(), choices: {} }; return { date: getHumanDate(new Date()), isWeekend: getIsWeekend(new Date()), choices: {} };
} }
/** /**

View File

@ -4,6 +4,7 @@ export interface Choices {
export interface ClientData { export interface ClientData {
date: string, // dnešní datum pro zobrazení date: string, // dnešní datum pro zobrazení
isWeekend: boolean, // příznak, zda je dnes víkend
choices: Choices, // seznam voleb choices: Choices, // seznam voleb
} }

View File

@ -6,12 +6,17 @@ export function getDate() {
return `${currentYear}-${currentMonth}-${currentDay}`; return `${currentYear}-${currentMonth}-${currentDay}`;
} }
/** Vrátí human-readable reprezentaci dnešního data pro zobrazení. */ /** Vrátí human-readable reprezentaci předaného data pro zobrazení. */
export function getTodayString() { export function getHumanDate(date: Date) {
const date = new Date();
let currentDay = String(date.getDate()).padStart(2, '0'); let currentDay = String(date.getDate()).padStart(2, '0');
let currentMonth = String(date.getMonth() + 1).padStart(2, "0"); let currentMonth = String(date.getMonth() + 1).padStart(2, "0");
let currentYear = date.getFullYear(); let currentYear = date.getFullYear();
let currentDayOfWeek = date.toLocaleDateString("CZ-cs", { weekday: 'long' }); let currentDayOfWeek = date.toLocaleDateString("CZ-cs", { weekday: 'long' });
return `${currentDay}.${currentMonth}.${currentYear} (${currentDayOfWeek})`; return `${currentDay}.${currentMonth}.${currentYear} (${currentDayOfWeek})`;
}
/** Vrátí true, pokud je předané datum o víkendu. */
export function getIsWeekend(date: Date) {
const dayName = date.toLocaleDateString("CZ-cs", { weekday: 'long' }).toLowerCase()
return dayName === 'sobota' || dayName === 'neděle'
} }