{"version":3,"file":"ActionForm.mjs","names":["React","useMemo","makeStyles","Typography","Form","FormButtons","SubmitButton","getPrimaryKeyValues","useCrudActions","CardinalityTypeEnums","PropTypes","useStyles","theme","root","marginTop","spacing","body","actions","marginBottom","display","flexDirection","title","flexGrow","divider","subject","marginLeft","switchRoot","input","height","padding","formTextInput","fontSize","labelRoot","ActionForm","props","$","_c","entityAttributes","foreignKeyData","onCreate","closeSideSheet","onUpdate","crudTableEditionData","crudTableFormData","udpFieldInfos","classes","renderInputByFieldType","t0","primaryKeyValues","t1","bb0","length","t2","Symbol","for","mtmPropertyList","Set","forEach","attr","extendedProperties","childEntity","Object","keys","childEntityAssoc","Cardinality","Many_To_Many","Keys","value","i","name","split","add","toLowerCase","manyToManyPropertyList","values","newTableData","filter","_temp","ea_0","ea","fkd","key","fieldName","data","find","d","id","isNewRow","handleSubmit","isNewEntry","t3","map","schemaAttribute","index","fieldInfo","fi","isPrimaryKey","disabled","isIdentity","identifier","friendlyName","t4","t5","t6","propTypes","array","func"],"sources":["../../src/actions/ActionForm.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { Form, FormButtons, SubmitButton } from '../utilities/form';\nimport { getPrimaryKeyValues } from '../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { useCrudActions } from '../hooks/crudActions';\nimport { CardinalityTypeEnums } from '../enums/unitySystemEnums';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    marginTop: theme.spacing(-2)\n  },\n  body: {\n    marginTop: theme.spacing(2)\n  },\n  actions: {\n    marginTop: theme.spacing(2),\n    marginBottom: theme.spacing(2),\n    display: 'flex',\n    flexDirection: 'row'\n  },\n  title: {\n    flexGrow: 1\n  },\n  divider: {\n    marginTop: theme.spacing(2)\n  },\n  subject: {\n    marginLeft: theme.spacing(1),\n    display: 'flex',\n    flexDirection: 'row',\n    flexGrow: 1\n  },\n  switchRoot: {\n    marginLeft: theme.spacing(1)\n  },\n  input: {\n    height: 34,\n    padding: 0\n  },\n  formTextInput: {\n    fontSize: 13\n  },\n  labelRoot: {\n    fontSize: 13\n  }\n}));\n\nexport const ActionForm = (props) => {\n  const {\n    entityAttributes,\n    foreignKeyData,\n    onCreate,\n    closeSideSheet,\n    onUpdate,\n    crudTableEditionData,\n    crudTableFormData,\n    udpFieldInfos\n  } = props;\n  const classes = useStyles();\n\n  const { renderInputByFieldType } = useCrudActions();\n\n  const primaryKeyValues = useMemo(\n    () => getPrimaryKeyValues(entityAttributes, crudTableEditionData),\n    [entityAttributes, crudTableEditionData]\n  );\n\n  // we'll need this to determine which property names are used as keys for many-to-many\n  const manyToManyPropertyList = useMemo(() => {\n    if (!entityAttributes?.length) return [];\n    const mtmPropertyList = new Set();\n    entityAttributes.forEach((attr) => {\n      if (attr?.extendedProperties?.childEntity) {\n        Object.keys(attr.extendedProperties.childEntityAssoc || {}).length &&\n          attr.extendedProperties.childEntityAssoc.Cardinality ===\n            CardinalityTypeEnums.Many_To_Many &&\n          attr.extendedProperties.childEntityAssoc.Keys.forEach((value, i) => {\n            const name = value.split(',')[0];\n            if (name) {\n              // check name string: if 1 word, lowercase. if 2 words, lower first char\n              mtmPropertyList.add(name.toLowerCase());\n            }\n          });\n      }\n    });\n    return mtmPropertyList;\n  }, [entityAttributes]);\n\n  const handleSubmit = async (values) => {\n    let newTableData = {\n      ...crudTableFormData,\n      ...values\n    };\n\n    // remove identifiers from object\n    entityAttributes\n      .filter((ea) => ea?.extendedProperties?.identifier)\n      .forEach((ea) => {\n        delete newTableData[ea.name];\n      });\n\n    // transform values by fkData before creating/updating\n    foreignKeyData.forEach((fkd) => {\n      Object.keys(newTableData).forEach((key) => {\n        if (key === fkd.fieldName) {\n          newTableData[key] = fkd.data.find(\n            (d) => d.id === newTableData[key].id\n          )?.id;\n        }\n      });\n    });\n\n    const isNewRow = !crudTableEditionData;\n\n    if (isNewRow) {\n      onCreate && (await onCreate(newTableData));\n    } else {\n      onUpdate && (await onUpdate(newTableData, primaryKeyValues));\n    }\n    closeSideSheet && closeSideSheet();\n  };\n\n  const isNewEntry = useMemo(\n    () => !crudTableEditionData,\n    [crudTableEditionData]\n  );\n\n  return (\n    <Form onSubmit={handleSubmit}>\n      <div>\n        {entityAttributes?.map((schemaAttribute, index) => {\n          const fieldInfo = udpFieldInfos?.find(\n            (fi) =>\n              fi?.name.toLowerCase() === schemaAttribute?.name?.toLowerCase()\n          );\n          // If the field is an identity and is Updating form, we will make the field readOnly\n          if (fieldInfo?.isPrimaryKey && !isNewEntry) {\n            schemaAttribute.disabled = true;\n          }\n          if (fieldInfo?.isPrimaryKey && isNewEntry && !fieldInfo?.isIdentity) {\n            schemaAttribute.disabled = false;\n          }\n          return (\n            !schemaAttribute?.extendedProperties?.identifier && (\n              <React.Fragment key={`${schemaAttribute.name}-${index}`}>\n                <Typography variant='subtitle2' style={{ marginTop: 8 }}>\n                  {schemaAttribute.friendlyName}\n                </Typography>\n                {renderInputByFieldType(\n                  schemaAttribute,\n                  index,\n                  entityAttributes,\n                  fieldInfo,\n                  foreignKeyData,\n                  null,\n                  crudTableFormData,\n                  classes,\n                  false,\n                  null,\n                  manyToManyPropertyList\n                )}\n              </React.Fragment>\n            )\n          );\n        })}\n      </div>\n\n      <FormButtons>\n        <SubmitButton\n          variant='contained'\n          color='secondary'\n          disablePristine={false}\n          disabled={false}\n          style={{ marginTop: 15 }}\n        >\n          Save\n        </SubmitButton>\n      </FormButtons>\n    </Form>\n  );\n};\n\nActionForm.propTypes = {\n  /**\n   * Entity attributes for selected entity within catalog\n   */\n  entityAttributes: PropTypes.array,\n  /**\n   * Foreign key data for selected entity within catalog\n   */\n  foreignKeyData: PropTypes.array,\n  /**\n   * Entity data\n   */\n  crudTableEditionData: PropTypes.array,\n  /**\n   * onClick event for closing sidesheet\n   */\n  closeSideSheet: PropTypes.func,\n  /**\n   * onClick event for creating\n   */\n  onCreate: PropTypes.func,\n  /**\n   * onClick event for updating\n   */\n  onUpdate: PropTypes.func\n};\n"],"mappings":"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"}