Skip to content
This repository was archived by the owner on Sep 20, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 138 additions & 1 deletion build/index.html
Original file line number Diff line number Diff line change
@@ -1 +1,138 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"/><link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"/><title>CODEZILLA hours</title><link href="/static/css/main.c6592230.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],f=r[2],p=0,s=[];p<i.length;p++)l=i[p],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(c&&c(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this["webpackJsonpcodezilla-hours"]=this["webpackJsonpcodezilla-hours"]||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var f=0;f<i.length;f++)r(i[f]);var c=a;t()}([])</script><script src="/static/js/2.0744c8ea.chunk.js"></script><script src="/static/js/main.90912754.chunk.js"></script></body></html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="/logo192.png" />
<link rel="manifest" href="/manifest.json" />
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/icon?family=Material+Icons"
/>
<title>CODEZILLA hours</title>
<link href="/static/css/main.c6592230.chunk.css" rel="stylesheet" />
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script>
!(function (e) {
function r(r) {
for (
var n, l, i = r[0], a = r[1], f = r[2], p = 0, s = [];
p < i.length;
p++
)
(l = i[p]),
Object.prototype.hasOwnProperty.call(o, l) &&
o[l] &&
s.push(o[l][0]),
(o[l] = 0);
for (n in a)
Object.prototype.hasOwnProperty.call(a, n) &&
(e[n] = a[n]);
for (c && c(r); s.length; ) s.shift()();
return u.push.apply(u, f || []), t();
}
function t() {
for (var e, r = 0; r < u.length; r++) {
for (var t = u[r], n = !0, i = 1; i < t.length; i++) {
var a = t[i];
0 !== o[a] && (n = !1);
}
n && (u.splice(r--, 1), (e = l((l.s = t[0]))));
}
return e;
}
var n = {},
o = { 1: 0 },
u = [];
function l(r) {
if (n[r]) return n[r].exports;
var t = (n[r] = { i: r, l: !1, exports: {} });
return (
e[r].call(t.exports, t, t.exports, l),
(t.l = !0),
t.exports
);
}
(l.m = e),
(l.c = n),
(l.d = function (e, r, t) {
l.o(e, r) ||
Object.defineProperty(e, r, {
enumerable: !0,
get: t,
});
}),
(l.r = function (e) {
"undefined" != typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, {
value: "Module",
}),
Object.defineProperty(e, "__esModule", {
value: !0,
});
}),
(l.t = function (e, r) {
if ((1 & r && (e = l(e)), 8 & r)) return e;
if (4 & r && "object" == typeof e && e && e.__esModule)
return e;
var t = Object.create(null);
if (
(l.r(t),
Object.defineProperty(t, "default", {
enumerable: !0,
value: e,
}),
2 & r && "string" != typeof e)
)
for (var n in e)
l.d(
t,
n,
function (r) {
return e[r];
}.bind(null, n),
);
return t;
}),
(l.n = function (e) {
var r =
e && e.__esModule
? function () {
return e.default;
}
: function () {
return e;
};
return l.d(r, "a", r), r;
}),
(l.o = function (e, r) {
return Object.prototype.hasOwnProperty.call(e, r);
}),
(l.p = "/");
var i = (this["webpackJsonpcodezilla-hours"] =
this["webpackJsonpcodezilla-hours"] || []),
a = i.push.bind(i);
(i.push = r), (i = i.slice());
for (var f = 0; f < i.length; f++) r(i[f]);
var c = a;
t();
})([]);
</script>
<script src="/static/js/2.0744c8ea.chunk.js"></script>
<script src="/static/js/main.e5730233.chunk.js"></script>
</body>
</html>
215 changes: 88 additions & 127 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
import React from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import { CssBaseline, Snackbar, Typography } from "@material-ui/core";
import { CssBaseline, Snackbar } from "@material-ui/core";

import {
makeStyles,
ThemeProvider,
createMuiTheme,
} from "@material-ui/core/styles";
import { ThemeProvider, createMuiTheme } from "@material-ui/core/styles";

import firebase from "./firebase/firebase.component";

Expand All @@ -18,6 +14,9 @@ import HoursContainer from "./hours/hours-container/HoursContainer.component";
import PreLoad from "./navigation/pre-load/preLoad.component";
import Admin from "./admin/Admin.component";
import AdminDetail from "./admin/detail/Detail.component";
import Settings from "./settings/Settings.component";

import Profile from "./firebase/data/Profile";

require("dotenv").config();

Expand All @@ -32,31 +31,7 @@ const theme = createMuiTheme({
},
});

const useStyles = makeStyles((theme) => ({
root: {},
menuButton: {
marginRight: 36,
},
hide: {
display: "none",
},
toolbar: {
display: "flex",
alignItems: "center",
justifyContent: "center",
padding: theme.spacing(0, 1),
...theme.mixins.toolbar,
},
content: {
flexGrow: 1,
},
title: {
margin: theme.spacing(1, 1),
},
}));

export default function App() {
const classes = useStyles();
const [profile, setProfile] = React.useState<IProfile>({
displayName: "",
email: "",
Expand Down Expand Up @@ -111,26 +86,31 @@ export default function App() {
}, []);

const fetchProfile = async (user: IUser) => {
const db = firebase.firestore();
const snapshot = await db.collection("profile").get();
const response = snapshot.docs.find((doc) => {
return doc.data().microsoftId === user.uid;
});

if (!response) {
createNewProfile(user);
return;
}

const data = response.data();
setProfile({
id: response.id,
isAdmin: Boolean(data.isAdmin),
displayName: data.displayName,
email: data.email,
microsoftId: data.microsoftId,
});
setIsLoading(false);
Profile.getProfile(user.uid)
.then((response) => {
if (response && response?.docs.length > 0) {
const doc = response.docs[0];
const data = doc.data();
if (data) {
setProfile({
displayName: data.displayName,
email: data.email,
id: doc.id,
isAdmin: Boolean(data.isAdmin),
microsoftId: data.microsoftId,
});
setIsLoading(false);
}
} else {
createNewProfile(user);
}
})
.catch((error) => {
notification(
"Het is niet gelukt een profiel op te halen: " + error,
);
setIsLoading(false);
});
};

const createNewProfile = (user: IUser) => {
Expand All @@ -156,88 +136,69 @@ export default function App() {

return (
<ThemeProvider theme={theme}>
<div className={classes.root}>
{isLoading ? (
<PreLoad />
) : (
<Router>
<CssBaseline />
<Header profile={profile} />
<Switch>
<Route
path="/"
exact
component={() => (
<HoursContainer
profile={profile}
type="month"
notification={notification}
/>
)}
/>
<Route path="/template">
<TemplateHeader classes={classes} />
{isLoading ? (
<PreLoad />
) : (
<Router>
<CssBaseline />
<Header profile={profile} />
<Switch>
<Route
path="/"
exact
component={() => (
<HoursContainer
type="template"
profile={profile}
type="month"
notification={notification}
/>
</Route>
{profile.isAdmin && (
<>
<Route
path="/admin"
exact
component={() => (
<Admin
notification={notification}
/>
)}
/>
<Route
path="/admin/detail/:id"
component={() => (
<AdminDetail
notification={notification}
/>
)}
/>
</>
)}
</Switch>
<Snackbar
open={notificationMessage !== ""}
autoHideDuration={6000}
onClose={closeNotification}
message={notificationMessage}
anchorOrigin={{
vertical: "bottom",
horizontal: "right",
}}
></Snackbar>
</Router>
)}

<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-app.js"></script>

<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-analytics.js"></script>

<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-firestore.js"></script>
</div>
/>
<Route path="/settings">
<Settings
profile={profile}
notification={notification}
/>
</Route>
{profile.isAdmin && (
<>
<Route
path="/admin"
exact
component={() => (
<Admin notification={notification} />
)}
/>
<Route
path="/admin/detail/:id"
component={() => (
<AdminDetail
notification={notification}
/>
)}
/>
</>
)}
</Switch>
<Snackbar
open={notificationMessage !== ""}
autoHideDuration={6000}
onClose={closeNotification}
message={notificationMessage}
anchorOrigin={{
vertical: "bottom",
horizontal: "right",
}}
></Snackbar>
</Router>
)}

<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-app.js"></script>

<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-analytics.js"></script>

<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-firestore.js"></script>
</ThemeProvider>
);
}

const TemplateHeader = ({ classes }: { classes: any }) => (
<>
<Typography variant="body1" className={classes.title}>
Maak hier een template voor je gemiddelde werkweek. Pas het template
toe op de hele urenstaat met een klik op de knop.
</Typography>

<Typography variant="body2" className={classes.title}>
Uren die je al hebt ingevuld worden niet overschreven.
</Typography>
</>
);
Loading