final ref hw9

This commit is contained in:
neko
2022-09-25 14:21:17 +03:00
parent 071a0c2d30
commit ac6b8d5db8
3 changed files with 33 additions and 31 deletions

View File

@@ -2,7 +2,7 @@ import React from 'react'
import HW6 from '../../hw06/HW6' import HW6 from '../../hw06/HW6'
import HW7 from '../../hw07/HW7' import HW7 from '../../hw07/HW7'
import HW8 from '../../hw08/HW8' import HW8 from '../../hw08/HW8'
// import HW9 from '../../hw09/HW9' import HW9 from '../../hw09/HW9'
function Junior() { function Junior() {
return ( return (
@@ -10,7 +10,7 @@ function Junior() {
<HW6 /> <HW6 />
<HW7 /> <HW7 />
<HW8 /> <HW8 />
{/*<HW9 />*/} <HW9 />
</div> </div>
) )
} }

View File

@@ -1,48 +1,44 @@
import React, { useState } from 'react' import React, {useState} from 'react'
import SuperButton from '../hw04/common/c2-SuperButton/SuperButton' import SuperButton from '../hw04/common/c2-SuperButton/SuperButton'
import { restoreState } from '../hw06/localStorage/localStorage' import {restoreState} from '../hw06/localStorage/localStorage'
import s from './Clock.module.css' import s from './Clock.module.css'
function Clock() { function Clock() {
const [timerId, setTimerId] = useState<number | undefined>(undefined) const [timerId, setTimerId] = useState<number | undefined>(undefined)
const [date, setDate] = useState<Date>( // for autotests // не менять // можно подсунуть в локалСторэдж нужную дату, чтоб увидеть как она отображается
new Date(restoreState('hw9-date', new Date())) const [date, setDate] = useState<Date>(new Date(restoreState('hw9-date', Date.now())))
) // for autotests
const [show, setShow] = useState<boolean>(false) const [show, setShow] = useState<boolean>(false)
const stop = () => {
// пишут студенты
if (timerId) {
clearInterval(timerId)
setTimerId(undefined)
}
}
const start = () => { const start = () => {
// пишут студенты // пишут студенты // запустить часы (должно отображаться реальное время, а не +1)
// сохранить ид таймера (https://learn.javascript.ru/settimeout-setinterval#setinterval)
const id: number = +setInterval(() => { const id: number = +setInterval(() => {
setDate(new Date()) setDate(new Date())
}, 1000) }, 1000)
setTimerId(id) setTimerId(id)
} }
const onMouseEnter = () => { const stop = () => {
// пишут студенты // поставить часы на паузу, обнулить ид таймера (timerId <- undefined)
if (timerId) {
clearInterval(timerId)
setTimerId(undefined)
}
}
const onMouseEnter = () => { // пишут студенты // показать дату если наведена мышка
setShow(true) setShow(true)
} }
const onMouseLeave = () => { const onMouseLeave = () => { // пишут студенты // спрятать дату если мышка не наведена
setShow(false) setShow(false)
} }
// логику напишет Андрей :) // |v| видел такое в реальных часах |v| const stringTime = date.toLocaleTimeString() || <br/> // часы24:минуты:секунды (01:02:03)/(23:02:03)/(24:00:00)/(00:00:01) // пишут студенты
const stringTime = date?.toLocaleTimeString() || <br /> // часы24:минуты:секунды (01:02:03)/(23:02:03)/(24:00:00)/(00:00:01) // пишут студенты const stringDate = date.toLocaleDateString() || <br/> // день.месяц.год (01.02.2022) // пишут студенты, варианты 01.02.0123/01.02.-123/01.02.12345 не рассматриваем
const stringDate = date?.toLocaleDateString() || <br /> // день.месяц.год (01.02.2022) // пишут студенты, варианты 01.02.0123/01.02.-123/01.02.12345 не рассматриваем
// день недели на английском, месяц на английском
const stringDay = new Intl.DateTimeFormat('en-US', { // день недели на английском, месяц на английском (https://learn.javascript.ru/intl#intl-datetimeformat)
weekday: 'long', const stringDay = new Intl.DateTimeFormat('en-US', {weekday: 'long'}).format(date) || <br/> // пишут студенты
}).format(date) || <br /> // пишут студенты const stringMonth = new Intl.DateTimeFormat('en-US', {month: 'long'}).format(date) || <br/> // пишут студенты
const stringMonth = new Intl.DateTimeFormat('en-US', {
month: 'long',
}).format(date) || <br /> // пишут студенты
return ( return (
<div className={s.clock}> <div className={s.clock}>
@@ -67,7 +63,7 @@ function Clock() {
</> </>
) : ( ) : (
<> <>
<br /> <br/>
</> </>
)} )}
</div> </div>
@@ -76,14 +72,14 @@ function Clock() {
<div className={s.buttonsContainer}> <div className={s.buttonsContainer}>
<SuperButton <SuperButton
id={'hw9-button-start'} id={'hw9-button-start'}
disabled={!!timerId} // пишут студенты disabled={!!timerId} // пишут студенты // задизэйблить если таймер запущен
onClick={start} onClick={start}
> >
start start
</SuperButton> </SuperButton>
<SuperButton <SuperButton
id={'hw9-button-stop'} id={'hw9-button-stop'}
disabled={!timerId} // пишут студенты disabled={!timerId} // пишут студенты // задизэйблить если таймер не запущен
onClick={stop} onClick={stop}
> >
stop stop

View File

@@ -2,12 +2,18 @@ import React from 'react'
import Clock from './Clock' import Clock from './Clock'
import s2 from '../../s1-main/App.module.css' import s2 from '../../s1-main/App.module.css'
/*
* 1 - в файле Clock.tsx дописать функции stop, start, onMouseEnter, onMouseLeave
* 2 - в файле Clock.tsx из переменной date вычислить значения stringTime, stringDate, stringDay, stringMonth
* 3 - в файле Clock.tsx дизэйблить кнопки стоп / старт если таймер не запущен / запущен соответственно
* 4 - сделать стили в соответствии с дизайном
* */
const HW9 = () => { const HW9 = () => {
return ( return (
<div id={'hw9'}> <div id={'hw9'}>
<div className={s2.hwTitle}>Homework #9</div> <div className={s2.hwTitle}>Homework #9</div>
{/*should work (должно работать)*/}
<div className={s2.hw}> <div className={s2.hw}>
<Clock /> <Clock />
</div> </div>