From 791c8f25d86606becc71c257112f6761b30925dc Mon Sep 17 00:00:00 2001 From: Shams mosowi Date: Tue, 22 Dec 2020 13:23:56 +0800 Subject: [PATCH] check for basic permissions on the home page --- www/src/hooks/useDoc.ts | 45 ++++++++++++++++++++++++----------------- www/src/pages/Home.tsx | 19 ++++++++++++++--- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/www/src/hooks/useDoc.ts b/www/src/hooks/useDoc.ts index 683a3450..ec8bb1a9 100644 --- a/www/src/hooks/useDoc.ts +++ b/www/src/hooks/useDoc.ts @@ -12,31 +12,35 @@ const documentInitialState = { doc: null, ref: null, loading: true, -}; - -const documentReducer = (prevState: any, newProps: any) => { - switch (newProps.action) { - case DocActions.clear: - return documentInitialState; - case DocActions.update: - // takes data object form the dispatcher and updates doc - - prevState.ref.set({ ...newProps.data }, { merge: true }); - - return { ...prevState, doc: { ...prevState.doc, ...newProps.data } }; - case DocActions.delete: - prevState.ref.delete(); - return null; - default: - return { ...prevState, ...newProps }; - } + error:null }; const useDoc = (initialOverrides: any) => { + const documentReducer = (prevState: any, newProps: any) => { + switch (newProps.action) { + case DocActions.clear: + return documentInitialState; + case DocActions.update: + // takes data object form the dispatcher and updates doc + + (prevState.ref?prevState.ref:db.doc(prevState.path)).set({ ...newProps.data }, { merge: true }).then((result: any) => { + }).catch((error)=>{ + console.log(error); + documentDispatch({error}) + }); + return { ...prevState, doc: { ...prevState.doc, ...newProps.data } }; + case DocActions.delete: + prevState.ref.delete(); + return null; + default: + return { ...prevState, ...newProps }; + } + }; const [documentState, documentDispatch] = useReducer(documentReducer, { ...documentInitialState, ...initialOverrides, }); + const setDocumentListner = () => { documentDispatch({ prevPath: documentState.path }); const unsubscribe = db.doc(documentState.path).onSnapshot((snapshot) => { @@ -55,6 +59,11 @@ const useDoc = (initialOverrides: any) => { loading: false, }); } + },(error)=>{ + documentDispatch({ + loading: false, + error + }); }); documentDispatch({ unsubscribe }); }; diff --git a/www/src/pages/Home.tsx b/www/src/pages/Home.tsx index 74ae246d..3695e9eb 100644 --- a/www/src/pages/Home.tsx +++ b/www/src/pages/Home.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState ,useEffect} from "react"; import _groupBy from "lodash/groupBy"; import _find from "lodash/find"; @@ -26,11 +26,11 @@ import StyledCard from "components/StyledCard"; import routes from "constants/routes"; import { useFiretableContext } from "contexts/FiretableContext"; import { useAppContext } from "contexts/AppContext"; -import { DocActions } from "hooks/useDoc"; +import useDoc,{ DocActions } from "hooks/useDoc"; import TableSettingsDialog, { TableSettingsDialogModes, } from "components/TableSettings"; - +import EmptyState from 'components/EmptyState'; const useStyles = makeStyles((theme) => createStyles({ "@global": { @@ -123,6 +123,19 @@ export default function HomePage() { const [open, setOpen] = useState(false); + + const [settingsDocState,settingsDocDispatch] = useDoc({path:'_FIRETABLE_/settings'}) + useEffect(() => { + if(!settingsDocState.loading && !settingsDocState.doc){ + settingsDocDispatch({action:DocActions.update,data:{createdAt:new Date()}}); + } + },[settingsDocState]) + if (settingsDocState.error?.code === "permission-denied") { + return You don't current have access to firetable, please contact this project's owner + If you are the project owner please follow the instructions here to setup the project rules. + }/> + } + const TableCard = ({ table }) => { const checked = Boolean(_find(favs, table)); return (