{"version":3,"file":"CrudForm.mjs","names":["makeStyles","Typography","PropTypes","React","useMemo","useState","useCallback","useEffect","Form","FormButtons","SubmitButton","useCrudActions","toLowerFirstChar","useDefaultFormValues","getPathObject","getPrimaryKeyValues","CardinalityTypeEnums","EntityAttributeEnums","UdpEnums","UdpCrudFormFields","usePromotedMethodEntity","executeQueryWithParameters","differenceWith","useHandleAxiosSnackbar","useTranslation","getSanitizedName","TagEnums","useStyles","theme","actions","marginTop","spacing","marginBottom","display","flexDirection","title","flexGrow","subject","marginLeft","switchRoot","input","height","padding","formTextInput","fontSize","labelRoot","CrudForm","props","$","_c","entityAttributes","udpFieldInfos","foreignKeyData","crudTableEditionData","closeSideSheet","onCreate","onUpdate","isNewEntry","entityData","entityName","formApiRef","hideSubmitButton","t0","undefined","renderInputByFieldType","t","t1","map","_temp","fkData","setFkData","data","promotedEntity","udpTagAssocPromotedEntity","defaultFormValues","crudTableFormData","t2","Symbol","for","existingTagAssociation","setExistingTagAssociation","classes","handleErrorSnackbar","t3","primaryKeyValues","t4","length","unityBaseGetFullMethod","apiMethodId","unityBaseUpdateMethod","pathParameters","pathObject","requestBody","Array","isArray","forEach","po","Object","keys","response","catch","_temp2","status","console","error","getEntityFull","t5","bb0","t6","mtmPropertyList","Set","attr","extendedProperties","childEntity","childEntityAssoc","Cardinality","Many_To_Many","Keys","value","i","name","split","add","toLowerCase","manyToManyPropertyList","getJoiningObj","_temp3","schemaAttribute_0","fieldInfo","render","isIdentity","schemaAttribute","identifier","dataType","every","schemaAttribute_1","index","ceAttributes_0","filter","_temp4","ceAttributes","renderAttribute","t7","values","sanitizedName","Udp_Lookup","attributeName","Domain_Name","domainName","modelNameSpaceStructure","namespaceStructure","model","sanitizedName_0","Is_Product_Lookup","TagTypeSanitizedName","User_Defined","Udp_Shortcut_Content","Is_Product_ShortcutContent","transformDataForUdpMaintenance","tagAssociationComparator","_temp5","t8","unityBaseCreateMethod","unityBaseDeleteMethod","values_0","businessObjectKey","tagAssociationToDelete","udpTags","tagAssociationToCreate","deleteTagAssociationApiMethod","createTagAssociationApiMethod","deletedPromises","tagAssocToDelete","data_0","id","push","Promise","all","_temp7","then","responses","warn","createdPromises","tagAssoc","data_1","tagId","entityBusinessKey","_temp9","responses_0","response_0","matchingTagAssociation","find","ta","handleTagAssociation","t9","values_1","newTableData","isNewRow","ea_0","joiningObject","ea","fieldInfo_0","fi","ea_1","fkd_0","key","fkd","fieldName","fkData_0","d","businessObjectKey_0","createdResponse","handleSubmit","t10","schemaAttribute_2","sanitizedName_1","shouldAttributeRenderField","t11","t12","getFullData","fullEntityData","filteredTags","_temp0","t13","t14","_temp1","t15","schemaAttribute_3","index_0","fieldInfo_1","fi_0","isPrimaryKey","disabled","friendlyName","t16","t17","t18","defaultValue","t19","propTypes","array","func","object","bool","res","ceAttr","a","fieldId","test","IsJoiningObject","ta1","ta2","_temp6","e","p","_temp8","e_0","p_0","tagAssoc_0","udpTagAssociationUdpTag","fkd_1"],"sources":["../../../src/UI/forms/CrudForm.jsx"],"sourcesContent":["import { makeStyles, Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React, { useMemo, useState, useCallback, useEffect } from 'react';\nimport { Form, FormButtons, SubmitButton } from '../../utilities/form';\nimport { useCrudActions } from '../../hooks/crudActions';\nimport { toLowerFirstChar } from '../../utilities/input/StringUtilities';\nimport useDefaultFormValues from '../../utilities/crud/useDefaultFormValues';\nimport {\n  getPathObject,\n  getPrimaryKeyValues\n} from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport {\n  CardinalityTypeEnums,\n  EntityAttributeEnums,\n  UdpEnums\n} from '../../enums/unitySystemEnums';\nimport { UdpCrudFormFields } from './UdpCrudFormFields';\nimport { usePromotedMethodEntity } from '../../hooks/usePromotedMethodEntity';\nimport { executeQueryWithParameters } from '../../udp/utilities/methodUtils';\nimport { differenceWith } from 'lodash-es';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\nimport { TagEnums } from '../../enums/tagEnums';\n\nconst useStyles = makeStyles((theme) => ({\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  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 CrudForm = (props) => {\n  const {\n    entityAttributes,\n    udpFieldInfos,\n    foreignKeyData,\n    crudTableEditionData,\n    closeSideSheet,\n    onCreate,\n    onUpdate,\n    isNewEntry,\n    entityData,\n    entityName,\n    formApiRef,\n    hideSubmitButton = false\n  } = props;\n  const { renderInputByFieldType } = useCrudActions();\n  const { t } = useTranslation();\n\n  const [fkData, setFkData] = useState(\n    foreignKeyData?.map((fkd) => ({ ...fkd }))\n  );\n  const { data: promotedEntity } = usePromotedMethodEntity(entityName);\n  const { data: udpTagAssocPromotedEntity } = usePromotedMethodEntity(\n    'UdpTagAssociation',\n    true\n  );\n  const { defaultFormValues } = useDefaultFormValues(entityAttributes);\n  const [crudTableFormData, setCrudTableFormData] = useState(\n    crudTableEditionData || defaultFormValues\n  );\n  const [existingTagAssociation, setExistingTagAssociation] = useState([]);\n  const classes = useStyles();\n\n  const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n\n  const primaryKeyValues = useMemo(\n    () => getPrimaryKeyValues(entityAttributes, crudTableEditionData),\n    [entityAttributes, crudTableEditionData]\n  );\n\n  const getEntityFull = useCallback(async () => {\n    if (\n      !primaryKeyValues ||\n      !primaryKeyValues.length ||\n      !promotedEntity?.unityBaseGetFullMethod?.apiMethodId ||\n      !promotedEntity?.unityBaseUpdateMethod?.pathParameters\n    ) {\n      return null;\n    }\n\n    const pathObject = getPathObject(\n      promotedEntity.unityBaseUpdateMethod.pathParameters,\n      primaryKeyValues\n    );\n\n    let data = { requestBody: {} };\n    if (Array.isArray(pathObject)) {\n      pathObject.forEach((po) => {\n        data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n      });\n    } else {\n      data = { ...pathObject, requestBody: {} };\n    }\n\n    const response = await executeQueryWithParameters(\n      { data },\n      promotedEntity.unityBaseGetFullMethod.apiMethodId\n    ).catch((res) => {\n      console.error(res);\n    });\n\n    if (response?.status === 200) {\n      return response.data;\n    } else {\n      console.error(\n        `Could not retrieve full data for ${promotedEntity?.entityName}`\n      );\n    }\n    return null;\n  }, [promotedEntity, primaryKeyValues]);\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        // eslint-disable-next-line @typescript-eslint/no-unused-expressions\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 getJoiningObj = (schemaAttribute, ceAttributes) => {\n    return ceAttributes.find(\n      (ceAttr) =>\n        Object.keys(ceAttr?.extendedProperties?.childEntityAssoc || {})\n          .length &&\n        ceAttr.extendedProperties.childEntityAssoc.Keys.find((a) => {\n          const fieldId = a.split(',')[0];\n          return (\n            (/^[A-Z]*$/.test(fieldId)\n              ? fieldId.toLowerCase()\n              : toLowerFirstChar(fieldId)) ===\n            toLowerFirstChar(schemaAttribute.name)\n          );\n        })\n    );\n  };\n\n  const renderAttribute = useCallback(\n    (schemaAttribute, fieldInfo) => {\n      let render = !fieldInfo?.isIdentity;\n\n      if (\n        schemaAttribute?.extendedProperties?.identifier &&\n        fieldInfo?.dataType === 'Guid'\n      ) {\n        render = false;\n      }\n      entityAttributes.every((schemaAttribute, index) => {\n        const ceAttributes = entityAttributes.filter(\n          (ea) =>\n            ea.extendedProperties.childEntity &&\n            ea.extendedProperties.childEntityAssoc.Cardinality ===\n            CardinalityTypeEnums.Many_To_Many &&\n            ea.extendedProperties.childEntityAssoc.IsJoiningObject\n        );\n\n        if (getJoiningObj(schemaAttribute, ceAttributes)) {\n          render = true;\n          return false;\n        }\n        return true;\n      });\n\n      return render;\n    },\n    [entityAttributes]\n  );\n\n  // function that helps transform form data for entites like UdpLookup, UdpTagType, UdpShortcutContent\n  const transformDataForUdpMaintenance = useCallback(\n    (values) => {\n      const sanitizedName = getSanitizedName(entityName?.toLowerCase());\n      // Current entity to modify is a UdpLookup\n      if (sanitizedName === UdpEnums.Udp_Lookup.toLowerCase()) {\n        const attributeName = toLowerFirstChar(\n          EntityAttributeEnums.Domain_Name\n        );\n        let domainName = values[attributeName];\n        const modelNameSpaceStructure = domainName?.namespaceStructure?.model;\n        const sanitizedName = domainName?.sanitizedName;\n        values[\n          toLowerFirstChar(EntityAttributeEnums.Is_Product_Lookup)\n        ] = false;\n        if (modelNameSpaceStructure) {\n          values[\n            attributeName\n          ] = `${modelNameSpaceStructure}.Models.${sanitizedName}`;\n        } else {\n          values[attributeName] = '';\n        }\n      } else if (\n        sanitizedName === TagEnums.TagTypeSanitizedName.toLowerCase()\n      ) {\n        values[toLowerFirstChar(EntityAttributeEnums.User_Defined)] = true;\n      } else if (\n        sanitizedName === UdpEnums.Udp_Shortcut_Content.toLowerCase()\n      ) {\n        values[\n          toLowerFirstChar(EntityAttributeEnums.Is_Product_ShortcutContent)\n        ] = false;\n      }\n    },\n    [entityName]\n  );\n\n  const tagAssociationComparator = (ta1, ta2) => {\n    return ta1?.id === ta2?.id;\n  };\n\n  // Callback to handle associating tags to business objects\n  const handleTagAssociation = useCallback(\n    async (values, businessObjectKey) => {\n      // Get the tagAssociation objects to delete\n      const tagAssociationToDelete = differenceWith(\n        existingTagAssociation,\n        values?.udpTags,\n        tagAssociationComparator\n      );\n\n      // Get the tagAssociation objects to create\n      const tagAssociationToCreate = differenceWith(\n        values?.udpTags,\n        existingTagAssociation,\n        tagAssociationComparator\n      );\n\n      const deleteTagAssociationApiMethod =\n        udpTagAssocPromotedEntity?.unityBaseDeleteMethod;\n      const createTagAssociationApiMethod =\n        udpTagAssocPromotedEntity?.unityBaseCreateMethod;\n\n      if (businessObjectKey) {\n        if (deleteTagAssociationApiMethod) {\n          const deletedPromises = [];\n          tagAssociationToDelete.forEach((tagAssocToDelete) => {\n            const data = {};\n            data['{tagId}'] = tagAssocToDelete.id;\n            data['{entityBusinessKey}'] = businessObjectKey;\n            deletedPromises.push(\n              executeQueryWithParameters(\n                { data },\n                deleteTagAssociationApiMethod.apiMethodId\n              )\n            );\n          });\n\n          await Promise.all(deletedPromises.map((p) => p.catch((e) => e))).then(\n            (responses) => {\n              if (responses.length !== deletedPromises.length) {\n                console.warn(`Not all Tag Association deleted`);\n              }\n            }\n          );\n        } else {\n          handleErrorSnackbar(\n            null,\n            'Delete Tag Association Method Not Promoted'\n          );\n        }\n\n        if (createTagAssociationApiMethod) {\n          const createdPromises = [];\n          tagAssociationToCreate.forEach((tagAssoc) => {\n            const data = {\n              requestBody: {\n                tagId: tagAssoc.id,\n                entityBusinessKey: businessObjectKey\n              }\n            };\n            createdPromises.push(\n              executeQueryWithParameters(\n                { data },\n                createTagAssociationApiMethod.apiMethodId\n              )\n            );\n          });\n          await Promise.all(createdPromises.map((p) => p.catch((e) => e))).then(\n            (responses) => {\n              responses.forEach((response) => {\n                if (response.status === 200) {\n                  const entityBusinessKey = response.data.entityBusinessKey;\n                  const matchingTagAssociation = tagAssociationToCreate.find(\n                    (ta) => ta.value === entityBusinessKey\n                  );\n                  if (!matchingTagAssociation) {\n                    console.warn(\n                      `Tag Association not created for all file to entities`\n                    );\n                  }\n                }\n              });\n            }\n          );\n          setExistingTagAssociation(values?.udpTags);\n        } else {\n          handleErrorSnackbar(\n            null,\n            'Create Tag Association Method Not Promoted'\n          );\n        }\n      }\n    },\n    [\n      handleErrorSnackbar,\n      existingTagAssociation,\n      setExistingTagAssociation,\n      udpTagAssocPromotedEntity\n    ]\n  );\n\n  const handleSubmit = useCallback(\n    async (values) => {\n      let newTableData = {\n        ...crudTableFormData,\n        ...values\n      };\n\n      transformDataForUdpMaintenance(newTableData);\n\n      const isNewRow = !crudTableEditionData;\n\n      if (!isNewEntry) {\n        // remove identifiers from object\n        entityAttributes\n          .filter((ea) => {\n            const joiningObject = getJoiningObj(ea, entityAttributes);\n            const fieldInfo = udpFieldInfos?.find(\n              (fi) => fi?.name.toLowerCase() === ea?.name?.toLowerCase()\n            );\n            return (\n              ea?.extendedProperties?.identifier &&\n              fieldInfo?.isIdentity &&\n              fieldInfo?.dataType !== 'Guid' &&\n              (!joiningObject || joiningObject.extendedProperties?.childEntity)\n            );\n          })\n          .forEach((ea) => {\n            delete newTableData[ea.name];\n          });\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            const fkData = fkd?.data?.find(\n              (d) => d.id === newTableData[key]?.id\n            )?.id;\n            if (fkData !== null) {\n              newTableData[key] = fkData;\n            }\n          }\n        });\n      });\n\n      let businessObjectKey = '';\n      if (isNewRow) {\n        if (onCreate) {\n          const createdResponse = await onCreate(newTableData);\n          if (createdResponse?.status === 200) {\n            businessObjectKey = createdResponse?.data?.businessObjectKey;\n          }\n        }\n      } else {\n        if (onUpdate) {\n          await onUpdate(newTableData, primaryKeyValues);\n          businessObjectKey = newTableData?.businessObjectKey;\n        }\n      }\n      if (businessObjectKey && values?.udpTags) {\n        handleTagAssociation(values, businessObjectKey);\n      }\n      if(closeSideSheet){\n        closeSideSheet();\n      }\n    },\n    [\n      crudTableFormData,\n      transformDataForUdpMaintenance,\n      crudTableEditionData,\n      isNewEntry,\n      foreignKeyData,\n      closeSideSheet,\n      entityAttributes,\n      onCreate,\n      onUpdate,\n      primaryKeyValues,\n      handleTagAssociation,\n      udpFieldInfos\n    ]\n  );\n\n  const shouldAttributeRenderField = useCallback(\n    (schemaAttribute) => {\n      const sanitizedName = getSanitizedName(entityName?.toLowerCase());\n      if (\n        sanitizedName === TagEnums.TagTypeSanitizedName.toLowerCase() &&\n        schemaAttribute?.name ===\n        toLowerFirstChar(EntityAttributeEnums.User_Defined)\n      ) {\n        return false;\n      } else if (\n        sanitizedName === UdpEnums.Udp_Shortcut_Content.toLowerCase() &&\n        schemaAttribute?.name ===\n        toLowerFirstChar(EntityAttributeEnums.Is_Product_ShortcutContent)\n      ) {\n        return false;\n      } else if (\n        sanitizedName === UdpEnums.Udp_Lookup.toLowerCase() &&\n        schemaAttribute?.name ===\n        toLowerFirstChar(EntityAttributeEnums.Is_Product_Lookup)\n      ) {\n        return false;\n      }\n\n      return true;\n    },\n    [entityName]\n  );\n\n  useEffect(() => {\n    const getFullData = async () => {\n      const fullEntityData = await getEntityFull();\n      if (fullEntityData) {\n        const filteredTags = fullEntityData.udpTags?.map(\n          (tagAssoc) => tagAssoc.udpTagAssociationUdpTag\n        );\n        setExistingTagAssociation(filteredTags || []);\n      }\n    };\n    if (promotedEntity && !isNewEntry) {\n      getFullData();\n    }\n  }, [promotedEntity, getEntityFull, isNewEntry]);\n\n  useEffect(() => {\n    if (foreignKeyData) {\n      setFkData(foreignKeyData?.map((fkd) => ({ ...fkd })));\n    }\n  }, [foreignKeyData]);\n\n  return (\n    <Form onSubmit={handleSubmit}  ref={formApiRef}>\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          if (!shouldAttributeRenderField(schemaAttribute)) {\n            return null;\n          }\n          return (\n            renderAttribute(schemaAttribute, fieldInfo) && (\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                  fkData,\n                  setFkData,\n                  crudTableFormData,\n                  classes,\n                  isNewEntry,\n                  entityData,\n                  manyToManyPropertyList\n                )}\n              </React.Fragment>\n            )\n          );\n        })}\n        <UdpCrudFormFields\n          entityName={entityName}\n          formData={crudTableFormData}\n          existingTagAssociation={existingTagAssociation}\n        />\n      </div>\n\n      {!hideSubmitButton && (\n        <FormButtons>\n          <SubmitButton\n            id='udpRecord-CrudForm-Submit'\n            udprecordid='udpRecord-CrudForm-Submit'\n            variant='contained'\n            color='secondary'\n            disablePristine={false}\n            disabled={false}\n            style={{ marginTop: 15 }}\n          >\n            {t('common.save', { defaultValue: 'Save' })}\n          </SubmitButton>\n        </FormButtons>\n      )}\n    </Form>\n  );\n};\n\nCrudForm.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   * Ref attached to the underlying form, exposing the final-form API\n   * (handleSubmit, submitting, pristine) so a submit button rendered outside\n   * the form — e.g. in a drawer footer slot — can submit it\n   */\n  formApiRef: PropTypes.object,\n  /**\n   * Hides the built-in Save button. Set this when the consumer renders its own\n   * submit control outside the form and drives it via formApiRef\n   */\n  hideSubmitButton: PropTypes.bool\n};\n"],"mappings":"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"}