{"version":3,"file":"useTransactionEngine.mjs","names":["useCallback","useMemo","jsonLogic","useTransactionStore","useUser","TransactionActionTypeEnums","TransactionRuleTypeEnums","useTransactionEngine","transactionTypeId","$","_c","user","transactionTypesMap","_temp","transactionType","t0","roleIds","rule","udpTransaction","udpTransactionEvaluationData","currentStatusId","currentDomainValue","entityBusinessObject","tenantUserRoleIds","apply","evaluateRule","t1","udpTransactionTypeUdpTransactionTypeConfiguration","udpTransaction_0","t2","ruleTypeId","undefined","transactionActions","reduce","actions","config","ruleLogic","expressionLogic","transactionRuleTypeId","enabled","result","configActions","udpTransactionTypeConfigurationUdpTransactionTypeConfigurationTransactionAction","nestedActions","map","_temp2","filter","_temp3","length","concat","getTransactionTypeTransactionActions","hasRevisions","hasRevision","udpTransactionTypeUdpTransactionTypeStatus","some","_temp4","hasClosedStatus","t3","archiveOnCancel","_temp5","canCancel","transactionTypeStatuses","t4","bb0","Array","isArray","domainFields","t5","Object","keys","entries","_temp6","sort","_temp7","orderedColumns","t6","Symbol","for","transactionTypeGridColumns","transactionTypeColumnDefProperties","pageConfiguration","columnDefProperties","other","transactionTypePageConfiguration","statusColorsMap","forEach","status_1","status","name","color","transactionTypeStatusColorsMap","udpTransaction_1","transactionActions_0","Form","hiddenFields","_temp8","action_2","action","parameters","getHiddenFields","t7","udpTransaction_2","transactionActions_1","requiredFields","_temp9","action_4","mandatoryFields","getRequiredFields","t8","udpTransaction_3","transactionActions_2","disabledFields","_temp0","action_6","getDisabledFields","t9","udpTransactionTypeUdpTransactionUiAction","uiActionType","uiAction","find","action_7","transactionUiActionTypeId","getUiActionRenderParameters","formatLabel","_temp10","t10","udpTransaction_4","domainFieldLabel","getTransactionTypeLabel","t11","bb1","t12","_temp11","closedStatuses","udpTransaction_5","closedStatus","transactionTypeStatusId","checkIfTransactionIsClosed","t13","currentTransactionType","state","udpTransactionTypeConfigurationTransactionActionUdpTransactionTypeTransactionAction","action_0","isClosedStatus","status_0","isCancelledStatus","propertyName","value","a","b","order","action_1","transactionActionId","Set_Fields_Hidden","action_3","Set_Mandatory_Fields","action_5","Set_Disabled_Fields","_temp1","field","trim","label","obj","fields","split","skippableKeys","updatedKeys","key","index","matchedKey","charAt","push","replace","values","j","property","splitProperties","constructedValue","property_0","matches","match","objIndex","arrIndex","parseInt","formattedProperty","substring","toString","value_0","displayName","join","k","includes","replaceAll","status_2"],"sources":["../../../src/utilities/transactions/useTransactionEngine.js"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport jsonLogic from 'json-logic-js';\nimport { useTransactionStore } from '../../stores/transactionStore';\nimport { useUser } from '../auth';\nimport {\n  TransactionActionTypeEnums,\n  TransactionRuleTypeEnums\n} from '../../enums';\n\nexport const useTransactionEngine = (transactionTypeId) => {\n  const user = useUser();\n\n  const transactionTypesMap = useTransactionStore(\n    (state) => state.transactionTypesMap\n  );\n  const transactionType = transactionTypesMap\n    ? transactionTypesMap[transactionTypeId]\n    : null;\n\n  const evaluateRule = useCallback(\n    (rule, udpTransaction) => {\n      let udpTransactionEvaluationData = {\n        currentStatusId: udpTransaction?.currentStatusId,\n        currentDomainValue: udpTransaction?.entityBusinessObject,\n        tenantUserRoleIds: user?.roleIds || []\n      };\n\n      return jsonLogic.apply(rule, udpTransactionEvaluationData);\n    },\n    [user?.roleIds]\n  );\n\n  const getTransactionTypeTransactionActions = useCallback(\n    (udpTransaction, ruleTypeId = null) => {\n      const transactionActions =\n        transactionType?.udpTransactionTypeUdpTransactionTypeConfiguration?.reduce(\n          (actions, config) => {\n            const ruleLogic = config?.expressionLogic;\n            if (!ruleTypeId) {\n              return actions;\n            }\n            if (\n              config.transactionRuleTypeId === ruleTypeId &&\n              config.enabled &&\n              ruleLogic\n            ) {\n              const result = evaluateRule(ruleLogic, udpTransaction);\n              if (result) {\n                const configActions =\n                  config?.udpTransactionTypeConfigurationUdpTransactionTypeConfigurationTransactionAction ||\n                  [];\n\n                const nestedActions = configActions\n                  .map(\n                    (action) =>\n                      action.udpTransactionTypeConfigurationTransactionActionUdpTransactionTypeTransactionAction\n                  )\n                  .filter((action) => action);\n\n                if (nestedActions.length > 0) {\n                  actions = actions.concat(nestedActions);\n                }\n              }\n              return actions;\n            }\n            return actions;\n          },\n          []\n        );\n\n      return transactionActions;\n    },\n    [transactionType, evaluateRule]\n  );\n\n  const hasRevisions = useMemo(() => {\n    return transactionType?.hasRevision;\n  }, [transactionType]);\n\n  const hasClosedStatus = useMemo(() => {\n    return transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.some(\n      (status) => status.isClosedStatus\n    );\n  }, [transactionType]);\n\n  const canCancel = useMemo(() => {\n    return (\n      transactionType?.archiveOnCancel ||\n      transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.some(\n        (status) => status.isCancelledStatus\n      )\n    );\n  }, [transactionType]);\n\n  const transactionTypeStatuses = useMemo(\n    () => transactionType?.udpTransactionTypeUdpTransactionTypeStatus,\n    [transactionType]\n  );\n\n  const transactionTypeGridColumns = useMemo(() => {\n    if (Array.isArray(transactionType?.domainFields)) {\n      return transactionType?.domainFields || [];\n    } else if (\n      transactionType?.domainFields &&\n      Object.keys(transactionType.domainFields).length\n    ) {\n      const orderedColumns = Object.entries(transactionType.domainFields)\n        .map(([propertyName, value]) => ({\n          propertyName,\n          ...value\n        }))\n        .sort((a, b) => a.order - b.order);\n      return orderedColumns || [];\n    }\n    return [];\n  }, [transactionType]);\n\n  const transactionTypeColumnDefProperties = useMemo(() => {\n    return transactionType?.pageConfiguration?.columnDefProperties;\n  }, [transactionType]);\n\n  const transactionTypePageConfiguration = useMemo(() => {\n    const { columnDefProperties, ...other } =\n      transactionType?.pageConfiguration || {};\n    return other;\n  }, [transactionType]);\n\n  const transactionTypeStatusColorsMap = useMemo(() => {\n    const statusColorsMap = {};\n    transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.forEach(\n      (status) => {\n        statusColorsMap[status.name] = status.color || 'default';\n      }\n    );\n    return statusColorsMap;\n  }, [transactionType]);\n\n  const getHiddenFields = useCallback(\n    (udpTransaction) => {\n      const transactionActions = getTransactionTypeTransactionActions(\n        udpTransaction,\n        TransactionRuleTypeEnums.Form\n      );\n      if (!transactionActions) return [];\n      let hiddenFields = [];\n      transactionActions\n        .filter(\n          (action) =>\n            action.transactionActionId ===\n            TransactionActionTypeEnums.Set_Fields_Hidden\n        )\n        .forEach((action) => {\n          if (action.parameters?.hiddenFields) {\n            hiddenFields = hiddenFields.concat(action.parameters.hiddenFields);\n          }\n        });\n      return hiddenFields;\n    },\n    [getTransactionTypeTransactionActions]\n  );\n\n  const getRequiredFields = useCallback(\n    (udpTransaction) => {\n      const transactionActions = getTransactionTypeTransactionActions(\n        udpTransaction,\n        TransactionRuleTypeEnums.Form\n      );\n      if (!transactionActions) return [];\n      let requiredFields = [];\n      transactionActions\n        .filter(\n          (action) =>\n            action.transactionActionId ===\n            TransactionActionTypeEnums.Set_Mandatory_Fields\n        )\n        .forEach((action) => {\n          if (action.parameters?.mandatoryFields) {\n            requiredFields = requiredFields.concat(\n              action.parameters.mandatoryFields\n            );\n          }\n        });\n      return requiredFields;\n    },\n    [getTransactionTypeTransactionActions]\n  );\n\n  const getDisabledFields = useCallback(\n    (udpTransaction) => {\n      const transactionActions = getTransactionTypeTransactionActions(\n        udpTransaction,\n        TransactionRuleTypeEnums.Form\n      );\n      if (!transactionActions) return [];\n      let disabledFields = [];\n      transactionActions\n        .filter(\n          (action) =>\n            action.transactionActionId ===\n            TransactionActionTypeEnums.Set_Disabled_Fields\n        )\n        .forEach((action) => {\n          if (action.parameters?.disabledFields) {\n            disabledFields = disabledFields.concat(\n              action.parameters.disabledFields\n            );\n          }\n        });\n      return disabledFields;\n    },\n    [getTransactionTypeTransactionActions]\n  );\n\n  const getUiActionRenderParameters = useCallback(\n    (uiActionType) => {\n      const uiAction =\n        transactionType?.udpTransactionTypeUdpTransactionUiAction?.find(\n          (action) => action.transactionUiActionTypeId === uiActionType\n        );\n      return uiAction?.parameters || null;\n    },\n    [transactionType]\n  );\n\n  const formatLabel = (label, obj) => {\n    const fields = label?.split('+');\n    const keys = fields?.map((field) => field.trim());\n    if (keys) {\n      const skippableKeys = [];\n      const updatedKeys = keys.map((key, index) => {\n        const matchedKey = key.charAt(0) === '\"';\n        if (matchedKey) {\n          skippableKeys.push(index);\n          key = key.replace(/\"/g, '');\n        }\n        return key;\n      });\n      const values = [];\n      for (let j = 0; j < keys.length; j++) {\n        let property = keys[j];\n        if (property) {\n          const splitProperties = property.split('.');\n          if (splitProperties.length > 1) {\n            let constructedValue = null;\n            splitProperties.forEach((property) => {\n              const matches = property.match(/\\[(.*?)\\]/);\n              let objIndex = null;\n              let arrIndex = null;\n              if (matches) {\n                arrIndex = parseInt(matches[1]);\n                objIndex = matches.index;\n              }\n              if (typeof arrIndex === 'number' && objIndex) {\n                const formattedProperty = property.substring(0, objIndex);\n                if (!constructedValue) {\n                  if (obj[formattedProperty]) {\n                    constructedValue = obj[formattedProperty][arrIndex];\n                  }\n                } else {\n                  if (constructedValue[formattedProperty]) {\n                    constructedValue =\n                      constructedValue[formattedProperty][arrIndex];\n                  }\n                }\n              } else {\n                if (!constructedValue) {\n                  constructedValue = obj[property];\n                } else {\n                  constructedValue = constructedValue[property];\n                }\n              }\n            });\n            if (\n              typeof constructedValue === 'boolean' ||\n              typeof constructedValue === 'number'\n            ) {\n              constructedValue = constructedValue.toString();\n            }\n            values.push(constructedValue);\n            continue;\n          }\n        }\n        let value = obj[property];\n        if (typeof value === 'boolean' || typeof value === 'number') {\n          value = value.toString();\n        }\n        values.push(value);\n      }\n      let displayName = updatedKeys.join('+');\n      for (let k = 0; k < updatedKeys.length; k++) {\n        if (!skippableKeys.includes(k)) {\n          if (values[k]) {\n            displayName = displayName.replace(`${updatedKeys[k]}`, values[k]);\n          } else {\n            displayName = displayName.replace(`${updatedKeys[k]}`, '');\n          }\n        }\n      }\n\n      return displayName.replaceAll('+', ' ');\n    } else {\n      return label;\n    }\n  };\n\n  const getTransactionTypeLabel = useCallback(\n    (udpTransaction) => {\n      if (!transactionType?.domainFieldLabel) return null;\n      return formatLabel(\n        transactionType.domainFieldLabel,\n        udpTransaction?.entityBusinessObject || {}\n      );\n    },\n    [transactionType]\n  );\n\n  const closedStatuses = useMemo(() => {\n    if (!hasClosedStatus) return [];\n    return transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.filter(\n      (status) => status.isClosedStatus\n    );\n  }, [hasClosedStatus, transactionType]);\n\n  const checkIfTransactionIsClosed = useCallback(\n    (udpTransaction) => {\n      if (!closedStatuses || closedStatuses.length === 0) return false;\n      return closedStatuses.some(\n        (closedStatus) =>\n          closedStatus.transactionTypeStatusId ===\n          udpTransaction?.currentStatusId\n      );\n    },\n    [closedStatuses]\n  );\n\n  return {\n    currentTransactionType: transactionType,\n    evaluateRule,\n    getTransactionTypeTransactionActions,\n    hasRevisions,\n    getHiddenFields,\n    getRequiredFields,\n    getDisabledFields,\n    closedStatuses,\n    hasClosedStatus,\n    transactionTypeGridColumns,\n    transactionTypeColumnDefProperties,\n    transactionTypePageConfiguration,\n    getUiActionRenderParameters,\n    checkIfTransactionIsClosed,\n    getTransactionTypeLabel,\n    transactionTypeStatusColorsMap,\n    transactionTypeStatuses,\n    canCancel\n  };\n};\n"],"mappings":"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"}