diff --git a/src/Fields/index.tsx b/src/Fields/index.tsx new file mode 100644 index 00000000..e1e78a48 --- /dev/null +++ b/src/Fields/index.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import MailIcon from "@material-ui/icons/Mail"; +import CheckBoxIcon from "@material-ui/icons/CheckBox"; +import SimpleTextIcon from "@material-ui/icons/TextFields"; +import LongTextIcon from "@material-ui/icons/Notes"; +import PhoneIcon from "@material-ui/icons/Phone"; +import propEq from "ramda/es/propEq"; +import find from "ramda/es/find"; +export enum FieldType { + simpleText = "SIMPLE_TEXT", + longText = "LONG_TEXT", + email = "EMAIL", + PhoneNumber = "PHONE_NUMBER", + checkBox = "CHECK_BOX" +} + +export const FIELDS = [ + { icon: , name: "Simple Text", type: FieldType.simpleText }, + { icon: , name: "Long Text", type: FieldType.longText }, + { icon: , name: "Email", type: FieldType.email }, + { icon: , name: "Phone", type: FieldType.PhoneNumber }, + { icon: , name: "Check Box", type: FieldType.checkBox } +]; + +export const getFieldIcon = (type: FieldType) => { + return find(propEq("type", type))(FIELDS).icon; +}; diff --git a/src/components/ColumnDrawer.tsx b/src/components/ColumnDrawer.tsx index 583ebf18..3424a3e3 100644 --- a/src/components/ColumnDrawer.tsx +++ b/src/components/ColumnDrawer.tsx @@ -6,24 +6,13 @@ import Divider from "@material-ui/core/Divider"; import ListItem from "@material-ui/core/ListItem"; import ListItemIcon from "@material-ui/core/ListItemIcon"; import ListItemText from "@material-ui/core/ListItemText"; -import MailIcon from "@material-ui/icons/Mail"; -import CheckBoxIcon from "@material-ui/icons/CheckBox"; -import SimpleTextIcon from "@material-ui/icons/TextFields"; -import LongTextIcon from "@material-ui/icons/Notes"; + import AddIcon from "@material-ui/icons/Add"; -import PhoneIcon from "@material-ui/icons/Phone"; import IconButton from "@material-ui/core/IconButton"; import TextField from "@material-ui/core/TextField"; import _camelCase from "lodash/camelCase"; - -const FIELDS = [ - { icon: , name: "Simple Text", type: "SIMPLE_TEXT" }, - { icon: , name: "Long Text", type: "LONG_TEXT" }, - { icon: , name: "Email", type: "EMAIL" }, - { icon: , name: "Phone", type: "PHONE_NUMBER" }, - { icon: , name: "Check Box", type: "CHECK_BOX" } -]; +import { FIELDS } from "../Fields"; const useStyles = makeStyles({ list: { width: 250 diff --git a/src/components/Table.tsx b/src/components/Table.tsx index 953f234a..e33a4488 100644 --- a/src/components/Table.tsx +++ b/src/components/Table.tsx @@ -17,8 +17,8 @@ import { } from "react-virtualized"; import Button from "@material-ui/core/Button"; -import { TextField } from "@material-ui/core"; - +// import { TextField } from "@material-ui/core"; +import { FieldType, getFieldIcon } from "../Fields"; import ColumnDrawer from "./ColumnDrawer"; const styles = (theme: Theme) => @@ -96,12 +96,7 @@ class MuiVirtualizedTable extends React.PureComponent< : "left" } > - { - console.log(columnIndex); - }} - /> + {cellData} ); }; @@ -130,6 +125,7 @@ class MuiVirtualizedTable extends React.PureComponent< ) : ( @@ -198,11 +194,14 @@ export default function fTable(props: any) { (column: { fieldName: string; columnName: string; - type: string; + type: FieldType; }) => ({ width: 200, label: column.columnName, - dataKey: column.fieldName + dataKey: column.fieldName, + columnData: { + fieldType: column.type + } }) ), { diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts deleted file mode 100644 index 862d6223..00000000 --- a/src/hooks/useAuth.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { useEffect, useState } from "react"; -import { auth } from "../firebase"; - -const useAuth = () => { - const [authUser, setAuthUser] = useState( - undefined - ); - - useEffect(() => { - auth.onAuthStateChanged(user => { - setAuthUser(user); - }); - }, []); - - return authUser; -}; - -export default useAuth; diff --git a/src/hooks/useDoc.ts b/src/hooks/useDoc.ts index 10e08d05..0ef00f36 100644 --- a/src/hooks/useDoc.ts +++ b/src/hooks/useDoc.ts @@ -3,7 +3,7 @@ import { useEffect, useReducer } from "react"; export enum DocActions { update, - delete // TODO + delete // TODO when needed } const documentReducer = (prevState: any, newProps: any) => { switch (newProps.action) { diff --git a/src/hooks/useRouter.ts b/src/hooks/useRouter.ts index d0c65607..5b9c17a5 100644 --- a/src/hooks/useRouter.ts +++ b/src/hooks/useRouter.ts @@ -1,5 +1,7 @@ import { useContext } from "react"; import { __RouterContext } from "react-router"; +// used to transform routerContext into a hook +// TODO : find alternate solution as this uses an internal variable export default function useRouter() { return useContext(__RouterContext); } diff --git a/src/hooks/useSettings.ts b/src/hooks/useSettings.ts index cc33b0a1..ebae4b38 100644 --- a/src/hooks/useSettings.ts +++ b/src/hooks/useSettings.ts @@ -1,11 +1,13 @@ import { useEffect } from "react"; import useDoc, { DocActions } from "./useDoc"; +import { db } from "../firebase"; const useSettings = () => { const [settingsState, documentDispatch] = useDoc({ path: "_FIRETABLE_/settings" }); useEffect(() => { + //updates tables data on document change const { doc, tables } = settingsState; if (doc && tables !== doc.tables) { documentDispatch({ tables: doc.tables }); @@ -14,10 +16,15 @@ const useSettings = () => { const createTable = (name: string, collection: string) => { const { tables } = settingsState; + // updates the setting doc documentDispatch({ action: DocActions.update, data: { tables: [...tables, { name, collection }] } }); + //create the firetable collection doc with empty columns + db.collection(collection) + .doc("_FIRETABLE_") + .set({ columns: [] }); }; return [settingsState, createTable]; }; diff --git a/src/hooks/useTableConfig.ts b/src/hooks/useTableConfig.ts index 483bf780..cdbf9510 100644 --- a/src/hooks/useTableConfig.ts +++ b/src/hooks/useTableConfig.ts @@ -1,12 +1,6 @@ import { useEffect } from "react"; import useDoc, { DocActions } from "./useDoc"; -export enum FieldType { - simpleText = "SIMPLE_TEXT", - longText = "LONG_TEXT", - email = "EMAIL", - PhoneNumber = "PHONE_NUMBER", - checkBox = "CHECK_BOX" -} +import { FieldType } from "../Fields"; const useTableConfig = (tablePath: string) => { const [tableConfigState, documentDispatch] = useDoc({ path: `${tablePath}/_FIRETABLE_` diff --git a/src/views/TableView.tsx b/src/views/TableView.tsx index dc25eaba..9e59a051 100644 --- a/src/views/TableView.tsx +++ b/src/views/TableView.tsx @@ -16,6 +16,7 @@ export default function AuthView() { const classes = useStyles(); useEffect(() => { configActions.setTable(tableCollection); + tableDispatch({ path: tableCollection }); }, [tableCollection]); const addColumn = configActions.addColumn; return (