udp-react-enterprise-component-library 25.18.3-beta.8 → 25.18.3-beta.9

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.
@@ -649,7 +649,7 @@ var AttachmentTransaction_default = AttachmentTransaction;
649
649
  //#endregion
650
650
  //#region src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.jsx
651
651
  const UdpTransactionCustomPage = (props) => {
652
- const { pageId, transactionTypeId, transactionUiActionType, formRef, refetchTransaction, transaction, transactionTypeTransactionActionId, setHasUnsavedChanges, onSubmitSuccess, refreshGridData } = props;
652
+ const { pageId, transactionTypeId, transactionUiActionType, formRef, refetchTransaction, transaction, transactionTypeTransactionActionId, setHasUnsavedChanges, onSubmitSuccess, refreshGridData, additionalPageParms = {} } = props;
653
653
  const { getUiActionRenderPageId, getHiddenFields, getRequiredFields } = useTransactionEngine(transactionTypeId);
654
654
  const { handleErrorSnackbar, handleSuccessSnackbar } = useHandleAxiosSnackbar();
655
655
  const { t } = useTranslation();
@@ -735,7 +735,8 @@ const UdpTransactionCustomPage = (props) => {
735
735
  transaction,
736
736
  isFieldRequired,
737
737
  isFieldHidden,
738
- refreshTransactionGrid: refreshGridData
738
+ refreshTransactionGrid: refreshGridData,
739
+ ...additionalPageParms
739
740
  }
740
741
  }));
741
742
  };
@@ -760,6 +761,7 @@ const WorkflowActions = ({ transaction, closeSideSheet, refreshGridData }) => {
760
761
  const [selectedAction, setSelectedAction] = useState(null);
761
762
  const [sideSheetOpen, setSideSheetOpen] = useState(false);
762
763
  const [loading, setLoading] = useState(false);
764
+ const [sidesheetPrimaryButtonDisabled, setSidesheetPrimaryButtonDisabled] = useState(false);
763
765
  const formRef = useRef(null);
764
766
  const { getTransactionTypeTransactionActions } = useTransactionEngine(transaction.transactionTypeId);
765
767
  const handleOnCloseSideSheet = useCallback(() => {
@@ -869,14 +871,15 @@ const WorkflowActions = ({ transaction, closeSideSheet, refreshGridData }) => {
869
871
  progress: loading,
870
872
  variant: "indeterminate",
871
873
  color: "primary",
872
- buttonOneDisabled: loading
874
+ buttonOneDisabled: loading || sidesheetPrimaryButtonDisabled
873
875
  }, selectedAction && selectedAction.parameters?.pageId && /* @__PURE__ */ React.createElement(UdpTransactionCustomPage_default, {
874
876
  pageId: selectedAction.parameters.pageId,
875
877
  transaction,
876
878
  formRef,
877
879
  transactionTypeTransactionActionId: selectedAction.transactionTypeTransactionActionId,
878
880
  onSubmitSuccess: handleSubmitSuccessfulWorkflowAction,
879
- refreshGridData
881
+ refreshGridData,
882
+ additionalPageParms: { sidesheetParams: { setSidesheetPrimaryButtonDisabled } }
880
883
  })));
881
884
  };
882
885
  var WorkflowActions_default = WorkflowActions;
@@ -1536,7 +1539,7 @@ var DynamicTransactionDomainForm_default = DynamicTransactionDomainForm;
1536
1539
  //#endregion
1537
1540
  //#region src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.jsx
1538
1541
  const EditTransaction = (props) => {
1539
- const { transaction: initialTransaction, transactionTypeId, transactionIsClosed, openInnerSidesheetState, setOpenInnerSidesheetState, refreshGridData, closeSideSheet, setSidesheetLoading, setHasUnsavedChanges, domainName, attachmentType, setAttachmentType, currentAttachments, setCurrentAttachments, attachmentProgress, setAttachmentProgress, transactionAttachmentTypes, transactionAttachments, setTransactionAttachments, filePreview, setFilePreview } = props;
1542
+ const { transaction: initialTransaction, transactionTypeId, transactionIsClosed, openInnerSidesheetState, setOpenInnerSidesheetState, refreshGridData, closeSideSheet, setSidesheetLoading, setHasUnsavedChanges, domainName, attachmentType, setAttachmentType, currentAttachments, setCurrentAttachments, attachmentProgress, setAttachmentProgress, transactionAttachmentTypes, transactionAttachments, setTransactionAttachments, filePreview, setFilePreview, additionalPageParms } = props;
1540
1543
  const { t } = useTranslation();
1541
1544
  const [selectedTab, setSelectedTab] = useState(0);
1542
1545
  const [transaction, setTransaction] = useState(initialTransaction);
@@ -1808,7 +1811,8 @@ const EditTransaction = (props) => {
1808
1811
  transaction,
1809
1812
  refetchTransaction,
1810
1813
  setHasUnsavedChanges,
1811
- refreshGridData
1814
+ refreshGridData,
1815
+ additionalPageParms
1812
1816
  }) : /* @__PURE__ */ React.createElement(DynamicTransactionDomainForm_default, {
1813
1817
  transaction,
1814
1818
  formRef,
@@ -1881,6 +1885,8 @@ const UdpTransactionSidesheet = (props) => {
1881
1885
  const [attachmentProgress, setAttachmentProgress] = useState(false);
1882
1886
  const [transactionAttachments, setTransactionAttachments] = useState([]);
1883
1887
  const [filePreview, setFilePreview] = useState(false);
1888
+ const [sidesheetPrimaryButtonDisabled, setSidesheetPrimaryButtonDisabled] = useState(false);
1889
+ const [sidesheetSecondaryButtonDisabled, setSidesheetSecondaryButtonDisabled] = useState(false);
1884
1890
  const { handleSuccessSnackbar, handleErrorSnackbar } = useHandleAxiosSnackbar();
1885
1891
  const { hasClosedStatus, checkIfTransactionIsClosed, getTransactionTypeLabel, getUiActionRenderPageId } = useTransactionEngine(transactionTypeId);
1886
1892
  const { t } = useTranslation();
@@ -2073,7 +2079,11 @@ const UdpTransactionSidesheet = (props) => {
2073
2079
  transactionUiActionType: TransactionUiActionTypeEnums.Render_Create_Transaction_Page,
2074
2080
  formRef,
2075
2081
  onSubmitSuccess: handleTransactionCreationSuccess,
2076
- refreshGridData
2082
+ refreshGridData,
2083
+ additionalPageParms: { sidesheetParams: {
2084
+ setSidesheetPrimaryButtonDisabled,
2085
+ setSidesheetSecondaryButtonDisabled
2086
+ } }
2077
2087
  }) : /* @__PURE__ */ React.createElement(DynamicTransactionDomainForm_default, {
2078
2088
  transaction,
2079
2089
  formRef,
@@ -2193,7 +2203,11 @@ const UdpTransactionSidesheet = (props) => {
2193
2203
  setTransactionAttachments,
2194
2204
  filePreview,
2195
2205
  setFilePreview,
2196
- domainName
2206
+ domainName,
2207
+ additionalPageParms: { sidesheetParams: {
2208
+ setSidesheetPrimaryButtonDisabled,
2209
+ setSidesheetSecondaryButtonDisabled
2210
+ } }
2197
2211
  })
2198
2212
  },
2199
2213
  {
@@ -2208,7 +2222,11 @@ const UdpTransactionSidesheet = (props) => {
2208
2222
  formRef,
2209
2223
  transaction,
2210
2224
  onSubmitSuccess: handleTransactionRevisionCreationSuccess,
2211
- refreshGridData
2225
+ refreshGridData,
2226
+ additionalPageParms: { sidesheetParams: {
2227
+ setSidesheetPrimaryButtonDisabled,
2228
+ setSidesheetSecondaryButtonDisabled
2229
+ } }
2212
2230
  }),
2213
2231
  buttonLabel: "Create Revision"
2214
2232
  }
@@ -2277,8 +2295,8 @@ const UdpTransactionSidesheet = (props) => {
2277
2295
  color: "primary",
2278
2296
  buttonTwoLabel: item?.buttonTwoLabel,
2279
2297
  buttonTwoAction: item?.buttonTwoAction,
2280
- buttonOneDisabled: item?.buttonOneDisabled,
2281
- buttonTwoDisabled: item?.buttonTwoDisabled,
2298
+ buttonOneDisabled: item?.buttonOneDisabled || sidesheetPrimaryButtonDisabled,
2299
+ buttonTwoDisabled: item?.buttonTwoDisabled || sidesheetSecondaryButtonDisabled,
2282
2300
  progress: sidesheetLoading,
2283
2301
  variant: "indeterminate"
2284
2302
  }, /* @__PURE__ */ React.createElement("div", null, item.children));
@@ -2539,4 +2557,4 @@ var UdpTransactionsPage_exports = /* @__PURE__ */ __exportAll({ default: () => U
2539
2557
 
2540
2558
  //#endregion
2541
2559
  export { UdpTransactionsPage_default as n, UdpTransactionsPage_exports as t };
2542
- //# sourceMappingURL=UdpTransactionsPage-BpHCN2VF.js.map
2560
+ //# sourceMappingURL=UdpTransactionsPage-B-0Z5NDA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpTransactionsPage-B-0Z5NDA.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","DynamicTransactionDomainForm","EditTransactionDetailsFooterItem","ConfigService","ViewTransaction","UdpTransactionCustomPage","DynamicTransactionDomainForm","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/DynamicTransactionDomainFormFields.jsx","../src/udp/pages/UdpTransactionsPage/components/DynamicTransactionDomainForm.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 { 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 catalogObjectList\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 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 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 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 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 let cellDataType = null;\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 cellDataType = 'dateString';\n }\n\n initialColumnDefs.push({\n headerName: gridColumn?.displayName,\n field: `${UdpSearchEnums.UdpBusinessDomainPrefix}.${domainName}.${propertyName}`,\n valueFormatter: valueFormatter,\n filter: agColumnFilter,\n cellDataType: cellDataType\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 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 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 refreshGridData,\n additionalPageParms = {}\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 {\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={{\n transaction,\n isFieldRequired,\n isFieldHidden,\n refreshTransactionGrid: refreshGridData,\n ...additionalPageParms\n }}\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 const [sidesheetPrimaryButtonDisabled, setSidesheetPrimaryButtonDisabled] =\n 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 }, [formRef]);\n\n const handleSubmitSuccessfulWorkflowAction = useCallback(\n (response) => {\n handleOnCloseSideSheet();\n closeSideSheet();\n refreshGridData();\n },\n [handleOnCloseSideSheet, refreshGridData, closeSideSheet]\n );\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 color='primary'\n buttonOneDisabled={loading || sidesheetPrimaryButtonDisabled}\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 onSubmitSuccess={handleSubmitSuccessfulWorkflowAction}\n refreshGridData={refreshGridData}\n additionalPageParms={{\n sidesheetParams: {\n setSidesheetPrimaryButtonDisabled\n }\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, transactionTypeId } = props;\n const { t } = useTranslation();\n\n const { getHiddenFields, getRequiredFields } = useTransactionEngine(\n 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 if(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 return date\n };\n\n const addSpacingInHeaderName = (headerName) => {\n let formattedHeaderName = '';\n for (var i = 0; i < headerName.length; i++) {\n if(i == 0){\n formattedHeaderName += headerName[i].toUpperCase();\n }else if (i !== 0 && headerName[i].match(/[A-Z]/) && i != headerName.length-1) {\n formattedHeaderName += ' ' + headerName[i];\n } else {\n formattedHeaderName += headerName[i];\n }\n }\n return formattedHeaderName;\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 formattedFieldName = addSpacingInHeaderName(fieldName);\n const formLabel = isAsscoiationLabel ? formattedFieldName + ' Name' : formattedFieldName;\n const isRequired = getRequiredFields(transaction).includes(fieldName) || attribute.required || !attribute.nullable;\n const isHidden = getHiddenFields(transaction).includes(fieldName) || attribute.isPrimaryKey || !attribute.extendedProperties.defaultVisible || attribute?.hidden\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, FormSpy } from '../../../../utilities/form';\nimport { CardinalityTypeEnums, TransactionUiActionTypeEnums } from '../../../../enums';\nimport DetailsFormFields from './DynamicTransactionDomainFormFields';\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 '../../../../stores/catalogStore';\n\nconst DynamicTransactionDomainForm = (props) => {\n const {\n transaction,\n formRef,\n domainName,\n transactionTypeId,\n transactionUiActionType,\n setHasUnsavedChanges,\n onSubmitSuccess,\n refetchTransaction\n } = 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: fullyQualifiedName\n ? getSanitizedName(fullyQualifiedName)\n : domainName\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 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, domainName]);\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 executeCreateTransactionAndDomain = 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 onSubmit = useCallback(\n async (values) => {\n try {\n const request = { data: values };\n let response = null;\n let successMessageAction = '';\n let errorMessageAction = '';\n if (\n transactionUiActionType ==\n TransactionUiActionTypeEnums.Render_Transaction_Details_Page\n ) {\n response = await executeSaveChanges({ data: values });\n successMessageAction = 'saved';\n errorMessageAction = 'saving';\n } else if (\n transactionUiActionType ==\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n ) {\n response = await executeCreateTransactionAndDomain(request);\n successMessageAction = 'created';\n errorMessageAction = 'creating';\n }\n if (response?.status === 200) {\n handleSuccessSnackbar(\n t(`Transaction has been ${successMessageAction} successfully`)\n );\n onSubmitSuccess?.(response);\n } else {\n handleErrorSnackbar(\n new Error(\n t(\n `Error ${errorMessageAction} Transaction. Please try again later.`\n )\n )\n );\n }\n } catch (e) {\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 executeSaveChanges,\n executeCreateTransactionAndDomain,\n handleSuccessSnackbar,\n handleErrorSnackbar,\n t,\n transactionUiActionType,\n setHasUnsavedChanges,\n formRef,\n onSubmitSuccess,\n refetchTransaction\n ]\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 fullWidth={true}>\n <Form onSubmit={onSubmit} ref={formRef}>\n <FormSpy subscription={{ dirty: true }}>\n {({ dirty }) => {\n if (setHasUnsavedChanges) {\n setHasUnsavedChanges(dirty);\n }\n }}\n </FormSpy>\n <DetailsFormFields\n transaction={transaction}\n fieldAttributes={fieldAttributes}\n transactionTypeId={transactionTypeId}\n />\n </Form>\n </AmbientCard>\n );\n};\n\nexport default DynamicTransactionDomainForm;\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 DynamicTransactionDomainForm from '../components/DynamicTransactionDomainForm';\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 domainName,\n attachmentType,\n setAttachmentType,\n currentAttachments,\n setCurrentAttachments,\n attachmentProgress,\n setAttachmentProgress,\n transactionAttachmentTypes,\n transactionAttachments,\n setTransactionAttachments,\n filePreview,\n setFilePreview,\n additionalPageParms\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 refreshGridData={refreshGridData}\n additionalPageParms={additionalPageParms}\n />\n ) : (\n <DynamicTransactionDomainForm\n transaction={transaction}\n formRef={formRef}\n domainName={domainName}\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Transaction_Details_Page\n }\n setHasUnsavedChanges={setHasUnsavedChanges}\n refetchTransaction={refetchTransaction}\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, {\n useState,\n useMemo,\n useRef,\n useCallback,\n useEffect\n} 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 {\n allowedExtensions,\n MAX_FILE_SIZE_MB\n} from '../../../uploader/utils/allowedFileProperties';\nimport { useSnackbar } from 'notistack';\nimport { Badge } from '@material-ui/core';\nimport DynamicTransactionDomainForm from './components/DynamicTransactionDomainForm';\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 [\n createTransactionOpenInnerSidesheetState,\n setCreateTransactionOpenInnerSidesheetState\n ] = 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 const [sidesheetPrimaryButtonDisabled, setSidesheetPrimaryButtonDisabled] =\n useState(false);\n const [\n sidesheetSecondaryButtonDisabled,\n setSidesheetSecondaryButtonDisabled\n ] = 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(\n (resetSavedAttachmentsState) => {\n if (resetSavedAttachmentsState) {\n setAttachmentType(null);\n setCurrentAttachments([]);\n }\n setAttachmentProgress(false);\n setTransactionAttachments([]);\n setFilePreview(false);\n },\n []\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(\n (response) => {\n createdTransactionIdRef.current = response?.data?.transactionId ?? null;\n handleSidesheet('add', false);\n handleResetAttachmentState(true);\n refreshGridData();\n },\n [handleSidesheet, handleResetAttachmentState, refreshGridData]\n );\n\n const handleTransactionRevisionCreationSuccess = useCallback(\n (response) => {\n handleSidesheet('createRevision', false);\n refreshGridData();\n },\n [handleSidesheet, refreshGridData]\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(\n 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 [\n attachmentType,\n currentAttachments,\n enqueueSnackbar,\n setCurrentAttachments,\n setAttachmentProgress\n ]\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 }, [\n formRef,\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 }, [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 transactionCreatePageId = useMemo(() => {\n return getUiActionRenderPageId(\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n );\n }, [getUiActionRenderPageId]);\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 {transactionCreatePageId ? (\n <UdpTransactionCustomPage\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n }\n formRef={formRef}\n onSubmitSuccess={handleTransactionCreationSuccess}\n refreshGridData={refreshGridData}\n additionalPageParms={{\n sidesheetParams: {\n setSidesheetPrimaryButtonDisabled,\n setSidesheetSecondaryButtonDisabled\n }\n }}\n />\n ) : (\n <DynamicTransactionDomainForm\n transaction={transaction}\n formRef={formRef}\n domainName={domainName}\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n }\n onSubmitSuccess={handleTransactionCreationSuccess}\n />\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({\n attachments: false\n });\n handleResetAttachmentState(true);\n }}\n buttonLabel={t('Save')}\n buttonOneDisabled={\n !attachmentType || currentAttachments.length <= 0\n }\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 badgeContent={currentAttachments?.length} color='primary'>\n {'Add Attachment'}\n </Badge>\n ),\n buttonTwoAction: () =>\n 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 domainName={domainName}\n additionalPageParms={{\n sidesheetParams: {\n setSidesheetPrimaryButtonDisabled,\n setSidesheetSecondaryButtonDisabled\n }\n }}\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 onSubmitSuccess={handleTransactionRevisionCreationSuccess}\n refreshGridData={refreshGridData}\n additionalPageParms={{\n sidesheetParams: {\n setSidesheetPrimaryButtonDisabled,\n setSidesheetSecondaryButtonDisabled\n }\n }}\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 transactionCreatePageId,\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 handleTransactionRevisionCreationSuccess\n ]);\n\n useEffect(() => {\n if (\n (openStates?.addTransaction || openStates?.editTransaction) &&\n !transactionAttachmentTypes\n ) {\n setAttachmentProgress(true);\n fetchTransactionAttachmentType().then(() => {\n setAttachmentProgress(false);\n });\n }\n }, [\n fetchTransactionAttachmentType,\n transactionAttachmentTypes,\n openStates.addTransaction,\n openStates.editTransaction\n ]);\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={\n item?.buttonOneDisabled || sidesheetPrimaryButtonDisabled\n }\n buttonTwoDisabled={\n item?.buttonTwoDisabled || sidesheetSecondaryButtonDisabled\n }\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';\nimport { UdpSearchEnums } from '../enums/unitySystemEnums';\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(`${UdpSearchEnums.UdpQueryParamPrefix}-`)) {\n const paramBody = key.replace(\n `${UdpSearchEnums.UdpQueryParamPrefix}-`,\n ''\n );\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';\nimport { useCatalogStore } from '../../../stores';\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 { currentApiCatalogId, catalogsMap } = useCatalogStore();\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 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 // IMPORTANT: If no Catalog is promoted for product application, the page will not load\n if (!transactionType || !catalogObjectList) {\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 catalogObjectList={catalogObjectList}\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAa,sBACX,QAA0B,CACxB,UAAU,SAAS;CACjB,qBAAqB,EAAE;CACvB,yBAAyB,wBACvB,KAAK,WAAW,EACd,qBAAqB;EACnB,GAAG,MAAM;EACT,GAAG;EACJ,EACF,EAAE;CACN,EAAE,CACJ;;;;ACVH,MAAa,wBAAwB,sBAAsB;CACzD,MAAM,OAAO,SAAS;CACtB,MAAM,CAAC,uBAAuB,4BAA4B,SAAS,EAAE,CAAC;CAEtE,MAAM,sBAAsB,iBACzB,UAAU,MAAM,oBAClB;CACD,MAAM,cAAc,iBAAiB,UAAU,MAAM,YAAY;CAEjE,MAAM,sBAAsB,qBACzB,UAAU,MAAM,oBAClB;CACD,MAAM,kBAAkB,sBACpB,oBAAoB,qBACpB;CAEJ,MAAM,eAAe,aAClB,MAAM,mBAAmB;EACxB,IAAI,+BAA+B;GACjC,iBAAiB,gBAAgB;GACjC,oBAAoB,gBAAgB;GACpC,mBAAmB,MAAM,WAAW,EAAE;GACvC;AAED,SAAO,UAAU,MAAM,MAAM,6BAA6B;IAE5D,CAAC,MAAM,QAAQ,CAChB;CAED,MAAM,uCAAuC,aAC1C,gBAAgB,aAAa,SAAS;AAqCrC,SAnCE,iBAAiB,mDAAmD,QACjE,SAAS,WAAW;GACnB,MAAM,YAAY,QAAQ;AAC1B,OAAI,CAAC,WACH,QAAO;AAET,OACE,OAAO,0BAA0B,cACjC,OAAO,WACP,WACA;AAEA,QADe,aAAa,WAAW,eAAe,EAC1C;KAKV,MAAM,iBAHJ,QAAQ,mFACR,EAAE,EAGD,KACE,WACC,OAAO,oFACV,CACA,QAAQ,WAAW,OAAO;AAE7B,SAAI,cAAc,SAAS,EACzB,WAAU,QAAQ,OAAO,cAAc;;AAG3C,WAAO;;AAET,UAAO;KAET,EAAE,CACH;IAIL,CAAC,iBAAiB,aAAa,CAChC;CAED,MAAM,eAAe,cAAc;AACjC,SAAO,iBAAiB;IACvB,CAAC,gBAAgB,CAAC;CAErB,MAAM,kBAAkB,cAAc;AACpC,SAAO,iBAAiB,4CAA4C,MACjE,WAAW,OAAO,eACpB;IACA,CAAC,gBAAgB,CAAC;CAErB,MAAM,YAAY,cAAc;AAC9B,SACE,iBAAiB,mBACjB,iBAAiB,4CAA4C,MAC1D,WAAW,OAAO,kBACpB;IAEF,CAAC,gBAAgB,CAAC;CAErB,MAAM,0BAA0B,cACxB,iBAAiB,4CACvB,CAAC,gBAAgB,CAClB;CAED,MAAM,6BAA6B,cAAc;AAC/C,MAAI,MAAM,QAAQ,iBAAiB,aAAa,CAC9C,QAAO,iBAAiB,gBAAgB,EAAE;WAE1C,iBAAiB,gBACjB,OAAO,KAAK,gBAAgB,aAAa,CAAC,OAQ1C,QANuB,OAAO,QAAQ,gBAAgB,aAAa,CAChE,KAAK,CAAC,cAAc,YAAY;GAC/B;GACA,GAAG;GACJ,EAAE,CACF,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,IACX,EAAE;AAE7B,SAAO,EAAE;IACR,CAAC,gBAAgB,CAAC;CAErB,MAAM,iCAAiC,cAAc;EACnD,MAAM,kBAAkB,EAAE;AAC1B,mBAAiB,4CAA4C,SAC1D,WAAW;AACV,mBAAgB,OAAO,QAAQ,OAAO,SAAS;IAElD;AACD,SAAO;IACN,CAAC,gBAAgB,CAAC;CAErB,MAAM,kBAAkB,aACrB,mBAAmB;EAClB,MAAM,qBAAqB,qCACzB,gBACA,0BAA0B,KAC3B;AACD,MAAI,CAAC,mBAAoB,QAAO,EAAE;EAClC,IAAI,eAAe,EAAE;AACrB,qBACG,QACE,WACC,OAAO,wBACP,2BAA2B,kBAC9B,CACA,SAAS,WAAW;AACnB,OAAI,OAAO,YAAY,aACrB,gBAAe,aAAa,OAAO,OAAO,WAAW,aAAa;IAEpE;AACJ,SAAO;IAET,CAAC,qCAAqC,CACvC;CAED,MAAM,oBAAoB,aACvB,mBAAmB;EAClB,MAAM,qBAAqB,qCACzB,gBACA,0BAA0B,KAC3B;AACD,MAAI,CAAC,mBAAoB,QAAO,EAAE;EAClC,IAAI,iBAAiB,EAAE;AACvB,qBACG,QACE,WACC,OAAO,wBACP,2BAA2B,qBAC9B,CACA,SAAS,WAAW;AACnB,OAAI,OAAO,YAAY,gBACrB,kBAAiB,eAAe,OAC9B,OAAO,WAAW,gBACnB;IAEH;AACJ,SAAO;IAET,CAAC,qCAAqC,CACvC;CAED,MAAM,0BAA0B,aAC7B,iBAAiB;AAKhB,UAHE,iBAAiB,0CAA0C,MACxD,WAAW,OAAO,8BAA8B,aAClD,GACc,YAAY,UAAU;IAEzC,CAAC,gBAAgB,CAClB;CAED,MAAM,0BAA0B,aAC7B,mBAAmB;AAClB,MAAI,CAAC,iBAAiB,iBAAkB,QAAO;AAC/C,SAAO,gBAAgB,uBACnB,eAAe,qBAAqB,gBAAgB,oBACpD;IAEN,CAAC,gBAAgB,CAClB;CAED,MAAM,6BAA6B,aAChC,mBAAmB;AAClB,MAAI,CAAC,gBAAiB,QAAO;EAC7B,MAAM,eACJ,iBAAiB,4CAA4C,MAC1D,WAAW,OAAO,eACpB;AACH,MAAI,CAAC,aAAc,QAAO;AAC1B,SACE,aAAa,4BAA4B,gBAAgB;IAG7D,CAAC,iBAAiB,gBAAgB,CACnC;AAED,iBAAgB;AACd,MAAI,eAAe,uBAAuB,iBAAiB;GACzD,MAAM,aAAa,YAAY;AAC/B,OAAI,YAAY;IAEd,MAAM,wBADiB,WAAW,KAAK,kBACM,MAC1C,QACC,IAAI,kBAAkB,aAAa,KACnC,iBAAiB,YAAY,aAAa,CAC7C;AACD,QAAI,sBACF,0BAAyB,sBAAsB,cAAc,EAAE,CAAC;;;IAIrE;EAAC;EAAa;EAAqB;EAAgB,CAAC;AAEvD,QAAO;EACL,wBAAwB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;;ACjPH,MAAM,0BAA0B;AAEhC,MAAM,sBAAsB,UAAU;CACpC,MAAM,EACJ,mBACA,YACA,wBACA,uBACA,oBACA,qBACA,qBACA,2BACA,+BACA,oBACA,oBACA,yBAAyB,EAAE,EAC3B,iBACA,SACA,oBACA,qBAAqB,EAAE,EACvB,sBACE;CACJ,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,CAAC,qBAAqB,0BAA0B,SAAS,KAAK;CAEpE,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,EACJ,cACA,4BACA,yBACA,gCACA,yBACA,yBACA,cACE,qBAAqB,kBAAkB;CAE3C,MAAM,EAAE,qBAAqB,0BAC3B,wBAAwB;CAE1B,MAAM,CACJ,EAAE,MAAM,SAAS,eAAe,OAAO,eACvC,qBACE,eACF,GAAGA,gBAAc,mBACjB,kBAAkB,qBAAqB,cAAc,qBACrD,EACE,QAAQ,QACT,EACD,EAAE,CACH;CAED,MAAM,0BAA0B;AAC9B,yBAAuB,KAAK;AAC5B,gBAAc,MAAM;;CAGtB,MAAM,4BAA4B,YAAY,YAAY;AACxD,MAAI;AAEF,QADiB,MAAM,mBAAmB,GAC5B,WAAW,KAAK;AAC5B,qBAAiB;AACjB,0BAAsB,EAAE,8CAA8C,CAAC;SAEvE,qBACE,IAAI,MAAM,EAAE,wDAAwD,CAAC,CACtE;WAEI,OAAO;AACd,uBAAoB,MAAM;YAClB;AACR,sBAAmB;;IAEpB;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,sBAAsB,SAAS;EACnC,MAAM,aAAa,IAAI,KAAK,KAAK;AACjC,MAAI,WAAW,SAAS,EAAE;GACxB,MAAM,OAAO,WAAW,aAAa;GAErC,MAAM,QAAQ,WAAW,UAAU,GAAG;GACtC,MAAM,MAAM,WAAW,SAAS,CAAC,UAAU;AAC3C,UAAO,GAAG,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG;;AAExC,SAAO;;CAGT,MAAM,mBAAmB,cAAc;AACrC,SACE,wBAAwB,oBAAoB,IAC5C,qBAAqB;IAEtB,CAAC,yBAAyB,oBAAoB,CAAC;CAElD,MAAM,gBAAgB,cAAc;AAClC,SAAO,wBACL,6BAA6B,qBAC9B;IACA,CAAC,wBAAwB,CAAC;CAE7B,MAAM,aAAa,cAAc;EAC/B,MAAM,oBAAoB;GACxB;IACE,YAAY,EAAE,iBAAiB;IAC/B,OAAO;IACP,MAAM;IACP;GACD;IACE,YAAY,EAAE,aAAa;IAC3B,OAAO;IACP,cAAc;IACd,iBAAiB,WAAW;AAC1B,YAAO,mBAAmB,QAAQ,KAAK,UAAU;;IAEpD;GACD;IACE,YAAY,EAAE,iBAAiB;IAC/B,OAAO;IACP,cAAc;IACd,oBAAoB;KAClB,qBAAqB;KACrB,iBAAiB,WACf,QAAQ,KAAK,uCAAuC;KACvD;IACD,QAAQ;IACR,cAAc;KACZ,SAAS,WAAW;AAClB,UAAI,wBACF,QAAO,QAAQ,wBAAwB;;KAG3C,aAAa,WAAW,OAAO,MAAM;KACrC,iBAAiB,WAAW,OAAO,MAAM;KAC1C;IACD,iBAAiB,WACf,QAAQ,KAAK,uCAAuC;IACvD;GACD;IACE,YAAY,EAAE,kBAAkB;IAChC,OAAO;IACP,iBAAiB,WACf,QAAQ,KAAK,sCAAsC;IACtD;GACD;IACE,YAAY,EAAE,cAAc;IAC5B,OAAO;IACP,QAAQ;IACR,UAAU;IACV,gBAAgB,UAAU;AACxB,+BAA0B,MAAM,KAAK;;IAEvC,iBAAiB,WAAW;AAC1B,YAAO,QAAQ,KAAK,uCAAuC;;IAE9D;GACD;IACE,OAAO;IACP,cAAc;IACd,oBAAoB,EAClB,YAAY;KACV;MACE,IAAI;MACJ,OAAO,EAAE,aAAa;MACtB,UAAU;MACV,gBAAgB,GAAG,WAAW;AAC5B,qCAA8B,QAAQ,KAAK;;MAE9C;KACD,GAAI,gBACA,CACE;MACE,IAAI;MACJ,OAAO,EAAE,OAAO;MAChB,UAAU;MACV,gBAAgB,GAAG,WAAW;AAC5B,2BAAoB,QAAQ,KAAK;;MAEnC,UAAU,CAAC;MACZ,CACF,GACD,EAAE;KACN;MACE,IAAI;MACJ,OAAO,EAAE,OAAO;MAChB,UAAU;MACV,gBAAgB,GAAG,WAAW;AAC5B,2BAAoB,QAAQ,KAAK;;MAEpC;KACD;MACE,IAAI;MACJ,OAAO,EAAE,kBAAkB;MAC3B,UAAU;MACV,gBAAgB,GAAG,WAAW;AAC5B,0BAAmB,QAAQ,KAAK;;MAElC,UAAU,CAAC;MACZ;KACD,GAAI,YACA,CACE;MACE,IAAI;MACJ,OAAO,EAAE,SAAS;MAClB,UAAU;MACV,gBAAgB,GAAG,WAAW;AAC5B,8BAAuB,QAAQ,KAAK;AACpC,qBAAc,KAAK;;MAEtB,CACF,GACD,EAAE;KACP,EACF;IACF;GACF;AACD,8BAA4B,SAAS,eAAe;GAClD,MAAM,eAAe,YAAY,gBAAgB;GAEjD,IAAI,gBAAgB,mBAAmB,MACpC,oBACC,iBAAiBC,gBAAc,kBAAkB,IAAI,WACxD;GAED,IAAI,kBAAkB,WAAW;AAC/B,WAAO,QAAQ,OACX,QAAQ,MAAM,qBAAqB,gBACnC;;AAGN,OAAI,uBAAuB,cACzB,kBAAiB,uBAAuB,cAAc;GAGxD,IAAI,iBAAiB;GACrB,IAAI,eAAe;AAQnB,QAN0B,eAAe,YAAY,MAClD,mBAAmB;AAClB,WAAO,eAAe,SAAS;KAElC,GAEsB,KAAK,aAAa,IAAI,YAAY;AACvD,qBAAiB;AACjB,mBAAe;;AAGjB,qBAAkB,KAAK;IACrB,YAAY,YAAY;IACxB,OAAO,GAAG,eAAe,wBAAwB,GAAG,WAAW,GAAG;IAClD;IAChB,QAAQ;IACM;IACf,CAAC;IACF;AAEF,SAAO,KAAK,uBAAuB,CAAC,SAAS,cAAc;AAIzD,OAAI,EAH4B,4BAA4B,KACzD,QAAQ,IAAI,aACd,GAC6B,SAAS,UAAU,EAAE;IACjD,IAAI,qBACF,UAAU,MAAM,GAAG,EAAE,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE;AAC1D,sBAAkB,KAAK;KACrB,YAAY;KACZ,OAAO,GAAG,eAAe,wBAAwB,GAAG,WAAW,GAAG;KAClE,gBAAgB,uBAAuB,WAAW;KACnD,CAAC;;IAEJ;AAEF,MAAI,aACF,mBAAkB,OAAO,GAAG,GAAG;GAC7B,YAAY,EAAE,cAAc;GAC5B,OAAO;GACR,CAAC;AAGJ,SAAO;IACN;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,eAAe;EACnB,OAAO;EACP,qBAAqB;GACnB,OAAO,aAAa;GACpB,UAAU;GACV,eAAe;AACb,wBAAoB;;GAEvB;EAEF;CAED,MAAM,gBAAgB;EACpB,EAAE,MAAM,kBAAkB;EAC1B,EAAE,MAAM,gBAAgB;EACxB,EAAE,MAAM,yBAAyB;EACjC,EAAE,MAAM,0BAA0B;EACnC;CAED,MAAM,cAAc,cAAc;AAChC,SAAO;GACL,YAAY;GACZ,cAAc;GACd,GAAG;GACJ;IACA,CAAC,mBAAmB,CAAC;CAExB,MAAM,qBAAqB,cAAc;EACvC,IAAI,uBAAuB;GACzB,WAAW;GACX,gBAAgB,CACd;IACE,aAAa;IACb,gBAAgB;IAChB,aAAa;IACd,EACD;IACE,aAAa;IACb,gBAAgB;IAChB,aAAa;IACd,CACF;GACF;AAED,MAAI,oBAAoB;GACtB,IAAI,sBAAsB,qBAAqB,eAAe,OAC5D,oBAAoB,kBAAkB,EAAE,CACzC;AAED,0BAAuB;IACrB,GAAG;IACH,GAAG;IACJ;AAED,0BAAuB;IACrB,GAAG;IACH,gBAAgB;IACjB;;AAGH,SAAO;GACL,YAAY,GAAGD,gBAAc,gBAAgB;GAC7C,oBAAoB;GACrB;IACA,CAAC,mBAAmB,mBAAmB,CAAC;AAE3C,iBAAgB;AACd,MACE,WACA,sBACA,OAAO,KAAK,mBAAmB,CAAC,QAChC;AAEA,WAAQ,eAAe,mBAAmB;AAG1C,WAAQ,iBAAiB;;IAE1B,CAAC,SAAS,mBAAmB,CAAC;AAEjC,QACE,0DACG,0BAA0B,oCAACE,uBAAiB,EAC7C,oCAAC;EACC,kBAAkB;EACH;EACF;EACD;EACQ;EACpB,iBAAiB;EACjB,QAAQ;EACR,YAAY;GACZ,EACF,oCAAC;EACC,OAAO,EAAE,qBAAqB;EAC9B,SAAS,uDAAuD,WAAW,KACzE,oBAAoB,GACrB;EACD,UAAU,EAAE,UAAU;EACtB,WAAW;EACX,UAAU,EAAE,SAAS;EACrB,WAAW;EACX,MAAM;EACN,aAAa;EACb,SAAS;GACT,CACD;;AAIP,iCAAe;;;;ACraf,MAAM,mBAAmB,UAAU;CAEjC,MAAM,EAAE,gBAAgB;AAExB,QACE,0DACE,oCAAC;EACC,MAAM;GACJ,UAAU;GACV,eAAe;GAChB;EACD,wBAAuB;GACvB,CACD;;AAIP,8BAAe;;;;ACZf,MAAM,uCAAuC,UAAU;CACrD,MAAM,EAAE,aAAa,0BAA0B;CAE/C,MAAM,uBAAuB,cAAc;AACzC,SAAO,YAAY,KAAK,gBAAgB;GACtC,gBAAgB,WAAW;GAC3B,WAAW,WAAW;GACtB,yBAAyB,WAAW;GACrC,EAAE;IACF,CAAC,YAAY,CAAC;CAEjB,MAAM,eAAe,SAAS;AAC5B,MAAI,KAAK,eAAe,SAAS,OAAO,CACtC,QAAO;WACE,KAAK,eAAe,SAAS,QAAQ,CAC9C,QAAO;WACE,KAAK,eAAe,SAAS,IAAI,CAC1C,QAAO;;AAIX,QACE,0DACE,oCAAC;EACC,MAAM;EACN,WAAW;EACX,aAAa;GACX,aAAa;GACb,eAAe;GAChB;EACD,cAAc,SAAS;AACrB,yBAAsB,KAAK;;EAE7B,cAAc,SAAS;AACrB,UAAO,YAAY,KAAK;;EAE1B,YAAa;EACb,WAAW;GACX,CACD;;AAIP,kDAAe;;;;AC7Bf,MAAM,yBAAyB,UAAU;CACvC,MAAM,EAAE,aAAa,kBAAkB;CACvC,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,GAAG;CAEhE,MAAM,cAAc,aAAa;CAEjC,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,CAAC,EAAE,MAAM,sBAAsB,6BAA6B,YAChE,GAAG,QAAQ,IAAI,8BACf,4BAA4B,oBAAoB,wBAAwB,yBACxE,EAAE,EACF,KACD;CAED,MAAM,CAAC,EAAE,MAAM,gBAAgB,SAAS,aAAa,OAAO,iBAAiB,yBAAyB,YACpG,GAAG,QAAQ,IAAI,8BACf,4BAA4B,oBAAoB,wBAAwB,YACxE,EACE,cAAc,QACf,EACD,KACD;CAED,MAAM,UAAU,cAAc;AAC5B,MAAI,CAAC,eAAgB,QAAO;EAC5B,MAAM,UAAU,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvE,SAAO,IAAI,gBAAgB,QAAQ;IAClC,CAAC,eAAe,CAAC;AAEpB,iBAAgB;AACd,MAAI,oBAAoB;AACtB,8BAA2B;AAC3B,0BAAuB;;IAExB;EAAC;EAAoB;EAA2B;EAAsB,CAAC;CAE1E,MAAM,wBAAwB;AAC5B,MAAI,CAAC,cAAe,QAAO;EAE3B,MAAM,SAAS,cAAc,UAAU;AACvC,MAAI,WAAW,IAAK,QAAO,EAAE,+CAA+C;AAC5E,MAAI,UAAU,IAAK,QAAO,EAAE,kDAAkD;AAE9E,SAAO,cAAc,WAAW,EAAE,+BAA+B;;CAGnE,IAAI,cAAc;EAChB,UAAU;EACV,eAAe,oBAAoB;EACpC;CAED,MAAM,cAAc;CA0DpB,MAAM,cAzDY,YAAY,WAAW;EACvC,WAAW;GACT,SAAS;GACT,eAAe;GACf,MAAM;GACN,QAAQ;GACT;EACD,yBAAyB;GACvB,WAAW;GACX,OAAO;GACP,QAAQ;GACT;EACD,sBAAsB;GACpB,iBAAiB;GACjB,cAAc;GACd,aAAa;GACd;EACD,iCAAiC;GAC/B,UAAU;GACV,YAAY;GACZ,OAAO;GACR;EACD,mCAAmC;GACjC,UAAU;GACV,OAAO;GACP,eAAe;GAChB;EACD,uBAAuB;GACrB,OAAO;GACP,SAAS;GACT,eAAe;GACf,MAAM;GACN,WAAW;GACX,QAAO;GACR;EACD,0BAA0B,EACxB,iBAAiB,SAClB;EACD,oBAAoB;GAClB,OAAO;GACP,UAAU;GACV,YAAY;GACZ,WAAW;GACX,cAAc;GACd,aAAa;GACd;EACD,YAAY;GACV,YAAY;GACZ,aAAa;GACd;EACD,SAAS,EACP,qBAAqB,EACnB,iBAAiB,kBAClB,EACF;EACF,EAAE,EAE4B;AAE/B,qBAAoB,sBAAsB,EACxC,sBAAsB,YAAY;AAChC,MAAI,CAAC,mBAAoB;AAEzB,MAAI;GAMF,MAAM,OALW,MAAM,UACrBC,gBAAc,iBACd,4BAA4B,mBAAmB,wBAAwB,yBACvE,EAAE,CACH,EACoB,KAAK;GAC1B,MAAM,OAAO,SAAS,cAAc,IAAI;AACxC,QAAK,OAAO;AACZ,QAAK,WAAW,mBAAmB,YAAY,mBAAmB;AAClE,YAAS,KAAK,YAAY,KAAK;AAC/B,QAAK,OAAO;AACZ,YAAS,KAAK,YAAY,KAAK;WACxB,GAAG;AACV,WAAQ,MAAM,mBAAmB,EAAE;;IAGxC,EAAE;CAEH,MAAM,qBAAqB,aACzB,MAAK;AACH,KAAG,gBAAgB;AAEnB,MAAI,QACF,QAAO,KAAK,SAAS,SAAS;IAGlC,CAAC,QAAQ,CACV;CAED,MAAM,0BAA0B;AAC9B,6BAA2B;AAC3B,yBAAuB;;AAGzB,QACE,0DACE,oCAAC,SAAI,WAAW,YAAY,aAC1B,oCAAC,SAAI,WAAW,YAAY,2BAC1B,oCAAC,SAAI,WAAW,YAAY,wBAC1B,oCAAC,SAAI,WAAW,YAAY,mCAAiC,cAEvD,EACN,oCAAC,SAAI,WAAW,YAAY,qCACzB,YAAY,SAAS,oBAClB,CACF,EACN,oCAAC,SAAI,WAAW,YAAY,WAC1B,oCAACC,gBAAU,CACP,EACN,oCAACC;EACc;EACA;EACU;GACvB,CACE,EAEN,oCAAC,SAAI,WAAW,YAAY,yBAC1B,oCAAC,SAAI,WAAW,YAAY,4BACzB,sBACC,oCAAC,OAAE,WAAW,YAAY,sBACvB,mBAAmB,eAClB,EAEN,oCAAC,SAAI,WAAW,YAAY,WAC1B,oCAACD,gBAAU,CACP,CACF,EAEL,iBACC,oCAAC;EACC,WAAW,CAAC,CAAC;EACb,eAAe;EACf,YAAY,EAAE,yBAAyB;EACvC,cAAc,iBAAiB;EAC/B,aAAa;EACb,mBAAmB,EAAE,QAAQ;EAC7B,yBAAyB,mBAAmB;GAC5C,EAGH,eAAe,CAAC,gBACf,oCAACE,uBAAiB,GAChB,sBAAsB,sBAAsB,UAC9C,oCAAC,SAAI,WAAW,YAAY,cAC1B,oCAAC;EACC,MACE,oBAAoB,aAAa,QAC7B,cACA,CAAC,YAAY;EAEnB,iBAAiB;GACjB,CACE,GACJ,CAAC,sBACF,oCAAC;EACA,MAAM;EACN,aAAa;EACb,eACE;GAEF,CAEA,CACF,CACL;;AAGP,oCAAe;;;;AC3Of,MAAM,4BAA4B,UAAU;CAC1C,MAAM,EACJ,QACA,mBACA,yBACA,SACA,oBACA,aACA,oCACA,sBACA,iBACA,iBACA,sBAAsB,EAAE,KACtB;CAEJ,MAAM,EAAE,yBAAyB,iBAAiB,sBAChD,qBAAqB,kBAAkB;CAEzC,MAAM,EAAE,qBAAqB,0BAC3B,wBAAwB;CAC1B,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,iCAAiC,YACrC,OAAO,SACL,UACE,cAAc,iBACd,kCAAkC,kBAAkB,UACpD,EACE,QAAQ,QACT,EACD,KACD,EACH,CAAC,kBAAkB,CACpB;CAED,MAAM,qBAAqB,YACzB,OAAO,SACL,UACE,cAAc,iBACd,kBAAkB,aAAa,cAAc,eAC7C,EACE,QAAQ,OACT,EACD,KACD,EACH,CAAC,aAAa,cAAc,CAC7B;CAED,MAAM,wBAAwB,YAC5B,OAAO,SACL,UACE,cAAc,iBACd,kBAAkB,aAAa,cAAc,kBAC7C,EACE,QAAQ,QACT,EACD,KACD,EACH,CAAC,aAAa,cAAc,CAC7B;CAED,MAAM,4BAA4B,YAChC,OAAO,SACL,UACE,cAAc,iBACd,uCAAuC,mCAAmC,eAAe,YAAY,cAAc,UACnH,EACE,QAAQ,QACT,EACD,KACD,EACH,CAAC,oCAAoC,aAAa,cAAc,CACjE;CAED,MAAM,WAAW,YACf,OAAO,WAAW;AAChB,MAAI;GACF,MAAM,UAAU,EAAE,MAAM,QAAQ;GAChC,IAAI,WAAW;GACf,IAAI,UAAU;GACd,IAAI,mBAAmB;AACvB,OACE,4BACA,6BAA6B,gCAC7B;AACA,eAAW,MAAM,+BAA+B,QAAQ;AACxD,cAAU;AACV,uBAAmB;cAEnB,4BACA,6BAA6B,iCAC7B;AACA,eAAW,MAAM,mBAAmB,QAAQ;AAC5C,cAAU;AACV,uBAAmB;cAEnB,4BACA,6BAA6B,6BAC7B;AACA,eAAW,MAAM,sBAAsB,QAAQ;AAC/C,cAAU;AACV,uBAAmB;cACV,CAAC,CAAC,oCAAoC;AAC/C,eAAW,MAAM,0BAA0B,QAAQ;AACnD,cAAU;AACV,uBAAmB;;AAGrB,OAAI,UAAU,WAAW,KAAK;AAC5B,0BAAsB,EAAE,GAAG,QAAQ,GAAG,CAAC;AACvC,sBAAkB,SAAS;SAE3B,qBACE,IAAI,MACF,EACE,SAAS,iBAAiB,uCAC3B,CACF,CACF;WAEI,OAAO;AACd,uBAAoB,MAAM;YAClB;AACR,OAAI,sBAAsB;AACxB,YAAQ,SAAS,MAAM,QAAQ,OAAO;AACtC,yBAAqB,MAAM;;AAE7B,OAAI,mBACF,qBAAoB;;IAI1B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,kBAAkB,aACrB,cAAc;AAEb,SADuB,kBAAkB,YAAY,EAC9B,SAAS,UAAU;IAE5C,CAAC,mBAAmB,YAAY,CACjC;CAED,MAAM,gBAAgB,aACnB,cAAc;AAEb,SADqB,gBAAgB,YAAY,EAC5B,SAAS,UAAU;IAE1C,CAAC,iBAAiB,YAAY,CAC/B;CAED,MAAM,oBAAoB,cAAc;AACtC,MAAI,OACF,QAAO;AAET,SAAO,wBAAwB,wBAAwB;IACtD;EAAC;EAAyB;EAAyB;EAAO,CAAC;AAE9D,KAAI,CAAC,kBACH,QAAO;AAGT,QACE,oCAAC;EAAe;EAAU,KAAK;IAC7B,oCAAC,WAAQ,cAAc,EAAE,OAAO,MAAM,KAClC,EAAE,YAAY;AACd,MAAI,qBACF,sBAAqB,MAAM;GAGvB,EACV,oCAAC;EACC,QAAQ;EACR,qBAAqB;EACrB,cAAc;GACZ;GACA;GACA;GACA,wBAAwB;GACxB,GAAG;GACJ;GACD,CACG;;AAIX,uCAAe;;;;ACrMf,MAAM,2BAA2B,EAC/B,MACA,aACA,eACA,SACA,aACI;CACJ,MAAM,iBAAiB,cAAc,gBAAgB,KAAK,EAAE,CAAC,KAAK,CAAC;AAEnE,QACE,oCAAC;EACC,MAAM,iBAAiB,iBAAiB;EAC3B;EACE;EACf,eAAe;AACb,WAAQ,OAAO;;GAEjB;;AAIN,MAAM,mBAAmB,EAAE,aAAa,gBAAgB,sBAAsB;CAC5E,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,KAAK;CAChE,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAC1D,MAAM,CAAC,eAAe,oBAAoB,SAAS,MAAM;CACzD,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,CAAC,gCAAgC,qCACrC,SAAS,MAAM;CAEjB,MAAM,UAAU,OAAO,KAAK;CAE5B,MAAM,EAAE,yCAAyC,qBAC/C,YAAY,kBACb;CAED,MAAM,yBAAyB,kBAAkB;AAC/C,mBAAiB,MAAM;IACtB,EAAE,CAAC;CAEN,MAAM,6BAA6B,YAAY,YAAY;AACzD,aAAW,KAAK;AAChB,QAAM,QAAQ,SAAS,MAAM,QAAQ;AACrC,aAAW,MAAM;IAChB,CAAC,QAAQ,CAAC;CAEb,MAAM,uCAAuC,aAC1C,aAAa;AACZ,0BAAwB;AACxB,kBAAgB;AAChB,mBAAiB;IAEnB;EAAC;EAAwB;EAAiB;EAAe,CAC1D;CAED,MAAM,oCAAoC,cAAc;AACtD,SACE,qCACE,aACA,0BAA0B,UAC3B,IAAI,EAAE;IAER,CAAC,sCAAsC,YAAY,CAAC;CAGvD,MAAM,CAAC,EAAE,MAAM,mBAAmB,uBAAuB,eACvD,GAAGC,gBAAc,mBACjB,uCACA,EACE,QAAQ,QACT,EACD,EAAE,CACH;CAED,MAAM,OAAO,gBAAgB,CAAC;CAC9B,MAAM,EAAE,oBAAoB,aAAa;CAEzC,MAAM,mBAAmB,aAAa,OAAO,YAAY;AACvD,uBAAqB;GAAE;GAAO;GAAS,CAAC;AACxC,gBAAc,KAAK;IAClB,EAAE,CAAC;CAEN,MAAM,oBAAoB,kBAAkB;AAC1C,gBAAc,MAAM;IACnB,EAAE,CAAC;CAEN,MAAM,4BAA4B,YAAY,YAAY;AACxD,gBAAc,KAAK;AACnB,qBAAmB;AACnB,aAAW,KAAK;AAChB,MAAI;AACW,SAAM,oBAAoB;IAErC,KACE,GAAGA,gBAAc,uDACuB,eAAe,mCAAmC,eAAe,YAAY,cAAc;IACrI,MAAM,EAAE;IACT,CAAC;AACF,mBAAgB,KAAK,0BAA0B,EAAE;IAC/C,SAAS;IACT,cAAc;KACZ,UAAU;KACV,YAAY;KACb;IACF,CAAC;AACF,mBAAgB;AAChB,oBAAiB;WACV,OAAO;AACd,mBAAgB,KAAK,MAAM,QAAQ,EAAE;IACnC,SAAS;IACT,cAAc;KACZ,UAAU;KACV,YAAY;KACb;IACF,CAAC;;AAEJ,aAAW,MAAM;IAChB;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CACF,MAAM,sBAAsB,aACzB,WAAW;EACV,MAAM,SAAS,OAAO,WAAW;AACjC,oBAAkB,OAAO;AACzB,MAAI,OACF,kBAAiB,KAAK;MAEtB,kBAAiB,OAAO,MAAM,OAAO,YAAY;IAGrD,CAAC,iBAAiB,CACnB;CAED,MAAM,2BAA2B,cAAc;AAC7C,MAAI,CAAC,kCAAkC,OACrC,QAAO;AAET,SAAO,mCAAmC,KAAK,WAC7C,oCAAC;GACC,KAAK,OAAO;GACZ,aAAa,OAAO;GACpB,eAAe,OAAO;GACtB,MAAM,OAAO;GACb,SAAS;GACD;IACR,CACF;IACD,CAAC,mCAAmC,oBAAoB,CAAC;AAE5D,QACE,0DACE,oCAAC,SAAI,WAAU,0CACZ,yBACG,EAEL,qBACC,oCAAC;EACC,OAAO,KACL,2CAA2C,kBAAkB,MAAM,KACpE;EACD,SAAS,kBAAkB;EAC3B,UAAU,KAAK,UAAU;EACzB,WAAW;EACX,UAAU,KAAK,SAAS;EACxB,WAAW;EACX,MAAM;EACN,aAAa;GACb,EAGJ,oCAAC;EACC,MAAM;EACN,OAAO,gBAAgB;EACvB,SAAS;EACT,OAAO;EACP,aAAa,KAAK,SAAS;EAC3B,UAAU;EACV,UAAU;EACV,SAAQ;EACR,OAAM;EACN,mBAAmB,WAAW;IAE7B,kBAAkB,eAAe,YAAY,UAC5C,oCAACC;EACC,QAAQ,eAAe,WAAW;EACrB;EACJ;EACT,oCACE,eAAe;EAEjB,iBAAiB;EACA;EACjB,qBAAqB,EACnB,iBAAiB,EACf,mCACD,EACF;GACD,CAEM,CACX;;AAIP,8BAAe;;;;ACjOf,MAAa,mBAAmB;AAEhC,MAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;ACdD,MAAM,6BAA6B,UAAU;CAC3C,MAAM,EAAE,OAAO,OAAO,eAAe;AACrC,QACE,oCAAC,SAAI,WAAU,uCACb,oCAACC,gBAAW,SAAQ,aAAW,MAAmB,EACjD,aACC,oCAAC,SAAI,WAAU,8CACb,oCAAC,YAAe,WAAc,CAC1B,GAEN,oCAACA,gBAAW,SAAQ,WAAS,MAAmB,CAE9C;;AAIV,wCAAe;;;;ACbf,MAAa,2BAA2B,UAAU;CAChD,MAAM,EACJ,OACA,aACA,MACA,QACA,YACE;AAEJ,QACE,oCAAC;EACC,UAAS;EACT,aAAa;EACb;EACA,aAAa;IAEb,oCAAC,wBAAqB,MAAK,eACzB,oCAAC,2BAAuB,EACxB,oCAAC;EAAe,OAAM;EAAU,OAAM;EAAU,MAAK;GACpC,CACI,EACvB,oCAAC,UAAK,MAAK,WAAS,MAAa,EACjC,oCAAC,UAAK,MAAK,aAAW,KAAY,EAClC,oCAAC,UAAK,MAAK,aAAW,YAAmB,CACzB;;;;;AChBtB,MAAa,sBAAsB,YAAY,OAAO,QAAQ;CAC5D,MAAM,EAAE,kBAAkB;CAC1B,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,YAAY,cAAc;AAC9B,SAAO;GACL,WAAW;GACX,YAAY;GACZ,UAAU;GACV,gBAAgB,CACd;IACE,aAAa;IACb,aAAa;IACb,gBAAgB;IACjB,CACF;GACD,eAAe,CACb;IACE,YAAY;IACZ,eAAe;IAChB,CACF;GACD,QAAQ;GACT;IACA,CAAC,cAAc,CAAC;CAEnB,MAAM,CACJ,EAAE,MAAM,oBAAoB,SAAS,aACrC,2BACE,eACFC,gBAAc,iBACd,gCACA;EACE,QAAQ;EACR,MAAM;EACP,CACF;AAED,qBAAoB,YAAY,EAC9B,eAAe;AACb,2BAAyB;IAE5B,EAAE;AAEH,iBAAgB;AACd,2BAAyB;IACxB,CAAC,wBAAwB,CAAC;AAE7B,QACE,oCAAC,aACE,YACC,oCAAC,aACC,oCAAC,qBAAiB,CACd,GACJ,oBAAoB,UAAU,SAAS,IACzC,oCAAC,mBACC,oCAAC,mBACE,oBAAoB,UAAU,KAAK,MAAM,UACxC,oCAAC;EACC,KAAK;EACL,OACE,MAAM,0DACF,QACJ,MAAM,8CAA8C;EAEtD,aACE,MAAM,gBAAgB,MAAM,MAAM,kBAAkB;EAEtD,MACE,MAAM,YACF,WAAW,MAAM,WAAW,aAAa,GACzC;EAEN,QACE,MAAM,+CAA+C;GAEvD,CACF,CACU,CACF,GAEd,oCAAC,aACC,oCAAC,qBAAkB,aAAa,EAAE,aAAa,GAAI,CAC/C,CAEJ;EAER;AAEF,oBAAoB,cAAc;;;;ACrGlC,MAAa,yBAAyB,UAAU;CAC9C,MAAM,EAAE,YAAY,eAAe;CAEnC,MAAM,CAAC,EAAE,MAAM,4BAA4B,SAAS,eAClD,YACE,cAAc,iBACd,4BAA4B,YAAY,wBAAwB,yBAChE,EAAE,EACF,CAAC,CAAC,CAAC,YAAY,wBAChB;AAEH,QACE,oCAAC;EACC,SAAS;EACT,UAAU,YAAY;EACtB,UAAU,YAAY;EACtB,eAAe,YAAY;EAC3B,YAAY,YAAY;EACxB,cAAc,YAAY;EACd;EACZ,aAAa,4BAA4B;GACzC;;;;;AClBN,MAAa,0BAA0B,UAAU;CAC/C,MAAM,EAAE,wBAAwB,cAAc;CAC9C,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,oCAAC,aACE,YACC,oCAAC,qBAAiB,GAChB,wBAAwB,UAAU,SAAS,IAC7C,oCAAC,eAAY,mBACV,uBAAuB,SAAS,KAAK,YAAY,UAChD,oCAAC;EACC,KAAK;EACO;EACZ,YAAY,UAAU,uBAAuB,SAAS,SAAS;GAC/D,CACF,CACU,GAEd,oCAAC,aACC,oCAAC,qBAAkB,aAAa,EAAE,iBAAiB,GAAI,CACnD,CAEJ;;;;;ACrBV,MAAMC,cAAY,YAAY,WAAW;CACvC,gBAAgB;EACd,SAAS;EACT,KAAK;EACL,gBAAgB;EAChB,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,KAAK,MAAM,QAAQ,EAAE;EACrB,YAAY;EACZ,WAAW,MAAM,QAAQ,EAAE;EAC5B;CACD,MAAM;EACJ,OAAO;EACP,QAAQ;EACR,WAAW,EACT,iBAAiB,uBAClB;EACD,SAAS;EACT,QAAQ;EACT;CACD,aAAa,EACX,OAAO,MAAM,QAAQ,KAAK,MAC3B;CACF,EAAE;AAEH,MAAa,mBAAmB,UAAU;CACxC,MAAM,EAAE,SAAS,SAAS;CAC1B,MAAM,UAAUA,aAAW;AAE3B,QACE,oCAAC,aACC,oCAAC;EACC;EACA,WAAU;EACV,aAAa;EACb,iBAAiB,oCAAC,aAAU,OAAO,SAAU;EAC7C;EACA;EACA,wBAAwB;EACxB,mBAAmB;IAEnB,oCAAC;EAAI,WAAW,QAAQ;EAAe;IACrC,oCAAC,SAAI,WAAW,QAAQ,kBACtB,oCAACC,gBAAW,SAAQ,QACjB,MAAM,WAAW,mBACP,EACb,oCAACA;EAAW,SAAQ;EAAU,WAAW,QAAQ;IAC9C,2BAA2B,MAAM,UAAU,CACjC,CACT,EACN,oCAACA,gBAAW,SAAQ,WACjB,MAAM,WACL,4DACS,EAEb,oCAAC,SAAI,WAAW,QAAQ,iBACtB,oCAAC;EACC,OAAO,MAAM;EACb,OAAM;EACN,SAAQ;EACR,MAAM,oCAAC,kBAAc;GACrB,CACE,CACF,CACM,CACV;;;;;AC/DV,MAAMC,cAAY,YAAY,WAAW,EACvC,SAAS,EACP,cAAc,MAAM,QAAQ,EAAE,EAC/B,EACF,EAAE;AAEH,MAAM,gCAAgC,OAAO,QAAQ;CACnD,MAAM,EACJ,eACA,UACA,mBACA,gBACA,WACA,0BACE;CACJ,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CACjD,MAAM,OAAO,eAAe;CAC5B,MAAM,EAAE,uBAAuB,wBAC7B,wBAAwB;CAC1B,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,UAAUA,aAAW;CAG3B,MAAM,qBAAqB,YACzB,OAAO,SACL,UACEC,gBAAc,iBACd,WACA,EACE,QAAQ,QACT,EACD,KACD,EACH,EAAE,CACH;CAED,MAAM,kBAAkB,YACtB,OAAO,SACL,UACEA,gBAAc,iBACd,mBACA,EACE,QAAQ,QACT,EACD,KACD,EACH,EAAE,CACH;CAED,MAAM,mBAAmB,YACvB,OAAO,WAAW;AAChB,eAAa,KAAK;AASlB,QAAM,mBAAmB,EACvB,MATsB;GACtB,UAAU,QAAQ,UAAU;GAC5B,SAAS,QAAQ;GACjB,SAAS,QAAQ;GACjB,aAAa,MAAM;GACnB,iBAAiB,MAAM,QAAQ;GAChC,EAIA,CAAC,CACC,KAAK,OAAO,QAAQ;AACnB,WAAQ,IAAI,+BAA+B,EAAE,KAAK,CAAC;AACnD,OAAI,KAAK,MAAM,GACb,OAAM,gBAAgB,EACpB,MAAM;IACJ,mBAAmB;IACnB,QAAQ,KAAK,MAAM;IACpB,EACF,CAAC,CAAC,WAAW;AACZ,0BACE,EAAE,gDAAgD,CACnD;AACD,QAAI,eACF,iBAAgB;KAElB;IAEJ,CACD,OAAO,QAAQ;AACd,uBAAoB,KAAK,EAAE,kCAAkC,CAAC;IAC9D;AACJ,eAAa,MAAM;IAErB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QACE,oCAAC,aACE,wBACC,oCAAC,aACC,oCAACC,uBAAiB,CACd,GAEN,oCAAC,aACE,aACC,oCAAC,SAAI,WAAW,QAAQ,WACtB,oCAACA,uBAAiB,CACd,EAER,oCAAC;EACM;EACL,UAAU;EACK;EACf,IAAI,uBAAuB;EAC3B,SAAS,EAAE,iBACT,0DACE,oCAAC;GACC,WAAW;GACX,IAAG;GACH,MAAK;GACL,WAAU;GACV;GACA,OAAO,EAAE,OAAO;GAChB,SAAS,aAAa,EAAE;GACxB,UAAU,YAAY;GACtB,gBAAgB;GAChB;IACA,EAEF,oCAAC;GACC,WAAW;GACX,IAAG;GACH,MAAK;GACL,OAAO,EAAE,UAAU;GACnB,UAAU,YAAY;GACtB,gBAAgB;GAChB;IACA,EACF,oCAAC;GACC,WAAW;GACX,IAAG;GACH,MAAK;GACL,OAAO,EAAE,UAAU;GACnB,gBAAgB;GAChB;GACA,MAAM;GACN,SAAS;GACT,UAAU,YAAY;GACtB;IACA,EACD,YACC,oCAACC,gBAAW,SAAQ,aACjB,EACC,uEACD,CACU,CAEd;GAEL,CACE,CAEJ;;AAIV,MAAa,sBAAsB,WAAW,6BAA6B;;;;ACrK3E,MAAM,YAAY,YAAY,WAAW,EACvC,OAAO;CACL,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,EAAE;CACtB,EACF,EAAE;AAEH,MAAa,oBAAoB,UAAU;CACzC,MAAM,EACJ,mBACA,cACA,iBACA,WACA,0BACE;CACJ,MAAM,CAAC,eAAe,oBAAoB,SAAS,MAAM;CACzD,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,CAAC,UAAU,eAAe,SAAS,EAAE,CAAC;CAC5C,MAAM,UAAU,WAAW;CAC3B,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CAEjD,MAAM,uBAAuB,cAAc;AACzC,SAAO;GACL,WAAW;GACX,YAAY;GACZ,UAAU;GACV,gBAAgB,CACd;IACE,aAAa;IACb,aAAa;IACb,gBAAgB;IACjB,CACF;GACD,QAAQ;GACT;IACA,CAAC,kBAAkB,CAAC;CAEvB,MAAM,CACJ,EAAE,MAAM,cAAc,SAAS,4BAC/B,qBACE,eAAeC,gBAAc,iBAAiB,0BAA0B;EAC1E,QAAQ;EACR,MAAM;EACP,CAAC;CAEF,MAAM,iBAAiB,aAAa,SAAS;AAC3C,kBAAgB,KAAK;AACrB,mBAAiB,KAAK;IACrB,EAAE,CAAC;CAEN,MAAM,uBAAuB,kBAAkB;AAC7C,mBAAiB,MAAM;AACvB,kBAAgB,KAAK;IACpB,EAAE,CAAC;AAEN,iBAAgB;AACd,qBAAmB;IAClB,CAAC,kBAAkB,CAAC;AAEvB,iBAAgB;AACd,MAAI,cAAc;AAChB,sBAAmB;AAEnB,mBAAgB,MAAM;;IAEvB;EAAC;EAAmB;EAAc;EAAgB,CAAC;AAEtD,iBAAgB;AACd,MAAI,CAAC,4BAA4B,cAAc,UAAU,SAAS,GAAG;GAMnE,MAAM,YAAY;IAChB,WAAW;IACX,YAAY;IACZ,UAAU;IACV,gBAAgB,CACd;KACE,aAAa;KACb,aAXU,cAAc,UAC1B,KAAK,QAAQ,KAAK,OAAO,CAC1B,KAAK,IAAI;KAUN,gBAAgB;KACjB,CACF;IACD,QAAQ;IACT;AAED,gBAAa,KAAK;AAClB,aACEA,gBAAc,iBACd,kBACA;IACE,QAAQ;IACR,MAAM;IACP,EACD,EAAE,CACH,CACE,MAAM,SAAS;AACd,QAAI,QAAQ,KAAK,KACf,aAAY,KAAK,MAAM,SAAS;QAEhC,aAAY,EAAE,CAAC;KAEjB,CACD,cAAc;AACb,iBAAa,MAAM;KACnB;QAEJ,aAAY,EAAE,CAAC;IAEhB;EAAC;EAA0B;EAAc;EAAa,CAAC;AAE1D,QACE,oCAAC,aACC,oCAAC,SAAI,WAAW,QAAQ,SACrB,aAAa,2BACZ,oCAAC,aACC,oCAACC,uBAAiB,CACd,GACJ,UAAU,SAAS,IACrB,SAAS,KAAK,MAAM,UAClB,oCAAC;EACC,KAAK;EACC;EACN,eAAe,eAAe,KAAK;GACnC,CACF,GAEF,oCAAC,aACC,oCAAC,qBAAkB,aAAY,aAAa,CACxC,CAEJ,EAEN,oCAAC;EACC,OAAO,EAAE,YAAY;EACrB,OAAO;EACP,MAAM;EACN,SAAS;IAET,oCAAC,aACC,oCAAC;EACC,eAAe;EACI;EACnB;EACW;EACX,sBAAsB;GACtB,CACE,CACI,CACR;;;;;ACzKV,IAAY,4DAAL;AACL;AACA;AACA;AACA;;;;;;ACEF,MAAM,oCAAoC,UAAU;CAClD,MAAM,EACJ,mBACA,qBACA,gBACA,wBACE;CACJ,MAAM,EAAE,iBAAiB,qBAAqB,kBAAkB;CAChE,MAAM,EAAE,MAAM,gBAAgB;AAC9B,QACE,oCAAC,SAAI,WAAU,qCACb,oCAAC;EAAa,OAAM;EAAU,SAAS;IACpC,EAAE,SAAS,CACC,EACd,CAAC,uBACA,oCAAC;EACC,SAAQ;EACR,OAAM;EACN,SAAS;IAER,EAAE,eAAe,CACL,CAEb;;AAIV,+CAAe;;;;ACtBf,MAAM,oCAAoC,UAAU;CAClD,MAAM,EAAE,aAAa,iBAAiB,sBAAsB;CAC5D,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,EAAE,iBAAiB,sBAAsB,qBAC7C,kBACD;CAED,MAAM,oBAAoB;EACxB,QAAQ;EACR,UAAU;EACV,QAAQ;EACR,MAAM;EACN,OAAO;EACR;CAED,MAAM,iBAAiB,iBAAiB,aAAa;AAInD,UAHuB,iBAAiB,MACrC,WAAW,OAAO,MAAM,SAC1B,GACsB;;CAGzB,MAAM,kBAAkB;EAAC;EAAO;EAAS;EAAO;CAEhD,MAAM,wBAAwB,SAAS;AACrC,MAAG,MAAK;GACJ,MAAM,aAAa,IAAI,KAAK,KAAK;AACjC,OAAI,WAAW,SAAS,EAAE;IACxB,MAAM,OAAO,WAAW,aAAa;IAErC,MAAM,QAAQ,WAAW,UAAU,GAAG;IACtC,MAAM,MAAM,WAAW,SAAS,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;AAC5D,WAAO,GAAG,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG;;AAEzD,UAAO;;AAEX,SAAO;;CAGT,MAAM,0BAA0B,eAAe;EAC/C,IAAI,sBAAsB;AAC1B,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,IACnC,KAAG,KAAK,EACN,wBAAuB,WAAW,GAAG,aAAa;WAC1C,MAAM,KAAK,WAAW,GAAG,MAAM,QAAQ,IAAI,KAAK,WAAW,SAAO,EAC1E,wBAAuB,MAAM,WAAW;MAExC,wBAAuB,WAAW;AAGtC,SAAO;;CAGT,MAAM,wBAAwB,eAAa,cAAc;EACvD,MAAM,YAAY,UAAU;EAC5B,IAAI,gBAAgB,UAAU,KAAK,aAAa;AAChD,kBAAgB,gBAAgB,SAAS,cAAc,GAAG,WAAW;EACrE,MAAM,qBAAqB,UAAU;EACrC,IAAI,sBAAsB;AAC1B,UAAQ,eAAR;GACE,KAAK;AACH,0BAAsB;KACpB,cAAcC,eAAa,qBAAqB;KAChD,MAAM;KACN,YAAY,EAAE,YAAY,EAAE,KAAK,GAAG,EAAE;KACvC;AACD;GACF,KAAK;AACH,0BAAsB;KACpB,cAAc,qBAAqBA,eAAa,qBAAqB,WAAW;KAChF,MAAM;KACP;AACD;GACF,KAAK;AACH,0BAAsB;KACpB,SAAS,WAAW,SAAS,KAAK,WAAW,OAAO,GAAG;KACvD,yBAAyB,WACvB,cAAc,WAAW,SAAS,OAAO,IAAI;KAC/C,cAAcA,eAAa,qBAAqB;KACjD;AAED;GACF,KAAK;AACH,0BAAsB;KACpB,MAAM;KACN,cAAc;KACf;AACD;GACF,QACE,uBAAsB,EACpB,cAAcA,eAAa,qBAAqB,YACjD;;EAEL,MAAM,qBAAqB,uBAAuB,UAAU;EAC5D,MAAM,YAAY,qBAAsB,qBAAsB,UAAU;EACxE,MAAM,aAAa,kBAAkBA,cAAY,CAAC,SAAS,UAAU,IAAI,UAAU,YAAY,CAAC,UAAU;EAC1G,MAAM,WAAW,gBAAgBA,cAAY,CAAC,SAAS,UAAU,IAAI,UAAU,gBAAgB,CAAC,UAAU,mBAAmB,kBAAkB,WAAW;EAE1J,IAAI,iBACF,oCAAC;GACC,WAAW,kBAAkB,kBAAkB;GAC/C,OAAO,EAAE,UAAU;GACnB,MAAM;GACN;GACA,SAAQ;GACR,QAAO;GACP,UAAU,UAAU;GACpB,UAAU,cAAc,iBAAiB;GACzC,GAAI;IACJ;AAEJ,SACE,0DACI,CAAC,aACA,iBAAiB,SAChB,oCAAC;GAAiB,SAAS;GAAgB,OAAO;IAAa,GAE/D,gBAGH;;AAIP,QACE,0DACK,gBAAgB,KAAK,cAAc;AAClC,SAAO,0DAAG,qBAAqB,aAAa,UAAU,CAAI;GAC1D,CACH;;AAIP,iDAAe;;;;ACpIf,MAAM,gCAAgC,UAAU;CAC9C,MAAM,EACJ,aACA,SACA,YACA,mBACA,yBACA,sBACA,iBACA,uBACE;CACJ,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,KAAK;CAE9D,MAAM,qBAAqB,aAAa,mBAAmB,MAAM,IAAI,CAAC;CAEtE,MAAM,EAAE,qBAAqB,0BAC3B,wBAAwB;CAC1B,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,EAAE,qBAAqB,gBAAgB,iBAAiB;CAE9D,MAAM,oBAAoB,cAAc;AACtC,MACE,eACA,uBACA,YAAY,qBAEZ,QAAO,YAAY,sBAAsB,MAAM;IAEhD,CAAC,aAAa,oBAAoB,CAAC;CAEtC,MAAM,CAAC,EAAE,MAAM,iBAAiB,sBAAsB,eACpDC,gBAAc,iBACd,wBACA;EACE,QAAQ;EACR,MAAM;GACJ,WAAW;GACX,YAAY;GACZ,UAAU;GACV,gBAAgB,CACd;IACE,aAAa;IACb,gBAAgB;IAChB,aAAa,qBACT,iBAAiB,mBAAmB,GACpC;IACL,CACF;GACF;EACF,CACF;CAED,MAAM,mBACJ,cACA,wBACA,aACA,iBACG;EACH,IAAI,gBAAgB;GAClB,MAAM;GACN,SAAS;GACT,YAAY;GACb;EACD,MAAM,mBAAmB;GAAE,GAAG;GAAa,GAAG;GAAe;EAC7D,MAAM,QAAQ,uBAAuB,WAClC,MAAM,EAAE,KAAK,aAAa,KAAK,YAAY,KAAK,aAAa,CAC/D;AACD,MAAI,SAAS,GACX,wBAAuB,SAAS;;CAIpC,MAAM,kCAAkC,aACrC,yBAAyB,4BAA4B;AAkCpD,SAjCkC,wBAAwB,KACvD,wBAAwB;GACvB,IAAI,0BAA0B,wBAAwB,MACnD,cAAc;IACb,IAAI,qBACF,UAAU,KAAK,MAAM,GAAG,EAAE,CAAC,aAAa,GACxC,UAAU,KAAK,MAAM,EAAE;AACzB,QAAI,UAAU,QAAQ,KACpB,sBAAqB,mBAAmB,aAAa;AAGvD,WAAO,sBAAsB,oBAAoB;KAEpD;AACD,OAAI,yBAAyB;IAC3B,IAAI,oBAAoB;KACtB,QACE,wBAAwB,WAAW,mBAAmB;KACxD,kBACE,wBAAwB,WAAW,mBAChC;KACL,cAAc,wBAAwB;KACvC;AACD,WAAO;KACL,GAAG;KACH,GAAG;KACJ;SAED,QAAO;IAGZ;IAIH,EAAE,CACH;CAED,MAAM,oCAAoC,sBAAsB;AAc9D,SAb8B,kBAAkB,QAAQ,kBAAkB;GACxE,MAAM,cACJ,cAAc,oBAAoB,kBAAkB;AACtD,OAAI,eAAe,OACjB,QACE,eAAe,qBAAqB,gBACpC,eAAe,qBAAqB,cACpC,cAAc,KAAK,aAAa,IAAI;OAGtC,QAAO,cAAc,KAAK,aAAa,IAAI;IAE7C;;CAIJ,MAAM,iBAAiB,YACrB,OAAO,yBAAyB,sBAAsB;EACpD,MAAM,yBACJ,kBAAkB,mBAAmB;AAEvC,MADoB,uBAAuB,eACxB,QAAW;GAC5B,MAAM,8BACJ,uBAAuB,KAAK,GAAG,MAAM,IAAI;GAC3C,IAAI,8BAA8B;IAChC;IACA;IACA;IACD;AACD,UAAO,QAAQ,IACb,4BAA4B,IAAI,OAAO,gBAAgB;AACrD,QACE,YAAY,aAAa,IAAI,QAC7B,CAAC,4BAA4B,SAAS,YAAY,aAAa,CAAC,EAChE;KACA,IAAI,cAAc,wBAAwB,MACvC,UAAU,MAAM,KAAK,aAAa,IAAI,YAAY,aAAa,CACjE;KACD,MAAM,eAAe,iBACnB,uBAAuB,WACxB;AACD,SAAI;MACF,MAAM,sBAAsB,MAAM,UAChCA,gBAAc,iBACd,GAAG,gBACH,EAAE,QAAQ,OAAO,CAClB;AAED,UAAI,oBAAoB,KAAK,SAAS,KAAK,YACzC,iBACE,oBAAoB,MACpB,yBACA,aACA,aACD;cAEI,OAAO;AACd,0BACE,IAAI,MACF,EAAE,sDAAsD,CACzD,CACF;;;KAGL,CACH;;IAGL,CAAC,qBAAqB,EAAE,CACzB;CAED,MAAM,+BAA+B,YACnC,OAAO,sBAAsB;EAC3B,IAAI,0BAA0B;AAE9B,4BAA0B,iCACxB,wBACD;EAID,IAAI,2BAF6B,MAAM,oBAAoB,EACT,KAAK,SAAS,GACjB,gBAAgB,QAC5D,cAAc,UAAU,WAAW,iBACrC;AAED,QAAM,QAAQ,IACZ,wBAAwB,KAAK,wBAAsB;AACjD,UAAO,eAAe,yBAAyBC,oBAAkB;IACjE,CACH;AAED,4BAA0B,wBAAwB,QAC/C,kBAAkB,CAAC,cAAc,mBAAmB,YACtD;AAMD,SAJsB,gCACpB,yBACA,wBACD;IAGH;EAAC;EAAoB;EAAiC;EAAe,CACtE;AAED,iBAAgB;AACd,MAAI,mBAAmB;GACrB,IAAI,sBAAsB,mBAAmB,MAC1C,kBACC,iBAAiB,cAAc,kBAAkB,IAAI,WACxD;AACD,OAAI,oBACF,8BAA6B,oBAAoB,WAAW,CAAC,MAC1D,iBAAiB;AAChB,wBAAoB,aAAa;KAEpC;;IAGJ;EAAC;EAA8B;EAAmB;EAAW,CAAC;CAEjE,MAAM,qBAAqB,YACzB,OAAO,SACL,UACED,gBAAc,iBACd,kBAAkB,aAAa,cAAc,eAC7C,EACE,QAAQ,OACT,EACD,KACD,EACH,CAAC,aAAa,cAAc,CAC7B;CAED,MAAM,oCAAoC,YACxC,OAAO,SACL,UACEA,gBAAc,iBACd,kCAAkC,kBAAkB,UACpD,EACE,QAAQ,QACT,EACD,KACD,EACH,CAAC,kBAAkB,CACpB;CAED,MAAM,WAAW,YACf,OAAO,WAAW;AAChB,MAAI;GACF,MAAM,UAAU,EAAE,MAAM,QAAQ;GAChC,IAAI,WAAW;GACf,IAAI,uBAAuB;GAC3B,IAAI,qBAAqB;AACzB,OACE,2BACA,6BAA6B,iCAC7B;AACA,eAAW,MAAM,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACrD,2BAAuB;AACvB,yBAAqB;cAErB,2BACA,6BAA6B,gCAC7B;AACA,eAAW,MAAM,kCAAkC,QAAQ;AAC3D,2BAAuB;AACvB,yBAAqB;;AAEvB,OAAI,UAAU,WAAW,KAAK;AAC5B,0BACE,EAAE,wBAAwB,qBAAqB,eAAe,CAC/D;AACD,sBAAkB,SAAS;SAE3B,qBACE,IAAI,MACF,EACE,SAAS,mBAAmB,uCAC7B,CACF,CACF;WAEI,GAAG;AACV,uBAAoB,MAAM;YAClB;AACR,OAAI,sBAAsB;AACxB,YAAQ,SAAS,MAAM,QAAQ,OAAO;AACtC,yBAAqB,MAAM;;AAE7B,OAAG,mBACD,qBAAoB;;IAI1B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,kBAAkB,cAAc;AACpC,MAAI,CAAC,iBACH,QAAO,EAAE;AAEX,SAAO;IACN,CAAC,iBAAiB,CAAC;AAEtB,QAAO,gBAAgB,UAAU,IAC/B,oCAAC,qBAAiB,GAElB,oCAAC,eAAY,WAAW,QACtB,oCAAC;EAAe;EAAU,KAAK;IAC7B,oCAAC,WAAQ,cAAc,EAAE,OAAO,MAAM,KAClC,EAAE,YAAY;AACd,MAAI,qBACF,sBAAqB,MAAM;GAGvB,EACV,oCAACE;EACc;EACI;EACE;GACnB,CACG,CACK;;AAIlB,2CAAe;;;;ACvUf,MAAM,mBAAmB,UAAU;CACjC,MAAM,EACJ,aAAa,oBACb,mBACA,qBACA,yBACA,4BACA,iBACA,gBACA,qBACA,sBACA,YACA,gBACA,mBACA,oBACA,uBACA,oBACA,uBACA,4BACA,wBACA,2BACA,aACA,gBACA,wBACE;CACJ,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CACjD,MAAM,CAAC,aAAa,kBAAkB,SAAS,mBAAmB;CAClE,MAAM,CAAC,cAAc,mBAAmB,SAAS,MAAM;CAEvD,MAAM,CAAC,EAAE,MAAM,WAAW,SAAS,2BAA2B,YAC5DC,gBAAc,iBACd,eACA,EAAE,CACH;CAED,MAAM,EAAE,yBAAyB,mCAC/B,qBAAqB,kBAAkB;CAEzC,MAAM,qBAAqB,YAAY,YAAY;AACjD,sBAAoB,KAAK;EACzB,MAAM,WAAW,MAAM,UACrBA,gBAAc,iBACd,kBAAkB,mBAAmB,cAAc,QACnD,EACE,QAAQ,OACT,CACF;AACD,MAAI,UAAU,WAAW,KAAK;AAC5B,kBAAe,SAAS,KAAK;AAC7B,0BAAuB,SAAS,SAAS;;AAE3C,sBAAoB,MAAM;IACzB,CAAC,mBAAmB,eAAe,oBAAoB,CAAC;CAE3D,MAAM,UAAU,OAAO,KAAK;CAC5B,MAAM,yBAAyB,OAAO,KAAK;CAC3C,MAAM,yBAAyB,QAAQ;CAEvC,MAAM,uBAAuB,kBAAkB;AAC7C,yBAAuB,SAAS,gBAAgB;IAC/C,EAAE,CAAC;CAEN,MAAM,sBAAsB,kBAAkB;AAC5C,yBAAuB,SAAS,MAAM,SAAS;IAC9C,EAAE,CAAC;CAEN,MAAM,oBAAoB,YAAY,YAAY;AAChD,sBAAoB,KAAK;AACzB,QAAM,QAAQ,SAAS,MAAM,QAAQ;AACrC,sBAAoB,MAAM;AAC1B,mBAAiB;IAChB;EAAC;EAAiB;EAAqB;EAAQ,CAAC;CAEnD,MAAM,CACJ,EACE,MAAM,4BACN,SAAS,sCAEX,+BACE,eACFA,gBAAc,iBACd,mCACA;EACE,QAAQ;EACR,MAAM;GACJ,UAAU;GACV,gBAAgB,CACd;IACE,aAAa;IACb,aAAa,YAAY;IACzB,gBAAgB;IACjB,EACD;IACE,aAAa;IACb,aAAa;IACb,gBAAgB;IACjB,CACF;GACF;EACF,CACF;CAED,MAAM,EAAE,oBAAoB,aAAa;CAEzC,MAAM,iBAAiB,YAAY,YAAY;AAC7C,MAAI;AAEF,8BADiB,MAAM,6BAA6B,EACjB,KAAK,SAAS;AACjD,uBAAoB;WACb,OAAO;AACd,WAAQ,MAAM,gCAAgC,MAAM;AACpD,OAAI,OAAO,YAAY,WACrB,iBACE,sHACA;IACE,SAAS;IACT,cAAc;KAAE,UAAU;KAAO,YAAY;KAAU;IACxD,CACF;;IAGJ;EACD;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,WAAW;EAAC,EAAE,UAAU;EAAE,EAAE,UAAU;EAAE,EAAE,cAAc;EAAE,EAAE,QAAQ;EAAC;CAE3E,MAAM,iBAAiB,cAAc;EACnC,MAAM,QAAQ,CACZ;GACE,OAAO;GACP,YAAY;IACV,OAAO,YAAY,wCAAwC;IAC3D,QACE,+BACE,YAAY,wCAAwC,SACjD;IACR;GACF,CACF;AACD,MAAI,aAAa,kBACf,OAAM,KAAK;GACT,OAAO;GACP,OAAO,GAAG,YAAY;GACvB,CAAC;AAEJ,SAAO;IACN,CAAC,aAAa,+BAA+B,CAAC;CAEjD,MAAM,oBAAoB,YAAY,YAAY;AAChD,MAAI,CAAC,mBAAmB,OACtB,OAAM,IAAI,MAAM,4BAA4B;EAE9C,MAAM,WAAW,IAAI,UAAU;AAC/B,qBAAmB,SAAS,SAAS,SAAS,OAAO,SAAS,KAAK,CAAC;AACpE,WAAS,OACP,oBACA,eAAe,4BAChB;AAED,MAAI;AACF,yBAAsB,KAAK;AAC3B,SAAM,UACJA,gBAAc,iBACd,wCAAwC,YAAY,cAAc,UAClE;IACE,QAAQ;IACR,SAAS;KACP,eAAe,YAAY;KAC3B,kBAAkB,eAAe;KAClC;IACD,MAAM;IACP,CACF;AAED,SAAM,gBAAgB;AACtB,yBAAsB,EAAE,CAAC;AACzB,8BAA2B,EAAE,aAAa,OAAO,CAAC;AAElD,mBAAgB,+BAA+B;IAC7C,SAAS;IACT,cAAc;KACZ,UAAU;KACV,YAAY;KACb;IACF,CAAC;WACK,OAAO;AACd,mBACE,iHACA;IACE,SAAS;IACT,cAAc;KACZ,UAAU;KACV,YAAY;KACb;IACF,CACF;AACD,SAAM;YACE;AACR,yBAAsB,MAAM;;IAE7B;EACD;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ;EACA;EACD,CAAC;CAEF,MAAM,qBAAqB,cACnB;EACJ;GACE,MAAM,wBAAwB;GAC9B,kBACE,2BAA2B,EAAE,iBAAiB,OAAO,CAAC;GACxD,OAAO;GACP,UACE,oCAACC;IACc;IACb,sBAAsB;AACpB,gCAA2B,EACzB,iBAAiB,OAClB,CAAC;AACF,yBAAoB;;IAEL;KACjB;GAEL;EACD;GACE,MAAM,wBAAwB;GAC9B,kBAAkB,2BAA2B,EAAE,aAAa,OAAO,CAAC;GACpE,OAAO;GACP,aAAa;GACb,mBAAmB,CAAC,kBAAkB,mBAAmB,UAAU;GACnE,gBAAgB;AACd,uBAAmB,CAChB,WAAW,iBAAiB,CAAC,CAC7B,OAAO,UAAU,QAAQ,MAAM,MAAM,CAAC;;GAE3C,UACE,oCAAC;IACC,iBAAiB;IACD;IACG;IACC;IACG;IACH;IACG;IACV;IACb,qBAAqB;IACrB,wBAAwB;IACN;IACC;IACN;IACG;KAChB;GAEL;EACD;GACE,MAAM,wBAAwB;GAC9B,kBAAkB,2BAA2B,EAAE,OAAO,OAAO,CAAC;GAC9D,OAAO;GACP,aAAa;GACb,gBAAgB;GAChB,iBAAiB;GACjB,UAAU;GACV,UACE,oCAAC;IACC,KAAK;IACL,mBAAmB,aAAa;IAChC,sBAAsB;AACpB,gCAA2B,EAAE,OAAO,OAAO,CAAC;AAC5C,qBAAgB,KAAK;;IAEZ;IACY;KACvB;GAEL;EACF,EACD;EACE,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,0BAA0B,cAAc;AAC5C,SAAO,wBACL,6BAA6B,gCAC9B;IACA,CAAC,wBAAwB,CAAC;AAE7B,iBAAgB;AACd,GAAC,YAAY;AACX,OAAI,CAAC,2BACH,iBAAgB;MAEhB;IACH,CAAC,4BAA4B,eAAe,CAAC;AAEhD,QACE,0DACE,oCAAC,SAAI,WAAU,gCACb,oCAAC,SAAI,WAAW,mDACd,oCAAC,SAAI,WAAU,4CAAgD,EAC/D,oCAAC,SAAI,WAAU,+CACb,oCAAC,SAAI,WAAU,6CACZ,eAAe,KAAK,eAAe;AAClC,SACE,oCAACC;GACC,KAAK,WAAW;GAChB,OAAO,WAAW;GAClB,YAAY,WAAW;GACvB,OAAO,WAAW;IAClB;GAEJ,CACE,EACN,oCAAC,SAAI,WAAU,+CACb,oCAAC;EACC,OAAM;EACN,eAAe;AACb,8BAA2B,EAAE,aAAa,MAAM,CAAC;;IAGnD,oCAAC;EACC,WAAW;EACX,WAAU;EACV,MAAK;GACL,EACD,aACY,EACf,oCAAC;EACC,OAAM;EACN,eAAe;AACb,8BAA2B,EAAE,OAAO,MAAM,CAAC;;IAG7C,oCAAC;EACC,WAAW;EACX,WAAU;EACV,MAAK;GACL,EACD,OACY,CACX,EACN,oCAAC,SAAI,WAAU,aACb,oCAACC,gBAAU,CACP,EACN,oCAAC,SAAI,WAAU,qCACb,oCAAC;EACC,OAAO;EACP,WAAW,OAAO,aAAa;AAC7B,kBAAe,SAAS;;EAE1B,SAAS,SAAS,KAAK,aAAa,EAAE,OAAO,SAAS,EAAE;EACxD,aAAa;GACb,CACE,CACF,EACN,oCAAC,SAAI,WAAU,aACb,oCAACA,gBAAU,CACP,CACF,EAEN,oCAAC,SAAI,WAAU,qCACb,oCAAC,aACC,oCAAC;EAAY,OAAO;EAAa,OAAO,gBAAgB;IACrD,0BACC,oCAACC;EACoB;EACnB,yBACE,6BAA6B;EAEtB;EACI;EACO;EACE;EACL;EACI;GACrB,GAEF,oCAACC;EACc;EACJ;EACG;EACO;EACnB,yBACE,6BAA6B;EAET;EACF;GACpB,CAEQ,EAEd,oCAAC;EAAY,OAAO;EAAa,OAAO,gBAAgB;IACtD,oCAAC;EACC,KAAK;EACL,eAAe,aAAa;GAC5B,CACU,EACd,oCAAC;EACC,OAAO;EACP,OAAO,gBAAgB;IAEvB,oCAAC;EACC,wBAAwB;EACxB,WAAW;GACX,CACU,EACd,oCAAC;EAAY,OAAO;EAAa,OAAO,gBAAgB;IACtD,oCAAC;EACC,mBAAmB,aAAa;EAClB;EACG;EACN;EACX,sBAAsB;GACtB,CACU,CACV,CACF,EACL,eAAe,gBAAgB,WAC9B,oCAAC,SAAI,WAAU,uCACb,oCAACC;EACoB;EACE;EACrB,gBAAgB;EAChB,qBAAqB;GACrB,CACE,CAEJ,EAEL,2BAEC,mBAAmB,KAAK,SAAS;AAC/B,SACE,oCAAC;GACC,KAAK,KAAK;GACV,MAAM,KAAK;GACX,OAAO;GACP,OAAO,KAAK;GACZ,SAAS,KAAK;GACd,aAAa,MAAM;GACnB,mBAAmB,MAAM;GACzB,gBAAgB,MAAM;GACtB,iBAAiB,MAAM;GACvB,UAAU,MAAM;GAChB,OAAM;KAEL,KAAK,SACI;GAEd,CACH;;AAIP,8BAAe;;;;AChff,MAAM,2BAA2B,UAAU;CACzC,MAAM,EACJ,YACA,iBACA,6BACA,aACA,mBACA,YACA,oBACE;CAEJ,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,MAAM;CAC/D,MAAM,CAAC,2BAA2B,gCAChC,SAAS,MAAM;CACjB,MAAM,CACJ,wCACA,6CACE,SAAS;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACR,CAAC;CACF,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,CAAC,0BAA0B,+BAC/B,SAAS,MAAM;CACjB,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,MAAM;CACjE,MAAM,CACJ,0CACA,+CACE,SAAS,EACX,aAAa,OACd,CAAC;CACF,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAC1D,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,EAAE,CAAC;CAChE,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,MAAM;CACnE,MAAM,CAAC,wBAAwB,6BAA6B,SAAS,EAAE,CAAC;CACxE,MAAM,CAAC,aAAa,kBAAkB,SAAS,MAAM;CACrD,MAAM,CAAC,gCAAgC,qCACrC,SAAS,MAAM;CACjB,MAAM,CACJ,kCACA,uCACE,SAAS,MAAM;CAEnB,MAAM,EAAE,uBAAuB,wBAC7B,wBAAwB;CAE1B,MAAM,EACJ,iBACA,4BACA,yBACA,4BACE,qBAAqB,kBAAkB;CAE3C,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,UAAU,OAAO,KAAK;CAC5B,MAAM,0BAA0B,OAAO,KAAK;CAC5C,MAAM,gBAAgB,QAAQ;CAC9B,MAAM,iBAAiB,YAAY,SAAS;CAC5C,MAAM,uBAAuB,aAAa;CAC1C,MAAM,EAAE,oBAAoB,aAAa;CAEzC,MAAM,CAAC,EAAE,MAAM,8BAA8B,kCAC3C,eACE,QAAQ,IAAI,4BACZ,uCACA;EACE,QAAQ;EACR,MAAM;GACJ,UAAU;GACV,gBAAgB,CACd;IACE,aAAa;IACb,aAAa;IACb,gBAAgB;IACjB,CACF;GACF;EACF,CACF;CAEH,MAAM,0BAA0B;AAC9B,gBAAc,MAAM;;CAGtB,MAAM,wCAAwC;AAC5C,8BAA4B,MAAM;;CAEpC,MAAM,6BAA6B,aAChC,+BAA+B;AAC9B,MAAI,4BAA4B;AAC9B,qBAAkB,KAAK;AACvB,yBAAsB,EAAE,CAAC;;AAE3B,wBAAsB,MAAM;AAC5B,4BAA0B,EAAE,CAAC;AAC7B,iBAAe,MAAM;IAEvB,EAAE,CACH;CAED,MAAM,0BAA0B,YAAY,YAAY;AAUtD,OARiB,MAAM,UACrBC,gBAAc,iBACd,kBAAkB,aAAa,cAAc,oBAC7C,EACE,QAAQ,QACT,CACF,GAEa,WAAW,KAAK;AAC5B,mBAAgB,QAAQ,MAAM;AAC9B,oBAAiB;AACjB,yBAAsB,EAAE,2CAA2C,CAAC;QAEpE,qBACE,IAAI,MAAM,EAAE,qDAAqD,CAAC,CACnE;IAEF;EACD;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,sCAAsC,YAAY,YAAY;AAClE,MAAI;AACF,gCAA6B,KAAK;AAClC,SAAM,yBAAyB;WACxB,OAAO;AACd,uBAAoB,MAAM;YAClB;AACR,gCAA6B,MAAM;AACnC,sBAAmB;;IAEpB,CAAC,yBAAyB,oBAAoB,CAAC;CAElD,MAAM,uBAAuB,sBAAsB,mBAC/C,MAAM,IAAI,EACV,KAAK;CAET,MAAM,mCAAmC,aACtC,aAAa;AACZ,0BAAwB,UAAU,UAAU,MAAM,iBAAiB;AACnE,kBAAgB,OAAO,MAAM;AAC7B,6BAA2B,KAAK;AAChC,mBAAiB;IAEnB;EAAC;EAAiB;EAA4B;EAAgB,CAC/D;CAED,MAAM,2CAA2C,aAC9C,aAAa;AACZ,kBAAgB,kBAAkB,MAAM;AACxC,mBAAiB;IAEnB,CAAC,iBAAiB,gBAAgB,CACnC;CAED,MAAM,+BAA+B,kBAAkB;AACrD,8CAA4C,EAAE,aAAa,OAAO,CAAC;AACnE,kBAAgB,GAAG,mBAAmB,OAAO,4BAA4B;GACvE,SAAS;GACT,cAAc;IACZ,UAAU;IACV,YAAY;IACb;GACF,CAAC;IACD,CAAC,iBAAiB,mBAAmB,OAAO,CAAC;CAEhD,MAAM,wCAAwC,YAC5C,OAAO,kBAAkB;AACvB,MAAI,CAAC,mBAAmB,OACtB,OAAM,IAAI,MAAM,4BAA4B;EAE9C,MAAM,WAAW,IAAI,UAAU;AAC/B,qBAAmB,SAAS,SAAS,SAAS,OAAO,SAAS,KAAK,CAAC;AACpE,WAAS,OACP,oBACA,eAAe,4BAChB;AAED,MAAI;AACF,yBAAsB,KAAK;AAC3B,SAAM,UACJA,gBAAc,iBACd,wCAAwC,cAAc,UACtD;IACE,QAAQ;IACR,SAAS;KACQ;KACf,kBAAkB,eAAe;KAClC;IACD,MAAM;IACP,CACF;AAED,yBAAsB,EAAE,CAAC;AACzB,+CAA4C,EAAE,aAAa,OAAO,CAAC;AAEnE,mBAAgB,+BAA+B;IAC7C,SAAS;IACT,cAAc;KACZ,UAAU;KACV,YAAY;KACb;IACF,CAAC;WACK,OAAO;AACd,mBACE,iHACA;IACE,SAAS;IACT,cAAc;KACZ,UAAU;KACV,YAAY;KACb;IACF,CACF;AACD,SAAM;YACE;AACR,yBAAsB,MAAM;;IAGhC;EACE;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,4BAA4B,YAAY,YAAY;AACxD,sBAAoB,KAAK;AACzB,0BAAwB,UAAU;AAClC,QAAM,QAAQ,SAAS,MAAM,QAAQ;EACrC,MAAM,mBAAmB,wBAAwB;AACjD,MAAI,oBAAoB,mBAAmB,SAAS,EAClD,OAAM,sCAAsC,iBAAiB;AAE/D,sBAAoB,MAAM;IACzB;EACD;EACA,mBAAmB;EACnB;EACD,CAAC;CAEF,MAAM,uBAAuB,YAAY,YAAY;AACnD,sBAAoB,KAAK;AACzB,QAAM,QAAQ,SAAS,MAAM,QAAQ;AACrC,sBAAoB,MAAM;IACzB,CAAC,QAAQ,CAAC;CAEb,MAAM,wBAAwB,kBAAkB;AAC9C,MAAI,CAAC,kBACH,2CAA0C,EAAE,gBAAgB,MAAM,CAAC;MAEnE,6BAA4B,KAAK;IAElC,CAAC,kBAAkB,CAAC;CAEvB,MAAM,oCAAoC,kBAAkB;AAC1D,8BAA4B,MAAM;AAClC,4CAA0C,EAAE,gBAAgB,MAAM,CAAC;IAClE,EAAE,CAAC;CAEN,MAAM,gBAAgB,cAAc;AAClC,SAAO,wBACL,6BAA6B,qBAC9B;IACA,CAAC,wBAAwB,CAAC;CAE7B,MAAM,sBAAsB,cAAc;AACxC,MAAI,cACF,QACE,oCAAC;GAAc,QAAQ;GAAe,cAAc,EAAE,aAAa;IAAI;MAGzE,QAAO,oCAACC,2BAA6B,cAAe;IAErD,CAAC,aAAa,cAAc,CAAC;CAEhC,MAAM,sBAAsB,cAAc;AACxC,SAAO,2BAA2B,YAAY;IAC7C,CAAC,4BAA4B,YAAY,CAAC;CAE7C,MAAM,mBAAmB,cAAc;AACrC,SAAO,wBAAwB,YAAY,IAAI;IAC9C;EAAC;EAAyB;EAAa;EAAqB,CAAC;CAEhE,MAAM,0BAA0B,cAAc;AAC5C,SAAO,wBACL,6BAA6B,+BAC9B;IACA,CAAC,wBAAwB,CAAC;CAE7B,MAAM,gBAAgB,cAAc;AAiNlC,SAhNa;GACX;IACE,MAAM,WAAW;IACjB,kBAAkB;AAChB,qBAAgB,OAAO,MAAM;AAC7B,gCAA2B,KAAK;;IAElC,OAAO;IACP,OAAO;IACP,UAAU;IACV,UACE,0DACG,0BACC,oCAACC;KACoB;KACnB,yBACE,6BAA6B;KAEtB;KACT,iBAAiB;KACA;KACjB,qBAAqB,EACnB,iBAAiB;MACf;MACA;MACD,EACF;MACD,GAEF,oCAACC;KACc;KACJ;KACG;KACO;KACnB,yBACE,6BAA6B;KAE/B,iBAAiB;MACjB,EAEJ,oCAAC;KACC,KAAK;KACL,MAAM,0CAA0C;KAChD,OAAO;KACP,OAAO,EAAE,iBAAiB;KAC1B,eAAe;AACb,kDAA4C,EAC1C,aAAa,OACd,CAAC;AACF,iCAA2B,KAAK;;KAElC,aAAa,EAAE,OAAO;KACtB,mBACE,CAAC,kBAAkB,mBAAmB,UAAU;KAElD,UAAU;KACV,OAAM;OAEN,oCAAC;KACC,iBAAiB;KACD;KACG;KACC;KACG;KACH;KACG;KACV;KACb,qBAAqB;KACrB,wBAAwB;KACN;KACC;KACN;KACG;MAChB,CACQ,CACX;IAEL,aAAa;IACb,gBACE,oCAAC;KAAM,cAAc,oBAAoB;KAAQ,OAAM;OACpD,iBACK;IAEV,uBACE,4CAA4C,EAAE,aAAa,MAAM,CAAC;IACrE;GACD;IACE,MAAM,WAAW;IACjB,kBAAkB,gBAAgB,QAAQ,MAAM;IAChD,OAAO,aAAa,MAAM,mBAAmB;IAC7C,OAAO;IACP,UAAU;IACV,aAAa,CAAC,gBAAgB,aAAa;IAC5C;GACD;IACE,MAAM,WAAW;IACjB,kBAAkB,gBAAgB,QAAQ,MAAM;IAChD,OAAO,oBAAoB,aAAa,MAAM;IAC9C,OAAO;IACP,aAAa;IACb,gBAAgB;AACd,SAAI,cAAc,QAChB,eAAc,QAAQ,sBAAsB;;IAGhD,UACE,oCAACC;KAC8B;KACd;KACF;KACD;KACS;MACrB;IAEL;GACD;IACE,MAAM,WAAW;IACjB,kBAAkB,gBAAgB,UAAU,MAAM;IAClD,OAAO,sBAAsB,WAAW,GAAG;IAC3C,OAAO;IACP,UACE,oCAACC;KACc;KACb,sBAAsB;AACpB,sBAAgB,UAAU,MAAM;;KAEjB;MACjB;IAEL;GACD;IACE,MAAM,WAAW;IACjB,kBAAkB;AAChB,qBAAgB,QAAQ,MAAM;AAC9B,gCAA2B,KAAK;;IAElC,OAAO,QAAQ,WAAW,GAAG;IAC7B,OAAO;IACP,aAAa;IACb,mBAAmB;IACnB,UAAU;IACV,gBAAgB,WAAW;IAC3B,mBAAmB,uBAAuB,CAAC;IAC3C,uBAAuB,cAAc,KAAK;IAC1C,UACE,oCAACC;KACc;KACM;KACE;KACrB,yBAAyB;KACzB,4BACE;KAEe;KACjB,sBAAsB;AACpB,sBAAgB,QAAQ,MAAM;AAC9B,iCAA2B,KAAK;;KAEb;KACC;KACN;KACG;KACC;KACG;KACH;KACG;KACK;KACJ;KACG;KACd;KACG;KACJ;KACZ,qBAAqB,EACnB,iBAAiB;MACf;MACA;MACD,EACF;MACD;IAEL;GACD;IACE,MAAM,WAAW;IACjB,kBAAkB,gBAAgB,kBAAkB,MAAM;IAC1D,OAAO,uBAAuB;IAC9B,OAAO;IACP,UAAU;IACV,UACE,oCAACJ;KACoB;KACnB,yBACE,6BAA6B;KAEtB;KACI;KACb,iBAAiB;KACA;KACjB,qBAAqB,EACnB,iBAAiB;MACf;MACA;MACD,EACF;MACD;IAEJ,aAAa;IACd;GACF;IAEA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,iBAAgB;AACd,OACG,YAAY,kBAAkB,YAAY,oBAC3C,CAAC,4BACD;AACA,yBAAsB,KAAK;AAC3B,mCAAgC,CAAC,WAAW;AAC1C,0BAAsB,MAAM;KAC5B;;IAEH;EACD;EACA;EACA,WAAW;EACX,WAAW;EACZ,CAAC;AAEF,QACE,0DACG,cACC,cAAc,KAAK,SAAS;AAC1B,SACE,oCAAC;GACC,KAAK,KAAK;GACV,MAAM,KAAK;GACX,OAAO;GACP,OAAO,KAAK;GACZ,SAAS,KAAK;GACd,WACE,WAAW,yBAAyB,WAAW;GAEjD,aAAa,MAAM;GACnB,UAAU,MAAM;GAChB,OAAM;GACN,gBAAgB,MAAM;GACtB,iBAAiB,MAAM;GACvB,mBACE,MAAM,qBAAqB;GAE7B,mBACE,MAAM,qBAAqB;GAE7B,UAAU;GACV,SAAQ;KAER,oCAAC,aAAK,KAAK,SAAe,CAChB;GAEd,EACJ,oCAAC;EACC,OAAO,EAAE,oBAAoB;EAC7B,SAAS,kDACP,aAAa,qBAAqB,GACnC;EACD,UAAU,EAAE,UAAU;EACtB,WAAW;EACX,UAAU,EAAE,SAAS;EACrB,WAAW;EACX,MAAM;EACN,aAAa;EACb,SAAS;GACT,EACF,oCAAC;EACC,OAAO,EAAE,kBAAkB;EAC3B,SAAS;EACT,UAAU,EAAE,UAAU;EACtB,WAAW;EACX,UAAU,EAAE,SAAS;EACrB,WAAW;EACX,MAAM;EACN,aAAa;EACb,SAAS;GACT,CACD;;AAIP,sCAAe;;;;AC3oBf,MAAa,sBAAsB,UAAU,EAAE,KAAK;CAClD,MAAM,EAAE,mBAAmB,YAAY,iBAAiB,qBACtD;CAEF,MAAM,CAAC,YAAY,iBAAiB,SAAS,qBAAqB,KAAK;CACvE,MAAM,CAAC,MAAM,WAAW,SAAS,OAAU;CAC3C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,YAAY,SAAS,OAAU;CAC7C,MAAM,CAAC,SAAS,cAAc,SAAS,OAAU;CAEjD,MAAM,EAAE,qBAAqB,2BAA2B,qBAAqB;CAE7E,MAAM,kBAAkB,aAAa,aAAa;AAChD,WAAS,OAAU;AACnB,aAAW,MAAM;AACjB,UAAQ,SAAS;IAChB,EAAE,CAAC;AAMN,iBAAgB;AACd,MAAI,mBAAmB;AACrB,iBAAc,kBAAkB;AAChC;;AAGF,MAAI,CAAC,WAAY;AAEjB,aAAW,KAAK;EAEhB,MAAM,gBAAgB,UACpBK,gBAAc,iBACd,6BAA6B,aAC3B,mBAAmB,mBACf,oBAAoB,gBAAgB,oBAAoB,qBACxD,MAEN,EAAE,CACH;AAED,gBACG,MAAM,QAAQ;GACb,MAAM,QAAQ,IAAI,MAAM;AAExB,OAAI,OAAO;AACT,kBAAc,MAAM;AACpB,2BAAuB,GAAG,QAAQ,IAAI,MAAM,CAAC;AAC7C,oBAAgB,IAAI,KAAK;SAEzB,UAAS,yCAAyC;IAEpD,CACD,MAAM,SAAS,CACf,cAAc,WAAW,cAAc,CAAC;IAC1C;EAAC;EAAmB;EAAY;EAAiB;EAAiB,CAAC;AAMtE,iBAAgB;AACd,MAAI,CAAC,WAAY;AAGjB,MAAI,oBAAoB,aAAa;AACnC,mBAAgB,oBAAoB,YAAY;AAChD;;AAGF,aAAW,KAAK;EAEhB,MAAM,eAAe,UACnBA,gBAAc,iBACd,sBAAsB,WAAW,4BACjC,EAAE,CACH;AAED,eACG,MAAM,QAAQ;GACb,MAAM,kBAAkB,IAAI;AAC5B,0BAAuB,GAAG,aAAa,iBAAiB,CAAC;AACzD,mBAAgB,gBAAgB;IAChC,CACD,MAAM,SAAS,CACf,cAAc,WAAW,aAAa,CAAC;IACzC;EACD;EACA;EACA;EACA;EACD,CAAC;AAEF,QAAO;EAAE;EAAM;EAAS;EAAO;EAAS;;;;;AC/F1C,MAAa,8BAA8B;CACzC,MAAM,EAAE,WAAW,aAAa;CAChC,MAAM,eAAe,cAAc,IAAI,gBAAgB,OAAO,EAAE,CAAC,OAAO,CAAC;AAkDzE,QAhDoB,cAAc;EAChC,MAAM,yBAAyB,EAAE;AAEjC,eAAa,SAAS,OAAO,QAAQ;AACnC,OAAI,IAAI,WAAW,GAAG,eAAe,oBAAoB,GAAG,EAAE;IAC5D,MAAM,YAAY,IAAI,QACpB,GAAG,eAAe,oBAAoB,IACtC,GACD;IACD,MAAM,kBAAkB,UAAU,YAAY,IAAI;AAElD,QAAI,oBAAoB,IAAI;KAC1B,MAAM,QAAQ,UAAU,UAAU,GAAG,gBAAgB;KAErD,MAAM,WADQ,UAAU,UAAU,kBAAkB,EAAE,CAC/B,QAAQ,cAAc,GAAG,SAC9C,KAAK,aAAa,CACnB;KAGD,MAAM,EAAE,YAAY,WAAW,gBAC7B,iBAAiB,MAAM;AAEzB,SAAI,uBAAuB,OAEzB,wBAAuB,OAAO,WAAW,KAAK;MAChC;MACZ,MAAM;OACL,YAAY;MACd,CAAC;SAEF,wBAAuB,SAAS;MAClB;MACZ,UAAU;MACV,YAAY,CACV;OACc;OACZ,MAAM;QACL,YAAY;OACd,CACF;MACF;;;IAIP;AACF,SAAO;IACN,CAAC,aAAa,CAAC;;AAKpB,MAAM,oBAAoB,UAAU;AAIlC,KAFE,CAAC,MAAM,KAAK,MAAM,MAAM,CAAC,KAAK,MAAM,SAAS,IAAI,IAAI,MAAM,SAAS,IAAI,EAGxE,QAAO;EACL,YAAY;EACZ,WAAW;EACX,aAAa;EACd;AAGH,KAAI,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,WAAW,MAAM,CAAC,CAC5C,QAAO;EACL,YAAY;EACZ,WAAW;EACX,aAAa,OAAO,MAAM;EAC3B;AAGH,QAAO;EACL,YAAY;EACZ,WAAW;EACX,aAAa;EACd;;;;;ACnDH,MAAM,uBAAuB,UAAU;CACrC,MAAM,EACJ,oBAAoB,IACpB,YAAY,oBAAoB,IAChC,iBACA,kBACA,oBACA,wBACA,gBACE;CAEJ,MAAM,CAAC,gBAAgB,qBAAqB,SAAS;EACnD,gBAAgB;EAChB,gBAAgB;EAChB,iBAAiB;EACjB,iBAAiB;EACjB,uBAAuB;EACvB,gBAAgB;EACjB,CAAC;CACF,MAAM,CAAC,qBAAqB,0BAA0B,SAAS,KAAK;CACpE,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAE5C,MAAM,EACJ,MAAM,iBACN,SAAS,wBACT,OAAO,yBACL,mBAAmB;EACF;EACnB,YAAY;EACK;EACC;EACnB,CAAC;AAEF,sBAAqB,iBAAiB,kBAAkB;CACxD,MAAM,EAAE,qBAAqB,gBAAgB,iBAAiB;CAC9D,MAAM,cAAc,uBAAuB;CAE3C,MAAM,mBACJ,YACA,YACA,aACA,QAAQ,QACL;AACH,MAAI,cAAc,MAChB,mBAAkB;GAAE,gBAAgB;GAAmB;GAAO,CAAC;WACtD,cAAc,OACvB,mBAAkB;GAAE,iBAAiB;GAAmB;GAAO,CAAC;WACvD,cAAc,OACvB,mBAAkB;GAAE,iBAAiB;GAAmB;GAAO,CAAC;WACvD,cAAc,aACvB,mBAAkB;GAAE,uBAAuB;GAAmB;GAAO,CAAC;WAC7D,cAAc,SACvB,mBAAkB;GAAE,gBAAgB;GAAmB;GAAO,CAAC;WACtD,cAAc,iBACvB,mBAAkB;GAAE,gBAAgB;GAAmB;GAAO,CAAC;AAEjE,yBAAuB,YAAY;;CAGrC,MAAM,oCAAoC;CAE1C,MAAM,wBAAwB,aAAa,QAAQ;AACjD,aAAW,IAAI;IACd,EAAE,CAAC;CAEN,MAAM,aAAa,cAAc;AAC/B,MAAI,gBAEF,QAD2B,gBAAgB,WAAW,MAAM,IAAI,CACtC,KAAK;AAEjC,SAAO;IACN,CAAC,iBAAiB,kBAAkB,CAAC;CAExC,MAAM,oBAAoB,cAAc;AACtC,MACE,eACA,uBACA,YAAY,qBAEZ,QAAO,YAAY,sBAAsB,MAAM;AAEjD,SAAO;IACN,CAAC,aAAa,oBAAoB,CAAC;AAGtC,KAAI,CAAC,mBAAmB,CAAC,kBACvB,QACE,oCAAC,SAAI,WAAU,kCACb,oCAAC,oBAAiB,MAAM,KAAM,CAC1B;AAIV,QACE,0DACE,oCAACC;EACC,mBAAmB,iBAAiB;EACnB;EACL;EACY;EACJ;EACI;EACL;EACnB,0BAA0B;AACxB,mBAAgB,OAAO,KAAK;;EAE9B,sBAAsB,gBAAgB;AACpC,mBAAgB,QAAQ,MAAM,YAAY;;EAE5C,sBAAsB,gBAAgB;AACpC,mBAAgB,QAAQ,MAAM,YAAY;;EAE5C,4BAA4B,gBAAgB;AAC1C,mBAAgB,cAAc,MAAM,aAAa,IAAK;;EAExD,gCAAgC,gBAAgB;AAC9C,mBAAgB,UAAU,MAAM,YAAY;;EAE9C,qBAAqB,gBAAgB;AACnC,mBAAgB,kBAAkB,MAAM,YAAY;;EAE/B;EACvB,uBAAuB;AACrB,YAAS,mBAAmB;;EAErB;EACT,oBAAoB;EACpB,oBAAoB;GACpB,EAEF,oCAACC;EACC,YAAY;EACK;EACY;EAC7B,aAAa;EACb,mBAAmB,iBAAiB;EACxB;EACZ,uBAAuB;AACrB,YAAS,mBAAmB;;GAE9B,CACD;;AAIP,kCAAe"}
package/dist/index.js CHANGED
@@ -246,7 +246,7 @@ import { t as ClientSideUdpGrid } from "./ClientSideUdpGrid-BfhRDgKV.js";
246
246
  import { i as FluentMenuListButton, n as FluentCompoundButton, r as FluentUploadButton, t as FluentUploadIconButton } from "./buttons-BUWLNCFF.js";
247
247
  import { t as AmbientToggleButtonGroup } from "./AmbientToggleButtonGroup-CqtJnv9Z.js";
248
248
  import { t as TrimForAvatar } from "./TrimForAvatar-DazacBHv.js";
249
- import { n as UdpTransactionsPage_default } from "./UdpTransactionsPage-BpHCN2VF.js";
249
+ import { n as UdpTransactionsPage_default } from "./UdpTransactionsPage-B-0Z5NDA.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-D8ZrNmfQ.js";
@@ -1 +1 @@
1
- {"version":3,"file":"UdpTransactionSidesheet.d.ts","sourceRoot":"","sources":["../../../../../../src/udp/pages/UdpTransactionsPage/UdpTransactionSidesheet.jsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAwBf,QAAA,MAAM,uBAAuB,mCAolB5B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"UdpTransactionSidesheet.d.ts","sourceRoot":"","sources":["../../../../../../src/udp/pages/UdpTransactionsPage/UdpTransactionSidesheet.jsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAwBf,QAAA,MAAM,uBAAuB,mCAgnB5B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UdpTransactionCustomPage.d.ts","sourceRoot":"","sources":["../../../../../../../src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.jsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAWpD,QAAA,MAAM,wBAAwB,mCAoM7B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"UdpTransactionCustomPage.d.ts","sourceRoot":"","sources":["../../../../../../../src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.jsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAWpD,QAAA,MAAM,wBAAwB,mCAsM7B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditTransaction.d.ts","sourceRoot":"","sources":["../../../../../../../src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.jsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,uBAAuB,CAAC;AAqB/B,QAAA,MAAM,eAAe,mCAqepB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"EditTransaction.d.ts","sourceRoot":"","sources":["../../../../../../../src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.jsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,uBAAuB,CAAC;AAqB/B,QAAA,MAAM,eAAe,mCAuepB,CAAC;AAEF,eAAe,eAAe,CAAC"}