/* * QQQ - Low-code Application Framework for Engineers. * Copyright (C) 2021-2022. Kingsrook, LLC * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States * contact@kingsrook.com * https://github.com/Kingsrook/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import {QFieldMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QFieldMetaData"; import {QFieldType} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QFieldType"; import {QRecord} from "@kingsrook/qqq-frontend-core/lib/model/QRecord"; import {colors, Icon, InputLabel} from "@mui/material"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import Grid from "@mui/material/Grid"; import Tooltip from "@mui/material/Tooltip"; import {useFormikContext} from "formik"; import React, {useState} from "react"; import QDynamicFormField from "qqq/components/forms/DynamicFormField"; import DynamicSelect from "qqq/components/forms/DynamicSelect"; import MDTypography from "qqq/components/legacy/MDTypography"; import HelpContent from "qqq/components/misc/HelpContent"; import ValueUtils from "qqq/utils/qqq/ValueUtils"; interface Props { formLabel?: string; formData: any; bulkEditMode?: boolean; bulkEditSwitchChangeHandler?: any; record?: QRecord; helpRoles?: string[]; helpContentKeyPrefix?: string; } function QDynamicForm({formData, formLabel, bulkEditMode, bulkEditSwitchChangeHandler, record, helpRoles, helpContentKeyPrefix}: Props): JSX.Element { const {formFields, values, errors, touched} = formData; const formikProps = useFormikContext(); const [fileName, setFileName] = useState(null as string); const fileChanged = (event: React.FormEvent, field: any) => { setFileName(null); if (event.currentTarget.files && event.currentTarget.files[0]) { setFileName(event.currentTarget.files[0].name); } formikProps.setFieldValue(field.name, event.currentTarget.files[0]); }; const removeFile = (fieldName: string) => { setFileName(null); formikProps.setFieldValue(fieldName, null); record?.values.delete(fieldName) record?.displayValues.delete(fieldName) }; const bulkEditSwitchChanged = (name: string, value: boolean) => { bulkEditSwitchChangeHandler(name, value); }; return ( {formLabel} {/* TODO - help text Mandatory information */} {formFields && Object.keys(formFields).length > 0 && Object.keys(formFields).map((fieldName: any) => { const field = formFields[fieldName]; if (field.omitFromQDynamicForm) { return null; } if (values[fieldName] === undefined) { values[fieldName] = ""; } let formattedHelpContent = ; if(formattedHelpContent) { formattedHelpContent = {formattedHelpContent} } const labelElement = if (field.type === "file") { const pseudoField = new QFieldMetaData({name: fieldName, type: QFieldType.BLOB}); return ( {labelElement} { record && record.values.get(fieldName) && Current File: {ValueUtils.getDisplayValue(pseudoField, record, "view")} removeFile(fieldName)}>delete } {fileName} {errors[fieldName] && You must select a file to proceed} ); } // possible values!! if (field.possibleValueProps) { const otherValuesMap = field.possibleValueProps.otherValues ?? new Map(); Object.keys(values).forEach((key) => { otherValuesMap.set(key, values[key]); }) return ( {labelElement} {formattedHelpContent} ); } // todo? inputProps={{ autoComplete: "" }} // todo? placeholder={password.placeholder} return ( {labelElement} {formattedHelpContent} ); })} ); } QDynamicForm.defaultProps = { formLabel: undefined, bulkEditMode: false, helpRoles: ["ALL_SCREENS"], bulkEditSwitchChangeHandler: () => { }, }; export default QDynamicForm;