{"version":3,"file":"crudActions.mjs","names":["FormControlLabel","React","useCallback","apiMutate","Field","PropertyTypeEnum","InputFieldType","toLowerFirstChar","toTitleCase","FluentColorPicker","foreignKeyOption","getSanitizedName","ConfigService","UdpAutocomplete","UdpSwitch","UdpTextInput","UdpDateTimeInput","DateTime","useCrudActions","renderInputByForeignKey","foreignKeyData","setFkData","crudTableFormData","schemaAttribute","index","isNewEntry","entityData","label","manyToManyPropertyList","Set","foreignKeyAttributeName","name","attributeData","find","fkd","fieldName","data","extendedProperties","identifier","d","id","nullable","disabled","renderInputByFieldType","attributes","fieldInfo","classes","NUMBER_TYPE","Int","Long","Double","ceAttributes","filter","ea","childEntity","type","attribute","ceAttr","Object","keys","childEntityAssoc","length","Keys","a","fieldId","split","test","toLowerCase","isForeignKey","IsJoiningObject","Cardinality","properties","displayName","reference","console","log","maintainenceConfig","displayLabel","defaultFieldType","readOnly","fieldIsNumberType","renderAs","Number","required","isPrimaryKey","DefaultTextField","udprecordid","DefaultFluentToggle","gap","utcToLocalInput","v","dt","fromISO","String","zone","isValid","toLocal","toFormat","localInputToUtc","undefined","toUTC","toISO","DefaultFluentDatePicker","DefaultFluentColorPicker","root","input","formTextInput","labelRoot","marginLeft","hiddenForm","Text","Toggle","ColorPicker","Default","includes","String_Uuid","Boolean","getFKData","fkMethods","setForeignKeyData","enqueueSnackbar","displayToasts","fkData","promises","promiseDetails","forEach","method","entity","unityBaseGetAllMethod","push","url","integrationV1ApiUrl","apiMethodId","fkName","entityName","variant","anchorOrigin","vertical","horizontal","warn","Promise","all","then","resp","response","status","promiseDetail","p","config","respData","map"],"sources":["../../src/hooks/crudActions.jsx"],"sourcesContent":["import { FormControlLabel } from '@material-ui/core';\nimport React, { useCallback } from 'react';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { Field } from '../utilities/form';\nimport { PropertyTypeEnum } from '../enums/propertyTypeEnums';\nimport { InputFieldType } from '../enums/InputFieldTypeEnums';\nimport { toLowerFirstChar } from '../utilities/input/StringUtilities';\nimport { toTitleCase } from '../utilities/input/StringUtilities';\nimport { FluentColorPicker } from '../UI/inputs/pickers/FluentColorPicker';\nimport { foreignKeyOption, getSanitizedName } from '../utilities/entities/entityUtilities';\nimport { ConfigService } from '../configService';\nimport { UdpAutocomplete, UdpSwitch, UdpTextInput, UdpDateTimeInput } from '../UI/fluent-web-components';\nimport { DateTime } from 'luxon';\n\nexport function useCrudActions() {\n  const renderInputByForeignKey = useCallback(\n    (\n      foreignKeyData,\n      setFkData,\n      crudTableFormData,\n      schemaAttribute,\n      index,\n      isNewEntry,\n      entityData,\n      label = '',\n      manyToManyPropertyList = new Set()\n    ) => {\n      const foreignKeyAttributeName = toLowerFirstChar(schemaAttribute.name);\n      if (!foreignKeyData) {\n        return;\n      }\n\n      let attributeData = foreignKeyData.find(\n        (fkd) => fkd.fieldName === foreignKeyAttributeName\n      )?.data;\n\n      //This onChange is trying to prevent duplicate entries but does not consider a 3 way many to many\n      // const onChange = (value) => {\n      //   let newFKData = [...foreignKeyData];\n      //   const fieldName = schemaAttribute.name;\n      //   const existingEntityData = [...entityData].filter(\n      //     (ed) => ed[fieldName] === value?.id\n      //   );\n      //   if (manyToManyPropertyList.has(fieldName?.toLowerCase())) {\n      //     newFKData.forEach((fkd) => {\n      //       // omit comparing selected entity\n      //       if (fkd.fieldName !== fieldName) {\n      //         // compare existing data and remove any used options\n      //         existingEntityData.forEach((eData) => {\n      //           fkd.data = fkd.data.filter(\n      //             (data) => data.id !== eData[fkd.fieldName]\n      //           );\n      //         });\n      //       }\n      //     });\n      //   }\n\n      //   setFkData && setFkData(newFKData);\n      // };\n\n      return (\n        (!schemaAttribute.extendedProperties.identifier || isNewEntry) && (\n          <Field\n            component={UdpAutocomplete}\n            id={`${schemaAttribute.name}${index}`}\n            initialValue={attributeData?.find(\n              (d) => d.id === crudTableFormData[foreignKeyAttributeName]\n            )}\n            label={toTitleCase(label)}\n            name={foreignKeyAttributeName}\n            appearance='outline'\n            options={attributeData || []}\n            optionLabel={'name'}\n            optionValue={'id'}\n            required={!schemaAttribute?.nullable}\n            includeErrorPadding={false}\n            //additionalOnChangeAction={onChange}\n            disabled={schemaAttribute?.disabled}\n          />\n        )\n      );\n    },\n    []\n  );\n\n  const renderInputByFieldType = useCallback(\n    (\n      schemaAttribute,\n      index,\n      attributes,\n      fieldInfo,\n      foreignKeyData,\n      setFkData,\n      crudTableFormData,\n      classes,\n      isNewEntry,\n      entityData,\n      manyToManyPropertyList\n    ) => {\n      const NUMBER_TYPE = [\n        PropertyTypeEnum.Int,\n        PropertyTypeEnum.Long,\n        PropertyTypeEnum.Double\n      ];\n\n      //dont render clusterId\n      if (schemaAttribute?.name === 'clusterId') {\n        return;\n      }\n\n      //Get list of child entities\n      const ceAttributes = attributes.filter(\n        (ea) => ea.extendedProperties.childEntity\n      );\n\n      //If bool field not set, set to false\n      if (\n        schemaAttribute.type === 'bool' &&\n        crudTableFormData[toLowerFirstChar(schemaAttribute.name)] === ''\n      ) {\n        crudTableFormData[toLowerFirstChar(schemaAttribute.name)] = false;\n      }\n\n      //finding if any child entity\n      const attribute = 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      //If schemaAttribute is used as a foreign key, render field as foreign field\n      //schemaAttribute must be a foreign key to another table and if its manytomany, it has to be the joining table. No one to many\n      if (\n        (schemaAttribute?.isForeignKey || attribute) &&\n        !(\n          !attribute?.extendedProperties?.childEntityAssoc?.IsJoiningObject &&\n          attribute?.extendedProperties?.childEntityAssoc?.Cardinality === 2\n        ) &&\n        attribute?.extendedProperties?.childEntityAssoc?.Cardinality !== 3\n      ) {\n        const label = fieldInfo?.properties?.displayName\n          ? fieldInfo.properties.displayName\n          : attribute?.reference\n          ? getSanitizedName(attribute.reference)\n          : '';\n        console.log(label);\n        return renderInputByForeignKey(\n          foreignKeyData,\n          setFkData,\n          crudTableFormData,\n          schemaAttribute,\n          index,\n          isNewEntry,\n          entityData,\n          label,\n          manyToManyPropertyList\n        );\n      }\n\n      const maintainenceConfig = fieldInfo?.properties?.maintainenceConfig;\n      const displayLabel = toTitleCase(\n        fieldInfo?.properties?.displayName || schemaAttribute.name\n      );\n      const defaultFieldType = schemaAttribute?.type;\n      const disabled =\n        schemaAttribute?.disabled ||\n        maintainenceConfig?.readOnly ||\n        schemaAttribute?.extendedProperties?.readOnly;\n\n      let fieldIsNumberType =\n        maintainenceConfig?.renderAs === InputFieldType.Number;\n\n      const required =\n        !schemaAttribute?.nullable ||\n        (fieldInfo?.isPrimaryKey && !disabled) ||\n        disabled;\n\n      const DefaultTextField = (\n        <Field\n          component={UdpTextInput}\n          id={`${schemaAttribute.name}${index}`}\n          name={toLowerFirstChar(schemaAttribute.name)}\n          label={displayLabel}\n          initialValue={\n            crudTableFormData[toLowerFirstChar(schemaAttribute.name)] !== null\n              ? crudTableFormData[toLowerFirstChar(schemaAttribute.name)]\n              : ''\n          }\n          type={fieldIsNumberType && 'number'}\n          appearance='outline'\n          required={required}\n          includeErrorPadding={false}\n          inputProps={{\n            udprecordid: `udpRecord-crudActions-${schemaAttribute.name}${index}`\n          }}\n          disabled={disabled}\n        />\n      );\n\n      const DefaultFluentToggle = (\n        <FormControlLabel\n          control={\n            <Field\n              component={UdpSwitch}\n              type='checkbox'\n              id={`${schemaAttribute.name}${index}`}\n              disabled={disabled}\n              includeErrorPadding={false}\n              name={toLowerFirstChar(schemaAttribute.name)}\n              initialValue={\n                typeof crudTableFormData[\n                  toLowerFirstChar(schemaAttribute.name)\n                ] === 'boolean'\n                  ? crudTableFormData[toLowerFirstChar(schemaAttribute.name)]\n                  : crudTableFormData[\n                        toLowerFirstChar(schemaAttribute.name)\n                      ] === 'true'\n                    ? true\n                    : false\n              }\n            />\n          }\n          label={displayLabel}\n          labelPlacement='start'\n          style={{ gap: 4 }}\n        />\n      );\n\n      const utcToLocalInput = (v) => {\n        if (!v) return '';\n        const dt = DateTime.fromISO(String(v), { zone: 'utc' });\n        return dt.isValid ? dt.toLocal().toFormat(\"yyyy-MM-dd'T'HH:mm\") : '';\n      };\n\n      const localInputToUtc = (v) => {\n        if (!v) return undefined;\n        const dt = DateTime.fromISO(String(v));\n        return dt.isValid ? dt.toUTC().toISO() : undefined;\n      };\n\n      const DefaultFluentDatePicker = (\n        <Field\n          disabled={disabled}\n          component={UdpDateTimeInput}\n          id={`${schemaAttribute.name}${index}`}\n          name={toLowerFirstChar(schemaAttribute.name)}\n          label={displayLabel}\n          format={utcToLocalInput}\n          parse={localInputToUtc}\n          initialValue={\n            crudTableFormData[toLowerFirstChar(schemaAttribute.name)]\n              ? crudTableFormData[toLowerFirstChar(schemaAttribute.name)]\n              : ''\n          }\n          dateFormat='YYYY/MM/DD'\n          use24Hour\n          appearance='outline'\n          required={required}\n          includeErrorPadding={false}\n        />\n      );\n\n      const DefaultFluentColorPicker = (\n        <FormControlLabel\n          control={\n            <Field\n              component={FluentColorPicker}\n              id={`${schemaAttribute.name}${index}`}\n              name={toLowerFirstChar(schemaAttribute.name)}\n              initialValue={\n                crudTableFormData[toLowerFirstChar(schemaAttribute.name)] || ''\n              }\n              fullWidth\n              variant='outlined'\n              size='small'\n              required={required}\n              margin='dense'\n              InputProps={{\n                classes: {\n                  root: classes?.input,\n                  input: classes?.formTextInput\n                }\n              }}\n              InputLabelProps={{\n                classes: {\n                  root: classes?.labelRoot\n                }\n              }}\n              disabled={disabled}\n            />\n          }\n          label={displayLabel}\n          labelPlacement='start'\n          style={{ marginLeft: 4 }}\n        />\n      );\n\n      if (maintainenceConfig?.hiddenForm) return null;\n\n      switch (maintainenceConfig?.renderAs) {\n        case InputFieldType.Text:\n        case InputFieldType.Number:\n          return DefaultTextField;\n        case InputFieldType.Toggle:\n          return DefaultFluentToggle;\n        case InputFieldType.DateTime:\n          return DefaultFluentDatePicker;\n        case InputFieldType.ColorPicker:\n          return DefaultFluentColorPicker;\n        case InputFieldType.Default:\n        default:\n          fieldIsNumberType = NUMBER_TYPE.includes(defaultFieldType);\n          switch (defaultFieldType) {\n            case PropertyTypeEnum.Int:\n            case PropertyTypeEnum.Long:\n            case PropertyTypeEnum.Double:\n            case PropertyTypeEnum.String:\n            case PropertyTypeEnum.String_Uuid:\n              return DefaultTextField;\n            case PropertyTypeEnum.Boolean:\n              return DefaultFluentToggle;\n            case PropertyTypeEnum.DateTime:\n              return DefaultFluentDatePicker;\n            default:\n              return null;\n          }\n      }\n    },\n    [renderInputByForeignKey]\n  );\n\n  const getFKData = useCallback(\n    async (fkMethods, setForeignKeyData, enqueueSnackbar, displayToasts) => {\n      let fkData = [];\n      let promises = [];\n      let promiseDetails = [];\n      fkMethods.forEach((method) => {\n        if (method && method?.entity?.unityBaseGetAllMethod) {\n          promiseDetails.push({\n            url:\n              ConfigService.integrationV1ApiUrl +\n              `/apimethod/executeQueryWithParameters/${method?.entity?.unityBaseGetAllMethod?.apiMethodId}`,\n            fieldName: method.fkName,\n            name: method.entity.entityName\n          });\n\n          promises.push(\n            apiMutate(\n              ConfigService.integrationV1ApiUrl,\n              `apimethod/executeQueryWithParameters/${method?.entity?.unityBaseGetAllMethod?.apiMethodId}`,\n              {\n                method: 'post'\n              },\n              { data: {} }\n            )\n          );\n        } else {\n          if (displayToasts) {\n            enqueueSnackbar(\n              `${method.entity.entityName}'s Get-All method needs to be promoted`,\n              {\n                variant: 'error',\n                anchorOrigin: {\n                  vertical: 'top',\n                  horizontal: 'center'\n                }\n              }\n            );\n          } else {\n            console.warn(\n              `${method.entity.entityName}'s Get-All method needs to be promoted`\n            );\n          }\n        }\n      });\n\n      Promise.all(promises).then((resp) => {\n        resp.forEach((response, index) => {\n          if (response.status === 200) {\n            if (response?.data) {\n              const promiseDetail = promiseDetails.find(\n                (p) => p.url === response?.config?.url\n              );\n              const respData = response.data.map((d) =>\n                foreignKeyOption(d, promiseDetail.name)\n              );\n              fkData.push({\n                fieldName: promiseDetail.fieldName,\n                name: promiseDetail.fieldName,\n                data: respData\n              });\n            }\n          }\n        });\n        setForeignKeyData(fkData);\n      });\n    },\n    []\n  );\n\n  return {\n    renderInputByForeignKey,\n    renderInputByFieldType,\n    getFKData\n  };\n}\n"],"mappings":"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"}