import { DepartureTime } from "../../types"; const TOKEN_KEY = "token"; /** * Uloží token do local storage prohlížeče. * * @param token token */ export const storeToken = (token: string) => { localStorage.setItem(TOKEN_KEY, token); } /** * Vrátí token z local storage, pokud tam je. * * @returns token nebo null */ export const getToken = (): string | undefined => { return localStorage.getItem(TOKEN_KEY) ?? undefined; } /** * Odstraní token z local storage, pokud tam je. */ export const deleteToken = () => { localStorage.removeItem(TOKEN_KEY); } /** * Vrátí human-readable reprezentaci předaného data a času pro zobrazení. * Příklady: * - dnes 10:52 * - 10.05.2023 10:52 */ export function getHumanDateTime(datetime: Date) { let hours = String(datetime.getHours()).padStart(2, '0'); let minutes = String(datetime.getMinutes()).padStart(2, "0"); if (new Date().toDateString() === datetime.toDateString()) { return `dnes ${hours}:${minutes}`; } else { let day = String(datetime.getDate()).padStart(2, '0'); let month = String(datetime.getMonth() + 1).padStart(2, "0"); let year = datetime.getFullYear(); return `${day}.${month}.${year} ${hours}:${minutes}`; } } /** * Vrátí true, pokud je předaný čas větší než aktuální čas. */ export function isInTheFuture(time: DepartureTime) { const now = new Date(); const currentHours = now.getHours(); const currentMinutes = now.getMinutes(); const currentDate = now.toDateString(); const [hours, minutes] = time.split(':').map(Number); if (currentDate === now.toDateString()) { return hours > currentHours || (hours === currentHours && minutes > currentMinutes); } return true; } /** * Vrátí index dne v týdnu, kde pondělí=0, neděle=6 * * @param date datum * @returns index dne v týdnu */ export const getDayOfWeekIndex = (date: Date) => { // https://stackoverflow.com/a/4467559 return (((date.getDay() - 1) % 7) + 7) % 7; } /** Vrátí první pracovní den v týdnu předaného data. */ export function getFirstWorkDayOfWeek(date: Date) { const firstDay = new Date(date.getTime()); firstDay.setDate(date.getDate() - getDayOfWeekIndex(date)); return firstDay; } /** Vrátí poslední pracovní den v týdnu předaného data. */ export function getLastWorkDayOfWeek(date: Date) { const lastDay = new Date(date.getTime()); lastDay.setDate(date.getDate() + (4 - getDayOfWeekIndex(date))); return lastDay; } /** Vrátí datum v ISO formátu. */ export function formatDate(date: Date, format?: string) { let day = String(date.getDate()).padStart(2, '0'); let month = String(date.getMonth() + 1).padStart(2, "0"); let year = String(date.getFullYear()); const f = (format === undefined) ? 'YYYY-MM-DD' : format; return f.replace('DD', day).replace('MM', month).replace('YYYY', year); } /** Vrátí human-readable reprezentaci předaného data pro zobrazení. */ export function getHumanDate(date: Date) { let currentDay = String(date.getDate()).padStart(2, '0'); let currentMonth = String(date.getMonth() + 1).padStart(2, "0"); let currentYear = date.getFullYear(); return `${currentDay}.${currentMonth}.${currentYear}`; }