diff --git a/.gitignore b/.gitignore index 2e90540..cfc9619 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /graphics +.DS_Store diff --git a/crabfit-backend/index.js b/crabfit-backend/index.js index f79daea..91b2c0b 100644 --- a/crabfit-backend/index.js +++ b/crabfit-backend/index.js @@ -27,6 +27,10 @@ const datastore = new Datastore({ app.use(express.json()); app.use((req, res, next) => { req.datastore = datastore; + req.types = { + event: process.env.NODE_ENV === 'production' ? 'Event' : 'DevEvent', + person: process.env.NODE_ENV === 'production' ? 'Person' : 'DevPerson', + }; next(); }); app.options('*', cors(corsOptions)); @@ -43,5 +47,5 @@ app.post('/event/:eventId/people/:personName', login); app.patch('/event/:eventId/people/:personName', updatePerson); app.listen(port, () => { - console.log(`Crabfit API listening at http://localhost:${port}`) + console.log(`Crabfit API listening at http://localhost:${port} in ${process.env.NODE_ENV === 'production' ? 'prod' : 'dev'} mode`) }); diff --git a/crabfit-backend/package.json b/crabfit-backend/package.json index c87703f..885330d 100644 --- a/crabfit-backend/package.json +++ b/crabfit-backend/package.json @@ -1,6 +1,6 @@ { "name": "crabfit-backend", - "version": "1.0.0", + "version": "1.1.0", "description": "API for Crabfit", "main": "index.js", "author": "Ben Grant", diff --git a/crabfit-backend/routes/createEvent.js b/crabfit-backend/routes/createEvent.js index ef821ff..4e54479 100644 --- a/crabfit-backend/routes/createEvent.js +++ b/crabfit-backend/routes/createEvent.js @@ -24,7 +24,7 @@ module.exports = async (req, res) => { const currentTime = dayjs().unix(); const entity = { - key: req.datastore.key(['Event', eventId]), + key: req.datastore.key([req.types.event, eventId]), data: { name: name, created: currentTime, diff --git a/crabfit-backend/routes/createPerson.js b/crabfit-backend/routes/createPerson.js index b118ac9..81846d3 100644 --- a/crabfit-backend/routes/createPerson.js +++ b/crabfit-backend/routes/createPerson.js @@ -6,8 +6,8 @@ module.exports = async (req, res) => { const { person } = req.body; try { - const event = (await req.datastore.get(req.datastore.key(['Event', eventId])))[0]; - const query = req.datastore.createQuery('Person') + const event = (await req.datastore.get(req.datastore.key([req.types.event, eventId])))[0]; + const query = req.datastore.createQuery(req.types.person) .filter('eventId', eventId) .filter('name', person.name); let personResult = (await req.datastore.runQuery(query))[0][0]; @@ -23,7 +23,7 @@ module.exports = async (req, res) => { } const entity = { - key: req.datastore.key('Person'), + key: req.datastore.key(req.types.person), data: { name: person.name.trim(), password: hash, diff --git a/crabfit-backend/routes/getEvent.js b/crabfit-backend/routes/getEvent.js index 1c98c23..b3a464d 100644 --- a/crabfit-backend/routes/getEvent.js +++ b/crabfit-backend/routes/getEvent.js @@ -2,7 +2,7 @@ module.exports = async (req, res) => { const { eventId } = req.params; try { - const event = (await req.datastore.get(req.datastore.key(['Event', eventId])))[0]; + const event = (await req.datastore.get(req.datastore.key([req.types.event, eventId])))[0]; if (event) { res.send({ diff --git a/crabfit-backend/routes/getPeople.js b/crabfit-backend/routes/getPeople.js index fbc3f72..e157a55 100644 --- a/crabfit-backend/routes/getPeople.js +++ b/crabfit-backend/routes/getPeople.js @@ -2,7 +2,7 @@ module.exports = async (req, res) => { const { eventId } = req.params; try { - const query = req.datastore.createQuery('Person').filter('eventId', eventId); + const query = req.datastore.createQuery(req.types.person).filter('eventId', eventId); let people = (await req.datastore.runQuery(query))[0]; people = people.map(person => ({ name: person.name, diff --git a/crabfit-backend/routes/login.js b/crabfit-backend/routes/login.js index 73a1d4c..d8d15e8 100644 --- a/crabfit-backend/routes/login.js +++ b/crabfit-backend/routes/login.js @@ -5,7 +5,7 @@ module.exports = async (req, res) => { const { person } = req.body; try { - const query = req.datastore.createQuery('Person') + const query = req.datastore.createQuery(req.types.person) .filter('eventId', eventId) .filter('name', personName); let personResult = (await req.datastore.runQuery(query))[0][0]; diff --git a/crabfit-backend/routes/stats.js b/crabfit-backend/routes/stats.js index 921adf6..35d405a 100644 --- a/crabfit-backend/routes/stats.js +++ b/crabfit-backend/routes/stats.js @@ -5,8 +5,8 @@ module.exports = async (req, res) => { let personCount = null; try { - const eventQuery = req.datastore.createQuery(['__Stat_Kind__']).filter('kind_name', 'Event'); - const personQuery = req.datastore.createQuery(['__Stat_Kind__']).filter('kind_name', 'Person'); + const eventQuery = req.datastore.createQuery(['__Stat_Kind__']).filter('kind_name', req.types.event); + const personQuery = req.datastore.createQuery(['__Stat_Kind__']).filter('kind_name', req.types.person); eventCount = (await req.datastore.runQuery(eventQuery))[0][0].count; personCount = (await req.datastore.runQuery(personQuery))[0][0].count; diff --git a/crabfit-backend/routes/updatePerson.js b/crabfit-backend/routes/updatePerson.js index 2d539b4..2a63a92 100644 --- a/crabfit-backend/routes/updatePerson.js +++ b/crabfit-backend/routes/updatePerson.js @@ -5,7 +5,7 @@ module.exports = async (req, res) => { const { person } = req.body; try { - const query = req.datastore.createQuery('Person') + const query = req.datastore.createQuery(req.types.person) .filter('eventId', eventId) .filter('name', personName); let personResult = (await req.datastore.runQuery(query))[0][0]; diff --git a/crabfit-frontend/package.json b/crabfit-frontend/package.json index 15dbfc0..30ab620 100644 --- a/crabfit-frontend/package.json +++ b/crabfit-frontend/package.json @@ -1,6 +1,6 @@ { "name": "crabfit-frontend", - "version": "0.1.0", + "version": "1.0.0", "private": true, "dependencies": { "@emotion/react": "^11.1.5", diff --git a/crabfit-frontend/src/App.tsx b/crabfit-frontend/src/App.tsx index e7fd787..de2c8b5 100644 --- a/crabfit-frontend/src/App.tsx +++ b/crabfit-frontend/src/App.tsx @@ -1,4 +1,4 @@ -import { useState, Suspense, lazy } from 'react'; +import { useState, useEffect, Suspense, lazy } from 'react'; import { BrowserRouter, Switch, @@ -8,16 +8,22 @@ import { ThemeProvider, Global } from '@emotion/react'; import { Settings, Loading } from 'components'; +import { useSettingsStore } from 'stores'; import theme from 'theme'; const Home = lazy(() => import('pages/Home/Home')); const Event = lazy(() => import('pages/Event/Event')); const App = () => { + const colortheme = useSettingsStore(state => state.theme); const darkQuery = window.matchMedia('(prefers-color-scheme: dark)'); const [isDark, setIsDark] = useState(darkQuery.matches); - darkQuery.addListener(e => setIsDark(e.matches)); + darkQuery.addListener(e => colortheme === 'System' && setIsDark(e.matches)); + + useEffect(() => { + setIsDark(colortheme === 'System' ? darkQuery.matches : colortheme === 'Dark'); + }, [colortheme, darkQuery.matches]); return ( diff --git a/crabfit-frontend/src/components/Donate/Donate.tsx b/crabfit-frontend/src/components/Donate/Donate.tsx index a800521..8843abe 100644 --- a/crabfit-frontend/src/components/Donate/Donate.tsx +++ b/crabfit-frontend/src/components/Donate/Donate.tsx @@ -2,7 +2,7 @@ import { Button } from 'components'; const Donate = () => (
- + gtag('event', 'donate', { 'event_category': 'donate' })} href="https://www.paypal.com/donate?business=N89X6YXRT5HKW&item_name=Crab+Fit+Donation¤cy_code=AUD" target="_blank" rel="noreferrer">