;
diff --git a/src/form/index.tsx b/src/form/index.tsx
index 412ebb4..9c8c79e 100644
--- a/src/form/index.tsx
+++ b/src/form/index.tsx
@@ -11,7 +11,7 @@ import {
Tooltip
} from "@material-ui/core";
import { Entity, EntitySchema, EntityStatus, Property } from "../models";
-import { ErrorMessage, Field, FieldProps } from "formik";
+import { ErrorMessage, FastField, FieldProps } from "formik";
import OpenInNewIcon from "@material-ui/icons/OpenInNew";
import Select from "./fields/Select";
@@ -31,54 +31,26 @@ import { FirebaseConfigContext } from "../contexts";
import { useClipboard } from "use-clipboard-hook";
import { useSnackbarContext } from "../snackbar_controller";
-function buildField, T = any>(name: string,
- property: P,
- includeDescription: boolean,
- component: React.ComponentType>,
- underlyingValueHasChanged: boolean,
- entitySchema: EntitySchema
-) {
-
- const additionalFieldProps: any = property.config?.fieldProps;
-
- return (
-
- {(fieldProps: FieldProps) => (
-
-
- {React.createElement(component, {
- ...fieldProps,
- ...additionalFieldProps,
- name: fieldProps.field.name,
- includeDescription,
- property,
- createFormField,
- underlyingValueHasChanged,
- entitySchema
- })}
-
- {underlyingValueHasChanged && !fieldProps.form.isSubmitting &&
-
- This value has been updated in Firestore
- }
-
- )
- }
-
- );
+export interface FormFieldProps {
+ name: string,
+ property: Property,
+ includeDescription: boolean,
+ underlyingValueHasChanged: boolean,
+ entitySchema: EntitySchema,
+ partOfArray: boolean,
}
-export function createFormField(name: string,
- property: Property,
- includeDescription: boolean,
- underlyingValueHasChanged: boolean,
- entitySchema: EntitySchema): JSX.Element {
+export function createFormField({
+ name,
+ property,
+ includeDescription,
+ underlyingValueHasChanged,
+ entitySchema,
+ partOfArray
+ }: FormFieldProps): JSX.Element {
if (property.disabled) {
- return buildField(name, property, includeDescription, DisabledField, underlyingValueHasChanged, entitySchema);
+ return buildFieldInternal(name, property, includeDescription, DisabledField, underlyingValueHasChanged, entitySchema, partOfArray);
}
let component: React.ComponentType> | undefined;
@@ -122,13 +94,55 @@ export function createFormField(name: string,
}
}
if (component)
- return buildField(name, property, includeDescription, component, underlyingValueHasChanged, entitySchema);
+ return buildFieldInternal(name, property, includeDescription, component, underlyingValueHasChanged, entitySchema, partOfArray);
return (
{`Currently the field ${property.dataType} is not supported`}
);
}
+function buildFieldInternal, T = any>(name: string,
+ property: P,
+ includeDescription: boolean,
+ component: React.ComponentType>,
+ underlyingValueHasChanged: boolean,
+ entitySchema: EntitySchema,
+ partOfArray:boolean
+) {
+
+ const additionalFieldProps: any = property.config?.fieldProps;
+
+ return (
+
+ {(fieldProps: FieldProps) => (
+
+
+ {React.createElement(component, {
+ ...fieldProps,
+ ...additionalFieldProps,
+ name: fieldProps.field.name,
+ includeDescription,
+ property,
+ createFormField,
+ underlyingValueHasChanged,
+ entitySchema,
+ partOfArray
+ })}
+
+ {underlyingValueHasChanged && !fieldProps.form.isSubmitting &&
+
+ This value has been updated in Firestore
+ }
+
+ )
+ }
+
+ );
+}
+
export function createCustomIdField(schema: EntitySchema, formType: EntityStatus, onChange: Function, error: boolean, entity: Entity | undefined) {
@@ -137,11 +151,11 @@ export function createCustomIdField(schema: EntitySchema
const hasEnumValues = typeof schema.customId === "object";
const snackbarContext = useSnackbarContext();
- const {ref, copy, cut} = useClipboard({
- onSuccess: (text) => snackbarContext.open({
+ const { ref, copy, cut } = useClipboard({
+ onSuccess: (text) => snackbarContext.open({
type: "success",
message: `Copied ${text}`
- }),
+ })
});
const inputProps = entity ? {
@@ -182,7 +196,7 @@ export function createCustomIdField(schema: EntitySchema
name: "id",
type: null,
value: entity ? entity.id : undefined,
- variant: "filled",
+ variant: "filled"
};
return (
({
message: e?.message
});
}
- history.goBack();
}
+ history.goBack();
+
})
.catch((e) => {
diff --git a/src/styles.module.css b/src/styles.module.css
index d4ba5eb..699a279 100644
--- a/src/styles.module.css
+++ b/src/styles.module.css
@@ -1,9 +1,3 @@
-/* add css module styles here (optional) */
-
-.test {
- margin: 2em;
- padding: 0.5em;
- border: 2px solid #000;
- font-size: 2em;
- text-align: center;
+body {
+ margin: 0;
}
diff --git a/yarn.lock b/yarn.lock
index 8a27398..e529aef 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2816,6 +2816,21 @@
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
+"@react-dnd/asap@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.0.tgz#b300eeed83e9801f51bd66b0337c9a6f04548651"
+ integrity sha512-0XhqJSc6pPoNnf8DhdsPHtUhRzZALVzYMTzRwV4VI6DJNJ/5xxfL9OQUwb8IH5/2x7lSf7nAZrnzUD+16VyOVQ==
+
+"@react-dnd/invariant@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@react-dnd/invariant/-/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e"
+ integrity sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==
+
+"@react-dnd/shallowequal@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a"
+ integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==
+
"@rollup/plugin-alias@^3.0.1":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.0.tgz#4f7bc9d15e030d75da9224aaa5105129c54a3ffd"
@@ -3151,6 +3166,14 @@
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.5.tgz#527d20ef68571a4af02ed74350164e7a67544860"
integrity sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==
+"@types/hoist-non-react-statics@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
+ integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
+ dependencies:
+ "@types/react" "*"
+ hoist-non-react-statics "^3.3.0"
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
@@ -5784,6 +5807,15 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
+dnd-core@^11.1.3:
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-11.1.3.tgz#f92099ba7245e49729d2433157031a6267afcc98"
+ integrity sha512-QugF55dNW+h+vzxVJ/LSJeTeUw9MCJ2cllhmVThVPEtF16ooBkxj0WBE5RB+AceFxMFo1rO6bJKXtqKl+JNnyA==
+ dependencies:
+ "@react-dnd/asap" "^4.0.0"
+ "@react-dnd/invariant" "^2.0.0"
+ redux "^4.0.4"
+
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@@ -7859,6 +7891,11 @@ immer@1.10.0:
resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d"
integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==
+immutability-helper@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7"
+ integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ==
+
import-cwd@^2.0.0, import-cwd@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -11875,6 +11912,23 @@ react-dev-utils@^10.2.1:
strip-ansi "6.0.0"
text-table "0.2.0"
+react-dnd-html5-backend@^11.1.3:
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-11.1.3.tgz#2749f04f416ec230ea193f5c1fbea2de7dffb8f7"
+ integrity sha512-/1FjNlJbW/ivkUxlxQd7o3trA5DE33QiRZgxent3zKme8DwF4Nbw3OFVhTRFGaYhHFNL1rZt6Rdj1D78BjnNLw==
+ dependencies:
+ dnd-core "^11.1.3"
+
+react-dnd@^11.1.3:
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-11.1.3.tgz#f9844f5699ccc55dfc81462c2c19f726e670c1af"
+ integrity sha512-8rtzzT8iwHgdSC89VktwhqdKKtfXaAyC4wiqp0SywpHG12TTLvfOoL6xNEIUWXwIEWu+CFfDn4GZJyynCEuHIQ==
+ dependencies:
+ "@react-dnd/shallowequal" "^2.0.0"
+ "@types/hoist-non-react-statics" "^3.3.1"
+ dnd-core "^11.1.3"
+ hoist-non-react-statics "^3.3.0"
+
react-dom@^16.13.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
@@ -12147,6 +12201,14 @@ recursive-readdir@2.2.2:
dependencies:
minimatch "3.0.4"
+redux@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
+ integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
+ dependencies:
+ loose-envify "^1.4.0"
+ symbol-observable "^1.2.0"
+
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -13497,6 +13559,11 @@ svgo@^1.0.0, svgo@^1.2.2:
unquote "~1.1.1"
util.promisify "~1.0.0"
+symbol-observable@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
symbol-tree@^3.2.2:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"