{"version":3,"file":"crudActions.mjs","names":["FormControlLabel","React","useCallback","apiMutate","Field","FluentTextFieldAutoComplete","PropertyTypeEnum","InputFieldType","toLowerFirstChar","toTitleCase","FluentColorPicker","getSanitizedName","ConfigService","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","marginTop","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","respData","promiseDetail","p","config"],"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 { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\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 { getSanitizedName } from '../utilities/entities/entityUtilities';\nimport { ConfigService } from '../configService';\nimport { 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={FluentTextFieldAutoComplete}\n            id={`${schemaAttribute.name}${index}`}\n            initialValue={\n              attributeData\n                ? attributeData.find(\n                    (d) => d.id === crudTableFormData[foreignKeyAttributeName]\n                  )\n                : 0\n            }\n            label={toTitleCase(label)}\n            name={foreignKeyAttributeName}\n            fullWidth\n            variant='outlined'\n            margin='normal'\n            options={attributeData || []}\n            optionKey={'name'}\n            required={!schemaAttribute?.nullable}\n            style={{ marginTop: 8 }}\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          controlSize='small'\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          controlSize='small'\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              let respData = [];\n              response.data.forEach((d) => {\n                respData.push({ id: d.id, name: d.name ?? d.id });\n              });\n\n              const promiseDetail = promiseDetails.find(\n                (p) => p.url === response?.config?.url\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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"}