{"version":3,"file":"TransactionTimeline.mjs","names":["React","useEffect","useMemo","forwardRef","useImperativeHandle","useCallback","useState","LinearProgress","apiMutate","useAxiosMutate","UdpTimeline","EmptyStateDisplay","SideSheet","useTranslation","useSnackbar","TransactionTimelineItem","ConfigService","formatDate","AmbientCard","TransactionChangeLog","HttpStatusCode","useCatalogStore","TransactionEventTypeEnums","META_DATA_BLOCKLIST","Set","TransactionTimeline","props","ref","transactionId","t","enqueueSnackbar","currentApiCatalogId","udpDomainObjects","setUdpDomainObjects","sideSheetOpen","setSideSheetOpen","searchObj","eagerLoad","pageNumber","pageSize","filterElements","searchField","searchValue","searchOperator","orderElements","sortColumn","sortDirection","getAll","data","transactionHistory","loading","isLoading","fetchTransactionHistory","productV1ApiUrl","method","filterData","dataObj","allowedKeys","allowedSet","map","key","toLowerCase","filter","has","Object","fromEntries","entries","handleOnClick","transactionHistoryRecord","domain","udpTransactionHistoryUdpAuditEvent","catalogRes","comparisonRes","Promise","all","integrationV2ApiUrl","auditEventId","entityBusinessKey","transactionEventTypeId","catalog","console","error","defaultValue","variant","autoHideDuration","anchorOrigin","vertical","horizontal","preventDuplicate","permissableFieldTypes","catalogPropertyNames","properties","field","type","property","name","domainObjects","previous","current","userMessage","response","status","BAD_REQUEST","NOT_FOUND","INTERNAL_SERVER_ERROR","request","handleOnSideSheetClose","refresh","pageList","length","item","index","udpTransactionHistoryUdpTransactionTypeTransactionAction","udpTransactionHistoryUdpTransactionEventType","changedByName","createdOn","udpTransactionHistoryUdpTransactionTypeStatus","Action_Api_Failed","style","maxWidth","displayName"],"sources":["../../../../../../src/udp/pages/UdpTransactionsPage/components/transactionHistory/TransactionTimeline.jsx"],"sourcesContent":["import React, {\n  useEffect,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n  useCallback,\n  useState\n} from 'react';\nimport { LinearProgress } from '@material-ui/core';\nimport {\n  apiMutate,\n  useAxiosMutate\n} from '../../../../../utilities/useAxiosMutate';\nimport { UdpTimeline } from '../../../../../UI/timeline/UdpTimeline';\nimport { EmptyStateDisplay, SideSheet } from '../../../../../UI';\nimport { useTranslation } from 'react-i18next';\nimport { useSnackbar } from 'notistack';\nimport { TransactionTimelineItem } from './TransactionTimelineItem';\nimport { ConfigService } from '../../../../../configService';\nimport { formatDate } from '../../../../../UI/widgets/utils/dateUtils';\nimport { AmbientCard } from '../../../../../UI/surfaces/cards/AmbientCard';\nimport { TransactionChangeLog } from './TransactionChangeLog';\nimport { HttpStatusCode } from '../../../../../enums/httpStatusCodesEnums';\nimport { useCatalogStore } from '../../../../../stores';\nimport { TransactionEventTypeEnums } from '../../../../../enums';\n\nconst META_DATA_BLOCKLIST = new Set([\n  \"businessobjectkey\",\n  \"id\",\n  \"ignoringloggingtransactions\",\n]);\n\nexport const TransactionTimeline = forwardRef((props, ref) => {\n  const { transactionId } = props;\n  const { t } = useTranslation();\n  const { enqueueSnackbar } = useSnackbar();\n  const { currentApiCatalogId } = useCatalogStore();\n\n  const [udpDomainObjects, setUdpDomainObjects] = useState(null);\n  const [sideSheetOpen, setSideSheetOpen] = useState(false);\n\n  const searchObj = useMemo(() => {\n    return {\n      eagerLoad: true,\n      pageNumber: 0,\n      pageSize: 100,\n      filterElements: [\n        {\n          searchField: 'transactionId',\n          searchValue: transactionId,\n          searchOperator: '='\n        }\n      ],\n      orderElements: [\n        {\n          sortColumn: 'createdOn',\n          sortDirection: 'desc'\n        }\n      ],\n      getAll: true\n    };\n  }, [transactionId]);\n\n  const [\n    { data: transactionHistory, loading: isLoading },\n    fetchTransactionHistory\n  ] = useAxiosMutate(\n    ConfigService.productV1ApiUrl,\n    `UdpTransactionHistory/search`,\n    {\n      method: 'post',\n      data: searchObj\n    }\n  );\n\n  const filterData = (dataObj, allowedKeys) => {\n    if (!dataObj) return {};\n\n    const allowedSet = new Set(\n      allowedKeys\n        .map(key => key.toLowerCase())\n        .filter(key => !META_DATA_BLOCKLIST.has(key))\n    );\n\n    return Object.fromEntries(\n      Object.entries(dataObj).filter(([key]) => allowedSet.has(key.toLowerCase()))\n    );\n  };\n\n  const handleOnClick = useCallback(\n    async (transactionHistoryRecord) => {\n      const domain = transactionHistoryRecord?.udpTransactionHistoryUdpAuditEvent?.domain;\n\n      try {\n        const [catalogRes, comparisonRes] = await Promise.all([\n          apiMutate(\n            ConfigService.integrationV2ApiUrl,\n            `apiCatalog/${currentApiCatalogId}/catalogObject/${domain}`,\n            { method: 'get' }\n          ),\n          apiMutate(\n            ConfigService.productV1ApiUrl,\n            `UdpTransactionHistory/GetComparison`,\n            {\n              method: 'post',\n              data: {\n                auditEventId: transactionHistoryRecord.auditEventId,\n                entityBusinessKey: transactionHistoryRecord.entityBusinessKey,\n                transactionEventTypeId: transactionHistoryRecord.transactionEventTypeId\n              }\n            }\n          )\n        ]);\n\n        const catalog = catalogRes?.data;\n        if (!catalog) {\n          console.error(\"Missing catalog metadata for domain:\", domain);\n          enqueueSnackbar(\n            t('transactions.history.metadataLoadError', {\n              defaultValue: 'Unable to load metadata for this record.'\n            }),\n            {\n              variant: 'error',\n              autoHideDuration: 7000,\n              anchorOrigin: { vertical: 'top', horizontal: 'center' },\n              preventDuplicate: true\n            }\n          );\n          return;\n        }\n\n        const permissableFieldTypes = new Set([\"string\", \"DateTime\", \"string uuid\", \"int\", \"bool\"]);\n        const catalogPropertyNames = catalog.properties\n          .filter(field => permissableFieldTypes.has(field.type))\n          .map(property => property.name);\n\n        const data = comparisonRes.data;\n\n        const domainObjects = {\n          previous: filterData(data.previous, catalogPropertyNames),\n          current: filterData(data.current, catalogPropertyNames)\n        };\n\n        setUdpDomainObjects(domainObjects);\n        setSideSheetOpen(true);\n      } catch (error) {\n        console.error(\"Fetch Failed:\", error);\n\n        let userMessage = t('transactions.history.comparisonLoadError', {\n          defaultValue: 'Unable to load comparison. Please try again.'\n        });\n\n        if (error.response && error.response.status) {\n          const status = error.response.status;\n\n          switch (status) {\n            case HttpStatusCode.BAD_REQUEST:\n              userMessage = t('transactions.history.dataMismatchError', {\n                defaultValue:\n                  'Data mismatch detected. Please refresh the page and try again.'\n              });\n              break;\n            case HttpStatusCode.NOT_FOUND:\n              userMessage = t('transactions.history.recordNotFoundError', {\n                defaultValue: 'This history record no longer exists.'\n              });\n              break;\n            case HttpStatusCode.INTERNAL_SERVER_ERROR:\n              userMessage = t('transactions.history.systemError', {\n                defaultValue:\n                  'System error. Please contact support if this persists.'\n              });\n              break;\n          }\n        } else if (error.request) {\n          userMessage = t('transactions.history.networkError', {\n            defaultValue: 'Network error. Please check your connection.'\n          });\n        }\n\n        enqueueSnackbar(userMessage, {\n          variant: 'error',\n          autoHideDuration: 7000,\n          anchorOrigin: {\n            vertical: 'top',\n            horizontal: 'center',\n          },\n          preventDuplicate: true\n        });\n      }\n    },\n    [currentApiCatalogId, t, enqueueSnackbar]\n  );\n\n  const handleOnSideSheetClose = useCallback(() => {\n    setSideSheetOpen(false);\n  }, []);\n\n  useImperativeHandle(ref, () => ({\n    refresh: () => {\n      fetchTransactionHistory();\n    }\n  }));\n\n  useEffect(() => {\n    fetchTransactionHistory();\n  }, [fetchTransactionHistory]);\n\n  return (\n    <div>\n      {isLoading ? (\n        <div>\n          <LinearProgress />\n        </div>\n      ) : transactionHistory?.pageList?.length > 0 ? (\n      <AmbientCard>\n        <UdpTimeline>\n          {transactionHistory?.pageList?.map((item, index) => (\n            <TransactionTimelineItem\n              key={index}\n              item={item}\n              title={\n                item?.udpTransactionHistoryUdpTransactionTypeTransactionAction\n                  ?.name ??\n                item?.udpTransactionHistoryUdpTransactionEventType?.name\n              }\n              description={\n                item?.changedByName\n                  ? t('transactions.history.byUser', {\n                      defaultValue: 'By {{name}}',\n                      name: item?.changedByName\n                    })\n                  : null\n              }\n              date={\n                item?.createdOn\n                  ? formatDate(item?.createdOn, 'dd/mm/yyyy')\n                  : null\n              }\n              status={item?.udpTransactionHistoryUdpTransactionTypeStatus?.name}\n              onClick={handleOnClick}\n              dotColor={item?.udpTransactionHistoryUdpTransactionEventType?.transactionEventTypeId === TransactionEventTypeEnums.Action_Api_Failed ? 'error' : 'primary'}\n            />\n          ))}\n        </UdpTimeline>\n      </AmbientCard>\n      ) : (\n        <div>\n          <EmptyStateDisplay\n            primaryText={t('transactions.history.noHistory', {\n              defaultValue: 'No History'\n            })}\n          />\n        </div>\n      )}\n      {udpDomainObjects && (\n        <>\n          <SideSheet\n            title={t('transactions.history.domainComparison', {\n              defaultValue: 'Domain Comparison'\n            })}\n            width={700}\n            open={sideSheetOpen}\n            onClose={handleOnSideSheetClose}\n            PaperProps={{\n              style: { maxWidth: '100vw' }\n            }}\n          >\n            <TransactionChangeLog\n              oldData={udpDomainObjects.previous}\n              newData={udpDomainObjects.current}\n            />\n          </SideSheet>\n        </>\n      )}\n    </div>\n  );\n});\n\nTransactionTimeline.displayName = 'TransactionTimeline';\nexport default TransactionTimeline;\n"],"mappings":"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"}