udp-react-enterprise-component-library 25.18.1-beta.64 → 25.18.1-beta.65
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.
- package/dist/AgTable-B2xTzAm2.js.map +1 -1
- package/dist/AmChart-CTixft8X.js.map +1 -1
- package/dist/AuthProvider-J79EBNDc.js.map +1 -1
- package/dist/DashboardWidget-CsOrr74H.js.map +1 -1
- package/dist/Field-Cda5rJe2.js.map +1 -1
- package/dist/Form-DbOA5j38.js.map +1 -1
- package/dist/FormButtons-BTCO-pzW.js.map +1 -1
- package/dist/LayoutUnit-D4jJvonh.js.map +1 -1
- package/dist/MenuProvider-BqEZve2y.js.map +1 -1
- package/dist/NumberOperator-p4HsHHx3.js.map +1 -1
- package/dist/PAHAdditionalRightComponent-DMOU9Mho.js.map +1 -1
- package/dist/PDFViewer-B4nJKbIy.js.map +1 -1
- package/dist/PageContext-BpOBJHpb.js.map +1 -1
- package/dist/PaymentForm-DFJrSIy8.js.map +1 -1
- package/dist/PrimaryActionHeader-DBJpROPu.js.map +1 -1
- package/dist/SearchOperator-D9838PIe.js.map +1 -1
- package/dist/SearchUtilities-DUW0kaw_.js.map +1 -1
- package/dist/TenantProvider-BeFMHYP8.js.map +1 -1
- package/dist/UdpAppProvider-DXgzyeHZ.js.map +1 -1
- package/dist/UdpBarChart-D2bfgm7n.js.map +1 -1
- package/dist/UdpMapToolbar-B410Zi_h.js.map +1 -1
- package/dist/{UdpTransactionsPage-CDyNjmyo.js → UdpTransactionsPage-B1Ia9x62.js} +12 -10
- package/dist/UdpTransactionsPage-B1Ia9x62.js.map +1 -0
- package/dist/UnityIconLibrary-CjIwzfjv.js.map +1 -1
- package/dist/actionSummary-D0CwyTXJ.js.map +1 -1
- package/dist/advancedSearchBuilder-7ixhIwLW.js.map +1 -1
- package/dist/aggridHelpers-BvrSzjdD.js.map +1 -1
- package/dist/apiHelpers-WIR8pqy0.js.map +1 -1
- package/dist/auth-BWJ4-JF-.js.map +1 -1
- package/dist/catalogStore-DP2GxpTJ.js.map +1 -1
- package/dist/charts-pX01x8rO.js.map +1 -1
- package/dist/form-Dj1zVw6K.js.map +1 -1
- package/dist/hooks-BNndjGer.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lookupsStore-DPI8oD9R.js.map +1 -1
- package/dist/maps-BgmvNpkU.js.map +1 -1
- package/dist/newGrid-zmtQXU5G.js.map +1 -1
- package/dist/profile-7BieC5qc.js.map +1 -1
- package/dist/shellStore-C8zfPsZ-.js.map +1 -1
- package/dist/stepper-BaIo_Rol.js.map +1 -1
- package/dist/teleporterStore-CjUFtATo.js.map +1 -1
- package/dist/tenantStore-CFYu7ndZ.js.map +1 -1
- package/dist/types/src/udp/pages/UdpTransactionsPage/sidesheets/AttachmentTransaction.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/pages/UdpPages/index.js +1 -1
- package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
- package/dist/useAuthedUser-Bhr7Yhlg.js.map +1 -1
- package/dist/useQueryExecutors-DuuHrj2M.js.map +1 -1
- package/dist/useUser-wpHGo6jU.js.map +1 -1
- package/dist/workflowStore-CCoN5uHd.js.map +1 -1
- package/export-map.json +1 -1
- package/package.json +1 -1
- package/dist/UdpTransactionsPage-CDyNjmyo.js.map +0 -1
|
@@ -19,7 +19,7 @@ import { t as UdpFormsBuilderPage_exports } from "../../../UdpFormsBuilderPage-B
|
|
|
19
19
|
import { t as UdpImportFromFileMappingPage_exports } from "../../../UdpImportFromFileMappingPage-Dti79T9x.js";
|
|
20
20
|
import { t as UdpAuditEvents_exports } from "../../../UdpAuditEvents-C5p1KgV0.js";
|
|
21
21
|
import { t as UdpTransactionTypesPage_exports } from "../../../UdpTransactionTypesPage-CWA-n7y0.js";
|
|
22
|
-
import { t as UdpTransactionsPage_exports } from "../../../UdpTransactionsPage-
|
|
22
|
+
import { t as UdpTransactionsPage_exports } from "../../../UdpTransactionsPage-B1Ia9x62.js";
|
|
23
23
|
|
|
24
24
|
//#region src/udp/pages/UdpPages/index.ts
|
|
25
25
|
const UdpPages = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthedUser-Bhr7Yhlg.js","names":[
|
|
1
|
+
{"version":3,"file":"useAuthedUser-Bhr7Yhlg.js","names":[],"sources":["../src/utilities/auth/useAuthedUser.ts"],"sourcesContent":["import { useLocation } from 'react-router-dom';\nimport { useUser } from './useUser';\nimport { User } from './user';\nimport { useIsAuthenticated, useMsal } from '@azure/msal-react';\n//import { getStoredAccessToken } from '../storage/UnitySessionStorage';\n\n/**\n * Hook that provides a returnTo string for the current location\n */\nexport function useCurrentPageReturnTo(): { pathname: string; search: string; hash: string } {\n const { pathname, search, hash } = useLocation();\n // Avoid shorthand to satisfy isolatedDeclarations\n return { pathname: String(pathname), search: String(search), hash: String(hash) };\n}\n\nexport const useIsAuthed: () => boolean = () => {\n const isAADAuthenticated = useIsAuthenticated();\n return isAADAuthenticated;\n}\n\n/**\n * Hook used on routes that require a logged in user to ensure that the user is logged in\n * @see {@link useUser}\n */\nexport const useAuthedUser: () => User | null = () => {\n const { inProgress } = useMsal();\n const isAuthenticated = useIsAuthed();\n const user = useUser();\n //const login = useLoginAction();\n\n if (\n isAuthenticated ||\n (inProgress)\n ) {\n return user;\n }\n else{\n return null;\n }\n // else {\n // login();\n // return null;\n // }\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,yBAA6E;CAC3F,MAAM,EAAE,UAAU,QAAQ,SAAS,aAAa;AAEhD,QAAO;EAAE,UAAU,OAAO,SAAS;EAAE,QAAQ,OAAO,OAAO;EAAE,MAAM,OAAO,KAAK;EAAE;;AAGnF,MAAa,oBAAmC;AAE9C,QAD2B,oBAAoB;;;;;;AAQjD,MAAa,sBAAyC;CACpD,MAAM,EAAE,eAAe,SAAS;CAChC,MAAM,kBAAkB,aAAa;CACrC,MAAM,OAAO,SAAS;AAGtB,KACE,mBACC,WAED,QAAO;KAGP,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryExecutors-DuuHrj2M.js","names":["getMappedSearchResults: (\n lookups: LookupCollection,\n searchResults: QueryResult\n ) => QueryResult","updatedItem: Record<string, any>","resultData: QueryResult","promises: Array<Promise<any>>","lookups: LookupCollection","lookupApiMethodId","response","lookupConfig","executeQueryAdHocAndMapLookups: ExecuteAdHocAndMapLookups","executeQueryInstanceAndMapLookups: ExecuteInstanceAndMapLookups","executeQueryInstanceWithObjectAndMapLookups: ExecuteInstanceWithObjectAndMapLookups"],"sources":["../src/hooks/useQueryExecutors.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useLookupsStore } from '../stores/lookupsStore';\nimport {\n executeQueryInstance,\n executeQueryWithParameters,\n executeQueryInstanceWithApiMethodInstance,\n executeQueryAdHoc\n} from '../udp/utilities/methodUtils';\nimport { handleResponseErrors } from '../utilities/apiHelpers';\nimport ApiMethodInstance from '../models/ApiMethodInstance';\nimport Lookup from '../models/Lookup';\nimport QueryResult from '../models/QueryResult';\nimport { cloneDeep } from 'lodash';\n\n/**\n * value - id of lookup\n * lookupKeyName - used to find the correct lookup key/value pair\n * lookupValueName - the value in which to replace the target value\n */\ninterface LookupConfig {\n value: string;\n lookupKeyName: string | null | undefined;\n lookupValueName: string | null | undefined;\n}\ninterface LookupCollection {\n [field: string]: Lookup;\n}\n\ntype ExecuteInstanceAndMapLookups = (\n queryParams: any,\n apiMethodInstanceId: string | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars?: boolean | null | undefined,\n urlQueryParams?: string\n) => Promise<any>;\n\ntype ExecuteInstanceWithObjectAndMapLookups = (\n queryParams: any,\n apiMethodInstance: ApiMethodInstance | null | undefined | any,\n replaceCache: boolean | null | undefined,\n showSnackbars?: boolean | null | undefined,\n urlQueryParams?: string\n) => Promise<any>;\n\ntype ExecuteAdHocAndMapLookups = (\n searchObject: any,\n apiMethodId: string | null | undefined,\n lookupsMap: Record<string, LookupConfig> | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars?: boolean | null | undefined\n) => Promise<any>;\n\nexport interface UseQueryExecutorsReturn {\n executeQueryInstanceAndMapLookups: ExecuteInstanceAndMapLookups;\n executeQueryInstanceWithObjectAndMapLookups: ExecuteInstanceWithObjectAndMapLookups;\n executeQueryAdHocAndMapLookups: ExecuteAdHocAndMapLookups;\n getCleanData: (data: any, lookupsMap: Record<string, LookupConfig> | null | undefined) => any;\n getLookup: (lookupId: string) => any;\n}\n\nexport const useQueryExecutors = (): UseQueryExecutorsReturn => {\n const { lookupApiMethodId, lookupsDataMap, setLookupsDataMap } =\n useLookupsStore();\n\n const getLookupById = useCallback(\n (lookupId: string) => {\n if (!lookupsDataMap || !lookupId) {\n return null;\n }\n return lookupsDataMap[lookupId];\n },\n [lookupsDataMap]\n );\n\n const getMappedSearchResults: (\n lookups: LookupCollection,\n searchResults: QueryResult\n ) => QueryResult = (\n lookups = {},\n searchResults = {\n pageList: [],\n countable: false,\n total: 0,\n eagerLoad: false,\n aggregateResults: [],\n aliasMap: [],\n lookupsMap: []\n }\n ) => {\n const mapLookup = (item: Record<string, any>) => {\n const updatedItem: Record<string, any> = { ...item };\n\n Object.keys(lookups).forEach((attribute) => {\n const lookup = lookups[attribute];\n const propertyValue = (item as any)[attribute];\n\n if (propertyValue !== null && propertyValue !== undefined) {\n const matchingLookupRow = lookup?.data?.find((row) => {\n if (lookup.keyName && row[lookup.keyName]) {\n return (\n row[lookup.keyName].toString() === propertyValue.toString()\n );\n }\n return false;\n });\n\n if (matchingLookupRow && lookup.valueName) {\n updatedItem[attribute] = matchingLookupRow[lookup.valueName];\n }\n }\n });\n\n return updatedItem;\n };\n const updatedPageList = searchResults.pageList.map(mapLookup);\n const updatedAggregateResults =\n searchResults?.aggregateResults?.map?.(mapLookup);\n\n return {\n ...searchResults,\n pageList: updatedPageList,\n aggregateResults: updatedAggregateResults\n };\n };\n\n const processQueryResponseWithLookups = useCallback(\n async (\n lookupApiMethodId: string,\n response: any,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined,\n lookupDataMap: object | null | undefined\n ) => {\n let resultData: QueryResult = new QueryResult();\n let lookupsMap = {};\n if (response?.status === 200) {\n lookupsMap = lookupDataMap || response?.data?.lookupsMap || {};\n resultData = response.data;\n } else {\n showSnackbars && handleResponseErrors('Could not retrieve query data');\n return null;\n }\n\n // Keys are a list of Entity Properties\n const promises: Array<Promise<any>> = [];\n const lookups: LookupCollection = {};\n\n Object.keys(lookupsMap).forEach((key: string) => {\n const lookupConfig = lookupsMap[key];\n if (lookupConfig?.value) {\n const existingLookup =\n !replaceCache && getLookupById(lookupConfig.value);\n const lookupQueryData = { id: lookupConfig.value };\n\n if (!existingLookup) {\n promises.push(\n executeQueryWithParameters(\n { data: lookupQueryData },\n lookupApiMethodId\n )\n .then((response) => {\n if (response?.status === 200 && response?.data) {\n const lookupConfig = lookupsMap[key];\n lookups[key] = {\n data: response.data.data,\n keyName:\n lookupConfig.lookupKeyName || response.data.keyName,\n valueName:\n lookupConfig.lookupValueName || response.data.valueName,\n businessObjectKey: response.data.businessObjectKey\n };\n setLookupsDataMap(\n { [response.data.id]: response.data },\n replaceCache\n );\n }\n })\n .catch((e) => e)\n );\n } else {\n lookups[key] = {\n data: existingLookup.data,\n keyName: lookupConfig.lookupKeyName || existingLookup.keyName,\n valueName:\n lookupConfig.lookupValueName || existingLookup.valueName,\n businessObjectKey: existingLookup.businessObjectKey\n };\n }\n }\n });\n\n await Promise.all(promises);\n\n resultData = getMappedSearchResults(lookups, resultData);\n return resultData;\n },\n [getLookupById]\n );\n\n const executeQueryAdHocAndMapLookups: ExecuteAdHocAndMapLookups = useCallback(\n async (\n searchObject: any = {},\n apiMethodId: string | null | undefined,\n lookupsMap: Record<string, LookupConfig> | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined = false\n ) => {\n if (!lookupApiMethodId) {\n console.info('Udp Lookup Api Method Id NOT Set');\n }\n console.info('Udp Lookup Api Method Id IS Set');\n\n const response = await executeQueryAdHoc(searchObject || {}, apiMethodId);\n\n if (lookupApiMethodId) {\n return await processQueryResponseWithLookups(\n lookupApiMethodId,\n response,\n replaceCache,\n showSnackbars,\n lookupsMap\n );\n }\n return response?.data;\n },\n [lookupApiMethodId, processQueryResponseWithLookups]\n );\n\n const executeQueryInstanceAndMapLookups: ExecuteInstanceAndMapLookups = useCallback(\n async (\n queryParams: any = {},\n apiMethodInstanceId: string | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined = false,\n urlQueryParams: string = ''\n ) => {\n if (!lookupApiMethodId) {\n console.info('Udp Lookup Api Method Id NOT Set');\n // return null;\n }\n console.info('Udp Lookup Api Method Id IS Set');\n\n const response = await executeQueryInstance(\n { data: queryParams || {} },\n apiMethodInstanceId,\n urlQueryParams\n );\n\n if (lookupApiMethodId) {\n return await processQueryResponseWithLookups(\n lookupApiMethodId,\n response,\n replaceCache,\n showSnackbars,\n null\n );\n }\n return response?.data;\n },\n [lookupApiMethodId, processQueryResponseWithLookups]\n );\n\n const executeQueryInstanceWithObjectAndMapLookups: ExecuteInstanceWithObjectAndMapLookups = useCallback(\n async (\n queryParams: any = {},\n apiMethodInstance: ApiMethodInstance | null | undefined | any,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined = false,\n urlQueryParams: string = ''\n ) => {\n if (!lookupApiMethodId) {\n console.info('Udp Lookup Api Method Id NOT Set');\n // return null;\n }\n console.info('Udp Lookup Api Method Id IS Set');\n\n const response = await executeQueryInstanceWithApiMethodInstance(\n {\n data: { queryParams: queryParams || {}, apiMethodInstance }\n },\n urlQueryParams\n );\n\n if (lookupApiMethodId) {\n return await processQueryResponseWithLookups(\n lookupApiMethodId,\n response,\n replaceCache,\n showSnackbars,\n null\n );\n }\n return response?.data;\n },\n [lookupApiMethodId, processQueryResponseWithLookups]\n );\n\n const getLookup = useCallback(\n (lookupId: string) => {\n const cachedLookup = getLookupById(lookupId);\n if (cachedLookup) {\n return cachedLookup;\n }\n if (lookupApiMethodId) {\n const lookupQueryData = { id: lookupId };\n executeQueryWithParameters({ data: lookupQueryData }, lookupApiMethodId)\n .then((response) => {\n if (response?.status === 200 && response?.data) {\n return response;\n }\n })\n .catch((e) => e);\n }\n return null;\n },\n [lookupApiMethodId, getLookupById]\n );\n\n const getCleanData = useCallback(\n (data: any, lookupsMap: Record<string, LookupConfig> | null | undefined) => {\n // Un-Map lookup data\n let cleanData = cloneDeep(data);\n if (lookupsMap && cleanData) {\n Object.keys(lookupsMap).forEach((attribute) => {\n const lookupConfig = (lookupsMap as Record<string, LookupConfig>)[attribute];\n const lookup = getLookup(lookupConfig.value);\n\n if (Array.isArray(cleanData)) {\n // Data is an array of rows.\n cleanData.forEach((row, index) => {\n let currentValue = row[attribute];\n let temp = lookup?.data?.find(\n (item) => item[lookup.valueName] === currentValue\n );\n if (temp != null)\n cleanData[index][attribute] = temp[lookup.keyName];\n });\n } else if (cleanData[attribute]) {\n // Data is a single row\n let currentValue = cleanData[attribute];\n let temp = lookup.data.find(\n (item) => item[lookup.valueName] === currentValue\n );\n if (temp != null) cleanData[attribute] = temp[lookup.keyName];\n }\n });\n }\n return cleanData;\n },\n [getLookup]\n );\n\n return {\n executeQueryInstanceAndMapLookups: executeQueryInstanceAndMapLookups,\n executeQueryInstanceWithObjectAndMapLookups: executeQueryInstanceWithObjectAndMapLookups,\n executeQueryAdHocAndMapLookups: executeQueryAdHocAndMapLookups,\n getCleanData: getCleanData,\n getLookup: getLookup\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useQueryExecutors-DuuHrj2M.js","names":["lookupApiMethodId","response","lookupConfig"],"sources":["../src/hooks/useQueryExecutors.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useLookupsStore } from '../stores/lookupsStore';\nimport {\n executeQueryInstance,\n executeQueryWithParameters,\n executeQueryInstanceWithApiMethodInstance,\n executeQueryAdHoc\n} from '../udp/utilities/methodUtils';\nimport { handleResponseErrors } from '../utilities/apiHelpers';\nimport ApiMethodInstance from '../models/ApiMethodInstance';\nimport Lookup from '../models/Lookup';\nimport QueryResult from '../models/QueryResult';\nimport { cloneDeep } from 'lodash';\n\n/**\n * value - id of lookup\n * lookupKeyName - used to find the correct lookup key/value pair\n * lookupValueName - the value in which to replace the target value\n */\ninterface LookupConfig {\n value: string;\n lookupKeyName: string | null | undefined;\n lookupValueName: string | null | undefined;\n}\ninterface LookupCollection {\n [field: string]: Lookup;\n}\n\ntype ExecuteInstanceAndMapLookups = (\n queryParams: any,\n apiMethodInstanceId: string | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars?: boolean | null | undefined,\n urlQueryParams?: string\n) => Promise<any>;\n\ntype ExecuteInstanceWithObjectAndMapLookups = (\n queryParams: any,\n apiMethodInstance: ApiMethodInstance | null | undefined | any,\n replaceCache: boolean | null | undefined,\n showSnackbars?: boolean | null | undefined,\n urlQueryParams?: string\n) => Promise<any>;\n\ntype ExecuteAdHocAndMapLookups = (\n searchObject: any,\n apiMethodId: string | null | undefined,\n lookupsMap: Record<string, LookupConfig> | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars?: boolean | null | undefined\n) => Promise<any>;\n\nexport interface UseQueryExecutorsReturn {\n executeQueryInstanceAndMapLookups: ExecuteInstanceAndMapLookups;\n executeQueryInstanceWithObjectAndMapLookups: ExecuteInstanceWithObjectAndMapLookups;\n executeQueryAdHocAndMapLookups: ExecuteAdHocAndMapLookups;\n getCleanData: (data: any, lookupsMap: Record<string, LookupConfig> | null | undefined) => any;\n getLookup: (lookupId: string) => any;\n}\n\nexport const useQueryExecutors = (): UseQueryExecutorsReturn => {\n const { lookupApiMethodId, lookupsDataMap, setLookupsDataMap } =\n useLookupsStore();\n\n const getLookupById = useCallback(\n (lookupId: string) => {\n if (!lookupsDataMap || !lookupId) {\n return null;\n }\n return lookupsDataMap[lookupId];\n },\n [lookupsDataMap]\n );\n\n const getMappedSearchResults: (\n lookups: LookupCollection,\n searchResults: QueryResult\n ) => QueryResult = (\n lookups = {},\n searchResults = {\n pageList: [],\n countable: false,\n total: 0,\n eagerLoad: false,\n aggregateResults: [],\n aliasMap: [],\n lookupsMap: []\n }\n ) => {\n const mapLookup = (item: Record<string, any>) => {\n const updatedItem: Record<string, any> = { ...item };\n\n Object.keys(lookups).forEach((attribute) => {\n const lookup = lookups[attribute];\n const propertyValue = (item as any)[attribute];\n\n if (propertyValue !== null && propertyValue !== undefined) {\n const matchingLookupRow = lookup?.data?.find((row) => {\n if (lookup.keyName && row[lookup.keyName]) {\n return (\n row[lookup.keyName].toString() === propertyValue.toString()\n );\n }\n return false;\n });\n\n if (matchingLookupRow && lookup.valueName) {\n updatedItem[attribute] = matchingLookupRow[lookup.valueName];\n }\n }\n });\n\n return updatedItem;\n };\n const updatedPageList = searchResults.pageList.map(mapLookup);\n const updatedAggregateResults =\n searchResults?.aggregateResults?.map?.(mapLookup);\n\n return {\n ...searchResults,\n pageList: updatedPageList,\n aggregateResults: updatedAggregateResults\n };\n };\n\n const processQueryResponseWithLookups = useCallback(\n async (\n lookupApiMethodId: string,\n response: any,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined,\n lookupDataMap: object | null | undefined\n ) => {\n let resultData: QueryResult = new QueryResult();\n let lookupsMap = {};\n if (response?.status === 200) {\n lookupsMap = lookupDataMap || response?.data?.lookupsMap || {};\n resultData = response.data;\n } else {\n showSnackbars && handleResponseErrors('Could not retrieve query data');\n return null;\n }\n\n // Keys are a list of Entity Properties\n const promises: Array<Promise<any>> = [];\n const lookups: LookupCollection = {};\n\n Object.keys(lookupsMap).forEach((key: string) => {\n const lookupConfig = lookupsMap[key];\n if (lookupConfig?.value) {\n const existingLookup =\n !replaceCache && getLookupById(lookupConfig.value);\n const lookupQueryData = { id: lookupConfig.value };\n\n if (!existingLookup) {\n promises.push(\n executeQueryWithParameters(\n { data: lookupQueryData },\n lookupApiMethodId\n )\n .then((response) => {\n if (response?.status === 200 && response?.data) {\n const lookupConfig = lookupsMap[key];\n lookups[key] = {\n data: response.data.data,\n keyName:\n lookupConfig.lookupKeyName || response.data.keyName,\n valueName:\n lookupConfig.lookupValueName || response.data.valueName,\n businessObjectKey: response.data.businessObjectKey\n };\n setLookupsDataMap(\n { [response.data.id]: response.data },\n replaceCache\n );\n }\n })\n .catch((e) => e)\n );\n } else {\n lookups[key] = {\n data: existingLookup.data,\n keyName: lookupConfig.lookupKeyName || existingLookup.keyName,\n valueName:\n lookupConfig.lookupValueName || existingLookup.valueName,\n businessObjectKey: existingLookup.businessObjectKey\n };\n }\n }\n });\n\n await Promise.all(promises);\n\n resultData = getMappedSearchResults(lookups, resultData);\n return resultData;\n },\n [getLookupById]\n );\n\n const executeQueryAdHocAndMapLookups: ExecuteAdHocAndMapLookups = useCallback(\n async (\n searchObject: any = {},\n apiMethodId: string | null | undefined,\n lookupsMap: Record<string, LookupConfig> | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined = false\n ) => {\n if (!lookupApiMethodId) {\n console.info('Udp Lookup Api Method Id NOT Set');\n }\n console.info('Udp Lookup Api Method Id IS Set');\n\n const response = await executeQueryAdHoc(searchObject || {}, apiMethodId);\n\n if (lookupApiMethodId) {\n return await processQueryResponseWithLookups(\n lookupApiMethodId,\n response,\n replaceCache,\n showSnackbars,\n lookupsMap\n );\n }\n return response?.data;\n },\n [lookupApiMethodId, processQueryResponseWithLookups]\n );\n\n const executeQueryInstanceAndMapLookups: ExecuteInstanceAndMapLookups = useCallback(\n async (\n queryParams: any = {},\n apiMethodInstanceId: string | null | undefined,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined = false,\n urlQueryParams: string = ''\n ) => {\n if (!lookupApiMethodId) {\n console.info('Udp Lookup Api Method Id NOT Set');\n // return null;\n }\n console.info('Udp Lookup Api Method Id IS Set');\n\n const response = await executeQueryInstance(\n { data: queryParams || {} },\n apiMethodInstanceId,\n urlQueryParams\n );\n\n if (lookupApiMethodId) {\n return await processQueryResponseWithLookups(\n lookupApiMethodId,\n response,\n replaceCache,\n showSnackbars,\n null\n );\n }\n return response?.data;\n },\n [lookupApiMethodId, processQueryResponseWithLookups]\n );\n\n const executeQueryInstanceWithObjectAndMapLookups: ExecuteInstanceWithObjectAndMapLookups = useCallback(\n async (\n queryParams: any = {},\n apiMethodInstance: ApiMethodInstance | null | undefined | any,\n replaceCache: boolean | null | undefined,\n showSnackbars: boolean | null | undefined = false,\n urlQueryParams: string = ''\n ) => {\n if (!lookupApiMethodId) {\n console.info('Udp Lookup Api Method Id NOT Set');\n // return null;\n }\n console.info('Udp Lookup Api Method Id IS Set');\n\n const response = await executeQueryInstanceWithApiMethodInstance(\n {\n data: { queryParams: queryParams || {}, apiMethodInstance }\n },\n urlQueryParams\n );\n\n if (lookupApiMethodId) {\n return await processQueryResponseWithLookups(\n lookupApiMethodId,\n response,\n replaceCache,\n showSnackbars,\n null\n );\n }\n return response?.data;\n },\n [lookupApiMethodId, processQueryResponseWithLookups]\n );\n\n const getLookup = useCallback(\n (lookupId: string) => {\n const cachedLookup = getLookupById(lookupId);\n if (cachedLookup) {\n return cachedLookup;\n }\n if (lookupApiMethodId) {\n const lookupQueryData = { id: lookupId };\n executeQueryWithParameters({ data: lookupQueryData }, lookupApiMethodId)\n .then((response) => {\n if (response?.status === 200 && response?.data) {\n return response;\n }\n })\n .catch((e) => e);\n }\n return null;\n },\n [lookupApiMethodId, getLookupById]\n );\n\n const getCleanData = useCallback(\n (data: any, lookupsMap: Record<string, LookupConfig> | null | undefined) => {\n // Un-Map lookup data\n let cleanData = cloneDeep(data);\n if (lookupsMap && cleanData) {\n Object.keys(lookupsMap).forEach((attribute) => {\n const lookupConfig = (lookupsMap as Record<string, LookupConfig>)[attribute];\n const lookup = getLookup(lookupConfig.value);\n\n if (Array.isArray(cleanData)) {\n // Data is an array of rows.\n cleanData.forEach((row, index) => {\n let currentValue = row[attribute];\n let temp = lookup?.data?.find(\n (item) => item[lookup.valueName] === currentValue\n );\n if (temp != null)\n cleanData[index][attribute] = temp[lookup.keyName];\n });\n } else if (cleanData[attribute]) {\n // Data is a single row\n let currentValue = cleanData[attribute];\n let temp = lookup.data.find(\n (item) => item[lookup.valueName] === currentValue\n );\n if (temp != null) cleanData[attribute] = temp[lookup.keyName];\n }\n });\n }\n return cleanData;\n },\n [getLookup]\n );\n\n return {\n executeQueryInstanceAndMapLookups: executeQueryInstanceAndMapLookups,\n executeQueryInstanceWithObjectAndMapLookups: executeQueryInstanceWithObjectAndMapLookups,\n executeQueryAdHocAndMapLookups: executeQueryAdHocAndMapLookups,\n getCleanData: getCleanData,\n getLookup: getLookup\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUser-wpHGo6jU.js","names":[
|
|
1
|
+
{"version":3,"file":"useUser-wpHGo6jU.js","names":[],"sources":["../src/utilities/auth/internal.ts","../src/utilities/auth/useUser.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { User } from './user';\n\nexport type UserAction = { type: 'SET_USER' };\nexport type AccessTokenAction = { type: 'SET_ACCESS_TOKEN' };\nexport type Dispatch = (action: UserAction | AccessTokenAction) => void;\nexport const UserContext: React.Context<User | null> = createContext<User | null>(null);\nexport const UserDispatchContext: React.Context<Dispatch | null> = createContext<Dispatch | null>(null);\n","import { useContext } from 'react';\nimport { UserContext } from './internal';\nimport { User } from './user';\n\n/**\n * Get the current User object (or null if not logged in)\n *\n * Does not redirect to login\n * @see {@link useAuthedUser}\n */\nexport function useUser(): User | null {\n return useContext(UserContext);\n}\n"],"mappings":";;;AAMA,MAAa,cAA0C,cAA2B,KAAK;AACvF,MAAa,sBAAsD,cAA+B,KAAK;;;;;;;;;;ACGvG,SAAgB,UAAuB;AACrC,QAAO,WAAW,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflowStore-CCoN5uHd.js","names":[
|
|
1
|
+
{"version":3,"file":"workflowStore-CCoN5uHd.js","names":[],"sources":["../src/stores/workflowStore.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\ninterface PageDataMap {\n [pageId: string]: Object | null | undefined;\n}\n\ninterface TaskDataMap {\n [taskId: string]: PageDataMap;\n}\n\ninterface WorkflowState {\n title: string | null | undefined;\n setWorkflowToolbarTitle: (title: string) => void;\n taskDataMap: TaskDataMap | null | undefined;\n updateTaskDataMap: (taskId: string, pageId: string, data: Object) => void;\n setTaskDataMap: (taskId: string, data: PageDataMap) => void;\n}\n\nexport const useWorkflowStore: () => WorkflowState = create<WorkflowState>()(\n devtools((set) => ({\n title: '',\n setWorkflowToolbarTitle: (title) => set((state) => ({ title: title })),\n taskDataMap: {},\n updateTaskDataMap: (taskId, pageId, data) =>\n set((state) => {\n const updatedTaskDataMap = { ...state.taskDataMap };\n if (updatedTaskDataMap[taskId]) {\n if (updatedTaskDataMap[taskId][pageId]) {\n updatedTaskDataMap[taskId][pageId] = data;\n } else {\n updatedTaskDataMap[taskId] = {\n [pageId]: data\n };\n }\n } else {\n updatedTaskDataMap[taskId] = {\n [pageId]: data\n };\n }\n return {\n taskDataMap: updatedTaskDataMap\n };\n }),\n setTaskDataMap: (taskId, data) =>\n set((state) => {\n const updatedTaskDataMap = { ...state.taskDataMap };\n updatedTaskDataMap[taskId] = data;\n return {\n taskDataMap: updatedTaskDataMap\n };\n })\n }))\n);\n"],"mappings":";;;;AAmBA,MAAa,mBAAwC,QAAuB,CAC1E,UAAU,SAAS;CACjB,OAAO;CACP,0BAA0B,UAAU,KAAK,WAAW,EAAS,OAAO,EAAE;CACtE,aAAa,EAAE;CACf,oBAAoB,QAAQ,QAAQ,SAClC,KAAK,UAAU;EACb,MAAM,qBAAqB,EAAE,GAAG,MAAM,aAAa;AACnD,MAAI,mBAAmB,QACrB,KAAI,mBAAmB,QAAQ,QAC7B,oBAAmB,QAAQ,UAAU;MAErC,oBAAmB,UAAU,GAC1B,SAAS,MACX;MAGH,oBAAmB,UAAU,GAC1B,SAAS,MACX;AAEH,SAAO,EACL,aAAa,oBACd;GACD;CACJ,iBAAiB,QAAQ,SACvB,KAAK,UAAU;EACb,MAAM,qBAAqB,EAAE,GAAG,MAAM,aAAa;AACnD,qBAAmB,UAAU;AAC7B,SAAO,EACL,aAAa,oBACd;GACD;CACL,EAAE,CACJ"}
|
package/export-map.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "udp-react-enterprise-component-library",
|
|
3
|
-
"version": "25.18.1-beta.
|
|
3
|
+
"version": "25.18.1-beta.65",
|
|
4
4
|
"description": "React-based UI component library implementing Fluent UI design for Univerus internal projects",
|
|
5
5
|
"author": "Univerus",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UdpTransactionsPage-CDyNjmyo.js","names":["useTransactionStore: () => TransactionState","ConfigService","LinearProgress","ConfigService","Divider","AttachmentTransactionAttachmentList","LinearProgress","ConfigService","UdpTransactionCustomPage","Typography","ConfigService","useStyles","Typography","useStyles","ConfigService","LinearProgress","Typography","ConfigService","LinearProgress","transaction","ConfigService","catalogObjectInfo","DetailsFormFields","ConfigService","WorkflowActions","EditTransactionHeaderItem","Divider","UdpTransactionCustomPage","EditTransactionDetailsForm","EditTransactionDetailsFooterItem","ConfigService","ViewTransaction","UdpTransactionCustomPage","AttachmentTransaction","WorkflowActions","EditTransaction","LinearProgress","ConfigService","UdpTransactionGrid","UdpTransactionSidesheet"],"sources":["../src/stores/transactionStore.ts","../src/utilities/transactions/useTransactionEngine.js","../src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/ViewTransaction.jsx","../src/udp/pages/UdpTransactionsPage/components/AttachmentTransactionAttachmentList.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/AttachmentTransaction.jsx","../src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/WorkflowActions.jsx","../src/uploader/utils/allowedFileProperties.js","../src/udp/pages/UdpTransactionsPage/sidesheets/EditTransactionHeaderItem.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionHistory/TransactionTimelineItem.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionHistory/TransactionTimeline.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionAttachment/TransactionAttachment.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionAttachment/TransactionAttachments.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionNote/TransactionNote.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionNote/TransactionNoteForm.jsx","../src/udp/pages/UdpTransactionsPage/components/transactionNote/TransactionNotes.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/enum.ts","../src/udp/pages/UdpTransactionsPage/components/EditTransactionDetailsFooterItem.jsx","../src/udp/pages/UdpTransactionsPage/components/EditTransactionDetailsFormFields.jsx","../src/udp/pages/UdpTransactionsPage/components/EditTransactionDetailsForm.jsx","../src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.jsx","../src/udp/pages/UdpTransactionsPage/UdpTransactionSidesheet.jsx","../src/hooks/useTransactionType.js","../src/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 transactionTypeGridColumns = useMemo(() => {\n return transactionType?.domainFields || [];\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 };\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SearchMethodUdpGrid } from '../../../UI/templates/newGrid';\nimport { FluentDialog, LinearProgress } from '../../../UI';\nimport { useTransactionEngine } from '../../../utilities/transactions/useTransactionEngine';\nimport { useAxiosMutate } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { useHandleAxiosSnackbar } from '../../../utilities';\nimport { TransactionUiActionTypeEnums, UdpSearchEnums } from '../../../enums';\nimport { useCatalogStore } from '../../../../src/stores/catalogStore';\nimport { getSanitizedName } from '../../../utilities/entities';\n\nconst 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 gridApiRef,\n initialFilterModel\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 } = useTransactionEngine(transactionTypeId);\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const [\n { data, loading: deleteLoading, error: deleteError },\n deleteTransaction\n ] = useAxiosMutate(\n `${ConfigService.productV1ApiUrl}`,\n `udptransaction/${selectedTransaction?.transactionId}`,\n {\n method: 'delete'\n },\n {}\n );\n\n const { currentApiCatalogId, catalogsMap } = useCatalogStore();\n\n const handleDialogClose = () => {\n setSelectedTransaction(null);\n setDialogOpen(false);\n };\n\n const handleConfirmActionDialog = useCallback(async () => {\n try {\n const response = await deleteTransaction();\n if (response?.status === 204) {\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 deleteTransaction,\n refreshGridData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t\n ]);\n\n const removeTimeFromDate = (date) => {\n const parsedDate = new Date(date);\n if (parsedDate.getTime()) {\n const year = parsedDate.getFullYear();\n //Month is zero based 0 = Jan so need to add 1\n const month = parsedDate.getMonth() + 1;\n const day = parsedDate.getDate().toString();\n return `${year}-${month.toString()}-${day}`;\n }\n return parsedDate;\n };\n\n const addSpacingInHeaderName = (headerName) => {\n let formattedHeaderName = '';\n for (var i = 0; i < headerName.length; i++) {\n if (i !== 0 && headerName[i].match(/[A-Z]/)) {\n formattedHeaderName += ' ' + headerName[i];\n } else {\n formattedHeaderName += headerName[i];\n }\n }\n return formattedHeaderName;\n };\n\n const transactionLabel = useMemo(() => {\n return (\n getTransactionTypeLabel(selectedTransaction) ??\n selectedTransaction?.entityBusinessKey\n );\n }, [getTransactionTypeLabel, selectedTransaction]);\n\n const pdfViewPageId = useMemo(() => {\n return getUiActionRenderPageId(\n TransactionUiActionTypeEnums.Render_View_Pdf_Page\n );\n }, [getUiActionRenderPageId]);\n\n const catalogObjectList = useMemo(() => {\n if (\n catalogsMap &&\n currentApiCatalogId &&\n catalogsMap[currentApiCatalogId]\n ) {\n return catalogsMap[currentApiCatalogId]?.ctlg?.catalogObjectList;\n }\n }, [catalogsMap, currentApiCatalogId]);\n\n const columnDefs = useMemo(() => {\n const initialColumnDefs = [\n {\n headerName: t('Transaction Id'),\n field: 'transactionId',\n hide: true\n },\n {\n headerName: t('Created On'),\n field: 'createdOn',\n cellDataType: 'dateString',\n valueFormatter: (params) => {\n return removeTimeFromDate(params?.data.createdOn);\n }\n },\n {\n headerName: t('Current Status'),\n field: 'currentStatusId',\n cellRenderer: 'statusRenderer',\n cellRendererParams: {\n statusMappingConfig: transactionTypeStatusColorsMap,\n getStatusValue: (params) =>\n params?.data.udpTransactionUdpTransactionTypeStatus.name\n },\n 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 {\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 transactionTypeGridColumns.forEach((column) => {\n let formatedHeaderName =\n column.slice(0, 1).toUpperCase() + column.slice(1);\n const contains_more_than_one_uppercase_char =\n formatedHeaderName.match(/[A-Z]/g || []).length > 1;\n if (contains_more_than_one_uppercase_char) {\n formatedHeaderName = addSpacingInHeaderName(formatedHeaderName);\n }\n\n let valueFormatter = (params) => {\n if (catalogObjectList) {\n let catalogObject = catalogObjectList?.find(\n (catalogObject) =>\n getSanitizedName(catalogObject.catalogObjectName) == domainName\n );\n const matchingFieldInfo = catalogObject?.properties?.find(\n (objectProperty) => {\n let formatted_column_name =\n objectProperty.name.slice(0, 1).toLowerCase() +\n objectProperty.name.slice(1);\n return formatted_column_name == column;\n }\n );\n if (\n matchingFieldInfo?.type.toLowerCase() == 'datetime' &&\n params?.data?.entityBusinessObject[column]\n ) {\n return removeTimeFromDate(\n params?.data?.entityBusinessObject[column]\n );\n }\n }\n return params?.data ? params?.data?.entityBusinessObject[column] : '';\n };\n\n if (domainColumnFormatters[column]) {\n valueFormatter = domainColumnFormatters[column].formatter;\n }\n\n initialColumnDefs.push({\n headerName: formatedHeaderName,\n field: `${UdpSearchEnums.UdpBusinessDomainPrefix}.${domainName}.${column}`,\n valueFormatter: valueFormatter\n });\n });\n\n Object.keys(domainColumnFormatters).forEach((columnKey) => {\n if (!transactionTypeGridColumns.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 ]);\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: 'agGridExport' },\n { name: 'agGridHideShowColumns' },\n { name: 'agGridSizeColumnsToFit' }\n ];\n\n const gridOptions = useMemo(() => {\n return {\n pagination: true,\n rowSelection: 'none'\n };\n }, []);\n\n const searchMethodConfig = useMemo(() => {\n let combinedSearchObject = {\n eagerLoad: true,\n filterElements: [\n {\n searchField: 'transactionTypeId',\n searchOperator: '=',\n searchValue: transactionTypeId\n },\n {\n searchField: 'isDeleted',\n searchOperator: '=',\n searchValue: false\n }\n ]\n };\n\n if (searchMethodObject) {\n let combinedFilterElems = combinedSearchObject.filterElements.concat(\n searchMethodObject?.filterElements || []\n );\n\n combinedSearchObject = {\n ...combinedSearchObject,\n ...searchMethodObject\n };\n\n combinedSearchObject = {\n ...combinedSearchObject,\n filterElements: combinedFilterElems\n };\n }\n\n return {\n requestUrl: `${ConfigService.productV1ApiUrl}/UdpTransaction/search`,\n customSearchObject: combinedSearchObject\n };\n }, [transactionTypeId, searchMethodObject]);\n\n // eslint-disable-next-line react-you-might-not-need-an-effect/no-manage-parent\n useEffect(() => {\n if (gridApiRef?.current && initialFilterModel) {\n // 1. Set the filter model\n gridApiRef.current.setFilterModel(initialFilterModel);\n\n // 2. Inform the grid that filters have changed, which re-runs the data fetch (Server-Side)\n gridApiRef.current.onFilterChanged();\n }\n }, [gridApiRef, 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 />\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={deleteLoading}\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={800}\n maxHeight={900}\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 useStyles = makeStyles((theme) => ({\n sidesheet: { display: 'flex', flexDirection: 'row', flex: 1 },\n attachmentListContainer: {\n textAlign: 'left',\n width: '35%'\n },\n attachmentListHeader: {\n backgroundColor: 'white',\n marginTop: '-7%',\n marginBottom: '-5%',\n justifyItems: 'left',\n paddingLeft: '5%'\n },\n attachmentListHeaderPrimaryText: {\n fontSize: 'var(--h6-font-size)',\n fontWeight: 'var(--body1-font-weight)',\n marginBottom: '-5%',\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 },\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 <p className={classStyles.attachmentListHeaderPrimaryText}>\n Attachments\n </p>\n <p className={classStyles.attachmentListHeaderSecondaryText}>\n {attachments.length + ' file(s) attached'}\n </p>\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, useEffect, useMemo } from 'react';\nimport { PageContainer } from '../../../../page/PageContainer';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport { TransactionUiActionTypeEnums } from '../../../../enums';\nimport { Form } 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';\n\nconst UdpTransactionCustomPage = (props) => {\n const {\n pageId,\n transactionTypeId,\n transactionUiActionType,\n formRef,\n transaction,\n transactionTypeTransactionActionId\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 } 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 }\n },\n [\n executeCreateTransactionAction,\n executeSaveChanges,\n executeCreateRevision,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n transactionUiActionType,\n executeSubmitCustomAction,\n t,\n transactionTypeTransactionActionId\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 <PageContainer\n pageId={transactionPageId}\n updateLocationState={false}\n widgetParams={{ transaction, isFieldRequired, isFieldHidden }}\n />\n </Form>\n );\n};\n\nexport default UdpTransactionCustomPage;\n","import React, { useState, useCallback, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSnackbar } from 'notistack';\nimport { DocumentIcon } from '@fluentui/react-icons';\nimport { FluentDialog, SideSheet } from '../../../../UI';\nimport { useAxiosMutate } from '../../../../utilities';\nimport { ConfigService } from '../../../../configService';\nimport { UdpActionCard } from '../../../../UI/inputs/buttons/UdpActionCard/UdpActionCard';\nimport { getIconFromName } from '../../../../utilities/tree';\nimport './WorkflowActions.css';\nimport { TransactionEventTypeEnums } from '../../../../enums/unitySystemEnums';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport UdpTransactionCustomPage from '../components/UdpTransactionCustomPage';\n\nconst TransactionActionButton = ({\n icon,\n primaryText,\n secondaryText,\n onClick,\n action\n}) => {\n const actionCardIcon = useMemo(() => getIconFromName(icon), [icon]);\n\n return (\n <UdpActionCard\n icon={actionCardIcon ? actionCardIcon : DocumentIcon}\n primaryText={primaryText}\n secondaryText={secondaryText}\n onClick={() => {\n onClick(action);\n }}\n />\n );\n};\n\nconst WorkflowActions = ({ transaction, closeSideSheet, refreshGridData }) => {\n const [dialogOpen, setDialogOpen] = useState(true);\n const [dialogUserStrings, setDialogUserStrings] = useState(null);\n const [selectedAction, setSelectedAction] = useState(null);\n const [sideSheetOpen, setSideSheetOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const formRef = useRef(null);\n\n const { getTransactionTypeTransactionActions } = useTransactionEngine(\n transaction.transactionTypeId\n );\n\n const handleOnCloseSideSheet = useCallback(() => {\n setSideSheetOpen(false);\n }, []);\n\n const handleSubmitWorkflowAction = useCallback(async () => {\n setLoading(true);\n await formRef.current?.form?.submit();\n setLoading(false);\n handleOnCloseSideSheet();\n closeSideSheet();\n refreshGridData();\n }, [handleOnCloseSideSheet, refreshGridData, closeSideSheet, formRef]);\n\n const transactionTypeTransactionActions = useMemo(() => {\n return (\n getTransactionTypeTransactionActions(\n transaction,\n TransactionEventTypeEnums.Sidesheet\n ) || []\n );\n }, [getTransactionTypeTransactionActions, transaction]);\n\n // Base URL and url get overwritten in postTransactionData function call in handleConfirmActionDialog()\n const [{ data: transactionData }, postTransactionData] = useAxiosMutate(\n `${ConfigService.productV1ApiUrl}`,\n 'udptransactiontypeTransactionAction',\n {\n method: 'post'\n },\n {}\n );\n\n const i18n = useTranslation().t;\n const { enqueueSnackbar } = useSnackbar();\n\n const handleDialogOpen = useCallback((title, message) => {\n setDialogUserStrings({ title, message });\n setDialogOpen(true);\n }, []);\n\n const handleDialogClose = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const handleConfirmActionDialog = useCallback(async () => {\n setDialogOpen(true);\n handleDialogClose();\n setLoading(true);\n try {\n const data = await postTransactionData({\n // Change URL to config\n url:\n `${ConfigService.productV1ApiUrl}` +\n `/udptransactiontypeTransactionAction/${selectedAction.transactionTypeTransactionActionId}/transaction/${transaction.transactionId}/submit`,\n data: {}\n });\n enqueueSnackbar(i18n('Successfully submitted!'), {\n variant: 'success',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n closeSideSheet();\n refreshGridData();\n } catch (event) {\n enqueueSnackbar(i18n(event.message), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n setLoading(false);\n }, [\n postTransactionData,\n handleDialogClose,\n transaction,\n selectedAction,\n enqueueSnackbar,\n i18n,\n closeSideSheet,\n refreshGridData\n ]);\n const handleOnActionClick = useCallback(\n (action) => {\n const pageId = action.parameters.pageId;\n setSelectedAction(action);\n if (pageId) {\n setSideSheetOpen(true);\n } else {\n handleDialogOpen(action.name, action.description);\n }\n },\n [handleDialogOpen]\n );\n\n const TransactionActionButtons = useMemo(() => {\n if (!transactionTypeTransactionActions.length) {\n return null;\n }\n return transactionTypeTransactionActions?.map((action) => (\n <TransactionActionButton\n key={action.transactionTypeTransactionActionId}\n primaryText={action.name}\n secondaryText={action.description}\n icon={action.icon}\n onClick={handleOnActionClick}\n action={action}\n />\n ));\n }, [transactionTypeTransactionActions, handleOnActionClick]);\n\n return (\n <>\n <div className='transaction-action-buttons-container'>\n {TransactionActionButtons}\n </div>\n\n {dialogUserStrings && (\n <FluentDialog\n title={i18n(\n `Are you sure you want to proceed with \\\"${dialogUserStrings.title}\\\"?`\n )}\n message={dialogUserStrings.message}\n labelOne={i18n('Confirm')}\n actionOne={handleConfirmActionDialog}\n labelTwo={i18n('Cancel')}\n actionTwo={handleDialogClose}\n open={dialogOpen}\n handleClose={handleDialogClose}\n />\n )}\n\n <SideSheet\n open={sideSheetOpen}\n title={selectedAction?.name} // To Change\n onClose={handleOnCloseSideSheet}\n width={600}\n buttonLabel={i18n('Submit')}\n onSubmit={handleSubmitWorkflowAction}\n progress={loading}\n variant='indeterminate'\n >\n {selectedAction && selectedAction.parameters?.pageId && (\n <UdpTransactionCustomPage\n pageId={selectedAction.parameters.pageId}\n transaction={transaction}\n formRef={formRef}\n transactionTypeTransactionActionId={\n selectedAction.transactionTypeTransactionActionId\n }\n />\n )}\n </SideSheet>\n </>\n );\n};\n\nexport default WorkflowActions;\n","export const MAX_FILE_SIZE_MB = 30;\n\nexport const allowedExtensions = [\n \"pdf\",\n \"xlsx\",\n \"xls\",\n \"xlsm\",\n \"csv\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"tif\",\n \"tiff\",\n \"doc\",\n \"docx\",\n \"docm\",\n \"ppt\",\n \"pptm\",\n \"rtf\"\n];\n","import React from 'react';\nimport { StatusChip } from '../../../../UI/dataDisplay/status';\nimport { Typography } from '../../../../UI/dataDisplay/typography';\nimport './EditTransaction.css';\n\nconst EditTransactionHeaderItem = (props) => {\n const { label, value, statusChip } = props;\n return (\n <div className='transaction-sidesheet-header-item'>\n <Typography variant='caption'>{label}</Typography>\n {statusChip ? (\n <div className='transaction-sidesheet-header-item-status'>\n <StatusChip {...statusChip} />\n </div>\n ) : (\n <Typography variant='body1'>{value}</Typography>\n )}\n </div>\n );\n};\n\nexport default EditTransactionHeaderItem;\n","import React from 'react';\nimport {\n UdpTimelineItem,\n UdpTimelineConnector,\n UdpTimelineDot,\n UdpTimelineSeparator\n} from 'udp-react-stencil-component-library';\n\nexport const TransactionTimelineItem = (props) => {\n const {\n title,\n description,\n date,\n status,\n onClick\n } = props;\n\n return (\n <UdpTimelineItem\n dotShape='default'\n onItemClick={onClick}\n clickable\n statusLabel={status}\n >\n <UdpTimelineSeparator slot='separator'>\n <UdpTimelineConnector />\n <UdpTimelineDot color='primary' shape='default' size='medium'>\n </UdpTimelineDot>\n </UdpTimelineSeparator>\n <span slot='title'>{title}</span>\n <span slot='content'>{date}</span>\n <span slot='caption'>{description}</span>\n </UdpTimelineItem>\n );\n};\n","import React, { useEffect, useMemo } 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 = (props) => {\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 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={item?.udpTransactionHistoryUdpTransactionTypeStatus?.name}\n />\n ))}\n </UdpTimeline>\n </AmbientCard>\n ) : (\n <div>\n <EmptyStateDisplay primaryText={t('No History')} />\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionTimeline;\n","import React from 'react';\nimport { ConfigService, UdpAttachmentItem } from 'udp-react-stencil-component-library';\nimport { useAxiosGet } from '../../../../../utilities';\n\nexport const TransactionAttachment = (props) => {\n const { attachment, isLastItem } = props;\n\n const [{ data: attachmentWithDownloadLink, loading: isLoading }] =\n useAxiosGet(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${attachment?.transactionAttachmentId}/udpDriveFile/download`,\n {},\n !!!attachment?.transactionAttachmentId\n );\n\n return (\n <UdpAttachmentItem\n loading={isLoading}\n fileName={attachment?.fileName}\n fileSize={attachment?.fileSize}\n fileExtension={attachment?.extension}\n uploadedBy={attachment?.updatedByName}\n uploadedDate={attachment?.lastUpdated}\n isLastItem={isLastItem}\n downloadUrl={attachmentWithDownloadLink?.link}\n />\n );\n};\n","import React from 'react';\nimport { AmbientCard } from '../../../../../UI/surfaces/cards/AmbientCard';\nimport { EmptyStateDisplay } from '../../../../../UI';\nimport { useTranslation } from 'react-i18next';\nimport { TransactionAttachment } from './TransactionAttachment';\nimport { LinearProgress } from '@material-ui/core';\n\nexport const TransactionAttachments = (props) => {\n const { transactionAttachments, isLoading } = props;\n const { t } = useTranslation();\n\n return (\n <div>\n {isLoading ? (\n <LinearProgress />\n ) : transactionAttachments?.pageList?.length > 0 ? (\n <AmbientCard fullWidth>\n {transactionAttachments.pageList.map((attachment, index) => (\n <TransactionAttachment\n key={index}\n attachment={attachment}\n isLastItem={index === transactionAttachments.pageList.length - 1}\n />\n ))}\n </AmbientCard>\n ) : (\n <div>\n <EmptyStateDisplay primaryText={t('No Attachments')} />\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { AmbientCard } from '../../../../../UI/surfaces/cards/AmbientCard';\nimport { Typography } from '../../../../../UI/dataDisplay/typography';\nimport { StatusChip } from '../../../../../UI/dataDisplay/status';\nimport { makeStyles } from '@material-ui/core';\nimport { Adornment } from '../../../../../UI';\nimport { getLocalizedDateTimeString } from '../../../../../UI/widgets/utils/dateUtils';\nimport { ContactIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n titleContainer: {\n display: 'flex',\n gap: '8px',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n chipContainer: {\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n marginTop: theme.spacing(1)\n },\n card: {\n width: '100%',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)'\n },\n padding: '8px 12px',\n border: '1px solid rgba(0, 0, 0, 0.08)'\n },\n captionText: {\n color: theme.palette.text.hint\n }\n}));\n\nexport const TransactionNote = (props) => {\n const { onClick, note } = props;\n const classes = useStyles();\n\n return (\n <div>\n <AmbientCard\n fullWidth\n adornment='info'\n noAdornment={false}\n customAdornment={<Adornment color={'info'} />}\n removeTopLayoutUnit\n removePadding\n lastChildBottomPadding={'0px'}\n cardContentHeight={'100%'}\n >\n <div className={classes.card} onClick={onClick}>\n <div className={classes.titleContainer}>\n <Typography variant='h6'>\n {note?.subject ?? 'Transaction Note'}\n </Typography>\n <Typography variant='caption' className={classes.captionText}>\n {getLocalizedDateTimeString(note?.createdOn)}\n </Typography>\n </div>\n <Typography variant='body1'>\n {note?.content ??\n 'This is a placeholder for the transaction note component.'}\n </Typography>\n\n <div className={classes.chipContainer}>\n <StatusChip\n label={note?.userDisplayName}\n color='default'\n variant='outline'\n icon={<ContactIcon />}\n />\n </div>\n </div>\n </AmbientCard>\n </div>\n );\n};\n","import React, { forwardRef, useCallback, useState } from 'react';\nimport { LinearProgress } from '../../../../../UI';\nimport { Form, Field } from '../../../../../utilities/form';\nimport { FluentTextField } from '../../../../../UI/inputs/textField/FluentTextField';\nimport { FluentTextFieldAutoComplete } from '../../../../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { Typography } from '../../../../../UI/dataDisplay/typography';\nimport { apiMutate } from '../../../../../utilities/useAxiosMutate';\nimport { ConfigService } from '../../../../../configService';\nimport { useAuthedUser } from '../../../../../utilities/auth';\nimport { useHandleAxiosSnackbar } from '../../../../../utilities';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n loading: {\n marginBottom: theme.spacing(1)\n }\n}));\n\nconst TransactionNoteFormComponent = (props, ref) => {\n const {\n initialValues,\n viewOnly,\n businessObjectKey,\n closeSideSheet,\n noteTypes,\n fetchNoteTypesLoading\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const user = useAuthedUser();\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const classes = useStyles();\n\n // TODO: create a new api to include both\n const addTransactionNote = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpNote`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const addNoteFiledFor = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpNoteFiledFor`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const handleSubmitForm = useCallback(\n async (values) => {\n setIsLoading(true);\n const formattedValues = {\n typeCode: values?.noteType?.code,\n subject: values?.subject,\n content: values?.content,\n unityUserID: user?.id,\n userDisplayName: user?.name ?? ''\n };\n\n await addTransactionNote({\n data: formattedValues\n })\n .then(async (res) => {\n console.log('Transaction Note response: ', { res });\n if (res?.data?.id) {\n await addNoteFiledFor({\n data: {\n entityBusinessKey: businessObjectKey,\n noteId: res?.data?.id\n }\n }).then(() => {\n handleSuccessSnackbar(\n t('Transaction note has been added successfully.')\n );\n if (closeSideSheet) {\n closeSideSheet();\n }\n });\n }\n })\n .catch((res) => {\n handleErrorSnackbar(res, t('Unable to add transaction note.'));\n });\n setIsLoading(false);\n },\n [\n addNoteFiledFor,\n addTransactionNote,\n businessObjectKey,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n user,\n closeSideSheet\n ]\n );\n\n return (\n <div>\n {fetchNoteTypesLoading ? (\n <div>\n <LinearProgress />\n </div>\n ) : (\n <div>\n {isLoading && (\n <div className={classes.loading}>\n <LinearProgress />\n </div>\n )}\n <Form\n ref={ref}\n onSubmit={handleSubmitForm}\n initialValues={initialValues}\n id={`transactionNoteForm-${businessObjectKey}`}\n render={({ submitting }) => (\n <>\n <Field\n component={FluentTextFieldAutoComplete}\n id='noteType'\n name='noteType'\n optionKey='name'\n disableClearable\n label={t('Type')}\n options={noteTypes ?? []}\n disabled={viewOnly || submitting}\n onChange={() => {}}\n required\n />\n\n <Field\n component={FluentTextField}\n id='subject'\n name='subject'\n label={t('Subject')}\n disabled={viewOnly || submitting}\n onChange={() => {}}\n required\n />\n <Field\n component={FluentTextField}\n id='content'\n name='content'\n label={t('Details')}\n onChange={() => {}}\n multiline\n rows={5}\n maxRows={10}\n disabled={viewOnly || submitting}\n required\n />\n {viewOnly && (\n <Typography variant='caption'>\n {t(\n 'Viewing note details. Use the Add Note action to create a new entry.'\n )}\n </Typography>\n )}\n </>\n )}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport const TransactionNoteForm = forwardRef(TransactionNoteFormComponent);\n","import React, { useCallback, useState, useMemo, useEffect } from 'react';\nimport { ConfigService } from '../../../../../configService';\nimport {\n EmptyStateDisplay,\n LinearProgress,\n SideSheet\n} from '../../../../../UI';\nimport { TransactionNote } from './TransactionNote';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@material-ui/core';\nimport {\n apiMutate,\n useAxiosMutate\n} from '../../../../../utilities/useAxiosMutate';\nimport { TransactionNoteForm } from './TransactionNoteForm';\n\nconst useStyles = makeStyles((theme) => ({\n notes: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1)\n }\n}));\n\nexport const TransactionNotes = (props) => {\n const {\n businessObjectKey,\n refreshNotes,\n setRefreshNotes,\n noteTypes,\n fetchNoteTypesLoading\n } = props;\n const [openSideSheet, setOpenSideSheet] = useState(false);\n const [selectedNote, setSelectedNote] = useState(null);\n const [noteList, setNoteList] = useState([]);\n const classes = useStyles();\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(false);\n\n const noteFileForSearchObj = useMemo(() => {\n return {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n filterElements: [\n {\n searchField: 'entityBusinessKey',\n searchValue: businessObjectKey,\n searchOperator: '='\n }\n ],\n getAll: true\n };\n }, [businessObjectKey]);\n\n const [\n { data: noteFiledFor, loading: fetchNoteFiledForLoading },\n fetchNoteFiledFor\n ] = useAxiosMutate(ConfigService.productV1ApiUrl, `UdpNoteFiledFor/search`, {\n method: 'post',\n data: noteFileForSearchObj\n });\n\n const handleViewNote = useCallback((note) => {\n setSelectedNote(note);\n setOpenSideSheet(true);\n }, []);\n\n const handleCloseSideSheet = useCallback(() => {\n setOpenSideSheet(false);\n setSelectedNote(null);\n }, []);\n\n useEffect(() => {\n fetchNoteFiledFor();\n }, [fetchNoteFiledFor]);\n\n useEffect(() => {\n if (refreshNotes) {\n fetchNoteFiledFor();\n // eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-data-to-parent\n setRefreshNotes(false);\n }\n }, [fetchNoteFiledFor, refreshNotes, setRefreshNotes]);\n\n useEffect(() => {\n if (!fetchNoteFiledForLoading && noteFiledFor?.pageList?.length > 0) {\n // eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-data-to-parent\n const noteIds = noteFiledFor?.pageList\n ?.map((obj) => obj?.noteID)\n .join(',');\n\n const searchObj = {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n filterElements: [\n {\n searchField: 'iD',\n searchValue: noteIds,\n searchOperator: 'IN'\n }\n ],\n getAll: true\n };\n\n setIsLoading(true);\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpNote/search`,\n {\n method: 'post',\n data: searchObj\n },\n {}\n )\n .then((resp) => {\n if (resp && resp.data) {\n setNoteList(resp.data?.pageList);\n } else {\n setNoteList([]);\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setNoteList([]);\n }\n }, [fetchNoteFiledForLoading, noteFiledFor, setIsLoading]);\n\n return (\n <div>\n <div className={classes.notes}>\n {isLoading || fetchNoteFiledForLoading ? (\n <div>\n <LinearProgress />\n </div>\n ) : noteList?.length > 0 ? (\n noteList.map((note, index) => (\n <TransactionNote\n key={index}\n note={note}\n onClick={() => handleViewNote(note)}\n />\n ))\n ) : (\n <div>\n <EmptyStateDisplay primaryText='No Notes' />\n </div>\n )}\n </div>\n\n <SideSheet\n title={t('View Note')}\n width={600}\n open={openSideSheet}\n onClose={handleCloseSideSheet}\n >\n <div>\n <TransactionNoteForm\n initialValues={selectedNote}\n businessObjectKey={businessObjectKey}\n viewOnly\n noteTypes={noteTypes}\n fetchNoteTypeLoading={fetchNoteTypesLoading}\n />\n </div>\n </SideSheet>\n </div>\n );\n};\n","export enum TRANSACTION_TAB {\n DETAILS = 0,\n HISTORY,\n ATTACHMENTS,\n NOTES\n}\n","import React from 'react';\nimport { FluentButton } from '../../../../UI/inputs/buttons';\nimport { useTranslation } from 'react-i18next';\nimport './EditTransactionDetailsFooterItem.css';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\n\nconst EditTransactionDetailsFooterItem = (props) => {\n const {\n transactionTypeId,\n transactionIsClosed,\n handleOnCancel,\n handleOnSaveChanges\n } = props;\n const { hasRevisions } = useTransactionEngine(transactionTypeId);\n const { t } = useTranslation();\n return (\n <div className='transaction-details-footer-item'>\n <FluentButton color='primary' onClick={handleOnCancel}>\n {t('Cancel')}\n </FluentButton>\n {!transactionIsClosed && (\n <FluentButton\n variant='contained'\n color='primary'\n onClick={handleOnSaveChanges}\n >\n {t('Save Changes')}\n </FluentButton>\n )}\n </div>\n );\n};\n\nexport default EditTransactionDetailsFooterItem;\n","import React from 'react';\nimport { Field } from '../../../../utilities/form';\nimport {\n AmbientAutoComplete,\n AmbientTextField,\n} from '../../../../UI/inputs/textField';\nimport { FormControlLabel, Switch } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\n\n\nconst EditTransactionDetailsFormFields = (props) => {\n const { transaction, fieldAttributes } = props;\n const { t } = useTranslation();\n\n const { getHiddenFields, getRequiredFields } = useTransactionEngine(\n transaction.transactionTypeId\n );\n\n const fieldComponentMap = {\n string: AmbientTextField,\n datetime: AmbientTextField,\n number: AmbientTextField,\n bool: Switch,\n array: AmbientAutoComplete\n };\n\n const getEntityName = (optionValuesArr, entityId) => {\n const matchingEntity = optionValuesArr?.find(\n (entity) => entity.id == entityId\n );\n return matchingEntity?.name;\n };\n\n const numberDataTypes = ['int', 'short', 'long'];\n\n const removeTimeFormatDate = (date) => {\n const parsedDate = new Date(date);\n if (parsedDate.getTime()) {\n const year = parsedDate.getFullYear();\n //Month is zero based 0 = Jan so need to add 1\n const month = parsedDate.getMonth() + 1;\n const day = parsedDate.getDate().toString().padStart(2, '0');\n return `${year}-${month.toString().padStart(2, '0')}-${day}`;\n }\n return parsedDate;\n };\n\n const dataTypeComponentMap = (transaction, attribute) => {\n const fieldName = attribute.name;\n let fieldDataType = attribute.type.toLowerCase();\n fieldDataType = numberDataTypes.includes(fieldDataType) ? \"number\" : fieldDataType\n const isAsscoiationLabel = attribute.associationLabel;\n let fieldComponentProps = null;\n switch (fieldDataType) {\n case 'number':\n fieldComponentProps = {\n initialValue: transaction.entityBusinessObject[fieldName],\n type: 'number',\n InputProps: { inputProps: { min: 0 } }\n };\n break;\n case 'datetime':\n fieldComponentProps = {\n initialValue: removeTimeFormatDate(transaction.entityBusinessObject[fieldName]),\n type: \"date\"\n };\n break;\n case 'array':\n fieldComponentProps = {\n options: attribute?.options?.map((option) => option.id),\n getOptionLabelFunction: (option) =>\n getEntityName(attribute?.options, option) || option,\n initialValue: transaction.entityBusinessObject[fieldName]\n };\n\n break;\n case 'bool':\n fieldComponentProps = {\n type: 'checkbox',\n initialValue: false\n };\n break;\n default:\n fieldComponentProps = {\n initialValue: transaction.entityBusinessObject[fieldName]\n };\n }\n const formLabel = isAsscoiationLabel ? fieldName + ' Name' : fieldName;\n const isRequired = getRequiredFields(transaction).includes(fieldName) || attribute.required;\n const isHidden = getHiddenFields(transaction).includes(fieldName) || attribute.isPrimaryKey || !attribute.extendedProperties.defaultVisible\n\n let fieldComponent = (\n <Field\n component={fieldComponentMap[fieldDataType] ?? AmbientTextField}\n label={t(formLabel)}\n name={fieldName}\n fullWidth\n variant='outlined'\n margin='normal'\n disabled={attribute.isReadOnly}\n required={isRequired && fieldDataType != 'bool'}\n {...fieldComponentProps}\n />\n );\n return (\n <>\n { !isHidden &&\n (fieldDataType == 'bool' ? (\n <FormControlLabel control={fieldComponent} label={formLabel} />\n ) : (\n fieldComponent\n ))\n }\n </>\n );\n };\n\n return (\n <>\n {fieldAttributes.map((attribute) => {\n return <>{dataTypeComponentMap(transaction, attribute)}</>;\n })}\n </>\n );\n};\n\nexport default EditTransactionDetailsFormFields;\n","import React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport { apiMutate, useAxiosGet, useAxiosMutate } from '../../../../utilities';\nimport { getSanitizedName } from '../../../../utilities/entities/entityUtilities';\nimport { Form } from '../../../../utilities/form';\nimport { CardinalityTypeEnums } from '../../../../enums';\nimport DetailsFormFields from './EditTransactionDetailsFormFields';\nimport { AmbientCard } from '../../../../UI/surfaces/cards/AmbientCard';\nimport { LinearProgress } from '@material-ui/core';\nimport { useHandleAxiosSnackbar } from '../../../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from '../../../../configService';\nimport { useCatalogStore } from '../../../../../src/stores/catalogStore';\n\nconst EditTransactionDetailsForm = (props) => {\n const { transaction, formRef } = props;\n const [entityAttributes, setEntityAttributes] = useState(null);\n\n const fullyQualifiedName = transaction.entityBusinessKey?.split('|')[0];\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n\n const { currentApiCatalogId, catalogsMap } = useCatalogStore();\n\n const catalogObjectList = useMemo(() => {\n if (\n catalogsMap &&\n currentApiCatalogId &&\n catalogsMap[currentApiCatalogId]\n ) {\n return catalogsMap[currentApiCatalogId]?.ctlg?.catalogObjectList;\n }\n }, [catalogsMap, currentApiCatalogId]);\n\n const [{ data: udpObjectInfo }, fetchUdpObjectInfo] = useAxiosMutate(\n ConfigService.productV1ApiUrl,\n `UdpObjectInfo/search`,\n {\n method: 'post',\n data: {\n eagerLoad: true,\n pageNumber: 1,\n pageSize: 50,\n filterElements: [\n {\n searchField: 'sanitizedName',\n searchOperator: '=',\n searchValue: getSanitizedName(fullyQualifiedName)\n }\n ]\n }\n }\n );\n\n const updateFieldInfo = (\n tableEntries,\n catalogObjectFieldInfo,\n fkFieldInfo,\n fkDomainName\n ) => {\n let updatedFields = {\n type: 'array',\n options: tableEntries,\n domainName: fkDomainName\n };\n const updatedFieldInfo = { ...fkFieldInfo, ...updatedFields };\n const index = catalogObjectFieldInfo.findIndex(\n (f) => f.name.toLowerCase() === fkFieldInfo.name.toLowerCase()\n );\n if (index != -1) {\n catalogObjectFieldInfo[index] = updatedFieldInfo;\n }\n };\n\n const mergeCatalogObjectInfoFieldInfo = useCallback(\n (entityCatalogObjectInfo, filteredEntityFieldInfo) => {\n let catalogObjectFieldInfoCombo = entityCatalogObjectInfo.map(\n (entityCatalogObject) => {\n let matchingEntityFieldInfo = filteredEntityFieldInfo.find(\n (fieldInfo) => {\n let formattedFieldName =\n fieldInfo.name.slice(0, 1).toLowerCase() +\n fieldInfo.name.slice(1);\n if (fieldInfo.name == 'ID') {\n formattedFieldName = formattedFieldName.toLowerCase();\n }\n\n return formattedFieldName == entityCatalogObject.name;\n }\n );\n if (matchingEntityFieldInfo) {\n let additional_fields = {\n hidden:\n matchingEntityFieldInfo.properties.maintainenceConfig.hidden,\n associationLabel:\n matchingEntityFieldInfo.properties.maintainenceConfig\n .associationLabel,\n isPrimaryKey: matchingEntityFieldInfo.isPrimaryKey\n };\n return {\n ...entityCatalogObject,\n ...additional_fields\n };\n } else {\n return entityCatalogObject;\n }\n }\n );\n\n return catalogObjectFieldInfoCombo;\n },\n []\n );\n\n const filterOutManyToManyRelationships = (CatalogObjectInfo) => {\n let entityCatalogObjectInfo = CatalogObjectInfo.filter((catalogObject) => {\n const cardinality =\n catalogObject.extendedProperties?.childEntityAssoc?.Cardinality;\n if (cardinality != undefined) {\n return (\n cardinality != CardinalityTypeEnums.Many_To_Many &&\n cardinality != CardinalityTypeEnums.One_To_One &&\n catalogObject.name.toLowerCase() != 'businessobjectkey'\n );\n } else {\n return catalogObject.name.toLowerCase() != 'businessobjectkey';\n }\n });\n return entityCatalogObjectInfo;\n };\n\n const updateFkFields = useCallback(\n async (entityCatalogObjectInfo, catalogObjectInfo) => {\n const childEntityAssociation =\n catalogObjectInfo.extendedProperties.childEntityAssoc;\n const cardinality = childEntityAssociation.Cardinality;\n if (cardinality != undefined) {\n const foreignKeyAssociationFields =\n childEntityAssociation.Keys[0].split(',');\n let fieldsInAssociationToIgnore = [\n 'id',\n 'businessobjectkey',\n 'entitybusinesskey'\n ];\n return Promise.all(\n foreignKeyAssociationFields.map(async (fkFieldName) => {\n if (\n fkFieldName.toLowerCase() != 'id' &&\n !fieldsInAssociationToIgnore.includes(fkFieldName.toLowerCase())\n ) {\n let fkFieldInfo = entityCatalogObjectInfo.find(\n (field) => field.name.toLowerCase() == fkFieldName.toLowerCase()\n );\n const fkDomainName = getSanitizedName(\n childEntityAssociation.TargetType\n );\n try {\n const getTableEntriesResp = await apiMutate(\n ConfigService.productV1ApiUrl,\n `${fkDomainName}`,\n { method: 'get' }\n );\n\n if (getTableEntriesResp.data.length > 0 && fkFieldInfo) {\n updateFieldInfo(\n getTableEntriesResp.data,\n entityCatalogObjectInfo,\n fkFieldInfo,\n fkDomainName\n );\n }\n } catch (error) {\n handleErrorSnackbar(\n new Error(\n t(`Error finiding field information! Please try again.`)\n )\n );\n }\n }\n })\n );\n }\n },\n [handleErrorSnackbar, t]\n );\n\n const filterAdjustEntityAttributes = useCallback(\n async (catalogObjectInfo) => {\n let entityCatalogObjectInfo = catalogObjectInfo;\n\n entityCatalogObjectInfo = filterOutManyToManyRelationships(\n entityCatalogObjectInfo\n );\n\n const entityObjectInfoResponse = await fetchUdpObjectInfo();\n const entityObjectInfo = entityObjectInfoResponse.data.pageList[0];\n let filteredEntityFieldInfo = entityObjectInfo.objectFieldInfo.filter(\n (fieldInfo) => fieldInfo.properties.isDefaultVisible\n );\n\n await Promise.all(\n entityCatalogObjectInfo.map((catalogObjectInfo) => {\n return updateFkFields(entityCatalogObjectInfo, catalogObjectInfo);\n })\n );\n\n entityCatalogObjectInfo = entityCatalogObjectInfo.filter(\n (catalogObject) => !catalogObject.extendedProperties.childEntity\n );\n\n let mergedFieldInfo = mergeCatalogObjectInfoFieldInfo(\n entityCatalogObjectInfo,\n filteredEntityFieldInfo\n );\n return mergedFieldInfo;\n },\n [fetchUdpObjectInfo, mergeCatalogObjectInfoFieldInfo, updateFkFields]\n );\n\n useEffect(() => {\n if (catalogObjectList) {\n let domainName = transaction.entityBusinessKey\n .split('|')[0]\n .split('.')\n .pop();\n let domainCatalogObject = catalogObjectList?.find(\n (catalogObject) =>\n getSanitizedName(catalogObject.catalogObjectName) == domainName\n );\n if (domainCatalogObject) {\n filterAdjustEntityAttributes(domainCatalogObject.properties).then(\n (filteredResp) => {\n setEntityAttributes(filteredResp);\n }\n );\n }\n }\n }, [filterAdjustEntityAttributes, catalogObjectList, transaction]);\n\n const executeSaveChanges = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${transaction?.transactionId}/saveChanges`,\n {\n method: 'put'\n },\n data\n ),\n [transaction.transactionId]\n );\n\n const onSubmit = useCallback(\n async (values) => {\n const saveChangesResponse = await executeSaveChanges({ data: values });\n if (saveChangesResponse?.status === 200) {\n handleSuccessSnackbar(t('Transaction has been saved successfully'));\n } else {\n handleErrorSnackbar(\n new Error(t(`Error saving Transaction. Please try again later.`))\n );\n }\n },\n [executeSaveChanges, handleSuccessSnackbar, handleErrorSnackbar, t]\n );\n\n const fieldAttributes = useMemo(() => {\n if (!entityAttributes) {\n return [];\n }\n return entityAttributes;\n }, [entityAttributes]);\n\n return fieldAttributes.length == 0 ? (\n <LinearProgress />\n ) : (\n <AmbientCard>\n <Form onSubmit={onSubmit} ref={formRef}>\n <DetailsFormFields\n transaction={transaction}\n fieldAttributes={fieldAttributes}\n />\n </Form>\n </AmbientCard>\n );\n};\n\nexport default EditTransactionDetailsForm;\n","import React, {\n useState,\n useRef,\n useCallback,\n useMemo,\n useEffect\n} from 'react';\n\nimport { Divider, SideSheet, UdpTabPanel } from '../../../../UI';\nimport { UdpTabs } from '../../../../UI/navigation/tabs/UdpTabs';\nimport { useTranslation } from 'react-i18next';\nimport {\n allowedExtensions,\n MAX_FILE_SIZE_MB\n} from '../../../../uploader/utils/allowedFileProperties';\n\nimport './EditTransaction.css';\nimport EditTransactionHeaderItem from './EditTransactionHeaderItem';\nimport { FluentButton } from '../../../../UI/inputs/buttons';\nimport WorkflowActions from './WorkflowActions';\nimport { TransactionTimeline } from '../components/transactionHistory/TransactionTimeline';\nimport { TransactionAttachments } from '../components/transactionAttachment/TransactionAttachments';\nimport { TransactionNotes } from '../components/transactionNote/TransactionNotes';\nimport { TRANSACTION_TAB } from './enum';\nimport { TransactionUiActionTypeEnums } from '../../../../enums';\nimport UdpTransactionCustomPage from '../components/UdpTransactionCustomPage';\nimport EditTransactionDetailsFooterItem from '../components/EditTransactionDetailsFooterItem';\nimport { ConfigService } from '../../../../configService';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport EditTransactionDetailsForm from '../components/EditTransactionDetailsForm';\nimport { Attachments } from '../../../../uploader';\nimport { apiMutate, useAxiosGet, useAxiosMutate } from '../../../../utilities';\nimport { useSnackbar } from 'notistack';\nimport { TransactionNoteForm } from '../components/transactionNote/TransactionNoteForm';\nimport { FluentIcon } from '../../../../utilities/iconLibrary';\nimport { AddIcon } from '@fluentui/react-icons';\n\nconst EditTransaction = (props) => {\n const {\n transaction: initialTransaction,\n transactionTypeId,\n transactionIsClosed,\n openInnerSidesheetState,\n setOpenInnerSidesheetState,\n refreshGridData,\n closeSideSheet,\n setSidesheetLoading\n } = props;\n const { t } = useTranslation();\n\n const [selectedTab, setSelectedTab] = useState(0);\n const [transaction, setTransaction] = useState(initialTransaction);\n const [transactionAttachments, setTransactionAttachments] = useState([]);\n const [filePreview, setFilePreview] = useState(false);\n const [currentAttachments, setCurrentAttachments] = useState([]);\n const [attachmentType, setAttachmentType] = useState(null);\n const [attachmentProgress, setAttachmentProgress] = useState(false);\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 }\n setSidesheetLoading(false);\n }, [initialTransaction.transactionId, setSidesheetLoading]);\n\n const formRef = useRef(null);\n const transactionNoteFormRef = useRef(null);\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 [{ 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: transaction.transactionTypeId,\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 }, [fetchTransactionAttachments, enqueueSnackbar, refetchTransaction]);\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 ]);\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 ]\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 useEffect(() => {\n if (!transactionAttachmentTypes) {\n setAttachmentProgress(true);\n fetchTransactionAttachmentType().then(() => {\n setAttachmentProgress(false);\n });\n }\n }, [fetchTransactionAttachmentType, transactionAttachmentTypes]);\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 />\n ) : (\n <EditTransactionDetailsForm\n transaction={transaction}\n formRef={formRef}\n />\n )}\n </UdpTabPanel>\n\n <UdpTabPanel value={selectedTab} index={TRANSACTION_TAB.HISTORY}>\n <TransactionTimeline transactionId={transaction?.transactionId} />\n </UdpTabPanel>\n <UdpTabPanel\n value={selectedTab}\n index={TRANSACTION_TAB.ATTACHMENTS}\n >\n <TransactionAttachments\n transactionAttachments={transactionAttachmentsData}\n isLoading={fetchTransactionAttachmentsLoading}\n />\n </UdpTabPanel>\n <UdpTabPanel value={selectedTab} index={TRANSACTION_TAB.NOTES}>\n <TransactionNotes\n businessObjectKey={transaction?.businessObjectKey}\n refreshNotes={refreshNotes}\n setRefreshNotes={setRefreshNotes}\n noteTypes={noteTypes}\n fetchNoteTypeLoading={fetchNoteTypesLoading}\n />\n </UdpTabPanel>\n </div>\n </div>\n {selectedTab == TRANSACTION_TAB.DETAILS && (\n <div className='edit-transaction-sidesheet-footer'>\n <EditTransactionDetailsFooterItem\n transactionTypeId={transactionTypeId}\n transactionIsClosed={transactionIsClosed}\n handleOnCancel={closeSideSheet}\n handleOnSaveChanges={handleSaveChanges}\n />\n </div>\n )}\n </div>\n\n {openInnerSidesheetState &&\n // eslint-disable-next-line react-hooks/refs\n innerSidesheetList.map((item) => {\n return (\n <SideSheet\n key={item.title}\n open={item.open}\n width={600}\n title={item.title}\n onClose={item.closeSheet}\n buttonLabel={item?.buttonLabel}\n buttonOneDisabled={item?.buttonOneDisabled}\n buttonTwoLabel={item?.buttonTwoLabel}\n buttonTwoAction={item?.buttonTwoAction}\n onSubmit={item?.onSubmit}\n color='primary'\n >\n {item.children}\n </SideSheet>\n );\n })}\n </>\n );\n};\n\nexport default EditTransaction;\n","import React, { useState, useMemo, useRef, useCallback } 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 } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { useHandleAxiosSnackbar } from '../../../utilities';\nimport { useTranslation } from 'react-i18next';\nimport { FluentDialog } from '../../../UI';\nimport { PageContainer } from '../../../page/PageContainer';\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\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 attachmentRef = useRef();\n const sidesheetWidth = openStates?.width ?? 800;\n const transactionTypeEntry = transaction?.entityBusinessObject;\n\n const handleDialogClose = () => {\n setDialogOpen(false);\n };\n\n const executeCloseTransaction = useCallback(async () => {\n // setSidesheetLoading(true);\n const response = await apiMutate(\n ConfigService.productV1ApiUrl,\n `udpTransaction/${transaction?.transactionId}/closeTransaction`,\n {\n method: 'post'\n }\n );\n // setSidesheetLoading(false);\n if (response?.status === 200) {\n handleSidesheet('edit', false);\n refreshGridData();\n handleSuccessSnackbar(t(`Transaction has been closed successfully`));\n } else {\n handleErrorSnackbar(\n new Error(t(`Error closing Transaction. Please try again later.`))\n );\n }\n }, [\n transaction,\n refreshGridData,\n handleSidesheet,\n handleSuccessSnackbar,\n handleErrorSnackbar,\n t\n ]);\n\n const handleConfirmCloseTransactionDialog = useCallback(async () => {\n try {\n setClosingTransactionLoading(true);\n await executeCloseTransaction();\n } catch (error) {\n handleErrorSnackbar(error);\n } finally {\n setClosingTransactionLoading(false);\n handleDialogClose();\n }\n }, [executeCloseTransaction, handleErrorSnackbar]);\n\n const formattedBusinesskey = transactionTypeEntry?.businessObjectKey\n ?.split('|')\n ?.pop();\n\n const handleTransactionCreation = useCallback(async () => {\n setSidesheetLoading(true);\n await formRef.current?.form?.submit();\n setSidesheetLoading(false);\n handleSidesheet('add', false);\n refreshGridData();\n }, [handleSidesheet, refreshGridData, formRef]);\n\n const handleCreateRevision = useCallback(async () => {\n setSidesheetLoading(true);\n formRef.current?.form?.submit();\n setSidesheetLoading(false);\n handleSidesheet('createRevision', false);\n refreshGridData();\n }, [handleSidesheet, refreshGridData, formRef]);\n\n const pdfViewPageId = useMemo(() => {\n return getUiActionRenderPageId(\n TransactionUiActionTypeEnums.Render_View_Pdf_Page\n );\n }, [getUiActionRenderPageId]);\n\n const viewTransactionPage = useMemo(() => {\n if (pdfViewPageId) {\n return (\n <PageContainer pageId={pdfViewPageId} widgetParams={{ transaction }} />\n );\n } else {\n return <ViewTransaction transaction={transaction} />;\n }\n }, [transaction, pdfViewPageId]);\n\n const transactionIsClosed = useMemo(() => {\n return checkIfTransactionIsClosed(transaction);\n }, [checkIfTransactionIsClosed, transaction]);\n\n const transactionLabel = useMemo(() => {\n return getTransactionTypeLabel(transaction) ?? formattedBusinesskey;\n }, [getTransactionTypeLabel, transaction, formattedBusinesskey]);\n\n const sidesheetList = useMemo(() => {\n const list = [\n {\n open: openStates.addTransaction,\n closeSheet: () => handleSidesheet('add', false),\n title: domainName,\n width: sidesheetWidth,\n onSubmit: handleTransactionCreation,\n children: (\n <UdpTransactionCustomPage\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Create_Transaction_Page\n }\n formRef={formRef}\n />\n ),\n buttonLabel: 'Add'\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: () => handleSidesheet('edit', false),\n title: `Edit ${domainName} ${transactionLabel}`,\n width: sidesheetWidth,\n buttonLabel: 'Next Steps',\n buttonOneDisabled: transactionIsClosed,\n onSubmit: () =>\n setEditTransactionOpenInnerSidesheetState({ workflowAction: true }),\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={() => handleSidesheet('edit', false)}\n setSidesheetLoading={setSidesheetLoading}\n />\n )\n },\n {\n open: openStates.createRevision,\n closeSheet: () => handleSidesheet('createRevision', false),\n title: `Create Revision for ${domainName}`,\n width: sidesheetWidth,\n onSubmit: handleCreateRevision,\n children: (\n <UdpTransactionCustomPage\n transactionTypeId={transactionTypeId}\n transactionUiActionType={\n TransactionUiActionTypeEnums.Render_Create_Revision_Page\n }\n formRef={formRef}\n transaction={transaction}\n />\n ),\n buttonLabel: 'Create Revision'\n }\n ];\n return list;\n }, [\n openStates,\n handleSidesheet,\n handleAttachmentTransaction,\n transaction,\n domainName,\n editTransactionopenInnerSidesheetState,\n setEditTransactionOpenInnerSidesheetState,\n transactionLabel,\n refreshGridData,\n transactionTypeId,\n handleTransactionCreation,\n hasClosedStatus,\n handleCreateRevision,\n transactionIsClosed,\n viewTransactionPage,\n pdfViewPageId,\n sidesheetWidth\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={item?.buttonOneDisabled}\n buttonTwoDisabled={item?.buttonTwoDisabled}\n progress={sidesheetLoading}\n variant='indeterminate'\n >\n {sidesheetLoading && <LinearProgress />}\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 </>\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 UdpTransactionGrid from './UdpTransactionGrid';\nimport React, { useState, useRef, useEffect } 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';\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 initialFilterModel\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 [domainName, setDomainName] = useState(initialDomainName);\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\n const gridApiRef = useRef(null);\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 = (api) => {\n return (gridApiRef.current = api);\n };\n\n useEffect(() => {\n if (transactionType) {\n const splitDomainNameArr = transactionType.domainName.split('.');\n setDomainName(splitDomainNameArr.pop());\n }\n }, [transactionType]);\n\n if (!transactionType) {\n return (\n <div className='udp-transaction-page-loading'>\n <CircularProgress size={64} />\n </div>\n );\n }\n\n return (\n <>\n <UdpTransactionGrid\n transactionTypeId={transactionType?.transactionTypeId}\n transactionType={transactionType}\n domainName={domainName}\n transactionTypeLoading={transactionTypeLoading}\n searchMethodObject={searchMethodObject}\n domainColumnFormatters={domainColumnFormatters}\n openAddTransaction={() => {\n handleSidesheet('add', true);\n }}\n openViewTransaction={(transaction) => {\n handleSidesheet('view', true, transaction);\n }}\n openEditTransaction={(transaction) => {\n handleSidesheet('edit', true, transaction);\n }}\n openAttachmentTransaction={(transaction) => {\n handleSidesheet('attachment', true, transaction, 1000);\n }}\n openWorkflowActionTransaction={(transaction) => {\n handleSidesheet('action', true, transaction);\n }}\n openCreateRevision={(transaction) => {\n handleSidesheet('createRevision', true, transaction);\n }}\n handleGridApiCallback={handleGridApiCallback}\n refreshGridData={() => {\n gridApiRef?.current?.refreshServerSide();\n }}\n gridApiRef={gridApiRef}\n initialFilterModel={initialFilterModel}\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 gridApiRef?.current?.refreshServerSide();\n }}\n />\n </>\n );\n};\n\nexport default UdpTransactionsPage;\n","export * from './UdpTransactionsPage';\nexport { default } from './UdpTransactionsPage';\n"],"mappings":"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"}
|