potty-chart/src/App.tsx

70 lines
1.9 KiB
TypeScript
Raw Permalink Normal View History

import React from 'react';
2023-01-17 23:37:29 +00:00
import LoginForm from './LoginForm';
import ScoreCounter from './ScoreCounter';
2023-01-18 21:10:26 +00:00
import Row from './Row';
2023-01-17 23:37:29 +00:00
import { useJSONLocalStorage, useLocalStorage } from './hooks/useLocalStorage';
import {toot, starman, flush} from './sound';
import {supabase} from './api';
import {User} from '@supabase/supabase-js';
2023-01-18 16:19:30 +00:00
import './App.css';
2023-01-17 23:37:29 +00:00
interface Stats {
attempts: number;
scheduledPoops: number;
selfPoops: number;
cleanUndies: number;
};
const initialStats:Stats = {
2023-01-19 06:13:12 +00:00
attempts: 0,
scheduledPoops: 0,
selfPoops: 0,
cleanUndies: 0,
2023-01-18 21:10:26 +00:00
};
const initialStreakTracker:StreakTracker = {
2023-01-17 23:37:29 +00:00
streaks: [0,0,0,0],
currentStreakSince: Date.now()
2023-01-18 21:10:26 +00:00
}
2023-01-17 23:37:29 +00:00
function App() {
2023-01-17 23:37:29 +00:00
const [stats, setStats] = useJSONLocalStorage<Stats>("stats", initialStats);
const [user, setUser] = React.useState<User | undefined>();
const [loading, setLoading] = React.useState<boolean>(true);
React.useEffect(() => {
supabase.auth.getUser().then(res => {
if(res.data.user) {
setUser(res.data.user);
}
setLoading(false);
if(res.error) {
console.error(res.error);
}
});
}, []);
2023-01-17 23:37:29 +00:00
return loading ? <></> : !user ? <LoginForm setUser={setUser}/> : (
<div className="App">
2023-01-18 16:19:30 +00:00
<div className="header">
<div className="name-plate">Hello Pax!</div>
<div className="score-board">
Points: <ScoreCounter stats={stats}/>
</div>
2023-01-17 23:37:29 +00:00
</div>
2023-01-18 21:10:26 +00:00
<Row stats={stats} setStats={setStats} name="attempts" emoji="🚽" sound={flush} />
<Row stats={stats} setStats={setStats} name="scheduledPoops" emoji="💩" sound={toot} />
<Row stats={stats} setStats={setStats} name="selfPoops" emoji="💩" sound={toot} />
<Row stats={stats} setStats={setStats} name="cleanUndies" emoji="🩲" sound={starman} />
2023-01-17 23:37:29 +00:00
<div className="streak-counter"></div>
</div>
);
}
export default App;