diff --git a/www/package.json b/www/package.json index 792fec89..dce75d4e 100644 --- a/www/package.json +++ b/www/package.json @@ -51,6 +51,7 @@ "react-div-100vh": "^0.3.8", "react-dom": "^16.9.0", "react-dropzone": "^10.1.8", + "react-hook-form": "^6.0.6", "react-json-view": "^1.19.1", "react-router-dom": "^5.0.1", "react-scripts": "^3.3.0", diff --git a/www/src/components/SideDrawer/Form/Fields/Text.tsx b/www/src/components/SideDrawer/Form/Fields/Text.tsx index 04bf34e0..49999a5a 100644 --- a/www/src/components/SideDrawer/Form/Fields/Text.tsx +++ b/www/src/components/SideDrawer/Form/Fields/Text.tsx @@ -1,7 +1,11 @@ import React from "react"; -import { makeStyles, createStyles } from "@material-ui/core"; -import { TextField, TextFieldProps } from "formik-material-ui"; +import { + makeStyles, + createStyles, + TextField, + FilledTextFieldProps, +} from "@material-ui/core"; const useStyles = makeStyles(theme => createStyles({ @@ -9,7 +13,7 @@ const useStyles = makeStyles(theme => }) ); -export interface ITextProps extends TextFieldProps { +export interface ITextProps extends Omit { fieldVariant?: "short" | "long" | "email" | "phone" | "number" | "url"; } @@ -27,7 +31,10 @@ export default function Text({ fieldVariant = "short", ...props }: ITextProps) { break; case "email": - variantProps = { type: "email", inputProps: { autoComplete: "email" } }; + variantProps = { + // type: "email", + inputProps: { autoComplete: "email" }, + }; break; case "phone": @@ -45,14 +52,14 @@ export default function Text({ fieldVariant = "short", ...props }: ITextProps) { } return ( { + console.log("SUBMIT", data); + }; + + // const watchAllFields = watch(); + + // useEffect(() => {console.log(watchAllFields)}, [watchAllFields]); + + // const { sideDrawerRef } = useFiretableContext(); // useEffect(() => { // const column = sideDrawerRef?.current?.cell?.column; // if (!column) return; @@ -159,15 +173,203 @@ export default function Form({ fields, values }: IFormProps) { return ( - { - // Mark as submitted. We use Autosave instead. - actions.setSubmitting(false); - }} +
{ + // // Mark as submitted. We use Autosave instead. + // actions.setSubmitting(false); + // }} > - {({ values, errors }) => ( + + + + + + {fields.map((_field, i) => { + // Call the field function with values if necessary + // Otherwise, just use the field object + const field: Field = _isFunction(_field) ? _field(values) : _field; + const { type, ...fieldProps } = field; + let _type = type; + if (field.config && field.config.renderFieldType) { + _type = field.config.renderFieldType; + } + // TODO: handle get initial field value for when a field is later + // shown to prevent uncontrolled components becoming controlled + + let renderedField: React.ReactNode = null; + + switch (_type) { + case FieldType.shortText: + case FieldType.longText: + case FieldType.email: + case FieldType.phone: + case FieldType.number: + renderedField = ( + + ); + break; + + // case FieldType.url: + // renderedField = ( + // + // ); + // break; + + // case FieldType.percentage: + // renderedField = ( + // + // ); + // break; + + // case FieldType.singleSelect: + // renderedField = ( + // + // ); + // break; + + // case FieldType.multiSelect: + // renderedField = ( + // + // ); + // break; + + // case FieldType.date: + // renderedField = ( + // + // ); + // break; + + // case FieldType.dateTime: + // renderedField = ( + // + // ); + // break; + + // case FieldType.checkbox: + // renderedField = ( + // + // ); + // break; + + // case FieldType.color: + // renderedField = ; + // break; + + // case FieldType.slider: + // renderedField = ( + // + // ); + // break; + + // case FieldType.richText: + // renderedField = ( + // + // ); + // break; + + // case FieldType.image: + // renderedField = ( + // + // ); + // break; + + // case FieldType.file: + // renderedField = ( + // + // ); + // break; + + // case FieldType.rating: + // renderedField = ( + // + // ); + // break; + + // case FieldType.connectTable: + // renderedField = ( + // + // ); + // break; + + // case FieldType.subTable: + // renderedField = ( + // + // ); + // break; + + // case FieldType.action: + // renderedField = ( + // + // ); + // break; + + // case FieldType.json: + // renderedField = ( + // + // ); + // break; + // case FieldType.code: + // renderedField = ; + // break; + case undefined: + default: + return null; + + // default: + // break; + } + + return ( + + {renderedField} + + ); + })} + + + + + {/* {({ values, errors }) => ( @@ -357,7 +559,13 @@ export default function Form({ fields, values }: IFormProps) { )} -
+ */}
); } + +function AutosaveTwo({ control }: any) { + const watchAll = useWatch({ control }); + console.log(watchAll); + return <>autosave2; +} diff --git a/www/yarn.lock b/www/yarn.lock index a8d3dbaf..c4a44b95 100644 --- a/www/yarn.lock +++ b/www/yarn.lock @@ -11946,6 +11946,11 @@ react-fast-compare@^2.0.1: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== +react-hook-form@^6.0.6: + version "6.0.6" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-6.0.6.tgz#72ac1668aeaddfd642bcfb324cebe1ba237fb13e" + integrity sha512-qxWhV++1V7SKKlr2hHFsessGwATCdexgVsByxOHltDyO9F0VWB1WN4ZvxnKuHTVGwjj6CLZo0mL+Hgy0QH1sAw== + react-input-autosize@^2.1.2: version "2.2.2" resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2"