refactor: fixes and styles

This commit is contained in:
Nicola Zambello 2021-12-21 17:44:12 +01:00
parent 5107f98bd4
commit 136772b355
6 changed files with 114 additions and 20 deletions

View file

@ -12,6 +12,7 @@
"test": "tsc" "test": "tsc"
}, },
"dependencies": { "dependencies": {
"@fontsource/fira-code": "^4.5.2",
"classnames": "^2.3.1", "classnames": "^2.3.1",
"date-fns": "^2.27.0", "date-fns": "^2.27.0",
"geolib": "^3.3.3", "geolib": "^3.3.3",

View file

@ -37,15 +37,42 @@
} }
.App.alarm-set p { .App.alarm-set p {
font-size: 30vw;
font-weight: bold;
color: coral; color: coral;
opacity: 0.2;
margin: 0; margin: 0;
} }
.App.alarm-set p:hover {
.clock {
font-size: 27vw;
font-weight: bold;
display: block;
opacity: 0.2;
font-weight: 700;
font-family: 'Fira Code', monospace;
letter-spacing: -4px;
}
.clock:hover {
opacity: 0.4; opacity: 0.4;
} }
.App.alarm-playing .clock {
opacity: 1;
animation: blink 0.6s linear infinite;
}
@keyframes blink {
0% {
opacity: 1;
}
100% {
opacity: 0.4;
}
}
small {
display: inline-block;
font-family: 'Fira Code';
margin-bottom: 2rem;
opacity: 0.3;
}
.App-logo { .App-logo {
height: 40vmin; height: 40vmin;
@ -103,3 +130,15 @@ h1 {
.time-picker input:focus { .time-picker input:focus {
outline: 1px solid currentColor; outline: 1px solid currentColor;
} }
.pa-4 {
padding: 1.5rem
}
.ma-4 {
margin: 1.5rem;
}
.ml-2 {
margin-left: 0.5rem;
}

View file

@ -4,7 +4,7 @@ import { getDistance } from "geolib";
import { format, parse, differenceInMilliseconds, isMatch } from "date-fns"; import { format, parse, differenceInMilliseconds, isMatch } from "date-fns";
import useStayAwake from "use-stay-awake"; import useStayAwake from "use-stay-awake";
import { TextField, Button } from "ui-neumorphism"; import { TextField, Button, Dialog, Card } from "ui-neumorphism";
import { overrideThemeVariables } from "ui-neumorphism"; import { overrideThemeVariables } from "ui-neumorphism";
import "ui-neumorphism/dist/index.css"; import "ui-neumorphism/dist/index.css";
@ -60,6 +60,10 @@ function App() {
useEffect(() => { useEffect(() => {
if (alarmSet && distance > stopDistance) { if (alarmSet && distance > stopDistance) {
resetAlarm(); resetAlarm();
} else {
setHasWalked(false);
setAlarmPlaying(true);
audioRef.current?.play();
} }
}, [distance, alarmSet]); }, [distance, alarmSet]);
@ -68,6 +72,7 @@ function App() {
setAlarmSet(false); setAlarmSet(false);
setAlarmPlaying(false); setAlarmPlaying(false);
setAlarm(null); setAlarm(null);
audioRef.current?.pause();
if (device.canSleep) { if (device.canSleep) {
device.allowSleeping(); device.allowSleeping();
} }
@ -118,11 +123,26 @@ function App() {
? "alarm-set" ? "alarm-set"
: ""; : "";
const [clock, setClock] = useState<string>(format(new Date(), "HH:mm"));
useEffect(() => {
const interval = setInterval(() => {
if (!clock.includes(":") || alarmPlaying)
setClock(format(new Date(), "HH:mm"));
else setClock(format(new Date(), "HH mm"));
}, 1000);
return () => clearInterval(interval);
});
const [showResetModal, setResetModal] = useState(false);
return ( return (
<div className={`App theme--dark ${appState}`}> <div className={`App theme--dark ${appState}`}>
<div className="App-header"> <div className="App-header">
{alarmSet && alarm ? ( {alarmSet && alarm ? (
<p>{format(alarm, "HH:mm")}</p> <p>
<span className="clock">{clock}</span>
<small>Alarm: {format(alarm, "HH:mm")}</small>
</p>
) : ( ) : (
<> <>
<h1>Alarm clock</h1> <h1>Alarm clock</h1>
@ -183,16 +203,44 @@ function App() {
</Button> </Button>
)} )}
{alarmSet && ( {alarmSet && (
<Button <Button dark text onClick={() => setResetModal(true)}>
dark
rounded
onClick={() => {
resetAlarm();
}}
>
Reset Reset
</Button> </Button>
)} )}
<Dialog
dark
minWidth={300}
visible={showResetModal}
onClose={() => setResetModal(false)}
>
<Card className="pa-4 ma-4">
Are you sure? <br /> <br />
<Button
dark
color="var(--primary)"
rounded
onClick={() => setResetModal(false)}
>
close
</Button>
<Button
dark
rounded
onClick={() => {
resetAlarm();
setResetModal(false);
}}
className="ml-2"
>
reset
</Button>
</Card>
</Dialog>
{alarmPlaying && distance && (
<p className="distance">
Distance: {distance.toFixed(2)} / {stopDistance} meters
</p>
)}
</div> </div>
<audio src={alarmSet ? alarmMp3 : blankMp3} ref={audioRef} /> <audio src={alarmSet ? alarmMp3 : blankMp3} ref={audioRef} />
{startCoords && ( {startCoords && (

View file

@ -8,6 +8,6 @@ body {
} }
code { code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', font-family: 'Fira Code', source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace; monospace;
} }

View file

@ -1,11 +1,12 @@
import React from 'react' import React from "react";
import ReactDOM from 'react-dom' import ReactDOM from "react-dom";
import './index.css' import "./index.css";
import App from './App' import "@fontsource/fira-code/700.css";
import App from "./App";
ReactDOM.render( ReactDOM.render(
<React.StrictMode> <React.StrictMode>
<App /> <App />
</React.StrictMode>, </React.StrictMode>,
document.getElementById('root') document.getElementById("root")
) );

View file

@ -1104,6 +1104,11 @@
minimatch "^3.0.4" minimatch "^3.0.4"
strip-json-comments "^3.1.1" strip-json-comments "^3.1.1"
"@fontsource/fira-code@^4.5.2":
version "4.5.2"
resolved "https://registry.yarnpkg.com/@fontsource/fira-code/-/fira-code-4.5.2.tgz#532ef612aa15b40970e696b3546348ed49512a86"
integrity sha512-wNUvcqmm1dZYTbJlkbFZL9Huu7p+Hwaa4CLNTPql3CG90Rh9dSi43wNg5AnVHxjAhWQOGlCpSrEswnnHu1CkxA==
"@humanwhocodes/config-array@^0.9.2": "@humanwhocodes/config-array@^0.9.2":
version "0.9.2" version "0.9.2"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914"