udp-react-enterprise-component-library 25.18.1-beta.79 → 25.18.1-beta.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -100,6 +100,10 @@ const useTransactionEngine = (transactionTypeId) => {
100
100
  const hasClosedStatus = useMemo(() => {
101
101
  return transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.some((status) => status.isClosedStatus);
102
102
  }, [transactionType]);
103
+ const canCancel = useMemo(() => {
104
+ return transactionType?.archiveOnCancel || transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.some((status) => status.isCancelledStatus);
105
+ }, [transactionType]);
106
+ const transactionTypeStatuses = useMemo(() => transactionType?.udpTransactionTypeUdpTransactionTypeStatus, [transactionType]);
103
107
  const transactionTypeGridColumns = useMemo(() => {
104
108
  if (Array.isArray(transactionType?.domainFields)) return transactionType?.domainFields || [];
105
109
  else if (transactionType?.domainFields && Object.keys(transactionType.domainFields).length) return Object.entries(transactionType.domainFields).map(([propertyName, value]) => ({
@@ -171,20 +175,23 @@ const useTransactionEngine = (transactionTypeId) => {
171
175
  getUiActionRenderPageId,
172
176
  checkIfTransactionIsClosed,
173
177
  getTransactionTypeLabel,
174
- transactionTypeStatusColorsMap
178
+ transactionTypeStatusColorsMap,
179
+ transactionTypeStatuses,
180
+ canCancel
175
181
  };
176
182
  };
177
183
 
178
184
  //#endregion
179
185
  //#region src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.jsx
186
+ const UDP_TRANSACTION_GRID_ID = "32c0fd0b-bb94-497a-b47a-6c7e8f746134";
180
187
  const UdpTransactionGrid = (props) => {
181
188
  const { transactionTypeId, domainName, transactionTypeLoading, handleGridApiCallback, openAddTransaction, openViewTransaction, openEditTransaction, openAttachmentTransaction, openWorkflowActionTransaction, openCreateRevision, searchMethodObject, domainColumnFormatters = {}, refreshGridData, gridApi, initialFilterModel, initialGridOptions = {} } = props;
182
189
  const [dialogOpen, setDialogOpen] = useState(false);
183
190
  const [selectedTransaction, setSelectedTransaction] = useState(null);
184
191
  const { t } = useTranslation();
185
- const { hasRevisions, transactionTypeGridColumns, getUiActionRenderPageId, transactionTypeStatusColorsMap, getTransactionTypeLabel } = useTransactionEngine(transactionTypeId);
192
+ const { hasRevisions, transactionTypeGridColumns, getUiActionRenderPageId, transactionTypeStatusColorsMap, getTransactionTypeLabel, transactionTypeStatuses, canCancel } = useTransactionEngine(transactionTypeId);
186
193
  const { handleErrorSnackbar, handleSuccessSnackbar } = useHandleAxiosSnackbar();
187
- const [{ data, loading: deleteLoading, error: deleteError }, deleteTransaction] = useAxiosMutate(`${ConfigService$1.productV1ApiUrl}`, `udptransaction/${selectedTransaction?.transactionId}`, { method: "delete" }, {});
194
+ const [{ data, loading: cancelLoading, error: cancelError }, cancelTransaction] = useAxiosMutate(`${ConfigService$1.productV1ApiUrl}`, `udptransaction/${selectedTransaction?.transactionId}/cancelTransaction`, { method: "post" }, {});
188
195
  const { currentApiCatalogId, catalogsMap } = useCatalogStore();
189
196
  const handleDialogClose = () => {
190
197
  setSelectedTransaction(null);
@@ -192,7 +199,7 @@ const UdpTransactionGrid = (props) => {
192
199
  };
193
200
  const handleConfirmActionDialog = useCallback(async () => {
194
201
  try {
195
- if ((await deleteTransaction())?.status === 204) {
202
+ if ((await cancelTransaction())?.status === 200) {
196
203
  refreshGridData();
197
204
  handleSuccessSnackbar(t(`Transaction has been cancelled successfully`));
198
205
  } else handleErrorSnackbar(new Error(t(`Error cancelling Transaction. Please try again later.`)));
@@ -202,7 +209,7 @@ const UdpTransactionGrid = (props) => {
202
209
  handleDialogClose();
203
210
  }
204
211
  }, [
205
- deleteTransaction,
212
+ cancelTransaction,
206
213
  refreshGridData,
207
214
  handleErrorSnackbar,
208
215
  handleSuccessSnackbar,
@@ -251,6 +258,14 @@ const UdpTransactionGrid = (props) => {
251
258
  statusMappingConfig: transactionTypeStatusColorsMap,
252
259
  getStatusValue: (params) => params?.data.udpTransactionUdpTransactionTypeStatus.name
253
260
  },
261
+ filter: "agSetColumnFilter",
262
+ filterParams: {
263
+ values: (params) => {
264
+ if (transactionTypeStatuses) params.success(transactionTypeStatuses);
265
+ },
266
+ keyCreator: (params) => params.value.transactionTypeStatusId,
267
+ valueFormatter: (params) => params.value.name
268
+ },
254
269
  valueFormatter: (params) => params?.data.udpTransactionUdpTransactionTypeStatus.name
255
270
  },
256
271
  {
@@ -308,7 +323,7 @@ const UdpTransactionGrid = (props) => {
308
323
  },
309
324
  disabled: !hasRevisions
310
325
  },
311
- {
326
+ ...canCancel ? [{
312
327
  id: 4,
313
328
  title: t("Cancel"),
314
329
  iconName: "close16",
@@ -316,25 +331,31 @@ const UdpTransactionGrid = (props) => {
316
331
  setSelectedTransaction(params?.data);
317
332
  setDialogOpen(true);
318
333
  }
319
- }
334
+ }] : []
320
335
  ] }
321
336
  }
322
337
  ];
323
338
  transactionTypeGridColumns?.forEach((gridColumn) => {
324
339
  const propertyName = gridColumn?.propertyName || "";
340
+ let catalogObject = catalogObjectList?.find((catalogObject$1) => getSanitizedName(catalogObject$1.catalogObjectName) == domainName);
325
341
  let valueFormatter = (params) => {
326
342
  if (catalogObjectList) {
327
- if (((catalogObjectList?.find((catalogObject) => getSanitizedName(catalogObject.catalogObjectName) == domainName))?.properties?.find((objectProperty) => {
343
+ if ((catalogObject?.properties?.find((objectProperty) => {
328
344
  return objectProperty.name === propertyName;
329
345
  }))?.type.toLowerCase() == "datetime" && params?.data?.entityBusinessObject[propertyName]) return removeTimeFromDate(params?.data?.entityBusinessObject[propertyName]);
330
346
  }
331
347
  return params?.data ? params?.data?.entityBusinessObject[propertyName] : "";
332
348
  };
333
349
  if (domainColumnFormatters[propertyName]) valueFormatter = domainColumnFormatters[propertyName].formatter;
350
+ let agColumnFilter = "agTextColumnFilter";
351
+ if ((catalogObject?.properties?.find((objectProperty) => {
352
+ return objectProperty.name === propertyName;
353
+ }))?.type.toLowerCase() == "datetime") agColumnFilter = "agDateColumnFilter";
334
354
  initialColumnDefs.push({
335
355
  headerName: gridColumn?.displayName,
336
356
  field: `${UdpSearchEnums.UdpBusinessDomainPrefix}.${domainName}.${propertyName}`,
337
- valueFormatter
357
+ valueFormatter,
358
+ filter: agColumnFilter
338
359
  });
339
360
  });
340
361
  Object.keys(domainColumnFormatters).forEach((columnKey) => {
@@ -365,7 +386,9 @@ const UdpTransactionGrid = (props) => {
365
386
  hasRevisions,
366
387
  pdfViewPageId,
367
388
  transactionTypeStatusColorsMap,
368
- catalogObjectList
389
+ catalogObjectList,
390
+ transactionTypeStatuses,
391
+ canCancel
369
392
  ]);
370
393
  const headerConfig = {
371
394
  title: domainName,
@@ -378,6 +401,7 @@ const UdpTransactionGrid = (props) => {
378
401
  }
379
402
  };
380
403
  const gridFunctions = [
404
+ { name: "openSavedViews" },
381
405
  { name: "agGridExport" },
382
406
  { name: "agGridHideShowColumns" },
383
407
  { name: "agGridSizeColumnsToFit" }
@@ -431,7 +455,9 @@ const UdpTransactionGrid = (props) => {
431
455
  gridOptions,
432
456
  columnDefs,
433
457
  searchMethodConfig,
434
- gridApiCallback: handleGridApiCallback
458
+ gridApiCallback: handleGridApiCallback,
459
+ gridId: UDP_TRANSACTION_GRID_ID,
460
+ entityName: domainName
435
461
  }), /* @__PURE__ */ React.createElement(FluentDialog, {
436
462
  title: t(`Cancel Transaction`),
437
463
  message: `Are you sure you want to cancel the transaction for ${domainName} - ${transactionLabel || ""}?`,
@@ -441,7 +467,7 @@ const UdpTransactionGrid = (props) => {
441
467
  actionTwo: handleDialogClose,
442
468
  open: dialogOpen,
443
469
  handleClose: handleDialogClose,
444
- loading: deleteLoading
470
+ loading: cancelLoading
445
471
  }));
446
472
  };
447
473
  var UdpTransactionGrid_default = UdpTransactionGrid;
@@ -2441,4 +2467,4 @@ var UdpTransactionsPage_exports = /* @__PURE__ */ __exportAll({ default: () => U
2441
2467
 
2442
2468
  //#endregion
2443
2469
  export { UdpTransactionsPage_default as n, UdpTransactionsPage_exports as t };
2444
- //# sourceMappingURL=UdpTransactionsPage-DXhT7CVV.js.map
2470
+ //# sourceMappingURL=UdpTransactionsPage-7r0fyOpo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpTransactionsPage-7r0fyOpo.js","names":["ConfigService","catalogObject","LinearProgress","ConfigService","Divider","AttachmentTransactionAttachmentList","LinearProgress","ConfigService","UdpTransactionCustomPage","Typography","ConfigService","useStyles","Typography","useStyles","ConfigService","LinearProgress","Typography","ConfigService","LinearProgress","transaction","ConfigService","catalogObjectInfo","DetailsFormFields","ConfigService","WorkflowActions","EditTransactionHeaderItem","Divider","UdpTransactionCustomPage","EditTransactionDetailsForm","EditTransactionDetailsFooterItem","ConfigService","ViewTransaction","UdpTransactionCustomPage","AttachmentTransaction","WorkflowActions","EditTransaction","ConfigService","UdpTransactionGrid","UdpTransactionSidesheet"],"sources":["../src/stores/transactionStore.ts","../src/utilities/transactions/useTransactionEngine.js","../src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/ViewTransaction.jsx","../src/udp/pages/UdpTransactionsPage/components/AttachmentTransactionAttachmentList.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/AttachmentTransaction.jsx","../src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/WorkflowActions.jsx","../src/uploader/utils/allowedFileProperties.js","../src/udp/pages/UdpTransactionsPage/sidesheets/EditTransactionHeaderItem.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionHistory/TransactionTimelineItem.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionHistory/TransactionTimeline.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionAttachment/TransactionAttachment.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionAttachment/TransactionAttachments.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionNote/TransactionNote.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionNote/TransactionNoteForm.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionNote/TransactionNotes.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/enum.ts","../src/udp/pages/UdpTransactionsPage/components/EditTransactionDetailsFooterItem.jsx","../src/udp/pages/UdpTransactionsPage/components/EditTransactionDetailsFormFields.jsx","../src/udp/pages/UdpTransactionsPage/components/EditTransactionDetailsForm.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.jsx","../src/udp/pages/UdpTransactionsPage/UdpTransactionSidesheet.jsx","../src/hooks/useTransactionType.js","../src/hooks/useUdpGridFilterModel.js","../src/udp/pages/UdpTransactionsPage/UdpTransactionsPage.jsx","../src/udp/pages/UdpTransactionsPage/index.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\ninterface TransactionState {\n transactionTypesMap: object | null | undefined;\n setTransactionTypesMap: (transactionTypes: object) => void;\n}\n\nexport const useTransactionStore: () => TransactionState =\n create<TransactionState>()(\n devtools((set) => ({\n transactionTypesMap: {},\n setTransactionTypesMap: (transactionTypesMap) =>\n set((state) => ({\n transactionTypesMap: {\n ...state.transactionTypesMap,\n ...transactionTypesMap\n }\n }))\n }))\n );\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport jsonLogic from 'json-logic-js';\nimport { useTransactionStore } from '../../stores/transactionStore';\nimport { useUser } from '../auth';\nimport { useCatalogStore } from '../../stores';\nimport {\n TransactionActionTypeEnums,\n TransactionEventTypeEnums\n} from '../../enums';\n\nexport const useTransactionEngine = (transactionTypeId) => {\n const user = useUser();\n const [transactionTypeFields, setTransactionTypeFields] = useState([]);\n\n const currentApiCatalogId = useCatalogStore(\n (state) => state.currentApiCatalogId\n );\n const catalogsMap = useCatalogStore((state) => state.catalogsMap);\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 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 TransactionEventTypeEnums.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 TransactionEventTypeEnums.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 getUiActionRenderPageId = useCallback(\n (uiActionType) => {\n const uiAction =\n transactionType?.udpTransactionTypeUdpTransactionUiAction?.find(\n (action) => action.transactionUiActionTypeId === uiActionType\n );\n return uiAction?.parameters?.pageId || null;\n },\n [transactionType]\n );\n\n const getTransactionTypeLabel = useCallback(\n (udpTransaction) => {\n if (!transactionType?.domainFieldLabel) return null;\n return udpTransaction?.entityBusinessObject\n ? udpTransaction.entityBusinessObject[transactionType.domainFieldLabel]\n : null;\n },\n [transactionType]\n );\n\n const checkIfTransactionIsClosed = useCallback(\n (udpTransaction) => {\n if (!hasClosedStatus) return false;\n const closedStatus =\n transactionType?.udpTransactionTypeUdpTransactionTypeStatus?.find(\n (status) => status.isClosedStatus\n );\n if (!closedStatus) return false;\n return (\n closedStatus.transactionTypeStatusId === udpTransaction?.currentStatusId\n );\n },\n [hasClosedStatus, transactionType]\n );\n\n useEffect(() => {\n if (catalogsMap && currentApiCatalogId && transactionType) {\n const apiCatalog = catalogsMap[currentApiCatalogId];\n if (apiCatalog) {\n const catalogObjects = apiCatalog.ctlg.catalogObjectList;\n const transactionTypeObject = catalogObjects.find(\n (obj) =>\n obj.catalogObjectName.toLowerCase() ===\n transactionType?.domainName?.toLowerCase()\n );\n if (transactionTypeObject) {\n setTransactionTypeFields(transactionTypeObject.properties || []);\n }\n }\n }\n }, [catalogsMap, currentApiCatalogId, transactionType]);\n\n return {\n currentTransactionType: transactionType,\n evaluateRule,\n getTransactionTypeTransactionActions,\n hasRevisions,\n getHiddenFields,\n getRequiredFields,\n hasClosedStatus,\n transactionTypeGridColumns,\n getUiActionRenderPageId,\n checkIfTransactionIsClosed,\n getTransactionTypeLabel,\n transactionTypeStatusColorsMap,\n transactionTypeStatuses,\n canCancel\n };\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SearchMethodUdpGrid } from '../../../UI/templates/newGrid';\nimport { FluentDialog, LinearProgress } from '../../../UI';\nimport { useTransactionEngine } from '../../../utilities/transactions/useTransactionEngine';\nimport { useAxiosMutate } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { useHandleAxiosSnackbar } from '../../../utilities';\nimport { TransactionUiActionTypeEnums, UdpSearchEnums } from '../../../enums';\nimport { useCatalogStore } from '../../../../src/stores/catalogStore';\nimport { getSanitizedName } from '../../../utilities/entities';\n\nconst UDP_TRANSACTION_GRID_ID = '32c0fd0b-bb94-497a-b47a-6c7e8f746134';\n\nconst UdpTransactionGrid = (props) => {\n const {\n transactionTypeId,\n domainName,\n transactionTypeLoading,\n handleGridApiCallback,\n openAddTransaction,\n openViewTransaction,\n openEditTransaction,\n openAttachmentTransaction,\n openWorkflowActionTransaction,\n openCreateRevision,\n searchMethodObject,\n domainColumnFormatters = {},\n refreshGridData,\n gridApi,\n initialFilterModel,\n initialGridOptions = {}\n } = props;\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedTransaction, setSelectedTransaction] = useState(null);\n\n const { t } = useTranslation();\n\n const {\n hasRevisions,\n transactionTypeGridColumns,\n getUiActionRenderPageId,\n transactionTypeStatusColorsMap,\n getTransactionTypeLabel,\n transactionTypeStatuses,\n canCancel\n } = useTransactionEngine(transactionTypeId);\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const [\n { data, loading: cancelLoading, error: cancelError },\n cancelTransaction\n ] = useAxiosMutate(\n `${ConfigService.productV1ApiUrl}`,\n `udptransaction/${selectedTransaction?.transactionId}/cancelTransaction`,\n {\n method: 'post'\n },\n {}\n );\n\n const { currentApiCatalogId, catalogsMap } = useCatalogStore();\n\n const handleDialogClose = () => {\n setSelectedTransaction(null);\n setDialogOpen(false);\n };\n\n const handleConfirmActionDialog = useCallback(async () => {\n try {\n const response = await cancelTransaction();\n if (response?.status === 200) {\n refreshGridData();\n handleSuccessSnackbar(t(`Transaction has been cancelled successfully`));\n } else {\n handleErrorSnackbar(\n new Error(t(`Error cancelling Transaction. Please try again later.`))\n );\n }\n } catch (error) {\n handleErrorSnackbar(error);\n } finally {\n handleDialogClose();\n }\n }, [\n cancelTransaction,\n refreshGridData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t\n ]);\n\n const removeTimeFromDate = (date) => {\n const parsedDate = new Date(date);\n if (parsedDate.getTime()) {\n const year = parsedDate.getFullYear();\n //Month is zero based 0 = Jan so need to add 1\n const month = parsedDate.getMonth() + 1;\n const day = parsedDate.getDate().toString();\n return `${year}-${month.toString()}-${day}`;\n }\n return parsedDate;\n };\n\n const addSpacingInHeaderName = (headerName) => {\n let formattedHeaderName = '';\n for (var i = 0; i < headerName.length; i++) {\n if (i !== 0 && headerName[i].match(/[A-Z]/)) {\n formattedHeaderName += ' ' + headerName[i];\n } else {\n formattedHeaderName += headerName[i];\n }\n }\n return formattedHeaderName;\n };\n\n const transactionLabel = useMemo(() => {\n return (\n getTransactionTypeLabel(selectedTransaction) ??\n selectedTransaction?.entityBusinessKey\n );\n }, [getTransactionTypeLabel, selectedTransaction]);\n\n const pdfViewPageId = useMemo(() => {\n return getUiActionRenderPageId(\n TransactionUiActionTypeEnums.Render_View_Pdf_Page\n );\n }, [getUiActionRenderPageId]);\n\n const catalogObjectList = useMemo(() => {\n if (\n catalogsMap &&\n currentApiCatalogId &&\n catalogsMap[currentApiCatalogId]\n ) {\n return catalogsMap[currentApiCatalogId]?.ctlg?.catalogObjectList;\n }\n return null;\n }, [catalogsMap, currentApiCatalogId]);\n\n const columnDefs = useMemo(() => {\n const initialColumnDefs = [\n {\n headerName: t('Transaction Id'),\n field: 'transactionId',\n hide: true\n },\n {\n headerName: t('Created On'),\n field: 'createdOn',\n cellDataType: 'dateString',\n valueFormatter: (params) => {\n return removeTimeFromDate(params?.data.createdOn);\n }\n },\n {\n headerName: t('Current Status'),\n field: 'currentStatusId',\n cellRenderer: 'statusRenderer',\n cellRendererParams: {\n statusMappingConfig: transactionTypeStatusColorsMap,\n getStatusValue: (params) =>\n params?.data.udpTransactionUdpTransactionTypeStatus.name\n },\n filter: 'agSetColumnFilter',\n filterParams: {\n values: (params) => {\n if (transactionTypeStatuses) {\n params.success(transactionTypeStatuses);\n }\n },\n keyCreator: (params) => params.value.transactionTypeStatusId,\n valueFormatter: (params) => params.value.name\n },\n valueFormatter: (params) =>\n params?.data.udpTransactionUdpTransactionTypeStatus.name\n },\n {\n headerName: t('Last Event Type'),\n field: 'lastEventTypeId',\n valueFormatter: (params) =>\n params?.data.udpTransactionUdpTransactionEventType.name\n },\n {\n headerName: t('Attachments'),\n field: 'attachments',\n pinned: 'right',\n maxWidth: 100,\n onCellClicked: (event) => {\n openAttachmentTransaction(event.data);\n },\n valueFormatter: (params) => {\n return params?.data.udpTransactionUdpTransactionAttachment.length;\n }\n },\n {\n field: 'actions',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList: [\n {\n id: 0,\n title: t('Next Steps'),\n iconName: 'migrateAlt',\n handleOnClick: (e, params) => {\n openWorkflowActionTransaction(params?.data);\n }\n },\n ...(pdfViewPageId\n ? [\n {\n id: 1,\n title: t('View'),\n iconName: 'view',\n handleOnClick: (e, params) => {\n openViewTransaction(params?.data);\n },\n disabled: !pdfViewPageId\n }\n ]\n : []),\n {\n id: 2,\n title: t('Edit'),\n iconName: 'edit',\n handleOnClick: (e, params) => {\n openEditTransaction(params?.data);\n }\n },\n {\n id: 3,\n title: t('Create Revision'),\n iconName: 'add',\n handleOnClick: (e, params) => {\n openCreateRevision(params?.data);\n },\n disabled: !hasRevisions\n },\n ...(canCancel\n ? [\n {\n id: 4,\n title: t('Cancel'),\n iconName: 'close16',\n handleOnClick: (e, params) => {\n setSelectedTransaction(params?.data);\n setDialogOpen(true);\n }\n }\n ]\n : [])\n ]\n }\n }\n ];\n transactionTypeGridColumns?.forEach((gridColumn) => {\n const propertyName = gridColumn?.propertyName || '';\n\n let catalogObject = catalogObjectList?.find(\n (catalogObject) =>\n getSanitizedName(catalogObject.catalogObjectName) == domainName\n );\n\n let valueFormatter = (params) => {\n if (catalogObjectList) {\n const matchingFieldInfo = catalogObject?.properties?.find(\n (objectProperty) => {\n return objectProperty.name === propertyName;\n }\n );\n if (\n matchingFieldInfo?.type.toLowerCase() == 'datetime' &&\n params?.data?.entityBusinessObject[propertyName]\n ) {\n return removeTimeFromDate(\n params?.data?.entityBusinessObject[propertyName]\n );\n }\n }\n return params?.data\n ? params?.data?.entityBusinessObject[propertyName]\n : '';\n };\n\n if (domainColumnFormatters[propertyName]) {\n valueFormatter = domainColumnFormatters[propertyName].formatter;\n }\n\n let agColumnFilter = 'agTextColumnFilter';\n\n const matchingFieldInfo = catalogObject?.properties?.find(\n (objectProperty) => {\n return objectProperty.name === propertyName;\n }\n );\n\n if (matchingFieldInfo?.type.toLowerCase() == 'datetime') {\n agColumnFilter = 'agDateColumnFilter';\n }\n\n initialColumnDefs.push({\n headerName: gridColumn?.displayName,\n field: `${UdpSearchEnums.UdpBusinessDomainPrefix}.${domainName}.${propertyName}`,\n valueFormatter: valueFormatter,\n filter: agColumnFilter\n });\n });\n\n Object.keys(domainColumnFormatters).forEach((columnKey) => {\n const gridColumnPropertyNames = transactionTypeGridColumns?.map(\n (col) => col.propertyName\n );\n if (!gridColumnPropertyNames?.includes(columnKey)) {\n let formatedHeaderName =\n columnKey.slice(0, 1).toUpperCase() + columnKey.slice(1);\n initialColumnDefs.push({\n headerName: formatedHeaderName,\n field: `${UdpSearchEnums.UdpBusinessDomainPrefix}.${domainName}.${columnKey}`,\n valueFormatter: domainColumnFormatters[columnKey].formatter\n });\n }\n });\n\n if (hasRevisions) {\n initialColumnDefs.splice(3, 0, {\n headerName: t('Revision No'),\n field: 'currentRevisionNo'\n });\n }\n\n return initialColumnDefs;\n }, [\n domainName,\n t,\n openViewTransaction,\n openEditTransaction,\n openAttachmentTransaction,\n openWorkflowActionTransaction,\n domainColumnFormatters,\n transactionTypeGridColumns,\n openCreateRevision,\n hasRevisions,\n pdfViewPageId,\n transactionTypeStatusColorsMap,\n catalogObjectList,\n transactionTypeStatuses,\n canCancel\n ]);\n\n const headerConfig = {\n title: domainName,\n primaryActionButton: {\n label: domainName + ' Entry',\n iconName: 'add',\n onClick: () => {\n openAddTransaction();\n }\n }\n // secondaryActionButtons: secondaryActionButtons\n };\n\n const gridFunctions = [\n { name: 'openSavedViews' },\n { name: 'agGridExport' },\n { name: 'agGridHideShowColumns' },\n { name: 'agGridSizeColumnsToFit' }\n ];\n\n const gridOptions = useMemo(() => {\n return {\n pagination: true,\n rowSelection: 'none',\n ...initialGridOptions\n };\n }, [initialGridOptions]);\n\n const searchMethodConfig = useMemo(() => {\n let combinedSearchObject = {\n eagerLoad: true,\n filterElements: [\n {\n searchField: 'transactionTypeId',\n searchOperator: '=',\n searchValue: transactionTypeId\n },\n {\n searchField: 'isDeleted',\n searchOperator: '=',\n searchValue: false\n }\n ]\n };\n\n if (searchMethodObject) {\n let combinedFilterElems = combinedSearchObject.filterElements.concat(\n searchMethodObject?.filterElements || []\n );\n\n combinedSearchObject = {\n ...combinedSearchObject,\n ...searchMethodObject\n };\n\n combinedSearchObject = {\n ...combinedSearchObject,\n filterElements: combinedFilterElems\n };\n }\n\n return {\n requestUrl: `${ConfigService.productV1ApiUrl}/UdpTransaction/search`,\n customSearchObject: combinedSearchObject\n };\n }, [transactionTypeId, searchMethodObject]);\n\n // eslint-disable-next-line react-you-might-not-need-an-effect/no-manage-parent\n useEffect(() => {\n if (\n gridApi &&\n initialFilterModel &&\n Object.keys(initialFilterModel).length\n ) {\n // 1. Set the filter model\n gridApi.setFilterModel(initialFilterModel);\n\n // 2. Inform the grid that filters have changed, which re-runs the data fetch (Server-Side)\n gridApi.onFilterChanged();\n }\n }, [gridApi, initialFilterModel]);\n\n console.log(gridApi?.getFilterModel());\n\n return (\n <>\n {transactionTypeLoading && <LinearProgress />}\n <SearchMethodUdpGrid\n gridHeaderConfig={headerConfig}\n gridFunctions={gridFunctions}\n gridOptions={gridOptions}\n columnDefs={columnDefs}\n searchMethodConfig={searchMethodConfig}\n gridApiCallback={handleGridApiCallback}\n gridId={UDP_TRANSACTION_GRID_ID}\n entityName={domainName}\n />\n <FluentDialog\n title={t(`Cancel Transaction`)}\n message={`Are you sure you want to cancel the transaction for ${domainName} - ${\n transactionLabel || ''\n }?`}\n labelOne={t('Confirm')}\n actionOne={handleConfirmActionDialog}\n labelTwo={t('Cancel')}\n actionTwo={handleDialogClose}\n open={dialogOpen}\n handleClose={handleDialogClose}\n loading={cancelLoading}\n />\n </>\n );\n};\n\nexport default UdpTransactionGrid;\n","import React from 'react';\nimport { FileViewer } from '../../../../UI';\n\nconst ViewTransaction = (props) => {\n // Currently don't have the cover file so no pdf file passed need to change once we know where it is from by cahnging filePath\n const { transaction } = props;\n\n return (\n <>\n <FileViewer\n data={{\n filePath: '',\n fileExtension: 'pdf'\n }}\n acceptedFileExtensions='pdf'\n />\n </>\n );\n};\n\nexport default ViewTransaction;\n","import React, { useMemo } from 'react';\nimport { AmbientList } from '../../../../UI';\nimport {\n PDFIcon,\n WordDocumentIcon,\n FileImageIcon\n} from '@fluentui/react-icons';\n\nconst AttachmentTransactionAttachmentList = (props) => {\n const { attachments, setSelectedAttachment } = props;\n\n const formattedAttachments = useMemo(() => {\n return attachments.map((attachment) => ({\n attachmentName: attachment.fileName,\n extension: attachment.extension,\n transactionAttachmentId: attachment.transactionAttachmentId\n }));\n }, [attachments]);\n\n const getFileIcon = (item) => {\n if (item.attachmentName.includes('.pdf')) {\n return PDFIcon;\n } else if (item.attachmentName.includes('.docx')) {\n return WordDocumentIcon;\n } else if (item.attachmentName.includes('.')) {\n return FileImageIcon;\n }\n };\n\n return (\n <>\n <AmbientList\n data={formattedAttachments}\n useAvatar={false}\n fieldConfig={{\n primaryText: 'attachmentName',\n secondaryText: 'description'\n }}\n onItemClick={(item) => {\n setSelectedAttachment(item);\n }}\n getItemIcon={(item) => {\n return getFileIcon(item);\n }}\n listHeight={ 'calc(100vh - 105px)'}\n maxHeight={'calc(100vh - 105px)'}\n />\n </>\n );\n};\n\nexport default AttachmentTransactionAttachmentList;\n","import React, {\n useState,\n useEffect,\n useImperativeHandle,\n useMemo,\n useCallback\n} from 'react';\nimport {\n AmbientAlert,\n Divider,\n EmptyStateDisplay,\n FileViewer,\n LinearProgress\n} from '../../../../UI';\nimport AttachmentTransactionAttachmentList from '../components/AttachmentTransactionAttachmentList';\nimport { apiMutate } from '../../../../utilities';\nimport { ViewIcon } from '@fluentui/react-icons';\nimport { makeStyles } from '@material-ui/core';\nimport { useAxiosGet } from '../../../../utilities';\nimport { ConfigService } from '../../../../configService/index';\nimport { useTranslation } from 'react-i18next';\n\nconst AttachmentTransaction = (props) => {\n const { transaction, attachmentRef } = props;\n const [selectedAttachment, setSelectedAttachment] = useState('');\n\n const attachments = transaction?.udpTransactionUdpTransactionAttachment;\n\n const { t } = useTranslation();\n\n const [{ data: attachmentFileInfo }, refetchattachmentFileInfo] = useAxiosGet(\n `${process.env.REACT_APP_PRODUCT_API_BASE}`,\n `UdpTransactionAttachment/${selectedAttachment?.transactionAttachmentId}/udpDriveFile/download`,\n {},\n true\n );\n\n const [{ data: attachmentFile, loading: loadingFile, error: downloadError }, refetchAttachmentFile] = useAxiosGet(\n `${process.env.REACT_APP_PRODUCT_API_BASE}`,\n `UdpTransactionAttachment/${selectedAttachment?.transactionAttachmentId}/download`,\n {\n responseType: 'blob'\n },\n true\n );\n\n const blobUrl = useMemo(() => {\n if (!attachmentFile) return null;\n const pdfBlob = new Blob([attachmentFile], { type: 'application/pdf' });\n return URL.createObjectURL(pdfBlob);\n }, [attachmentFile]);\n\n useEffect(() => {\n if (selectedAttachment) {\n refetchattachmentFileInfo();\n refetchAttachmentFile();\n }\n }, [selectedAttachment, refetchattachmentFileInfo, refetchAttachmentFile]);\n\n const getErrorMessage = () => {\n if (!downloadError) return null;\n\n const status = downloadError.response?.status;\n if (status === 404) return t('The requested attachment could not be found.');\n if (status >= 500) return t('A server error occured. Please try again later.');\n\n return downloadError.message || t('An unexpected error occured.');\n };\n\n let fileDataObj = {\n filePath: blobUrl,\n fileExtension: attachmentFileInfo?.extension\n };\n\n const fixedHeight = 'calc(100vh - 140px)'\n const useStyles = makeStyles((theme) => ({\n sidesheet: {\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n height: fixedHeight,\n },\n attachmentListContainer: {\n textAlign: 'left',\n width: '35%',\n height: fixedHeight\n },\n attachmentListHeader: {\n backgroundColor: 'white',\n justifyItems: 'left',\n paddingLeft: '5%'\n },\n attachmentListHeaderPrimaryText: {\n fontSize: 'var(--h6-font-size)',\n fontWeight: 'var(--body1-font-weight)',\n color: 'var(--text-main)'\n },\n attachmentListHeaderSecondaryText: {\n fontSize: 'var(--body2-font-size)',\n color: 'var(--text-secondary)',\n paddingBottom: '2%'\n },\n attachemntFileInfoCol: {\n width: '50%',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflowY: \"auto\",\n height:'calc(100vh - 50px)'\n },\n attachmentFileNameHeader: {\n backgroundColor: 'white'\n },\n attachmentFileName: {\n color: 'var(--text-main)',\n fontSize: 'var(--h6-font-size)',\n fontWeight: 'var(--body1-font-weight)',\n marginTop: '1%',\n marginBottom: '1%',\n justifySelf: 'center'\n },\n fileViewer: {\n marginLeft: 'var(--spacing-02)',\n marginRight: 'var(--spacing-02)'\n },\n divider: {\n '& MuiDivider-root': {\n backgroundColor: 'var(--gray-02)'\n }\n }\n }));\n\n const classStyles = useStyles();\n\n useImperativeHandle(attachmentRef, () => ({\n downloadSelectedFile: async () => {\n if (!selectedAttachment) return;\n\n try {\n const response = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${selectedAttachment.transactionAttachmentId}/udpDriveFile/download`,\n {}\n );\n const url = response.data.link;\n const link = document.createElement('a');\n link.href = url;\n link.download = selectedAttachment.fileName ?? selectedAttachment.name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (e) {\n console.error('Download failed', e);\n }\n }\n }));\n\n const handleOpenInNewTab = useCallback(\n e => {\n e?.preventDefault();\n\n if (blobUrl) {\n window.open(blobUrl, '_blank');\n }\n },\n [blobUrl]\n );\n\n const refetchAttachment = () => {\n refetchattachmentFileInfo();\n refetchAttachmentFile();\n }\n\n return (\n <>\n <div className={classStyles.sidesheet}>\n <div className={classStyles.attachmentListContainer}>\n <div className={classStyles.attachmentListHeader}>\n <div className={classStyles.attachmentListHeaderPrimaryText}>\n Attachments\n </div>\n <div className={classStyles.attachmentListHeaderSecondaryText}>\n {attachments.length + ' file(s) attached'}\n </div>\n </div>\n <div className={classStyles.divider}>\n <Divider />\n </div>\n <AttachmentTransactionAttachmentList\n transaction={transaction}\n attachments={attachments}\n setSelectedAttachment={setSelectedAttachment}\n />\n </div>\n\n <div className={classStyles.attachemntFileInfoCol}>\n <div className={classStyles.attachmentFileNameHeader}>\n {selectedAttachment && (\n <p className={classStyles.attachmentFileName}>\n {selectedAttachment.attachmentName}\n </p>\n )}\n <div className={classStyles.divider}>\n <Divider />\n </div>\n </div>\n\n {downloadError && (\n <AmbientAlert\n showAlert={!!downloadError}\n alertSeverity={\"error\"}\n alertTitle={t('Failed to load preview')}\n alertMessage={getErrorMessage()}\n alertAction={true}\n alertActionButton={t('Retry')}\n alertHandleAction={() => refetchAttachment()}\n />\n )}\n\n {loadingFile && !downloadError ? (\n <LinearProgress />\n ) : selectedAttachment && attachmentFileInfo && blobUrl ? (\n <div className={classStyles.fileViewer}>\n <FileViewer\n data={\n attachmentFileInfo?.extension == 'pdf'\n ? fileDataObj\n : [fileDataObj]\n }\n onClickDownload={handleOpenInNewTab}\n />\n </div>\n ) : !selectedAttachment &&\n (<EmptyStateDisplay\n icon={ViewIcon}\n primaryText={'Select an attachment to preview'}\n secondaryText={\n 'Choose a file from the attachments list to view its contents'\n }\n />\n )}\n </div>\n </div>\n </>\n );\n};\nexport default AttachmentTransaction;\n","import React, { useCallback, useMemo } from 'react';\nimport { PageContainer } from '../../../../page/PageContainer';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport { TransactionUiActionTypeEnums } from '../../../../enums';\nimport { Form, FormSpy } from '../../../../utilities/form';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport { apiMutate } from '../../../../utilities';\nimport { useHandleAxiosSnackbar } from '../../../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { set } from 'date-fns';\n\nconst UdpTransactionCustomPage = (props) => {\n const {\n pageId,\n transactionTypeId,\n transactionUiActionType,\n formRef,\n refetchTransaction,\n transaction,\n transactionTypeTransactionActionId,\n setHasUnsavedChanges,\n onSubmitSuccess\n } = props;\n\n const { getUiActionRenderPageId, getHiddenFields, getRequiredFields } =\n useTransactionEngine(transactionTypeId);\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n\n const executeCreateTransactionAction = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/transactionType/${transactionTypeId}/create`,\n {\n method: 'post'\n },\n data\n ),\n [transactionTypeId]\n );\n\n const executeSaveChanges = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${transaction?.transactionId}/saveChanges`,\n {\n method: 'put'\n },\n data\n ),\n [transaction?.transactionId]\n );\n\n const executeCreateRevision = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${transaction?.transactionId}/createRevision`,\n {\n method: 'post'\n },\n data\n ),\n [transaction?.transactionId]\n );\n\n const executeSubmitCustomAction = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `udptransactiontypeTransactionAction/${transactionTypeTransactionActionId}/transaction/${transaction.transactionId}/submit`,\n {\n method: 'post'\n },\n data\n ),\n [transactionTypeTransactionActionId, transaction?.transactionId]\n );\n\n const onSubmit = useCallback(\n async (values) => {\n try {\n const request = { data: values };\n let response = null;\n let message = '';\n let errorMessagePart = '';\n if (\n transactionUiActionType ===\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n ) {\n response = await executeCreateTransactionAction(request);\n message = 'Transaction has been created successfully';\n errorMessagePart = 'creating';\n } else if (\n transactionUiActionType ===\n TransactionUiActionTypeEnums.Render_Transaction_Details_Page\n ) {\n response = await executeSaveChanges(request);\n message = 'Transaction has been saved successfully';\n errorMessagePart = 'saving';\n } else if (\n transactionUiActionType ===\n TransactionUiActionTypeEnums.Render_Create_Revision_Page\n ) {\n response = await executeCreateRevision(request);\n message = 'Revision has been created successfully';\n errorMessagePart = 'creating revision for';\n } else if (!!transactionTypeTransactionActionId) {\n response = await executeSubmitCustomAction(request);\n message = 'Action has been submitted successfully';\n errorMessagePart = 'submitting action for';\n }\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`${message} `));\n onSubmitSuccess?.(response);\n } else if (response) {\n handleErrorSnackbar(\n new Error(\n t(\n `Error ${errorMessagePart} Transaction. Please try again later.`\n )\n )\n );\n }\n } catch (error) {\n handleErrorSnackbar(error);\n } finally {\n if (setHasUnsavedChanges) {\n formRef.current?.form?.restart(values);\n setHasUnsavedChanges(false);\n }\n if (refetchTransaction) {\n refetchTransaction();\n }\n }\n },\n [\n executeCreateTransactionAction,\n executeSaveChanges,\n executeCreateRevision,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n transactionUiActionType,\n executeSubmitCustomAction,\n t,\n transactionTypeTransactionActionId,\n setHasUnsavedChanges,\n formRef,\n onSubmitSuccess,\n refetchTransaction\n ]\n );\n\n const isFieldRequired = useCallback(\n (fieldName) => {\n const requiredFields = getRequiredFields(transaction);\n return requiredFields?.includes(fieldName);\n },\n [getRequiredFields, transaction]\n );\n\n const isFieldHidden = useCallback(\n (fieldName) => {\n const hiddenFields = getHiddenFields(transaction);\n return hiddenFields?.includes(fieldName);\n },\n [getHiddenFields, transaction]\n );\n\n const transactionPageId = useMemo(() => {\n if (pageId) {\n return pageId;\n }\n return getUiActionRenderPageId(transactionUiActionType);\n }, [getUiActionRenderPageId, transactionUiActionType, pageId]);\n\n if (!transactionPageId) {\n return null;\n }\n\n return (\n <Form onSubmit={onSubmit} ref={formRef}>\n <FormSpy subscription={{ dirty: true }}>\n {({ dirty }) => {\n if (setHasUnsavedChanges) {\n setHasUnsavedChanges(dirty);\n }\n }}\n </FormSpy>\n <PageContainer\n pageId={transactionPageId}\n updateLocationState={false}\n widgetParams={{ transaction, isFieldRequired, isFieldHidden }}\n />\n </Form>\n );\n};\n\nexport default UdpTransactionCustomPage;\n","import React, { useState, useCallback, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSnackbar } from 'notistack';\nimport { DocumentIcon } from '@fluentui/react-icons';\nimport { FluentDialog, SideSheet } from '../../../../UI';\nimport { useAxiosMutate } from '../../../../utilities';\nimport { ConfigService } from '../../../../configService';\nimport { UdpActionCard } from '../../../../UI/inputs/buttons/UdpActionCard/UdpActionCard';\nimport { getIconFromName } from '../../../../utilities/tree';\nimport './WorkflowActions.css';\nimport { TransactionEventTypeEnums } from '../../../../enums/unitySystemEnums';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport UdpTransactionCustomPage from '../components/UdpTransactionCustomPage';\n\nconst TransactionActionButton = ({\n icon,\n primaryText,\n secondaryText,\n onClick,\n action\n}) => {\n const actionCardIcon = useMemo(() => getIconFromName(icon), [icon]);\n\n return (\n <UdpActionCard\n icon={actionCardIcon ? actionCardIcon : DocumentIcon}\n primaryText={primaryText}\n secondaryText={secondaryText}\n onClick={() => {\n onClick(action);\n }}\n />\n );\n};\n\nconst WorkflowActions = ({ transaction, closeSideSheet, refreshGridData }) => {\n const [dialogOpen, setDialogOpen] = useState(true);\n const [dialogUserStrings, setDialogUserStrings] = useState(null);\n const [selectedAction, setSelectedAction] = useState(null);\n const [sideSheetOpen, setSideSheetOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const formRef = useRef(null);\n\n const { getTransactionTypeTransactionActions } = useTransactionEngine(\n transaction.transactionTypeId\n );\n\n const handleOnCloseSideSheet = useCallback(() => {\n setSideSheetOpen(false);\n }, []);\n\n const handleSubmitWorkflowAction = useCallback(async () => {\n setLoading(true);\n await formRef.current?.form?.submit();\n setLoading(false);\n handleOnCloseSideSheet();\n closeSideSheet();\n refreshGridData();\n }, [handleOnCloseSideSheet, refreshGridData, closeSideSheet, formRef]);\n\n const transactionTypeTransactionActions = useMemo(() => {\n return (\n getTransactionTypeTransactionActions(\n transaction,\n TransactionEventTypeEnums.Sidesheet\n ) || []\n );\n }, [getTransactionTypeTransactionActions, transaction]);\n\n // Base URL and url get overwritten in postTransactionData function call in handleConfirmActionDialog()\n const [{ data: transactionData }, postTransactionData] = useAxiosMutate(\n `${ConfigService.productV1ApiUrl}`,\n 'udptransactiontypeTransactionAction',\n {\n method: 'post'\n },\n {}\n );\n\n const i18n = useTranslation().t;\n const { enqueueSnackbar } = useSnackbar();\n\n const handleDialogOpen = useCallback((title, message) => {\n setDialogUserStrings({ title, message });\n setDialogOpen(true);\n }, []);\n\n const handleDialogClose = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const handleConfirmActionDialog = useCallback(async () => {\n setDialogOpen(true);\n handleDialogClose();\n setLoading(true);\n try {\n const data = await postTransactionData({\n // Change URL to config\n url:\n `${ConfigService.productV1ApiUrl}` +\n `/udptransactiontypeTransactionAction/${selectedAction.transactionTypeTransactionActionId}/transaction/${transaction.transactionId}/submit`,\n data: {}\n });\n enqueueSnackbar(i18n('Successfully submitted!'), {\n variant: 'success',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n closeSideSheet();\n refreshGridData();\n } catch (event) {\n enqueueSnackbar(i18n(event.message), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n setLoading(false);\n }, [\n postTransactionData,\n handleDialogClose,\n transaction,\n selectedAction,\n enqueueSnackbar,\n i18n,\n closeSideSheet,\n refreshGridData\n ]);\n const handleOnActionClick = useCallback(\n (action) => {\n const pageId = action.parameters.pageId;\n setSelectedAction(action);\n if (pageId) {\n setSideSheetOpen(true);\n } else {\n handleDialogOpen(action.name, action.description);\n }\n },\n [handleDialogOpen]\n );\n\n const TransactionActionButtons = useMemo(() => {\n if (!transactionTypeTransactionActions.length) {\n return null;\n }\n return transactionTypeTransactionActions?.map((action) => (\n <TransactionActionButton\n key={action.transactionTypeTransactionActionId}\n primaryText={action.name}\n secondaryText={action.description}\n icon={action.icon}\n onClick={handleOnActionClick}\n action={action}\n />\n ));\n }, [transactionTypeTransactionActions, handleOnActionClick]);\n\n return (\n <>\n <div className='transaction-action-buttons-container'>\n {TransactionActionButtons}\n </div>\n\n {dialogUserStrings && (\n <FluentDialog\n title={i18n(\n `Are you sure you want to proceed with \\\"${dialogUserStrings.title}\\\"?`\n )}\n message={dialogUserStrings.message}\n labelOne={i18n('Confirm')}\n actionOne={handleConfirmActionDialog}\n labelTwo={i18n('Cancel')}\n actionTwo={handleDialogClose}\n open={dialogOpen}\n handleClose={handleDialogClose}\n />\n )}\n\n <SideSheet\n open={sideSheetOpen}\n title={selectedAction?.name} // To Change\n onClose={handleOnCloseSideSheet}\n width={600}\n buttonLabel={i18n('Submit')}\n onSubmit={handleSubmitWorkflowAction}\n progress={loading}\n variant='indeterminate'\n >\n {selectedAction && selectedAction.parameters?.pageId && (\n <UdpTransactionCustomPage\n pageId={selectedAction.parameters.pageId}\n transaction={transaction}\n formRef={formRef}\n transactionTypeTransactionActionId={\n selectedAction.transactionTypeTransactionActionId\n }\n />\n )}\n </SideSheet>\n </>\n );\n};\n\nexport default WorkflowActions;\n","export const MAX_FILE_SIZE_MB = 30;\n\nexport const allowedExtensions = [\n \"pdf\",\n \"xlsx\",\n \"xls\",\n \"xlsm\",\n \"csv\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"tif\",\n \"tiff\",\n \"doc\",\n \"docx\",\n \"docm\",\n \"ppt\",\n \"pptm\",\n \"rtf\"\n];\n","import React from 'react';\nimport { StatusChip } from '../../../../UI/dataDisplay/status';\nimport { Typography } from '../../../../UI/dataDisplay/typography';\nimport './EditTransaction.css';\n\nconst EditTransactionHeaderItem = (props) => {\n const { label, value, statusChip } = props;\n return (\n <div className='transaction-sidesheet-header-item'>\n <Typography variant='caption'>{label}</Typography>\n {statusChip ? (\n <div className='transaction-sidesheet-header-item-status'>\n <StatusChip {...statusChip} />\n </div>\n ) : (\n <Typography variant='body1'>{value}</Typography>\n )}\n </div>\n );\n};\n\nexport default EditTransactionHeaderItem;\n","import React from 'react';\nimport {\n UdpTimelineItem,\n UdpTimelineConnector,\n UdpTimelineDot,\n UdpTimelineSeparator\n} from 'udp-react-stencil-component-library';\n\nexport const TransactionTimelineItem = (props) => {\n const {\n title,\n description,\n date,\n status,\n onClick\n } = props;\n\n return (\n <UdpTimelineItem\n dotShape='default'\n onItemClick={onClick}\n clickable\n statusLabel={status}\n >\n <UdpTimelineSeparator slot='separator'>\n <UdpTimelineConnector />\n <UdpTimelineDot color='primary' shape='default' size='medium'>\n </UdpTimelineDot>\n </UdpTimelineSeparator>\n <span slot='title'>{title}</span>\n <span slot='content'>{date}</span>\n <span slot='caption'>{description}</span>\n </UdpTimelineItem>\n );\n};\n","import React, {\n useEffect,\n useMemo,\n forwardRef,\n useImperativeHandle\n} from 'react';\nimport { LinearProgress } from '@material-ui/core';\nimport { useAxiosMutate } from '../../../../../utilities/useAxiosMutate';\nimport { UdpTimeline } from '../../../../../UI/timeline/UdpTimeline';\nimport { EmptyStateDisplay } from '../../../../../UI';\nimport { useTranslation } from 'react-i18next';\nimport { TransactionTimelineItem } from './TransactionTimelineItem';\nimport { ConfigService } from '../../../../../configService';\nimport { formatDate } from '../../../../../UI/widgets/utils/dateUtils';\nimport { AmbientCard } from '../../../../../UI/surfaces/cards/AmbientCard';\n\nexport const TransactionTimeline = forwardRef((props, ref) => {\n const { transactionId } = props;\n const { t } = useTranslation();\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 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 title={\n item?.udpTransactionHistoryUdpTransactionTypeTransactionAction\n ?.name ??\n item?.udpTransactionHistoryUdpTransactionEventType?.name\n }\n description={\n item?.changedByName ? `By ${item?.changedByName}` : null\n }\n date={\n item?.createdOn\n ? formatDate(item?.createdOn, 'dd/mm/yyyy')\n : null\n }\n status={\n item?.udpTransactionHistoryUdpTransactionTypeStatus?.name\n }\n />\n ))}\n </UdpTimeline>\n </AmbientCard>\n ) : (\n <div>\n <EmptyStateDisplay primaryText={t('No History')} />\n </div>\n )}\n </div>\n );\n});\n\nTransactionTimeline.displayName = 'TransactionTimeline';\nexport default TransactionTimeline;\n","import React from 'react';\nimport { ConfigService, UdpAttachmentItem } from 'udp-react-stencil-component-library';\nimport { useAxiosGet } from '../../../../../utilities';\n\nexport const TransactionAttachment = (props) => {\n const { attachment, isLastItem } = props;\n\n const [{ data: attachmentWithDownloadLink, loading: isLoading }] =\n useAxiosGet(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${attachment?.transactionAttachmentId}/udpDriveFile/download`,\n {},\n !!!attachment?.transactionAttachmentId\n );\n\n return (\n <UdpAttachmentItem\n loading={isLoading}\n fileName={attachment?.fileName}\n fileSize={attachment?.fileSize}\n fileExtension={attachment?.extension}\n uploadedBy={attachment?.updatedByName}\n uploadedDate={attachment?.lastUpdated}\n isLastItem={isLastItem}\n downloadUrl={attachmentWithDownloadLink?.link}\n />\n );\n};\n","import React from 'react';\nimport { AmbientCard } from '../../../../../UI/surfaces/cards/AmbientCard';\nimport { EmptyStateDisplay } from '../../../../../UI';\nimport { useTranslation } from 'react-i18next';\nimport { TransactionAttachment } from './TransactionAttachment';\nimport { LinearProgress } from '@material-ui/core';\n\nexport const TransactionAttachments = (props) => {\n const { transactionAttachments, isLoading } = props;\n const { t } = useTranslation();\n\n return (\n <div>\n {isLoading ? (\n <LinearProgress />\n ) : transactionAttachments?.pageList?.length > 0 ? (\n <AmbientCard fullWidth>\n {transactionAttachments.pageList.map((attachment, index) => (\n <TransactionAttachment\n key={index}\n attachment={attachment}\n isLastItem={index === transactionAttachments.pageList.length - 1}\n />\n ))}\n </AmbientCard>\n ) : (\n <div>\n <EmptyStateDisplay primaryText={t('No Attachments')} />\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { AmbientCard } from '../../../../../UI/surfaces/cards/AmbientCard';\nimport { Typography } from '../../../../../UI/dataDisplay/typography';\nimport { StatusChip } from '../../../../../UI/dataDisplay/status';\nimport { makeStyles } from '@material-ui/core';\nimport { Adornment } from '../../../../../UI';\nimport { getLocalizedDateTimeString } from '../../../../../UI/widgets/utils/dateUtils';\nimport { ContactIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n titleContainer: {\n display: 'flex',\n gap: '8px',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n chipContainer: {\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n marginTop: theme.spacing(1)\n },\n card: {\n width: '100%',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)'\n },\n padding: '8px 12px',\n border: '1px solid rgba(0, 0, 0, 0.08)'\n },\n captionText: {\n color: theme.palette.text.hint\n }\n}));\n\nexport const TransactionNote = (props) => {\n const { onClick, note } = props;\n const classes = useStyles();\n\n return (\n <div>\n <AmbientCard\n fullWidth\n adornment='info'\n noAdornment={false}\n customAdornment={<Adornment color={'info'} />}\n removeTopLayoutUnit\n removePadding\n lastChildBottomPadding={'0px'}\n cardContentHeight={'100%'}\n >\n <div className={classes.card} onClick={onClick}>\n <div className={classes.titleContainer}>\n <Typography variant='h6'>\n {note?.subject ?? 'Transaction Note'}\n </Typography>\n <Typography variant='caption' className={classes.captionText}>\n {getLocalizedDateTimeString(note?.createdOn)}\n </Typography>\n </div>\n <Typography variant='body1'>\n {note?.content ??\n 'This is a placeholder for the transaction note component.'}\n </Typography>\n\n <div className={classes.chipContainer}>\n <StatusChip\n label={note?.userDisplayName}\n color='default'\n variant='outline'\n icon={<ContactIcon />}\n />\n </div>\n </div>\n </AmbientCard>\n </div>\n );\n};\n","import React, { forwardRef, useCallback, useState } from 'react';\nimport { LinearProgress } from '../../../../../UI';\nimport { Form, Field } from '../../../../../utilities/form';\nimport { FluentTextField } from '../../../../../UI/inputs/textField/FluentTextField';\nimport { FluentTextFieldAutoComplete } from '../../../../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { Typography } from '../../../../../UI/dataDisplay/typography';\nimport { apiMutate } from '../../../../../utilities/useAxiosMutate';\nimport { ConfigService } from '../../../../../configService';\nimport { useAuthedUser } from '../../../../../utilities/auth';\nimport { useHandleAxiosSnackbar } from '../../../../../utilities';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n loading: {\n marginBottom: theme.spacing(1)\n }\n}));\n\nconst TransactionNoteFormComponent = (props, ref) => {\n const {\n initialValues,\n viewOnly,\n businessObjectKey,\n closeSideSheet,\n noteTypes,\n fetchNoteTypesLoading\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const user = useAuthedUser();\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const classes = useStyles();\n\n // TODO: create a new api to include both\n const addTransactionNote = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpNote`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const addNoteFiledFor = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpNoteFiledFor`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const handleSubmitForm = useCallback(\n async (values) => {\n setIsLoading(true);\n const formattedValues = {\n typeCode: values?.noteType?.code,\n subject: values?.subject,\n content: values?.content,\n unityUserID: user?.id,\n userDisplayName: user?.name ?? ''\n };\n\n await addTransactionNote({\n data: formattedValues\n })\n .then(async (res) => {\n console.log('Transaction Note response: ', { res });\n if (res?.data?.id) {\n await addNoteFiledFor({\n data: {\n entityBusinessKey: businessObjectKey,\n noteId: res?.data?.id\n }\n }).then(() => {\n handleSuccessSnackbar(\n t('Transaction note has been added successfully.')\n );\n if (closeSideSheet) {\n closeSideSheet();\n }\n });\n }\n })\n .catch((res) => {\n handleErrorSnackbar(res, t('Unable to add transaction note.'));\n });\n setIsLoading(false);\n },\n [\n addNoteFiledFor,\n addTransactionNote,\n businessObjectKey,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n user,\n closeSideSheet\n ]\n );\n\n return (\n <div>\n {fetchNoteTypesLoading ? (\n <div>\n <LinearProgress />\n </div>\n ) : (\n <div>\n {isLoading && (\n <div className={classes.loading}>\n <LinearProgress />\n </div>\n )}\n <Form\n ref={ref}\n onSubmit={handleSubmitForm}\n initialValues={initialValues}\n id={`transactionNoteForm-${businessObjectKey}`}\n render={({ submitting }) => (\n <>\n <Field\n component={FluentTextFieldAutoComplete}\n id='noteType'\n name='noteType'\n optionKey='name'\n disableClearable\n label={t('Type')}\n options={noteTypes ?? []}\n disabled={viewOnly || submitting}\n onChange={() => {}}\n required\n />\n\n <Field\n component={FluentTextField}\n id='subject'\n name='subject'\n label={t('Subject')}\n disabled={viewOnly || submitting}\n onChange={() => {}}\n required\n />\n <Field\n component={FluentTextField}\n id='content'\n name='content'\n label={t('Details')}\n onChange={() => {}}\n multiline\n rows={5}\n maxRows={10}\n disabled={viewOnly || submitting}\n required\n />\n {viewOnly && (\n <Typography variant='caption'>\n {t(\n 'Viewing note details. Use the Add Note action to create a new entry.'\n )}\n </Typography>\n )}\n </>\n )}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport const TransactionNoteForm = forwardRef(TransactionNoteFormComponent);\n","import React, { useCallback, useState, useMemo, useEffect } from 'react';\nimport { ConfigService } from '../../../../../configService';\nimport {\n EmptyStateDisplay,\n LinearProgress,\n SideSheet\n} from '../../../../../UI';\nimport { TransactionNote } from './TransactionNote';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@material-ui/core';\nimport {\n apiMutate,\n useAxiosMutate\n} from '../../../../../utilities/useAxiosMutate';\nimport { TransactionNoteForm } from './TransactionNoteForm';\n\nconst useStyles = makeStyles((theme) => ({\n notes: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1)\n }\n}));\n\nexport const TransactionNotes = (props) => {\n const {\n businessObjectKey,\n refreshNotes,\n setRefreshNotes,\n noteTypes,\n fetchNoteTypesLoading\n } = props;\n const [openSideSheet, setOpenSideSheet] = useState(false);\n const [selectedNote, setSelectedNote] = useState(null);\n const [noteList, setNoteList] = useState([]);\n const classes = useStyles();\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(false);\n\n const noteFileForSearchObj = useMemo(() => {\n return {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n filterElements: [\n {\n searchField: 'entityBusinessKey',\n searchValue: businessObjectKey,\n searchOperator: '='\n }\n ],\n getAll: true\n };\n }, [businessObjectKey]);\n\n const [\n { data: noteFiledFor, loading: fetchNoteFiledForLoading },\n fetchNoteFiledFor\n ] = useAxiosMutate(ConfigService.productV1ApiUrl, `UdpNoteFiledFor/search`, {\n method: 'post',\n data: noteFileForSearchObj\n });\n\n const handleViewNote = useCallback((note) => {\n setSelectedNote(note);\n setOpenSideSheet(true);\n }, []);\n\n const handleCloseSideSheet = useCallback(() => {\n setOpenSideSheet(false);\n setSelectedNote(null);\n }, []);\n\n useEffect(() => {\n fetchNoteFiledFor();\n }, [fetchNoteFiledFor]);\n\n useEffect(() => {\n if (refreshNotes) {\n fetchNoteFiledFor();\n // eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-data-to-parent\n setRefreshNotes(false);\n }\n }, [fetchNoteFiledFor, refreshNotes, setRefreshNotes]);\n\n useEffect(() => {\n if (!fetchNoteFiledForLoading && noteFiledFor?.pageList?.length > 0) {\n // eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-data-to-parent\n const noteIds = noteFiledFor?.pageList\n ?.map((obj) => obj?.noteID)\n .join(',');\n\n const searchObj = {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n filterElements: [\n {\n searchField: 'iD',\n searchValue: noteIds,\n searchOperator: 'IN'\n }\n ],\n getAll: true\n };\n\n setIsLoading(true);\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpNote/search`,\n {\n method: 'post',\n data: searchObj\n },\n {}\n )\n .then((resp) => {\n if (resp && resp.data) {\n setNoteList(resp.data?.pageList);\n } else {\n setNoteList([]);\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setNoteList([]);\n }\n }, [fetchNoteFiledForLoading, noteFiledFor, setIsLoading]);\n\n return (\n <div>\n <div className={classes.notes}>\n {isLoading || fetchNoteFiledForLoading ? (\n <div>\n <LinearProgress />\n </div>\n ) : noteList?.length > 0 ? (\n noteList.map((note, index) => (\n <TransactionNote\n key={index}\n note={note}\n onClick={() => handleViewNote(note)}\n />\n ))\n ) : (\n <div>\n <EmptyStateDisplay primaryText='No Notes' />\n </div>\n )}\n </div>\n\n <SideSheet\n title={t('View Note')}\n width={600}\n open={openSideSheet}\n onClose={handleCloseSideSheet}\n >\n <div>\n <TransactionNoteForm\n initialValues={selectedNote}\n businessObjectKey={businessObjectKey}\n viewOnly\n noteTypes={noteTypes}\n fetchNoteTypeLoading={fetchNoteTypesLoading}\n />\n </div>\n </SideSheet>\n </div>\n );\n};\n","export enum TRANSACTION_TAB {\n DETAILS = 0,\n HISTORY,\n ATTACHMENTS,\n NOTES\n}\n","import React from 'react';\nimport { FluentButton } from '../../../../UI/inputs/buttons';\nimport { useTranslation } from 'react-i18next';\nimport './EditTransactionDetailsFooterItem.css';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\n\nconst EditTransactionDetailsFooterItem = (props) => {\n const {\n transactionTypeId,\n transactionIsClosed,\n handleOnCancel,\n handleOnSaveChanges\n } = props;\n const { hasRevisions } = useTransactionEngine(transactionTypeId);\n const { t } = useTranslation();\n return (\n <div className='transaction-details-footer-item'>\n <FluentButton color='primary' onClick={handleOnCancel}>\n {t('Cancel')}\n </FluentButton>\n {!transactionIsClosed && (\n <FluentButton\n variant='contained'\n color='primary'\n onClick={handleOnSaveChanges}\n >\n {t('Save Changes')}\n </FluentButton>\n )}\n </div>\n );\n};\n\nexport default EditTransactionDetailsFooterItem;\n","import React from 'react';\nimport { Field } from '../../../../utilities/form';\nimport {\n AmbientAutoComplete,\n AmbientTextField,\n} from '../../../../UI/inputs/textField';\nimport { FormControlLabel, Switch } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\n\n\nconst EditTransactionDetailsFormFields = (props) => {\n const { transaction, fieldAttributes } = props;\n const { t } = useTranslation();\n\n const { getHiddenFields, getRequiredFields } = useTransactionEngine(\n transaction.transactionTypeId\n );\n\n const fieldComponentMap = {\n string: AmbientTextField,\n datetime: AmbientTextField,\n number: AmbientTextField,\n bool: Switch,\n array: AmbientAutoComplete\n };\n\n const getEntityName = (optionValuesArr, entityId) => {\n const matchingEntity = optionValuesArr?.find(\n (entity) => entity.id == entityId\n );\n return matchingEntity?.name;\n };\n\n const numberDataTypes = ['int', 'short', 'long'];\n\n const removeTimeFormatDate = (date) => {\n const parsedDate = new Date(date);\n if (parsedDate.getTime()) {\n const year = parsedDate.getFullYear();\n //Month is zero based 0 = Jan so need to add 1\n const month = parsedDate.getMonth() + 1;\n const day = parsedDate.getDate().toString().padStart(2, '0');\n return `${year}-${month.toString().padStart(2, '0')}-${day}`;\n }\n return parsedDate;\n };\n\n const dataTypeComponentMap = (transaction, attribute) => {\n const fieldName = attribute.name;\n let fieldDataType = attribute.type.toLowerCase();\n fieldDataType = numberDataTypes.includes(fieldDataType) ? \"number\" : fieldDataType\n const isAsscoiationLabel = attribute.associationLabel;\n let fieldComponentProps = null;\n switch (fieldDataType) {\n case 'number':\n fieldComponentProps = {\n initialValue: transaction.entityBusinessObject[fieldName],\n type: 'number',\n InputProps: { inputProps: { min: 0 } }\n };\n break;\n case 'datetime':\n fieldComponentProps = {\n initialValue: removeTimeFormatDate(transaction.entityBusinessObject[fieldName]),\n type: \"date\"\n };\n break;\n case 'array':\n fieldComponentProps = {\n options: attribute?.options?.map((option) => option.id),\n getOptionLabelFunction: (option) =>\n getEntityName(attribute?.options, option) || option,\n initialValue: transaction.entityBusinessObject[fieldName]\n };\n\n break;\n case 'bool':\n fieldComponentProps = {\n type: 'checkbox',\n initialValue: false\n };\n break;\n default:\n fieldComponentProps = {\n initialValue: transaction.entityBusinessObject[fieldName]\n };\n }\n const formLabel = isAsscoiationLabel ? fieldName + ' Name' : fieldName;\n const isRequired = getRequiredFields(transaction).includes(fieldName) || attribute.required;\n const isHidden = getHiddenFields(transaction).includes(fieldName) || attribute.isPrimaryKey || !attribute.extendedProperties.defaultVisible\n\n let fieldComponent = (\n <Field\n component={fieldComponentMap[fieldDataType] ?? AmbientTextField}\n label={t(formLabel)}\n name={fieldName}\n fullWidth\n variant='outlined'\n margin='normal'\n disabled={attribute.isReadOnly}\n required={isRequired && fieldDataType != 'bool'}\n {...fieldComponentProps}\n />\n );\n return (\n <>\n { !isHidden &&\n (fieldDataType == 'bool' ? (\n <FormControlLabel control={fieldComponent} label={formLabel} />\n ) : (\n fieldComponent\n ))\n }\n </>\n );\n };\n\n return (\n <>\n {fieldAttributes.map((attribute) => {\n return <>{dataTypeComponentMap(transaction, attribute)}</>;\n })}\n </>\n );\n};\n\nexport default EditTransactionDetailsFormFields;\n","import React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport { apiMutate, useAxiosGet, useAxiosMutate } from '../../../../utilities';\nimport { getSanitizedName } from '../../../../utilities/entities/entityUtilities';\nimport { Form } from '../../../../utilities/form';\nimport { CardinalityTypeEnums } from '../../../../enums';\nimport DetailsFormFields from './EditTransactionDetailsFormFields';\nimport { AmbientCard } from '../../../../UI/surfaces/cards/AmbientCard';\nimport { LinearProgress } from '@material-ui/core';\nimport { useHandleAxiosSnackbar } from '../../../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from '../../../../configService';\nimport { useCatalogStore } from '../../../../../src/stores/catalogStore';\n\nconst EditTransactionDetailsForm = (props) => {\n const { transaction, formRef } = props;\n const [entityAttributes, setEntityAttributes] = useState(null);\n\n const fullyQualifiedName = transaction.entityBusinessKey?.split('|')[0];\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n\n const { currentApiCatalogId, catalogsMap } = useCatalogStore();\n\n const catalogObjectList = useMemo(() => {\n if (\n catalogsMap &&\n currentApiCatalogId &&\n catalogsMap[currentApiCatalogId]\n ) {\n return catalogsMap[currentApiCatalogId]?.ctlg?.catalogObjectList;\n }\n }, [catalogsMap, currentApiCatalogId]);\n\n const [{ data: udpObjectInfo }, fetchUdpObjectInfo] = useAxiosMutate(\n ConfigService.productV1ApiUrl,\n `UdpObjectInfo/search`,\n {\n method: 'post',\n data: {\n eagerLoad: true,\n pageNumber: 1,\n pageSize: 50,\n filterElements: [\n {\n searchField: 'sanitizedName',\n searchOperator: '=',\n searchValue: getSanitizedName(fullyQualifiedName)\n }\n ]\n }\n }\n );\n\n const updateFieldInfo = (\n tableEntries,\n catalogObjectFieldInfo,\n fkFieldInfo,\n fkDomainName\n ) => {\n let updatedFields = {\n type: 'array',\n options: tableEntries,\n domainName: fkDomainName\n };\n const updatedFieldInfo = { ...fkFieldInfo, ...updatedFields };\n const index = catalogObjectFieldInfo.findIndex(\n (f) => f.name.toLowerCase() === fkFieldInfo.name.toLowerCase()\n );\n if (index != -1) {\n catalogObjectFieldInfo[index] = updatedFieldInfo;\n }\n };\n\n const mergeCatalogObjectInfoFieldInfo = useCallback(\n (entityCatalogObjectInfo, filteredEntityFieldInfo) => {\n let catalogObjectFieldInfoCombo = entityCatalogObjectInfo.map(\n (entityCatalogObject) => {\n let matchingEntityFieldInfo = filteredEntityFieldInfo.find(\n (fieldInfo) => {\n let formattedFieldName =\n fieldInfo.name.slice(0, 1).toLowerCase() +\n fieldInfo.name.slice(1);\n if (fieldInfo.name == 'ID') {\n formattedFieldName = formattedFieldName.toLowerCase();\n }\n\n return formattedFieldName == entityCatalogObject.name;\n }\n );\n if (matchingEntityFieldInfo) {\n let additional_fields = {\n hidden:\n matchingEntityFieldInfo.properties.maintainenceConfig.hidden,\n associationLabel:\n matchingEntityFieldInfo.properties.maintainenceConfig\n .associationLabel,\n isPrimaryKey: matchingEntityFieldInfo.isPrimaryKey\n };\n return {\n ...entityCatalogObject,\n ...additional_fields\n };\n } else {\n return entityCatalogObject;\n }\n }\n );\n\n return catalogObjectFieldInfoCombo;\n },\n []\n );\n\n const filterOutManyToManyRelationships = (CatalogObjectInfo) => {\n let entityCatalogObjectInfo = CatalogObjectInfo.filter((catalogObject) => {\n const cardinality =\n catalogObject.extendedProperties?.childEntityAssoc?.Cardinality;\n if (cardinality != undefined) {\n return (\n cardinality != CardinalityTypeEnums.Many_To_Many &&\n cardinality != CardinalityTypeEnums.One_To_One &&\n catalogObject.name.toLowerCase() != 'businessobjectkey'\n );\n } else {\n return catalogObject.name.toLowerCase() != 'businessobjectkey';\n }\n });\n return entityCatalogObjectInfo;\n };\n\n const updateFkFields = useCallback(\n async (entityCatalogObjectInfo, catalogObjectInfo) => {\n const childEntityAssociation =\n catalogObjectInfo.extendedProperties.childEntityAssoc;\n const cardinality = childEntityAssociation.Cardinality;\n if (cardinality != undefined) {\n const foreignKeyAssociationFields =\n childEntityAssociation.Keys[0].split(',');\n let fieldsInAssociationToIgnore = [\n 'id',\n 'businessobjectkey',\n 'entitybusinesskey'\n ];\n return Promise.all(\n foreignKeyAssociationFields.map(async (fkFieldName) => {\n if (\n fkFieldName.toLowerCase() != 'id' &&\n !fieldsInAssociationToIgnore.includes(fkFieldName.toLowerCase())\n ) {\n let fkFieldInfo = entityCatalogObjectInfo.find(\n (field) => field.name.toLowerCase() == fkFieldName.toLowerCase()\n );\n const fkDomainName = getSanitizedName(\n childEntityAssociation.TargetType\n );\n try {\n const getTableEntriesResp = await apiMutate(\n ConfigService.productV1ApiUrl,\n `${fkDomainName}`,\n { method: 'get' }\n );\n\n if (getTableEntriesResp.data.length > 0 && fkFieldInfo) {\n updateFieldInfo(\n getTableEntriesResp.data,\n entityCatalogObjectInfo,\n fkFieldInfo,\n fkDomainName\n );\n }\n } catch (error) {\n handleErrorSnackbar(\n new Error(\n t(`Error finiding field information! Please try again.`)\n )\n );\n }\n }\n })\n );\n }\n },\n [handleErrorSnackbar, t]\n );\n\n const filterAdjustEntityAttributes = useCallback(\n async (catalogObjectInfo) => {\n let entityCatalogObjectInfo = catalogObjectInfo;\n\n entityCatalogObjectInfo = filterOutManyToManyRelationships(\n entityCatalogObjectInfo\n );\n\n const entityObjectInfoResponse = await fetchUdpObjectInfo();\n const entityObjectInfo = entityObjectInfoResponse.data.pageList[0];\n let filteredEntityFieldInfo = entityObjectInfo.objectFieldInfo.filter(\n (fieldInfo) => fieldInfo.properties.isDefaultVisible\n );\n\n await Promise.all(\n entityCatalogObjectInfo.map((catalogObjectInfo) => {\n return updateFkFields(entityCatalogObjectInfo, catalogObjectInfo);\n })\n );\n\n entityCatalogObjectInfo = entityCatalogObjectInfo.filter(\n (catalogObject) => !catalogObject.extendedProperties.childEntity\n );\n\n let mergedFieldInfo = mergeCatalogObjectInfoFieldInfo(\n entityCatalogObjectInfo,\n filteredEntityFieldInfo\n );\n return mergedFieldInfo;\n },\n [fetchUdpObjectInfo, mergeCatalogObjectInfoFieldInfo, updateFkFields]\n );\n\n useEffect(() => {\n if (catalogObjectList) {\n let domainName = transaction.entityBusinessKey\n .split('|')[0]\n .split('.')\n .pop();\n let domainCatalogObject = catalogObjectList?.find(\n (catalogObject) =>\n getSanitizedName(catalogObject.catalogObjectName) == domainName\n );\n if (domainCatalogObject) {\n filterAdjustEntityAttributes(domainCatalogObject.properties).then(\n (filteredResp) => {\n setEntityAttributes(filteredResp);\n }\n );\n }\n }\n }, [filterAdjustEntityAttributes, catalogObjectList, transaction]);\n\n const executeSaveChanges = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${transaction?.transactionId}/saveChanges`,\n {\n method: 'put'\n },\n data\n ),\n [transaction.transactionId]\n );\n\n const onSubmit = useCallback(\n async (values) => {\n const saveChangesResponse = await executeSaveChanges({ data: values });\n if (saveChangesResponse?.status === 200) {\n handleSuccessSnackbar(t('Transaction has been saved successfully'));\n } else {\n handleErrorSnackbar(\n new Error(t(`Error saving Transaction. Please try again later.`))\n );\n }\n },\n [executeSaveChanges, handleSuccessSnackbar, handleErrorSnackbar, t]\n );\n\n const fieldAttributes = useMemo(() => {\n if (!entityAttributes) {\n return [];\n }\n return entityAttributes;\n }, [entityAttributes]);\n\n return fieldAttributes.length == 0 ? (\n <LinearProgress />\n ) : (\n <AmbientCard>\n <Form onSubmit={onSubmit} ref={formRef}>\n <DetailsFormFields\n transaction={transaction}\n fieldAttributes={fieldAttributes}\n />\n </Form>\n </AmbientCard>\n );\n};\n\nexport default EditTransactionDetailsForm;\n","import React, {\n useState,\n useRef,\n useCallback,\n useMemo,\n useEffect\n} from 'react';\n\nimport { Divider, SideSheet, UdpTabPanel } from '../../../../UI';\nimport { UdpTabs } from '../../../../UI/navigation/tabs/UdpTabs';\nimport { useTranslation } from 'react-i18next';\nimport {\n allowedExtensions,\n MAX_FILE_SIZE_MB\n} from '../../../../uploader/utils/allowedFileProperties';\n\nimport './EditTransaction.css';\nimport EditTransactionHeaderItem from './EditTransactionHeaderItem';\nimport { FluentButton } from '../../../../UI/inputs/buttons';\nimport WorkflowActions from './WorkflowActions';\nimport { TransactionTimeline } from '../components/transactionHistory/TransactionTimeline';\nimport { TransactionAttachments } from '../components/transactionAttachment/TransactionAttachments';\nimport { TransactionNotes } from '../components/transactionNote/TransactionNotes';\nimport { TRANSACTION_TAB } from './enum';\nimport { TransactionUiActionTypeEnums } from '../../../../enums';\nimport UdpTransactionCustomPage from '../components/UdpTransactionCustomPage';\nimport EditTransactionDetailsFooterItem from '../components/EditTransactionDetailsFooterItem';\nimport { ConfigService } from '../../../../configService';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport EditTransactionDetailsForm from '../components/EditTransactionDetailsForm';\nimport { Attachments } from '../../../../uploader';\nimport { apiMutate, useAxiosGet, useAxiosMutate } from '../../../../utilities';\nimport { useSnackbar } from 'notistack';\nimport { TransactionNoteForm } from '../components/transactionNote/TransactionNoteForm';\nimport { FluentIcon } from '../../../../utilities/iconLibrary';\nimport { AddIcon } from '@fluentui/react-icons';\n\nconst EditTransaction = (props) => {\n const {\n transaction: initialTransaction,\n transactionTypeId,\n transactionIsClosed,\n openInnerSidesheetState,\n setOpenInnerSidesheetState,\n refreshGridData,\n closeSideSheet,\n setSidesheetLoading,\n setHasUnsavedChanges,\n attachmentType,\n setAttachmentType,\n currentAttachments,\n setCurrentAttachments,\n attachmentProgress,\n setAttachmentProgress,\n transactionAttachmentTypes,\n transactionAttachments,\n setTransactionAttachments,\n filePreview,\n setFilePreview\n } = props;\n const { t } = useTranslation();\n\n const [selectedTab, setSelectedTab] = useState(0);\n const [transaction, setTransaction] = useState(initialTransaction);\n const [refreshNotes, setRefreshNotes] = useState(false);\n\n const [{ data: noteTypes, loading: fetchNoteTypesLoading }] = useAxiosGet(\n ConfigService.productV1ApiUrl,\n `UdpNoteType`,\n {}\n );\n\n const { getUiActionRenderPageId, transactionTypeStatusColorsMap } =\n useTransactionEngine(transactionTypeId);\n\n const refetchTransaction = useCallback(async () => {\n setSidesheetLoading(true);\n const response = await apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${initialTransaction.transactionId}/full`,\n {\n method: 'get'\n }\n );\n if (response?.status === 200) {\n setTransaction(response.data);\n transactionTimelineRef.current?.refresh();\n }\n setSidesheetLoading(false);\n }, [initialTransaction.transactionId, setSidesheetLoading]);\n\n const formRef = useRef(null);\n const transactionNoteFormRef = useRef(null);\n const transactionTimelineRef = useRef();\n\n const handleNoteFormSubmit = useCallback(() => {\n transactionNoteFormRef.current?.handleSubmit?.();\n }, []);\n\n const handleNoteFormReset = useCallback(() => {\n transactionNoteFormRef.current?.form?.reset?.();\n }, []);\n\n const handleSaveChanges = useCallback(async () => {\n setSidesheetLoading(true);\n await formRef.current?.form?.submit();\n setSidesheetLoading(false);\n refreshGridData();\n }, [refreshGridData, setSidesheetLoading, formRef]);\n\n const [\n {\n data: transactionAttachmentsData,\n loading: fetchTransactionAttachmentsLoading\n },\n fetchTransactionAttachments\n ] = useAxiosMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/search`,\n {\n method: 'post',\n data: {\n pageSize: 50,\n filterElements: [\n {\n searchField: 'TransactionId',\n searchValue: transaction.transactionId,\n searchOperator: '='\n },\n {\n searchField: 'IsDeleted',\n searchValue: 0,\n searchOperator: '='\n }\n ]\n }\n }\n );\n\n const { enqueueSnackbar } = useSnackbar();\n\n const getAttachments = useCallback(async () => {\n try {\n const response = await fetchTransactionAttachments();\n setTransactionAttachments(response.data.pageList);\n refetchTransaction();\n } catch (error) {\n console.error('Failed to fetch attachments:', error);\n if (error?.message !== 'canceled') {\n enqueueSnackbar(\n 'Attachment fetch failed: We encountered a system error. Please try again or contact support if the issue persists.',\n {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' }\n }\n );\n }\n }\n }, [\n fetchTransactionAttachments,\n enqueueSnackbar,\n refetchTransaction,\n setTransactionAttachments\n ]);\n\n const tabNames = [t('Details'), t('History'), t('Attachments'), t('Notes')];\n\n const headerItemInfo = useMemo(() => {\n const items = [\n {\n label: 'Status',\n statusChip: {\n label: transaction.udpTransactionUdpTransactionTypeStatus?.name,\n status:\n transactionTypeStatusColorsMap[\n transaction.udpTransactionUdpTransactionTypeStatus?.name\n ] || 'default'\n }\n }\n ];\n if (transaction?.currentRevisionNo) {\n items.push({\n label: 'Revision',\n value: `${transaction.currentRevisionNo}`\n });\n }\n return items;\n }, [transaction, transactionTypeStatusColorsMap]);\n\n const handleUploadFiles = useCallback(async () => {\n if (!currentAttachments.length) {\n throw new Error('No files added for upload');\n }\n const formData = new FormData();\n currentAttachments.forEach((file) => formData.append('files', file));\n formData.append(\n 'attachmentTypeId',\n attachmentType.transactionAttachmentTypeId\n );\n\n try {\n setAttachmentProgress(true);\n await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/transaction/${transaction.transactionId}/upload`,\n {\n method: 'post',\n headers: {\n transactionId: transaction.transactionId,\n attachmentTypeId: attachmentType.transactionAttachmentTypeId\n },\n data: formData\n }\n );\n\n await getAttachments();\n setCurrentAttachments([]);\n setOpenInnerSidesheetState({ attachments: false });\n\n enqueueSnackbar('Files uploaded successfully', {\n variant: 'success',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n } catch (error) {\n enqueueSnackbar(\n `File upload failed: We encountered a system error. Please try again or contact support if the issue persists.`,\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n throw error;\n } finally {\n setAttachmentProgress(false);\n }\n }, [\n attachmentType,\n currentAttachments,\n enqueueSnackbar,\n getAttachments,\n setOpenInnerSidesheetState,\n transaction.transactionId,\n setCurrentAttachments,\n setAttachmentProgress\n ]);\n\n const innerSidesheetList = useMemo(\n () => [\n {\n open: openInnerSidesheetState.workflowAction,\n closeSheet: () =>\n setOpenInnerSidesheetState({ workflowActions: false }),\n title: 'Available Workflow Actions',\n children: (\n <WorkflowActions\n transaction={transaction}\n closeSideSheet={() => {\n setOpenInnerSidesheetState({\n workflowActions: false\n });\n refetchTransaction();\n }}\n refreshGridData={refreshGridData}\n />\n )\n },\n {\n open: openInnerSidesheetState.attachments,\n closeSheet: () => setOpenInnerSidesheetState({ attachments: false }),\n title: 'Add Attachment',\n buttonLabel: 'Save',\n buttonOneDisabled: !attachmentType || currentAttachments.length <= 0,\n onSubmit: () => {\n handleUploadFiles()\n .then(() => refreshGridData())\n .catch((error) => console.error(error));\n },\n children: (\n <Attachments\n attachmentTypes={transactionAttachmentTypes}\n attachmentType={attachmentType}\n setAttachmentType={setAttachmentType}\n attachmentProgress={attachmentProgress}\n setAttachmentProgress={setAttachmentProgress}\n currentAttachments={currentAttachments}\n setCurrentAttachments={setCurrentAttachments}\n transaction={transaction}\n previousAttachments={transactionAttachments}\n setPreviousAttachments={setTransactionAttachments}\n MAX_FILE_SIZE_MB={MAX_FILE_SIZE_MB}\n allowedExtensions={allowedExtensions}\n filePreview={filePreview}\n setFilePreview={setFilePreview}\n />\n )\n },\n {\n open: openInnerSidesheetState.notes,\n closeSheet: () => setOpenInnerSidesheetState({ notes: false }),\n title: 'Add Note',\n buttonLabel: 'Save note',\n buttonTwoLabel: 'Clear',\n buttonTwoAction: handleNoteFormReset,\n onSubmit: handleNoteFormSubmit,\n children: (\n <TransactionNoteForm\n ref={transactionNoteFormRef}\n businessObjectKey={transaction?.businessObjectKey}\n closeSideSheet={() => {\n setOpenInnerSidesheetState({ notes: false });\n setRefreshNotes(true);\n }}\n noteTypes={noteTypes}\n fetchNoteTypesLoading={fetchNoteTypesLoading}\n />\n )\n }\n ],\n [\n openInnerSidesheetState.workflowAction,\n openInnerSidesheetState.attachments,\n openInnerSidesheetState.notes,\n transaction,\n refreshGridData,\n attachmentType,\n currentAttachments,\n transactionAttachmentTypes,\n attachmentProgress,\n transactionAttachments,\n filePreview,\n handleNoteFormReset,\n handleNoteFormSubmit,\n noteTypes,\n fetchNoteTypesLoading,\n setOpenInnerSidesheetState,\n refetchTransaction,\n handleUploadFiles,\n setAttachmentType,\n setCurrentAttachments,\n setAttachmentProgress,\n setTransactionAttachments,\n setFilePreview\n ]\n );\n\n const transactionDetailPageId = useMemo(() => {\n return getUiActionRenderPageId(\n TransactionUiActionTypeEnums.Render_Transaction_Details_Page\n );\n }, [getUiActionRenderPageId]);\n\n useEffect(() => {\n (async () => {\n if (!transactionAttachmentsData) {\n getAttachments();\n }\n })();\n }, [transactionAttachmentsData, getAttachments]);\n\n return (\n <>\n <div className='edit-transaction-sidesheet'>\n <div className={`edit-transaction-sidesheet-header 'is-sticky'`}>\n <div className='edit-transaction-sidesheet-header-title'></div>\n <div className='edit-transaction-sidesheet-header-content'>\n <div className='edit-transaction-sidesheet-header-items'>\n {headerItemInfo.map((headerItem) => {\n return (\n <EditTransactionHeaderItem\n key={headerItem.label}\n label={headerItem.label}\n statusChip={headerItem.statusChip}\n value={headerItem.value}\n />\n );\n })}\n </div>\n <div className='edit-transaction-sidesheet-header-buttons'>\n <FluentButton\n color='primary'\n onClick={() => {\n setOpenInnerSidesheetState({ attachments: true });\n }}\n >\n <FluentIcon\n component={AddIcon}\n className='edit-transaction-header-button-icon'\n size='small'\n />\n {'Attachment'}\n </FluentButton>\n <FluentButton\n color='primary'\n onClick={() => {\n setOpenInnerSidesheetState({ notes: true });\n }}\n >\n <FluentIcon\n component={AddIcon}\n className='edit-transaction-header-button-icon'\n size='small'\n />\n {'Note'}\n </FluentButton>\n </div>\n <div className='divider'>\n <Divider />\n </div>\n <div className='edit-transaction-sidesheet-tabs'>\n <UdpTabs\n value={selectedTab}\n onChange={(value, tabIndex) => {\n setSelectedTab(tabIndex);\n }}\n tabList={tabNames.map((tabName) => ({ label: tabName }))}\n buttonWidth={'100%'}\n />\n </div>\n </div>\n <div className='divider'>\n <Divider />\n </div>\n </div>\n\n <div className='edit-transaction-sidesheet-body'>\n <div>\n <UdpTabPanel value={selectedTab} index={TRANSACTION_TAB.DETAILS}>\n {transactionDetailPageId ? (\n <UdpTransactionCustomPage\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Transaction_Details_Page\n }\n formRef={formRef}\n transaction={transaction}\n refetchTransaction={refetchTransaction}\n setHasUnsavedChanges={setHasUnsavedChanges}\n />\n ) : (\n <EditTransactionDetailsForm\n transaction={transaction}\n formRef={formRef}\n />\n )}\n </UdpTabPanel>\n\n <UdpTabPanel value={selectedTab} index={TRANSACTION_TAB.HISTORY}>\n <TransactionTimeline\n ref={transactionTimelineRef}\n transactionId={transaction?.transactionId}\n />\n </UdpTabPanel>\n <UdpTabPanel\n value={selectedTab}\n index={TRANSACTION_TAB.ATTACHMENTS}\n >\n <TransactionAttachments\n transactionAttachments={transactionAttachmentsData}\n isLoading={fetchTransactionAttachmentsLoading}\n />\n </UdpTabPanel>\n <UdpTabPanel value={selectedTab} index={TRANSACTION_TAB.NOTES}>\n <TransactionNotes\n businessObjectKey={transaction?.businessObjectKey}\n refreshNotes={refreshNotes}\n setRefreshNotes={setRefreshNotes}\n noteTypes={noteTypes}\n fetchNoteTypeLoading={fetchNoteTypesLoading}\n />\n </UdpTabPanel>\n </div>\n </div>\n {selectedTab == TRANSACTION_TAB.DETAILS && (\n <div className='edit-transaction-sidesheet-footer'>\n <EditTransactionDetailsFooterItem\n transactionTypeId={transactionTypeId}\n transactionIsClosed={transactionIsClosed}\n handleOnCancel={closeSideSheet}\n handleOnSaveChanges={handleSaveChanges}\n />\n </div>\n )}\n </div>\n\n {openInnerSidesheetState &&\n // eslint-disable-next-line react-hooks/refs\n innerSidesheetList.map((item) => {\n return (\n <SideSheet\n key={item.title}\n open={item.open}\n width={600}\n title={item.title}\n onClose={item.closeSheet}\n buttonLabel={item?.buttonLabel}\n buttonOneDisabled={item?.buttonOneDisabled}\n buttonTwoLabel={item?.buttonTwoLabel}\n buttonTwoAction={item?.buttonTwoAction}\n onSubmit={item?.onSubmit}\n color='primary'\n >\n {item.children}\n </SideSheet>\n );\n })}\n </>\n );\n};\n\nexport default EditTransaction;\n","import React, { useState, useMemo, useRef, useCallback, useEffect } from 'react';\nimport ViewTransaction from './sidesheets/ViewTransaction';\nimport AttachmentTransaction from './sidesheets/AttachmentTransaction';\nimport { LinearProgress, SideSheet } from '../../../UI';\nimport WorkflowActions from './sidesheets/WorkflowActions';\nimport EditTransaction from './sidesheets/EditTransaction';\nimport { useTransactionEngine } from '../../../utilities/transactions/useTransactionEngine';\nimport { TransactionUiActionTypeEnums } from '../../../enums';\nimport UdpTransactionCustomPage from './components/UdpTransactionCustomPage';\nimport { apiMutate, useAxiosMutate } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { useHandleAxiosSnackbar } from '../../../utilities';\nimport { useTranslation } from 'react-i18next';\nimport { FluentDialog } from '../../../UI';\nimport { PageContainer } from '../../../page/PageContainer';\nimport { Attachments } from '../../../uploader';\nimport { allowedExtensions, MAX_FILE_SIZE_MB } from '../../../uploader/utils/allowedFileProperties';\nimport { useSnackbar } from 'notistack';\nimport { Badge } from '@material-ui/core';\n\nconst UdpTransactionSidesheet = (props) => {\n const {\n openStates,\n handleSidesheet,\n handleAttachmentTransaction,\n transaction,\n transactionTypeId,\n domainName,\n refreshGridData\n } = props;\n\n const [sidesheetLoading, setSidesheetLoading] = useState(false);\n const [closingTransactionLoading, setClosingTransactionLoading] =\n useState(false);\n const [\n editTransactionopenInnerSidesheetState,\n setEditTransactionOpenInnerSidesheetState\n ] = useState({\n attachments: false,\n workflowActions: false,\n notes: false\n });\n const [dialogOpen, setDialogOpen] = useState(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] =\n useState(false);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const [createTransactionOpenInnerSidesheetState, setCreateTransactionOpenInnerSidesheetState] = useState({\n attachments: false\n });\n const [attachmentType, setAttachmentType] = useState(null);\n const [currentAttachments, setCurrentAttachments] = useState([]);\n const [attachmentProgress, setAttachmentProgress] = useState(false);\n const [transactionAttachments, setTransactionAttachments] = useState([]);\n const [filePreview, setFilePreview] = useState(false);\n\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n\n const {\n hasClosedStatus,\n checkIfTransactionIsClosed,\n getTransactionTypeLabel,\n getUiActionRenderPageId\n } = useTransactionEngine(transactionTypeId);\n\n const { t } = useTranslation();\n const formRef = useRef(null);\n const createdTransactionIdRef = useRef(null);\n const attachmentRef = useRef();\n const sidesheetWidth = openStates?.width ?? 800;\n const transactionTypeEntry = transaction?.entityBusinessObject;\n const { enqueueSnackbar } = useSnackbar();\n\n const [{ data: transactionAttachmentTypes }, fetchTransactionAttachmentType] =\n useAxiosMutate(\n process.env.REACT_APP_PRODUCT_API_BASE,\n `UdpTransactionAttachmentType/search`,\n {\n method: 'post',\n data: {\n pageSize: 50,\n filterElements: [\n {\n searchField: 'TransactionTypeId',\n searchValue: transactionTypeId,\n searchOperator: '='\n }\n ]\n }\n }\n );\n\n const handleDialogClose = () => {\n setDialogOpen(false);\n };\n\n const handleUnsavedChangesDialogClose = () => {\n setUnsavedChangesDialogOpen(false);\n };\n const handleResetAttachmentState = useCallback((resetSavedAttachmentsState) => {\n if (resetSavedAttachmentsState) {\n setAttachmentType(null);\n setCurrentAttachments([]);\n }\n setAttachmentProgress(false);\n setTransactionAttachments([]);\n setFilePreview(false);\n }, []);\n\n const executeCloseTransaction = useCallback(async () => {\n // setSidesheetLoading(true);\n const response = await apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${transaction?.transactionId}/closeTransaction`,\n {\n method: 'post'\n }\n );\n // setSidesheetLoading(false);\n if (response?.status === 200) {\n handleSidesheet('edit', false);\n refreshGridData();\n handleSuccessSnackbar(t(`Transaction has been closed successfully`));\n } else {\n handleErrorSnackbar(\n new Error(t(`Error closing Transaction. Please try again later.`))\n );\n }\n }, [\n transaction,\n refreshGridData,\n handleSidesheet,\n handleSuccessSnackbar,\n handleErrorSnackbar,\n t\n ]);\n\n const handleConfirmCloseTransactionDialog = useCallback(async () => {\n try {\n setClosingTransactionLoading(true);\n await executeCloseTransaction();\n } catch (error) {\n handleErrorSnackbar(error);\n } finally {\n setClosingTransactionLoading(false);\n handleDialogClose();\n }\n }, [executeCloseTransaction, handleErrorSnackbar]);\n\n const formattedBusinesskey = transactionTypeEntry?.businessObjectKey\n ?.split('|')\n ?.pop();\n\n const handleTransactionCreationSuccess = useCallback((response) => {\n createdTransactionIdRef.current = response?.data?.transactionId ?? null;\n }, []);\n\n const handleFilesSelectedForUpload = useCallback(() => {\n setCreateTransactionOpenInnerSidesheetState({ attachments: false });\n enqueueSnackbar(`${currentAttachments.length} file(s) added for upload`, {\n variant: 'success',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }, [enqueueSnackbar, currentAttachments.length]);\n\n const handleUploadFilesForCreateTransaction = useCallback(async (transactionId) => {\n if (!currentAttachments.length) {\n throw new Error('No files added for upload');\n }\n const formData = new FormData();\n currentAttachments.forEach((file) => formData.append('files', file));\n formData.append(\n 'attachmentTypeId',\n attachmentType.transactionAttachmentTypeId\n );\n\n try {\n setAttachmentProgress(true);\n await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/transaction/${transactionId}/upload`,\n {\n method: 'post',\n headers: {\n transactionId: transactionId,\n attachmentTypeId: attachmentType.transactionAttachmentTypeId\n },\n data: formData\n }\n );\n\n setCurrentAttachments([]);\n setCreateTransactionOpenInnerSidesheetState({ attachments: false });\n\n enqueueSnackbar('Files uploaded successfully', {\n variant: 'success',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n } catch (error) {\n enqueueSnackbar(\n `File upload failed: We encountered a system error. Please try again or contact support if the issue persists.`,\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n throw error;\n } finally {\n setAttachmentProgress(false);\n }\n }, [\n attachmentType,\n currentAttachments,\n enqueueSnackbar,\n setCurrentAttachments,\n setAttachmentProgress\n ]);\n\n const handleTransactionCreation = useCallback(async () => {\n setSidesheetLoading(true);\n createdTransactionIdRef.current = null;\n await formRef.current?.form?.submit();\n const newTransactionId = createdTransactionIdRef.current;\n if (newTransactionId && currentAttachments.length > 0) {\n await handleUploadFilesForCreateTransaction(newTransactionId);\n }\n setSidesheetLoading(false);\n handleSidesheet('add', false);\n handleResetAttachmentState(true);\n refreshGridData();\n },\n [\n handleSidesheet,\n refreshGridData,\n formRef,\n handleResetAttachmentState,\n currentAttachments.length,\n handleUploadFilesForCreateTransaction\n ]);\n\n const handleCreateRevision = useCallback(async () => {\n setSidesheetLoading(true);\n await formRef.current?.form?.submit();\n setSidesheetLoading(false);\n handleSidesheet('createRevision', false);\n refreshGridData();\n }, [handleSidesheet, refreshGridData, formRef]);\n\n const handleNextStepsAction = useCallback(() => {\n if (!hasUnsavedChanges) {\n setEditTransactionOpenInnerSidesheetState({ workflowAction: true });\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n }, [hasUnsavedChanges]);\n\n const handleConfirmUnsavedChangesDialog = useCallback(() => {\n setUnsavedChangesDialogOpen(false);\n setEditTransactionOpenInnerSidesheetState({ workflowAction: true });\n }, []);\n\n const pdfViewPageId = useMemo(() => {\n return getUiActionRenderPageId(\n TransactionUiActionTypeEnums.Render_View_Pdf_Page\n );\n }, [getUiActionRenderPageId]);\n\n const viewTransactionPage = useMemo(() => {\n if (pdfViewPageId) {\n return (\n <PageContainer pageId={pdfViewPageId} widgetParams={{ transaction }} />\n );\n } else {\n return <ViewTransaction transaction={transaction} />;\n }\n }, [transaction, pdfViewPageId]);\n\n const transactionIsClosed = useMemo(() => {\n return checkIfTransactionIsClosed(transaction);\n }, [checkIfTransactionIsClosed, transaction]);\n\n const transactionLabel = useMemo(() => {\n return getTransactionTypeLabel(transaction) ?? formattedBusinesskey;\n }, [getTransactionTypeLabel, transaction, formattedBusinesskey]);\n\n const sidesheetList = useMemo(() => {\n const list = [\n {\n open: openStates.addTransaction,\n closeSheet: () => {\n handleSidesheet('add', false);\n handleResetAttachmentState(true);\n },\n title: domainName,\n width: sidesheetWidth,\n onSubmit: handleTransactionCreation,\n children: (\n <>\n <UdpTransactionCustomPage\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n }\n formRef={formRef}\n onSubmitSuccess={handleTransactionCreationSuccess}\n />\n <SideSheet\n key={'Create Transaction: Add Attachment'}\n open={createTransactionOpenInnerSidesheetState?.attachments}\n width={600}\n title={t('Add Attachment')}\n onClose={() => {\n setCreateTransactionOpenInnerSidesheetState({ attachments: false });\n handleResetAttachmentState(true);\n }}\n buttonLabel={t('Save')}\n buttonOneDisabled={!attachmentType || currentAttachments.length <= 0}\n onSubmit={handleFilesSelectedForUpload}\n color='primary'\n >\n <Attachments\n attachmentTypes={transactionAttachmentTypes}\n attachmentType={attachmentType}\n setAttachmentType={setAttachmentType}\n attachmentProgress={attachmentProgress}\n setAttachmentProgress={setAttachmentProgress}\n currentAttachments={currentAttachments}\n setCurrentAttachments={setCurrentAttachments}\n transaction={transaction}\n previousAttachments={transactionAttachments}\n setPreviousAttachments={setTransactionAttachments}\n MAX_FILE_SIZE_MB={MAX_FILE_SIZE_MB}\n allowedExtensions={allowedExtensions}\n filePreview={filePreview}\n setFilePreview={setFilePreview}\n />\n </SideSheet>\n </>\n ),\n buttonLabel: 'Add',\n buttonTwoLabel:\n <Badge\n badgeContent={currentAttachments?.length}\n color=\"primary\"\n >\n {'Add Attachment'}\n </Badge>,\n buttonTwoAction: () => setCreateTransactionOpenInnerSidesheetState({ attachments: true })\n },\n {\n open: openStates.viewTransaction,\n closeSheet: () => handleSidesheet('view', false),\n title: domainName + ' ' + transactionLabel + ' - Preview',\n width: sidesheetWidth,\n children: viewTransactionPage,\n buttonLabel: !pdfViewPageId ? 'Download' : null\n },\n {\n open: openStates.attachmentTransaction,\n closeSheet: () => handleSidesheet('view', false),\n title: 'Attachment for ' + domainName + ' ' + transactionLabel,\n width: sidesheetWidth,\n buttonLabel: 'Download',\n onSubmit: () => {\n if (attachmentRef.current) {\n attachmentRef.current.downloadSelectedFile();\n }\n },\n children: (\n <AttachmentTransaction\n handleAttachmentTransaction={handleAttachmentTransaction}\n attachmentRef={attachmentRef}\n transaction={transaction}\n domainName={domainName}\n setSidesheetLoading={setSidesheetLoading}\n />\n )\n },\n {\n open: openStates.workflowAction,\n closeSheet: () => handleSidesheet('action', false),\n title: `Workflow Actions - ${domainName} ${transactionLabel}`,\n width: sidesheetWidth,\n children: (\n <WorkflowActions\n transaction={transaction}\n closeSideSheet={() => {\n handleSidesheet('action', false);\n }}\n refreshGridData={refreshGridData}\n />\n )\n },\n {\n open: openStates.editTransaction,\n closeSheet: () => {\n handleSidesheet('edit', false);\n handleResetAttachmentState(true);\n },\n title: `Edit ${domainName} ${transactionLabel}`,\n width: sidesheetWidth,\n buttonLabel: 'Next Steps',\n buttonOneDisabled: transactionIsClosed,\n onSubmit: handleNextStepsAction,\n buttonTwoLabel: 'Close ' + domainName,\n buttonTwoDisabled: transactionIsClosed || !hasClosedStatus,\n buttonTwoAction: () => setDialogOpen(true),\n children: (\n <EditTransaction\n transaction={transaction}\n transactionTypeId={transactionTypeId}\n transactionIsClosed={transactionIsClosed}\n openInnerSidesheetState={editTransactionopenInnerSidesheetState}\n setOpenInnerSidesheetState={\n setEditTransactionOpenInnerSidesheetState\n }\n refreshGridData={refreshGridData}\n closeSideSheet={() => {\n handleSidesheet('edit', false);\n handleResetAttachmentState(true);\n }}\n setSidesheetLoading={setSidesheetLoading}\n setHasUnsavedChanges={setHasUnsavedChanges}\n attachmentType={attachmentType}\n setAttachmentType={setAttachmentType}\n currentAttachments={currentAttachments}\n setCurrentAttachments={setCurrentAttachments}\n attachmentProgress={attachmentProgress}\n setAttachmentProgress={setAttachmentProgress}\n transactionAttachmentTypes={transactionAttachmentTypes}\n transactionAttachments={transactionAttachments}\n setTransactionAttachments={setTransactionAttachments}\n filePreview={filePreview}\n setFilePreview={setFilePreview}\n />\n )\n },\n {\n open: openStates.createRevision,\n closeSheet: () => handleSidesheet('createRevision', false),\n title: `Create Revision for ${domainName}`,\n width: sidesheetWidth,\n onSubmit: handleCreateRevision,\n children: (\n <UdpTransactionCustomPage\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Create_Revision_Page\n }\n formRef={formRef}\n transaction={transaction}\n />\n ),\n buttonLabel: 'Create Revision'\n }\n ];\n return list;\n }, [\n openStates,\n handleSidesheet,\n handleAttachmentTransaction,\n transaction,\n domainName,\n editTransactionopenInnerSidesheetState,\n setEditTransactionOpenInnerSidesheetState,\n transactionLabel,\n refreshGridData,\n transactionTypeId,\n handleTransactionCreation,\n handleTransactionCreationSuccess,\n hasClosedStatus,\n handleCreateRevision,\n transactionIsClosed,\n viewTransactionPage,\n pdfViewPageId,\n sidesheetWidth,\n handleNextStepsAction,\n createTransactionOpenInnerSidesheetState,\n t,\n attachmentType,\n setAttachmentType,\n currentAttachments,\n setCurrentAttachments,\n attachmentProgress,\n setAttachmentProgress,\n transactionAttachmentTypes,\n transactionAttachments,\n setTransactionAttachments,\n filePreview,\n setFilePreview,\n handleResetAttachmentState,\n handleFilesSelectedForUpload\n ]);\n\n useEffect(() => {\n if ((openStates?.addTransaction || openStates?.editTransaction) && !transactionAttachmentTypes) {\n setAttachmentProgress(true);\n fetchTransactionAttachmentType().then(() => {\n setAttachmentProgress(false);\n });\n }\n }, [fetchTransactionAttachmentType, transactionAttachmentTypes, openStates.addTransaction, openStates.editTransaction]);\n\n return (\n <>\n {openStates &&\n sidesheetList.map((item) => {\n return (\n <SideSheet\n key={item.title}\n open={item.open}\n width={sidesheetWidth}\n title={item.title}\n onClose={item.closeSheet}\n noPadding={\n openStates.attachmentTransaction || openStates.editTransaction\n }\n buttonLabel={item?.buttonLabel}\n onSubmit={item?.onSubmit}\n color='primary'\n buttonTwoLabel={item?.buttonTwoLabel}\n buttonTwoAction={item?.buttonTwoAction}\n buttonOneDisabled={item?.buttonOneDisabled}\n buttonTwoDisabled={item?.buttonTwoDisabled}\n progress={sidesheetLoading}\n variant='indeterminate'\n >\n <div>{item.children}</div>\n </SideSheet>\n );\n })}\n <FluentDialog\n title={t(`Close Transaction`)}\n message={`Are you sure you want to close transaction for ${\n transaction?.entityBusinessKey || ''\n }?`}\n labelOne={t('Confirm')}\n actionOne={handleConfirmCloseTransactionDialog}\n labelTwo={t('Cancel')}\n actionTwo={handleDialogClose}\n open={dialogOpen}\n handleClose={handleDialogClose}\n loading={closingTransactionLoading}\n />\n <FluentDialog\n title={t(`Unsaved Changes`)}\n message={`You have unsaved changes. Are you sure you want to go to next steps?`}\n labelOne={t('Confirm')}\n actionOne={handleConfirmUnsavedChangesDialog}\n labelTwo={t('Cancel')}\n actionTwo={handleUnsavedChangesDialogClose}\n open={unsavedChangesDialogOpen}\n handleClose={handleUnsavedChangesDialogClose}\n loading={closingTransactionLoading}\n />\n </>\n );\n};\n\nexport default UdpTransactionSidesheet;\n","import { useState, useEffect, useCallback } from 'react';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { ConfigService } from '../configService';\nimport { useTransactionStore } from '../stores/transactionStore';\n\nexport const useTransactionType = (options = {}) => {\n const { transactionTypeId, domainName, domainFieldType, domainFieldValue } =\n options;\n\n const [resolvedId, setResolvedId] = useState(transactionTypeId || null);\n const [data, setData] = useState(undefined);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(undefined);\n const [promise, setPromise] = useState(undefined);\n\n const { transactionTypesMap, setTransactionTypesMap } = useTransactionStore();\n\n const setSuccessState = useCallback((response) => {\n setError(undefined);\n setLoading(false);\n setData(response);\n }, []);\n\n // ---------------------------------------------------------\n // EFFECT 1:\n // Resolve transactionTypeId if using domainName\n // ---------------------------------------------------------\n useEffect(() => {\n if (transactionTypeId) {\n setResolvedId(transactionTypeId);\n return;\n }\n\n if (!domainName) return;\n\n setLoading(true);\n\n const domainPromise = apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransactionType/domain/${domainName}${\n domainFieldType && domainFieldValue\n ? `?domainFieldType=${domainFieldType}&domainFieldValue=${domainFieldValue}`\n : ''\n }`,\n {}\n );\n\n domainPromise\n .then((res) => {\n const newId = res.data?.transactionTypeId;\n\n if (newId) {\n setResolvedId(newId);\n setTransactionTypesMap({ [newId]: res.data });\n setSuccessState(res.data);\n } else {\n setError('Transaction type not found for domain.');\n }\n })\n .catch(setError)\n .finally(() => setPromise(domainPromise));\n }, [transactionTypeId, domainName, domainFieldType, domainFieldValue]);\n\n // ---------------------------------------------------------\n // EFFECT 2:\n // Fetch transaction type once resolvedId is known\n // ---------------------------------------------------------\n useEffect(() => {\n if (!resolvedId) return;\n\n // Check cache first\n if (transactionTypesMap[resolvedId]) {\n setSuccessState(transactionTypesMap[resolvedId]);\n return;\n }\n\n setLoading(true);\n\n const fetchPromise = apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransactionType/${resolvedId}?withAssociationData=true`,\n {}\n );\n\n fetchPromise\n .then((res) => {\n const transactionType = res.data;\n setTransactionTypesMap({ [resolvedId]: transactionType });\n setSuccessState(transactionType);\n })\n .catch(setError)\n .finally(() => setPromise(fetchPromise));\n }, [\n resolvedId,\n transactionTypesMap,\n setTransactionTypesMap,\n setSuccessState\n ]);\n\n return { data, loading, error, promise };\n};\n","import { useLocation } from 'react-router-dom';\nimport { useMemo } from 'react';\n\nexport const useUdpGridFilterModel = () => {\n const { search } = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(search), [search]);\n\n const filterModel = useMemo(() => {\n const constructedFilterModel = {};\n\n searchParams.forEach((value, key) => {\n if (key.startsWith('udp_search-')) {\n const paramBody = key.replace('udp_search-', '');\n const lastHyphenIndex = paramBody.lastIndexOf('-');\n\n if (lastHyphenIndex !== -1) {\n const field = paramBody.substring(0, lastHyphenIndex);\n const rawOp = paramBody.substring(lastHyphenIndex + 1);\n const operator = rawOp.replace(/_([a-z])/g, (_, char) =>\n char.toUpperCase()\n );\n\n // Determine Filter Type & Parse Value\n const { filterType, filterKey, parsedValue } =\n parseFilterValue(value);\n\n if (constructedFilterModel[field]) {\n // Append to existing conditions\n constructedFilterModel[field].conditions.push({\n filterType: filterType,\n type: operator,\n [filterKey]: parsedValue\n });\n } else {\n constructedFilterModel[field] = {\n filterType: filterType,\n operator: 'OR',\n conditions: [\n {\n filterType: filterType,\n type: operator,\n [filterKey]: parsedValue\n }\n ]\n };\n }\n }\n }\n });\n return constructedFilterModel;\n }, [searchParams]);\n\n return filterModel;\n};\n\nconst parseFilterValue = (value) => {\n const isDate =\n !isNaN(Date.parse(value)) && (value.includes('-') || value.includes('/'));\n\n if (isDate) {\n return {\n filterType: 'date',\n filterKey: 'dateFrom',\n parsedValue: value\n };\n }\n\n if (!isNaN(value) && !isNaN(parseFloat(value))) {\n return {\n filterType: 'number',\n filterKey: 'filter',\n parsedValue: Number(value)\n };\n }\n\n return {\n filterType: 'text',\n filterKey: 'filter',\n parsedValue: value\n };\n};\n","import UdpTransactionGrid from './UdpTransactionGrid';\nimport React, { useState, useCallback, useMemo } from 'react';\nimport UdpTransactionSidesheet from './UdpTransactionSidesheet';\nimport { useTransactionType } from '../../../hooks/useTransactionType';\nimport { useTransactionEngine } from '../../../utilities/transactions/useTransactionEngine';\nimport { CircularProgress } from '@material-ui/core';\nimport './UdpTransactionsPage.css';\nimport { useUdpGridFilterModel } from '../../../hooks/useUdpGridFilterModel';\n\n// const domainColumnFormattersExample = {\n// submittedBy: {\n// formatter: (params) => {\n// return params?.data\n// ? params?.data?.entityBusinessObject['submittedBy']\n// : '';\n// }\n// },\n// submittedTo: {\n// formatter: (params) => {\n// return params?.data\n// ? params?.data?.entityBusinessObject['submittedTo']\n// : '';\n// }\n// },\n// test: {\n// formatter: (params) => {\n// return 'test';\n// }\n// }\n// };\n\nconst UdpTransactionsPage = (props) => {\n const {\n transactionTypeId = '',\n domainName: initialDomainName = '',\n domainFieldType,\n domainFieldValue,\n searchMethodObject,\n domainColumnFormatters,\n gridOptions\n } = props;\n\n const [sidesheetState, setSidesheetState] = useState({\n workflowAction: false,\n addTransaction: false,\n editTransaction: false,\n viewTransaction: false,\n attachmentTransaction: false,\n createRevision: false\n });\n const [selectedTransaction, setSelectedTransaction] = useState(null);\n const [gridApi, setGridApi] = useState(null);\n\n const {\n data: transactionType,\n loading: transactionTypeLoading,\n error: transactionTypeError\n } = useTransactionType({\n transactionTypeId: transactionTypeId,\n domainName: initialDomainName,\n domainFieldType: domainFieldType,\n domainFieldValue: domainFieldValue\n });\n\n useTransactionEngine(transactionType?.transactionTypeId);\n const filterModel = useUdpGridFilterModel();\n\n const handleSidesheet = (\n actionType,\n openStatus,\n transaction,\n width = 800\n ) => {\n if (actionType == 'add') {\n setSidesheetState({ addTransaction: openStatus, width: width });\n } else if (actionType == 'edit') {\n setSidesheetState({ editTransaction: openStatus, width: width });\n } else if (actionType == 'view') {\n setSidesheetState({ viewTransaction: openStatus, width: width });\n } else if (actionType == 'attachment') {\n setSidesheetState({ attachmentTransaction: openStatus, width: width });\n } else if (actionType == 'action') {\n setSidesheetState({ workflowAction: openStatus, width: width });\n } else if (actionType == 'createRevision') {\n setSidesheetState({ createRevision: openStatus, width: width });\n }\n setSelectedTransaction(transaction);\n };\n\n const handleAttachmentTransaction = () => {};\n\n const handleGridApiCallback = useCallback((api) => {\n setGridApi(api);\n }, []);\n\n const domainName = useMemo(() => {\n if (transactionType) {\n const splitDomainNameArr = transactionType.domainName.split('.');\n return splitDomainNameArr.pop();\n }\n return initialDomainName;\n }, [transactionType, initialDomainName]);\n\n if (!transactionType) {\n return (\n <div className='udp-transaction-page-loading'>\n <CircularProgress size={64} />\n </div>\n );\n }\n\n return (\n <>\n <UdpTransactionGrid\n transactionTypeId={transactionType?.transactionTypeId}\n transactionType={transactionType}\n domainName={domainName}\n transactionTypeLoading={transactionTypeLoading}\n searchMethodObject={searchMethodObject}\n domainColumnFormatters={domainColumnFormatters}\n openAddTransaction={() => {\n handleSidesheet('add', true);\n }}\n openViewTransaction={(transaction) => {\n handleSidesheet('view', true, transaction);\n }}\n openEditTransaction={(transaction) => {\n handleSidesheet('edit', true, transaction);\n }}\n openAttachmentTransaction={(transaction) => {\n handleSidesheet('attachment', true, transaction, 1000);\n }}\n openWorkflowActionTransaction={(transaction) => {\n handleSidesheet('action', true, transaction);\n }}\n openCreateRevision={(transaction) => {\n handleSidesheet('createRevision', true, transaction);\n }}\n handleGridApiCallback={handleGridApiCallback}\n refreshGridData={() => {\n gridApi?.refreshServerSide();\n }}\n gridApi={gridApi}\n initialFilterModel={filterModel}\n initialGridOptions={gridOptions}\n />\n\n <UdpTransactionSidesheet\n openStates={sidesheetState}\n handleSidesheet={handleSidesheet}\n handleAttachmentTransaction={handleAttachmentTransaction}\n transaction={selectedTransaction}\n transactionTypeId={transactionType?.transactionTypeId}\n domainName={domainName}\n refreshGridData={() => {\n gridApi?.refreshServerSide();\n }}\n />\n </>\n );\n};\n\nexport default UdpTransactionsPage;\n","export * from './UdpTransactionsPage';\nexport { default } from './UdpTransactionsPage';\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -246,7 +246,7 @@ import { t as ClientSideUdpGrid } from "./ClientSideUdpGrid-D5fGumO-.js";
246
246
  import { i as FluentMenuListButton, n as FluentCompoundButton, r as FluentUploadButton, t as FluentUploadIconButton } from "./buttons-DyKpA2qY.js";
247
247
  import { t as AmbientToggleButtonGroup } from "./AmbientToggleButtonGroup-DgFod3VK.js";
248
248
  import { t as TrimForAvatar } from "./TrimForAvatar-BP1gZWd5.js";
249
- import { n as UdpTransactionsPage_default } from "./UdpTransactionsPage-DXhT7CVV.js";
249
+ import { n as UdpTransactionsPage_default } from "./UdpTransactionsPage-7r0fyOpo.js";
250
250
  import { t as AccountFlags } from "./status-moefSFBs.js";
251
251
  import { n as FormHeader, r as FormSubHeader, t as StylizedTitle } from "./typography-CvW7cAl8.js";
252
252
  import { t as Attachments } from "./uploader-BdeUKdYW.js";