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 (