udp-react-enterprise-component-library 25.18.1-beta.13 → 25.18.1-beta.15
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/{BarChartWidget-D0YHgxLm.js → BarChartWidget-DvxJmSJp.js} +2 -2
- package/dist/{BarChartWidget-D0YHgxLm.js.map → BarChartWidget-DvxJmSJp.js.map} +1 -1
- package/dist/{BubbleWidget-Cs5d4ltm.js → BubbleWidget-sXx3k5jw.js} +2 -2
- package/dist/{BubbleWidget-Cs5d4ltm.js.map → BubbleWidget-sXx3k5jw.js.map} +1 -1
- package/dist/{ChatUDP-B7dgnKO0.js → ChatUDP-Dy_TzC1C.js} +2 -2
- package/dist/{ChatUDP-B7dgnKO0.js.map → ChatUDP-Dy_TzC1C.js.map} +1 -1
- package/dist/{DateTrendWidget-CL1SXIdH.js → DateTrendWidget-CwSCalMf.js} +2 -2
- package/dist/{DateTrendWidget-CL1SXIdH.js.map → DateTrendWidget-CwSCalMf.js.map} +1 -1
- package/dist/{DensePlotWidget-BC__SHpk.js → DensePlotWidget-DekKAdvx.js} +2 -2
- package/dist/{DensePlotWidget-BC__SHpk.js.map → DensePlotWidget-DekKAdvx.js.map} +1 -1
- package/dist/{DonutChartWidget-_PqIlK7j.js → DonutChartWidget-mKcG-bWw.js} +2 -2
- package/dist/{DonutChartWidget-_PqIlK7j.js.map → DonutChartWidget-mKcG-bWw.js.map} +1 -1
- package/dist/{InsightRenderer-UkS3B5zg.js → InsightRenderer-BwE5OX4C.js} +2 -2
- package/dist/{InsightRenderer-UkS3B5zg.js.map → InsightRenderer-BwE5OX4C.js.map} +1 -1
- package/dist/{LineAndSparklinesWidget-BIOUv_gL.js → LineAndSparklinesWidget-BEWoRerh.js} +2 -2
- package/dist/{LineAndSparklinesWidget-BIOUv_gL.js.map → LineAndSparklinesWidget-BEWoRerh.js.map} +1 -1
- package/dist/{LineGraphWidget-Cs6V1fm8.js → LineGraphWidget-Dc-G6-QJ.js} +2 -2
- package/dist/{LineGraphWidget-Cs6V1fm8.js.map → LineGraphWidget-Dc-G6-QJ.js.map} +1 -1
- package/dist/{MttMainTimeline-CwttwjLy.js → MttMainTimeline-BsI0z3aG.js} +2 -2
- package/dist/{MttMainTimeline-CwttwjLy.js.map → MttMainTimeline-BsI0z3aG.js.map} +1 -1
- package/dist/{MttSummary-Br4SrY1Q.js → MttSummary-DowXi1ZV.js} +2 -2
- package/dist/{MttSummary-Br4SrY1Q.js.map → MttSummary-DowXi1ZV.js.map} +1 -1
- package/dist/{ProgressBarWidget-CJb2yLHN.js → ProgressBarWidget-A-EV1csL.js} +2 -2
- package/dist/{ProgressBarWidget-CJb2yLHN.js.map → ProgressBarWidget-A-EV1csL.js.map} +1 -1
- package/dist/{PropertyFields-CxrUoqQG.js → PropertyFields-E53XCnE7.js} +2 -2
- package/dist/{PropertyFields-CxrUoqQG.js.map → PropertyFields-E53XCnE7.js.map} +1 -1
- package/dist/{RecentlyLoadedNodesWidget-BDYNo-Of.js → RecentlyLoadedNodesWidget-CFSKFiGc.js} +2 -2
- package/dist/{RecentlyLoadedNodesWidget-BDYNo-Of.js.map → RecentlyLoadedNodesWidget-CFSKFiGc.js.map} +1 -1
- package/dist/{RemindersWidget-Uk_ZyAW-.js → RemindersWidget-iGOcibjO.js} +2 -2
- package/dist/{RemindersWidget-Uk_ZyAW-.js.map → RemindersWidget-iGOcibjO.js.map} +1 -1
- package/dist/{SparklineWidget-CQtdgO_B.js → SparklineWidget-CVrtRT-m.js} +2 -2
- package/dist/{SparklineWidget-CQtdgO_B.js.map → SparklineWidget-CVrtRT-m.js.map} +1 -1
- package/dist/{SparsePlotWidget-DdDpBWsn.js → SparsePlotWidget-DtSUgvpM.js} +2 -2
- package/dist/{SparsePlotWidget-DdDpBWsn.js.map → SparsePlotWidget-DtSUgvpM.js.map} +1 -1
- package/dist/UI/charts/amcharts/index.js +1 -1
- package/dist/UI/charts/index.js +2 -2
- package/dist/UI/index.js +4 -4
- package/dist/UI/property/index.js +2 -2
- package/dist/UI/property/widgets/index.js +1 -1
- package/dist/UI/widgets/library/BarChartWidget/index.js +1 -1
- package/dist/UI/widgets/library/BubbleWidget/index.js +1 -1
- package/dist/UI/widgets/library/DateTrendWidget/index.js +1 -1
- package/dist/UI/widgets/library/DensePlotWidget/index.js +1 -1
- package/dist/UI/widgets/library/DonutChartWidget/index.js +1 -1
- package/dist/UI/widgets/library/LineAndSparklinesWidget/index.js +1 -1
- package/dist/UI/widgets/library/LineGraphWidget/index.js +1 -1
- package/dist/UI/widgets/library/ProgressBarWidget/index.js +1 -1
- package/dist/UI/widgets/library/RecentlyLoadedNodesWidget/index.js +1 -1
- package/dist/UI/widgets/library/RemindersWidget/index.js +1 -1
- package/dist/UI/widgets/library/SparklineWidget/index.js +1 -1
- package/dist/UI/widgets/library/SparsePlotWidget/index.js +1 -1
- package/dist/{UdpAuditEvents-Dsvqz2Ad.js → UdpAuditEvents-C15mWgaI.js} +2 -2
- package/dist/{UdpAuditEvents-Dsvqz2Ad.js.map → UdpAuditEvents-C15mWgaI.js.map} +1 -1
- package/dist/{UdpDataBrowserPage-DIq--ak3.js → UdpDataBrowserPage-ByYTIFed.js} +2 -2
- package/dist/{UdpDataBrowserPage-DIq--ak3.js.map → UdpDataBrowserPage-ByYTIFed.js.map} +1 -1
- package/dist/{UdpFormsBuilderPage-C1_7kI_t.js → UdpFormsBuilderPage-h5Q62J02.js} +2 -2
- package/dist/{UdpFormsBuilderPage-C1_7kI_t.js.map → UdpFormsBuilderPage-h5Q62J02.js.map} +1 -1
- package/dist/{UdpFormsListPage-CH3hqgMT.js → UdpFormsListPage-D6eyoogV.js} +2 -2
- package/dist/{UdpFormsListPage-CH3hqgMT.js.map → UdpFormsListPage-D6eyoogV.js.map} +1 -1
- package/dist/{UdpGridPanelManagementPage-Dk0miZ38.js → UdpGridPanelManagementPage-CTLw0vlP.js} +2 -2
- package/dist/{UdpGridPanelManagementPage-Dk0miZ38.js.map → UdpGridPanelManagementPage-CTLw0vlP.js.map} +1 -1
- package/dist/{UdpImportFromFileMappingPage-BWaYkxhW.js → UdpImportFromFileMappingPage-B-GRm1zk.js} +2 -2
- package/dist/{UdpImportFromFileMappingPage-BWaYkxhW.js.map → UdpImportFromFileMappingPage-B-GRm1zk.js.map} +1 -1
- package/dist/{UdpInquiryMaintenanceEnginePage-DTanTz7X.js → UdpInquiryMaintenanceEnginePage-BascqEkC.js} +3 -3
- package/dist/{UdpInquiryMaintenanceEnginePage-DTanTz7X.js.map → UdpInquiryMaintenanceEnginePage-BascqEkC.js.map} +1 -1
- package/dist/{UdpMaintenanceEnginePage-DIyBfIMk.js → UdpMaintenanceEnginePage-DbI1T8S6.js} +3 -3
- package/dist/{UdpMaintenanceEnginePage-DIyBfIMk.js.map → UdpMaintenanceEnginePage-DbI1T8S6.js.map} +1 -1
- package/dist/{UdpNotesPage-B3cesDaw.js → UdpNotesPage-BRk1UPem.js} +2 -2
- package/dist/{UdpNotesPage-B3cesDaw.js.map → UdpNotesPage-BRk1UPem.js.map} +1 -1
- package/dist/{UdpPages-Duf7s2Bf.js → UdpPages-DXB-xgq5.js} +21 -21
- package/dist/{UdpPages-Duf7s2Bf.js.map → UdpPages-DXB-xgq5.js.map} +1 -1
- package/dist/{UdpPrivateForm-Cju6dVDc.js → UdpPrivateForm-CamStDVL.js} +2 -2
- package/dist/{UdpPrivateForm-Cju6dVDc.js.map → UdpPrivateForm-CamStDVL.js.map} +1 -1
- package/dist/{UdpPublicForm-D3D8GPrh.js → UdpPublicForm-BLcb2F_H.js} +2 -2
- package/dist/{UdpPublicForm-D3D8GPrh.js.map → UdpPublicForm-BLcb2F_H.js.map} +1 -1
- package/dist/{UdpRemindersPage-DBQ0SQO4.js → UdpRemindersPage-CkGREvgu.js} +2 -2
- package/dist/{UdpRemindersPage-DBQ0SQO4.js.map → UdpRemindersPage-CkGREvgu.js.map} +1 -1
- package/dist/{UdpReportsPage-DMA-kvyF.js → UdpReportsPage-CmmjWDIs.js} +2 -2
- package/dist/{UdpReportsPage-DMA-kvyF.js.map → UdpReportsPage-CmmjWDIs.js.map} +1 -1
- package/dist/{UdpVerticalManagementPage-SWVycbx7.js → UdpVerticalManagementPage-Bpf_2UGu.js} +2 -2
- package/dist/{UdpVerticalManagementPage-SWVycbx7.js.map → UdpVerticalManagementPage-Bpf_2UGu.js.map} +1 -1
- package/dist/{amcharts-ptK5Ggb0.js → amcharts-C-oU6vTx.js} +2 -2
- package/dist/{amcharts-ptK5Ggb0.js.map → amcharts-C-oU6vTx.js.map} +1 -1
- package/dist/chunk-B4enJp2Q.js +18 -0
- package/dist/componentSystems/multiThreadTimeline/functions/index.js +1 -1
- package/dist/componentSystems/multiThreadTimeline/index.js +3 -3
- package/dist/componentSystems/multiThreadTimeline/mttMainTimeline/index.js +2 -2
- package/dist/componentSystems/multiThreadTimeline/mttSummary/index.js +2 -2
- package/dist/index.js +37 -37
- package/dist/inquiry/index.js +4 -4
- package/dist/inquiry/search/index.js +3 -3
- package/dist/{inquiry-J7m3wdvC.js → inquiry-OhbvzcJ3.js} +2 -2
- package/dist/{inquiry-J7m3wdvC.js.map → inquiry-OhbvzcJ3.js.map} +1 -1
- package/dist/{mttFunctions-Du5Q0h5k.js → mttFunctions-ioZ0_5JX.js} +2 -2
- package/dist/{mttFunctions-Du5Q0h5k.js.map → mttFunctions-ioZ0_5JX.js.map} +1 -1
- package/dist/{search-CAGMOHR-.js → search-DdbraDFl.js} +2 -2
- package/dist/{search-CAGMOHR-.js.map → search-DdbraDFl.js.map} +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/pages/ChatUDP/index.js +1 -1
- package/dist/udp/pages/UdpAuditEvents/index.js +1 -1
- package/dist/udp/pages/UdpDataBrowserPage/index.js +1 -1
- package/dist/udp/pages/UdpFormsBuilderPage/index.js +1 -1
- package/dist/udp/pages/UdpFormsListPage/index.js +1 -1
- package/dist/udp/pages/UdpGridPanelManagementPage/index.js +1 -1
- package/dist/udp/pages/UdpImportFromFileMappingPage/index.js +1 -1
- package/dist/udp/pages/UdpInquiryMaintenanceEnginePage/index.js +6 -6
- package/dist/udp/pages/UdpMaintenanceEnginePage/index.js +5 -5
- package/dist/udp/pages/UdpNotesPage/index.js +1 -1
- package/dist/udp/pages/UdpPages/index.js +25 -25
- package/dist/udp/pages/UdpPrivateForm/index.js +1 -1
- package/dist/udp/pages/UdpPublicForm/index.js +1 -1
- package/dist/udp/pages/UdpRemindersPage/index.js +1 -1
- package/dist/udp/pages/UdpReportsPage/index.js +1 -1
- package/dist/udp/pages/UdpVerticalManagementPage/index.js +1 -1
- package/dist/udp/pages/index.js +25 -25
- package/dist/{widgets-DRc97wsQ.js → widgets-TW8ap2gq.js} +2 -2
- package/dist/{widgets-DRc97wsQ.js.map → widgets-TW8ap2gq.js.map} +1 -1
- package/export-map.json +1 -1
- package/package.json +2 -2
- package/dist/chunk-Bp6m_JJh.js +0 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __export } from "./chunk-
|
|
1
|
+
import { t as __export } from "./chunk-B4enJp2Q.js";
|
|
2
2
|
|
|
3
3
|
//#region src/componentSystems/multiThreadTimeline/functions/mttFunctions.js
|
|
4
4
|
var mttFunctions_exports = /* @__PURE__ */ __export({
|
|
@@ -245,4 +245,4 @@ const formatDataWithTimelineCategoryNameOrderedByDate = (inputData) => {
|
|
|
245
245
|
|
|
246
246
|
//#endregion
|
|
247
247
|
export { plotX as a, plotCategoryBar as i, formatDataWithTimelineCategoryNameOrderedByDate as n, plotY as o, mttFunctions_exports as r, formatDataWithTimelineCategoryName as t };
|
|
248
|
-
//# sourceMappingURL=mttFunctions-
|
|
248
|
+
//# sourceMappingURL=mttFunctions-ioZ0_5JX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mttFunctions-Du5Q0h5k.js","names":["item","plots"],"sources":["../src/componentSystems/multiThreadTimeline/functions/mttFunctions.js"],"sourcesContent":["// Plot Y\nexport const plotY = (item, data, nodeWidth) => {\n const plotDate = [item];\n\n //let demoDates = [\"5/6/2022\",\"5/6/2022\",\"5/7/2022\",\"5/8/2022\",]\n let dates = [];\n data &&\n data.map((item) => {\n dates.push(item.date);\n });\n\n let unique = [...new Set(dates)];\n\n const mappedToObjects = unique.map(function (value) {\n return { date: value };\n });\n\n const plots = [];\n for (let i = 1; i <= unique.length; i++) {\n plots.push(i);\n }\n\n let mergePlots = mappedToObjects.map((o, i) => ({\n ...o,\n plots: plots[i] || null\n }));\n\n const res = mergePlots\n .filter(({ date }) => plotDate.includes(date))\n .map(({ plots }) => plots);\n\n //console.log('res', mergePlots.slice(-1).pop().plots);\n //const width = mergePlots.slice(-1).pop().plots;\n\n const order = res.map((item) => {\n return item;\n });\n const plot = order * nodeWidth - nodeWidth;\n\n return plot;\n};\n\n// Plot X\nexport const plotX = (timeline, subThread, data, threadHeight) => {\n const xLine =\n data &&\n data.map((item) => {\n return item.timeline.toString() + '.' + item.subThread.toString();\n });\n\n let unique = [...new Set(xLine)];\n\n const rowIndex = unique.reduce(function (s, a) {\n s.push({ thread: a });\n return s;\n }, []);\n\n const concatIndex = timeline + '.' + subThread;\n const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index }));\n const results = result.filter(function (entry) {\n return entry.thread === concatIndex;\n });\n const xplot = results[0] && results[0].rowIndex * threadHeight;\n return xplot;\n};\n\nfunction formatDate(date) {\n return new Date(date).toLocaleDateString('en-US');\n}\n\n// function getChildObject(childObj) {\n// const date = formatDate(childObj.date);\n// return {\n// date: date,\n// details: {\n// id: childObj.id,\n// eventTypeID: childObj.eventTypeID,\n// contextKey: childObj.contextKey,\n// secondaryContextID: childObj.secondaryContextID,\n// date: date,\n// transactionType: childObj.transactionType,\n// description: childObj.description,\n// shortDescription: childObj.shortDescription,\n// status: childObj.status,\n// data: childObj.data,\n// user: childObj.user,\n// serializeFields: childObj.serializeFields,\n// mttEventsNewEventType: childObj.mttEventsNewEventType,\n// threadId: childObj.threadId,\n// timelineCategory: childObj.timelineCategory,\n// },\n// };\n// }\n\nfunction getChildObject(childObj) {\n const date = formatDate(childObj.date);\n return {\n date: date,\n details: {\n id: childObj.id,\n eventTypeID: childObj.eventTypeID,\n primaryContextID: childObj.primaryContextID,\n secondaryContextID: childObj.secondaryContextID,\n date: date,\n transactionType: childObj.transactionType,\n description: childObj.description,\n shortDescription: childObj.shortDescription,\n data2: childObj.data2,\n data1: childObj.data1,\n data3: childObj.data3,\n serializeFields: childObj.serializeFields,\n mttEventsNewEventType: childObj.mttEventsNewEventType,\n threadId: childObj.threadId,\n timelineCategory: childObj.timelineCategory,\n color: childObj.color,\n icon: childObj.icon\n }\n };\n}\n\n// function getEventsObjects(object, timeline) {\n// return object.map(obj => {\n// const date = formatDate(obj.date);\n// return {\n// date: date,\n// details: {\n// id: obj.id,\n// eventTypeID: obj.eventTypeID,\n// contextKey: obj.contextKey,\n// secondaryContextID: obj.secondaryContextID,\n// date: date,\n// transactionType: obj.transactionType,\n// description: obj.description,\n// shortDescription: obj.shortDescription,\n// status: obj.status,\n// data: obj.data,\n// user: obj.user,\n// serializeFields: obj.serializeFields,\n// mttEventsNewEventType: obj.mttEventsNewEventType,\n// threadId: obj.threadId,\n// timelineCategory: obj.timelineCategory,\n// timeline: timeline,\n// },\n// };\n// });\n// }\n\nfunction getEventsObjects(object, timeline) {\n return object.map((obj) => {\n const date = formatDate(obj.date);\n return {\n date: date,\n details: {\n id: obj.id,\n eventTypeID: obj.eventTypeID,\n primaryContextID: obj.primaryContextID,\n secondaryContextID: obj.secondaryContextID,\n date: date,\n transactionType: obj.transactionType,\n description: obj.description,\n shortDescription: obj.shortDescription,\n data2: obj.data2,\n data1: obj.data1,\n data3: obj.data3,\n serializeFields: obj.serializeFields,\n mttEventsNewEventType: obj.mttEventsNewEventType,\n threadId: obj.threadId,\n timelineCategory: obj.timelineCategory,\n timeline: timeline,\n color: obj.color,\n icon: obj.icon\n }\n };\n });\n}\n\nexport const formatDataWithTimelineCategoryName = (object) => {\n let tempObject = [];\n\n object.forEach((obj) => {\n obj.events.forEach((event) => {\n const threadEvents =\n obj.mttThreadMttThreadEvents ||\n obj.udpMttThreadUdpMttThreadEvents ||\n [];\n const foundThreadEvent = threadEvents.find(\n (threadEvent) =>\n event.transactionType?.toString() ===\n threadEvent.transactionType?.toString()\n );\n if (foundThreadEvent) {\n event.color =\n foundThreadEvent.color === null ||\n foundThreadEvent.color === undefined ||\n foundThreadEvent.color === '' ||\n foundThreadEvent.color === ' '\n ? obj.color\n : foundThreadEvent.color;\n event.icon = foundThreadEvent.icon;\n } else {\n event.color = obj.color;\n event.icon = obj.iconID;\n }\n });\n });\n\n object.forEach((obj) => {\n let existsTimelineFlag = false;\n const mttThreadMttConfig =\n obj.mttThreadMttConfig || obj.udpMttThreadUdpMttConfig;\n tempObject.forEach((tmpObj) => {\n if (mttThreadMttConfig?.sequence === tmpObj.timeline) {\n tmpObj.dates.push(\n ...getEventsObjects(obj.events, mttThreadMttConfig?.sequence)\n );\n existsTimelineFlag = true;\n }\n });\n if (!existsTimelineFlag) {\n tempObject.push({\n timeline: mttThreadMttConfig?.sequence,\n timelineCategoryName: mttThreadMttConfig?.name,\n color: obj.color,\n iconID: obj.iconID,\n dates: getEventsObjects(obj.events, mttThreadMttConfig?.sequence)\n });\n }\n });\n\n let cleanObjects = [];\n tempObject.forEach((obj) => {\n let subThreadCount = 1;\n obj.dates.forEach((dateObj) => {\n let existsSubThreadFlag = false;\n const foundIndex = cleanObjects.findIndex((searchObj) => {\n return (\n searchObj.timeline === dateObj.details.timeline &&\n searchObj.dates[0].details.secondaryContextID ===\n dateObj.details.secondaryContextID &&\n formatDate(searchObj.date) === formatDate(dateObj.details.date)\n );\n });\n if (foundIndex > -1) {\n cleanObjects[foundIndex].dates.push(getChildObject(dateObj.details));\n existsSubThreadFlag = true;\n } else {\n const foundIndex2 = cleanObjects.findIndex(\n (searchObj) =>\n searchObj.timeline === dateObj.details.timeline &&\n searchObj.dates[0].details.secondaryContextID ===\n dateObj.details.secondaryContextID &&\n formatDate(searchObj.date) !== formatDate(dateObj.details.date)\n );\n if (foundIndex2 > -1) {\n cleanObjects.push({\n timeline: cleanObjects[foundIndex2].timeline,\n subThread: cleanObjects[foundIndex2].subThread,\n timelineCategoryName:\n cleanObjects[foundIndex2].timelineCategoryName,\n color: dateObj?.details?.color\n ? dateObj.details.color\n : cleanObjects[foundIndex2].color,\n iconID: dateObj?.details?.icon\n ? dateObj.details.icon\n : cleanObjects[foundIndex2].iconID,\n date: formatDate(dateObj.details.date),\n dates: [getChildObject(dateObj.details)]\n });\n existsSubThreadFlag = true;\n }\n }\n if (!existsSubThreadFlag) {\n cleanObjects.push({\n timeline: obj.timeline,\n subThread: subThreadCount++,\n timelineCategoryName: obj.timelineCategoryName,\n color: dateObj?.details?.color ? dateObj.details.color : obj.color,\n iconID: dateObj?.details?.icon ? dateObj.details.icon : obj.iconID,\n date: formatDate(dateObj.details.date),\n dates: [getChildObject(dateObj.details)]\n });\n }\n });\n });\n return cleanObjects;\n};\n\n// Plot category bar\nexport const plotCategoryBar = (\n timelineNumber,\n subThread,\n data,\n timeline,\n threadHeight\n) => {\n const xLine =\n data &&\n formatDataWithTimelineCategoryName(timeline).map((item) => {\n return item.timeline.toString() + '.' + item.subThread.toString();\n });\n\n let unique = [...new Set(xLine)];\n\n const rowIndex = unique.reduce(function (s, a) {\n s.push({ thread: a });\n return s;\n }, []);\n\n const concatIndex = timelineNumber + '.' + subThread;\n const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index + 1 }));\n const results = result.filter(function (entry) {\n return entry.thread === concatIndex;\n });\n const xplot =\n (results[0] && results[0].rowIndex * threadHeight) - threadHeight;\n return xplot;\n};\n\nfunction orderByDate(a, b) {\n if (new Date(a.date) < new Date(b.date)) {\n return -1;\n }\n if (new Date(a.date) > new Date(b.date)) {\n return 1;\n }\n return 0;\n}\n\nfunction orderByDateTimeline(a, b) {\n if (!a?.length || !b?.length) {\n return 0;\n }\n if (new Date(a[0].date) < new Date(b[0].date)) {\n return -1;\n }\n if (new Date(a[0].date) > new Date(b[0].date)) {\n return 1;\n }\n return 0;\n}\n\nfunction orderByDateSubThread(a, b) {\n if (!a?.length || !b?.length) {\n return 0;\n }\n if (new Date(a[0].date) < new Date(b[0].date)) {\n return -1;\n }\n if (new Date(a[0].date) > new Date(b[0].date)) {\n return 1;\n }\n return 0;\n}\n\nexport const formatDataWithTimelineCategoryNameOrderedByDate = (inputData) => {\n let data = formatDataWithTimelineCategoryName(inputData).sort(orderByDate);\n let maxElement = 1;\n data.forEach((obj) => {\n if (maxElement < obj.timeline) maxElement = obj.timeline;\n });\n let objArr = [...Array(maxElement)].map((e) => (e = []));\n data.forEach((obj) => {\n objArr.forEach((val, index) => {\n if (obj.timeline === index + 1) {\n objArr[index].push(obj);\n }\n });\n });\n\n objArr.sort(orderByDateTimeline);\n let objArr2 = [...Array(maxElement)].map((e) => (e = []));\n let maxElements;\n objArr.forEach((objs, i) => {\n maxElements = 1;\n objs.forEach((obj) => {\n if (maxElements < obj.subThread) maxElements = obj.subThread;\n });\n objArr2[i] = maxElements;\n });\n let objArr3 = [...Array(maxElement)].map((e) => (e = []));\n objArr2.forEach(\n (obj, index) => (objArr3[index] = [...Array(obj)].map((e) => (e = [])))\n );\n objArr.forEach((ob) => {\n ob.forEach((o) => {\n objArr3.forEach((objs, j) => {\n objs.forEach((obj, k) => {\n if (o.timeline === j + 1 && o.subThread === k + 1) {\n obj.push(o);\n }\n });\n });\n });\n });\n objArr3.forEach((objs) => {\n objs\n .sort(orderByDateSubThread)\n .forEach((obj, index) =>\n obj.forEach((obj) => (obj.subThread = index + 1))\n );\n });\n return objArr3.flat(2);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mttFunctions-ioZ0_5JX.js","names":["item","plots"],"sources":["../src/componentSystems/multiThreadTimeline/functions/mttFunctions.js"],"sourcesContent":["// Plot Y\nexport const plotY = (item, data, nodeWidth) => {\n const plotDate = [item];\n\n //let demoDates = [\"5/6/2022\",\"5/6/2022\",\"5/7/2022\",\"5/8/2022\",]\n let dates = [];\n data &&\n data.map((item) => {\n dates.push(item.date);\n });\n\n let unique = [...new Set(dates)];\n\n const mappedToObjects = unique.map(function (value) {\n return { date: value };\n });\n\n const plots = [];\n for (let i = 1; i <= unique.length; i++) {\n plots.push(i);\n }\n\n let mergePlots = mappedToObjects.map((o, i) => ({\n ...o,\n plots: plots[i] || null\n }));\n\n const res = mergePlots\n .filter(({ date }) => plotDate.includes(date))\n .map(({ plots }) => plots);\n\n //console.log('res', mergePlots.slice(-1).pop().plots);\n //const width = mergePlots.slice(-1).pop().plots;\n\n const order = res.map((item) => {\n return item;\n });\n const plot = order * nodeWidth - nodeWidth;\n\n return plot;\n};\n\n// Plot X\nexport const plotX = (timeline, subThread, data, threadHeight) => {\n const xLine =\n data &&\n data.map((item) => {\n return item.timeline.toString() + '.' + item.subThread.toString();\n });\n\n let unique = [...new Set(xLine)];\n\n const rowIndex = unique.reduce(function (s, a) {\n s.push({ thread: a });\n return s;\n }, []);\n\n const concatIndex = timeline + '.' + subThread;\n const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index }));\n const results = result.filter(function (entry) {\n return entry.thread === concatIndex;\n });\n const xplot = results[0] && results[0].rowIndex * threadHeight;\n return xplot;\n};\n\nfunction formatDate(date) {\n return new Date(date).toLocaleDateString('en-US');\n}\n\n// function getChildObject(childObj) {\n// const date = formatDate(childObj.date);\n// return {\n// date: date,\n// details: {\n// id: childObj.id,\n// eventTypeID: childObj.eventTypeID,\n// contextKey: childObj.contextKey,\n// secondaryContextID: childObj.secondaryContextID,\n// date: date,\n// transactionType: childObj.transactionType,\n// description: childObj.description,\n// shortDescription: childObj.shortDescription,\n// status: childObj.status,\n// data: childObj.data,\n// user: childObj.user,\n// serializeFields: childObj.serializeFields,\n// mttEventsNewEventType: childObj.mttEventsNewEventType,\n// threadId: childObj.threadId,\n// timelineCategory: childObj.timelineCategory,\n// },\n// };\n// }\n\nfunction getChildObject(childObj) {\n const date = formatDate(childObj.date);\n return {\n date: date,\n details: {\n id: childObj.id,\n eventTypeID: childObj.eventTypeID,\n primaryContextID: childObj.primaryContextID,\n secondaryContextID: childObj.secondaryContextID,\n date: date,\n transactionType: childObj.transactionType,\n description: childObj.description,\n shortDescription: childObj.shortDescription,\n data2: childObj.data2,\n data1: childObj.data1,\n data3: childObj.data3,\n serializeFields: childObj.serializeFields,\n mttEventsNewEventType: childObj.mttEventsNewEventType,\n threadId: childObj.threadId,\n timelineCategory: childObj.timelineCategory,\n color: childObj.color,\n icon: childObj.icon\n }\n };\n}\n\n// function getEventsObjects(object, timeline) {\n// return object.map(obj => {\n// const date = formatDate(obj.date);\n// return {\n// date: date,\n// details: {\n// id: obj.id,\n// eventTypeID: obj.eventTypeID,\n// contextKey: obj.contextKey,\n// secondaryContextID: obj.secondaryContextID,\n// date: date,\n// transactionType: obj.transactionType,\n// description: obj.description,\n// shortDescription: obj.shortDescription,\n// status: obj.status,\n// data: obj.data,\n// user: obj.user,\n// serializeFields: obj.serializeFields,\n// mttEventsNewEventType: obj.mttEventsNewEventType,\n// threadId: obj.threadId,\n// timelineCategory: obj.timelineCategory,\n// timeline: timeline,\n// },\n// };\n// });\n// }\n\nfunction getEventsObjects(object, timeline) {\n return object.map((obj) => {\n const date = formatDate(obj.date);\n return {\n date: date,\n details: {\n id: obj.id,\n eventTypeID: obj.eventTypeID,\n primaryContextID: obj.primaryContextID,\n secondaryContextID: obj.secondaryContextID,\n date: date,\n transactionType: obj.transactionType,\n description: obj.description,\n shortDescription: obj.shortDescription,\n data2: obj.data2,\n data1: obj.data1,\n data3: obj.data3,\n serializeFields: obj.serializeFields,\n mttEventsNewEventType: obj.mttEventsNewEventType,\n threadId: obj.threadId,\n timelineCategory: obj.timelineCategory,\n timeline: timeline,\n color: obj.color,\n icon: obj.icon\n }\n };\n });\n}\n\nexport const formatDataWithTimelineCategoryName = (object) => {\n let tempObject = [];\n\n object.forEach((obj) => {\n obj.events.forEach((event) => {\n const threadEvents =\n obj.mttThreadMttThreadEvents ||\n obj.udpMttThreadUdpMttThreadEvents ||\n [];\n const foundThreadEvent = threadEvents.find(\n (threadEvent) =>\n event.transactionType?.toString() ===\n threadEvent.transactionType?.toString()\n );\n if (foundThreadEvent) {\n event.color =\n foundThreadEvent.color === null ||\n foundThreadEvent.color === undefined ||\n foundThreadEvent.color === '' ||\n foundThreadEvent.color === ' '\n ? obj.color\n : foundThreadEvent.color;\n event.icon = foundThreadEvent.icon;\n } else {\n event.color = obj.color;\n event.icon = obj.iconID;\n }\n });\n });\n\n object.forEach((obj) => {\n let existsTimelineFlag = false;\n const mttThreadMttConfig =\n obj.mttThreadMttConfig || obj.udpMttThreadUdpMttConfig;\n tempObject.forEach((tmpObj) => {\n if (mttThreadMttConfig?.sequence === tmpObj.timeline) {\n tmpObj.dates.push(\n ...getEventsObjects(obj.events, mttThreadMttConfig?.sequence)\n );\n existsTimelineFlag = true;\n }\n });\n if (!existsTimelineFlag) {\n tempObject.push({\n timeline: mttThreadMttConfig?.sequence,\n timelineCategoryName: mttThreadMttConfig?.name,\n color: obj.color,\n iconID: obj.iconID,\n dates: getEventsObjects(obj.events, mttThreadMttConfig?.sequence)\n });\n }\n });\n\n let cleanObjects = [];\n tempObject.forEach((obj) => {\n let subThreadCount = 1;\n obj.dates.forEach((dateObj) => {\n let existsSubThreadFlag = false;\n const foundIndex = cleanObjects.findIndex((searchObj) => {\n return (\n searchObj.timeline === dateObj.details.timeline &&\n searchObj.dates[0].details.secondaryContextID ===\n dateObj.details.secondaryContextID &&\n formatDate(searchObj.date) === formatDate(dateObj.details.date)\n );\n });\n if (foundIndex > -1) {\n cleanObjects[foundIndex].dates.push(getChildObject(dateObj.details));\n existsSubThreadFlag = true;\n } else {\n const foundIndex2 = cleanObjects.findIndex(\n (searchObj) =>\n searchObj.timeline === dateObj.details.timeline &&\n searchObj.dates[0].details.secondaryContextID ===\n dateObj.details.secondaryContextID &&\n formatDate(searchObj.date) !== formatDate(dateObj.details.date)\n );\n if (foundIndex2 > -1) {\n cleanObjects.push({\n timeline: cleanObjects[foundIndex2].timeline,\n subThread: cleanObjects[foundIndex2].subThread,\n timelineCategoryName:\n cleanObjects[foundIndex2].timelineCategoryName,\n color: dateObj?.details?.color\n ? dateObj.details.color\n : cleanObjects[foundIndex2].color,\n iconID: dateObj?.details?.icon\n ? dateObj.details.icon\n : cleanObjects[foundIndex2].iconID,\n date: formatDate(dateObj.details.date),\n dates: [getChildObject(dateObj.details)]\n });\n existsSubThreadFlag = true;\n }\n }\n if (!existsSubThreadFlag) {\n cleanObjects.push({\n timeline: obj.timeline,\n subThread: subThreadCount++,\n timelineCategoryName: obj.timelineCategoryName,\n color: dateObj?.details?.color ? dateObj.details.color : obj.color,\n iconID: dateObj?.details?.icon ? dateObj.details.icon : obj.iconID,\n date: formatDate(dateObj.details.date),\n dates: [getChildObject(dateObj.details)]\n });\n }\n });\n });\n return cleanObjects;\n};\n\n// Plot category bar\nexport const plotCategoryBar = (\n timelineNumber,\n subThread,\n data,\n timeline,\n threadHeight\n) => {\n const xLine =\n data &&\n formatDataWithTimelineCategoryName(timeline).map((item) => {\n return item.timeline.toString() + '.' + item.subThread.toString();\n });\n\n let unique = [...new Set(xLine)];\n\n const rowIndex = unique.reduce(function (s, a) {\n s.push({ thread: a });\n return s;\n }, []);\n\n const concatIndex = timelineNumber + '.' + subThread;\n const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index + 1 }));\n const results = result.filter(function (entry) {\n return entry.thread === concatIndex;\n });\n const xplot =\n (results[0] && results[0].rowIndex * threadHeight) - threadHeight;\n return xplot;\n};\n\nfunction orderByDate(a, b) {\n if (new Date(a.date) < new Date(b.date)) {\n return -1;\n }\n if (new Date(a.date) > new Date(b.date)) {\n return 1;\n }\n return 0;\n}\n\nfunction orderByDateTimeline(a, b) {\n if (!a?.length || !b?.length) {\n return 0;\n }\n if (new Date(a[0].date) < new Date(b[0].date)) {\n return -1;\n }\n if (new Date(a[0].date) > new Date(b[0].date)) {\n return 1;\n }\n return 0;\n}\n\nfunction orderByDateSubThread(a, b) {\n if (!a?.length || !b?.length) {\n return 0;\n }\n if (new Date(a[0].date) < new Date(b[0].date)) {\n return -1;\n }\n if (new Date(a[0].date) > new Date(b[0].date)) {\n return 1;\n }\n return 0;\n}\n\nexport const formatDataWithTimelineCategoryNameOrderedByDate = (inputData) => {\n let data = formatDataWithTimelineCategoryName(inputData).sort(orderByDate);\n let maxElement = 1;\n data.forEach((obj) => {\n if (maxElement < obj.timeline) maxElement = obj.timeline;\n });\n let objArr = [...Array(maxElement)].map((e) => (e = []));\n data.forEach((obj) => {\n objArr.forEach((val, index) => {\n if (obj.timeline === index + 1) {\n objArr[index].push(obj);\n }\n });\n });\n\n objArr.sort(orderByDateTimeline);\n let objArr2 = [...Array(maxElement)].map((e) => (e = []));\n let maxElements;\n objArr.forEach((objs, i) => {\n maxElements = 1;\n objs.forEach((obj) => {\n if (maxElements < obj.subThread) maxElements = obj.subThread;\n });\n objArr2[i] = maxElements;\n });\n let objArr3 = [...Array(maxElement)].map((e) => (e = []));\n objArr2.forEach(\n (obj, index) => (objArr3[index] = [...Array(obj)].map((e) => (e = [])))\n );\n objArr.forEach((ob) => {\n ob.forEach((o) => {\n objArr3.forEach((objs, j) => {\n objs.forEach((obj, k) => {\n if (o.timeline === j + 1 && o.subThread === k + 1) {\n obj.push(o);\n }\n });\n });\n });\n });\n objArr3.forEach((objs) => {\n objs\n .sort(orderByDateSubThread)\n .forEach((obj, index) =>\n obj.forEach((obj) => (obj.subThread = index + 1))\n );\n });\n return objArr3.flat(2);\n};\n"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ import { t as AmbientCard } from "./AmbientCard-DK9abODq.js";
|
|
|
14
14
|
import { c as useGridFormat, o as useExport } from "./GridFunctions-BmV2e-nR.js";
|
|
15
15
|
import { n as SearchOperators, t as FilterOperators } from "./SearchOperator-D9838PIe.js";
|
|
16
16
|
import { t as useSearchFilterParamsMap } from "./useSearchFilterParamsMap-1qMwke0K.js";
|
|
17
|
-
import { t as PropertyField } from "./PropertyFields-
|
|
17
|
+
import { t as PropertyField } from "./PropertyFields-E53XCnE7.js";
|
|
18
18
|
import { r as csvStrToArrayOfObjects } from "./SelectUtilities-BYdalihT.js";
|
|
19
19
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
20
20
|
import { Divider, LinearProgress, Typography, makeStyles } from "@material-ui/core";
|
|
@@ -832,4 +832,4 @@ const InquirySearchContainer = (props) => {
|
|
|
832
832
|
|
|
833
833
|
//#endregion
|
|
834
834
|
export { InquiryAdvancedSearchForm as a, InquiryAdvancedSearch as i, InquirySearchTable as n, InquirySearchDatasource as r, InquirySearchContainer as t };
|
|
835
|
-
//# sourceMappingURL=search-
|
|
835
|
+
//# sourceMappingURL=search-DdbraDFl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-CAGMOHR-.js","names":["useStyles","uuid","useStyles","Form","element","useStyles"],"sources":["../src/inquiry/search/InquiryAdvancedSearchForm.jsx","../src/inquiry/search/InquiryAdvancedSearch.jsx","../src/inquiry/search/InquirySearchDatasource.js","../src/inquiry/search/InquirySearchTable.jsx","../src/inquiry/search/InquirySearchContainer.jsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport clsx from 'clsx';\nimport { v4 as uuid } from 'uuid';\nimport { PropertyTypeEnum } from '../../enums/propertyTypeEnums.ts';\nimport { PropertyField } from '../../UI/property/PropertyFields';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { csvStrToArrayOfObjects } from '../../utilities/input/SelectUtilities';\nimport { useForm } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n overflowX: 'auto'\n },\n fieldRow: { display: 'flex', alignItems: 'center' },\n dividerContainer: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%'\n },\n divider: { width: '100%', marginTop: theme.spacing(1) },\n autocompleteRoot: {\n width: '38%',\n marginRight: theme.spacing(1)\n }\n}));\n\nexport const InquiryAdvancedSearchForm = (props) => {\n const {\n advancedSearchFields,\n selectedSearchOperators,\n setSelectedSearchOperators,\n catalogProperties,\n entityType,\n lookupPropertyNames,\n classes: classProps,\n executeQueryWithParameters,\n setForm\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n\n const form = useForm();\n\n const handleSearchOperatorChange = useCallback(\n (value, fieldName) => {\n if (fieldName) {\n let updatedSelectedSearchOps = {};\n if (selectedSearchOperators) {\n updatedSelectedSearchOps = { ...selectedSearchOperators };\n }\n updatedSelectedSearchOps[fieldName] = value;\n setSelectedSearchOperators(updatedSelectedSearchOps);\n }\n },\n [selectedSearchOperators, setSelectedSearchOperators]\n );\n\n const getPropertyWidgetType = (type, useLookup) => {\n if (!type) {\n return null;\n }\n let propertyWidgetType = '';\n switch (type) {\n case PropertyTypeEnum.Int:\n case PropertyTypeEnum.Long:\n propertyWidgetType = 'IntegerWidget';\n break;\n case PropertyTypeEnum.DateTime:\n propertyWidgetType = 'DateTimeWidget';\n break;\n case PropertyTypeEnum.Boolean:\n propertyWidgetType = 'BooleanWidget';\n break;\n default:\n propertyWidgetType = 'TextWidget';\n }\n\n if (\n useLookup === LookupTypeEnums.Api ||\n useLookup === LookupTypeEnums.Csv\n ) {\n propertyWidgetType = 'AutoCompleteWidget';\n }\n\n return propertyWidgetType;\n };\n\n const getPropertyTypeSearchOperators = useCallback((type) => {\n if (!type) {\n return [];\n }\n switch (type) {\n case PropertyTypeEnum.Boolean:\n return SearchOperators.filter((operator) => operator.value === '=');\n default:\n return SearchOperators;\n }\n }, []);\n\n const fieldRows = useMemo(() => {\n if (!advancedSearchFields || !catalogProperties) {\n return [];\n }\n const keys = Object.keys(advancedSearchFields);\n\n const arrayOfFields = keys.reduce((list, key) => {\n const groupedItems = advancedSearchFields[key];\n let groupHeader = '';\n const foundGroupItem = groupedItems.find((item) => !!item.groupHeader);\n if (foundGroupItem) {\n groupHeader = foundGroupItem.groupHeader;\n }\n list.push({ groupHeader: groupHeader, isDivider: true, id: uuid() });\n groupedItems.forEach(async (item) => {\n const foundProperty = catalogProperties.find(\n (property) => property.name === item.name\n );\n const propertyWidgetType = getPropertyWidgetType(\n foundProperty?.type,\n foundProperty?.extendedProperties?.useLookup\n );\n let apiLookupOptions = null;\n if (\n !item.searchable &&\n !foundProperty?.extendedProperties?.searchable\n ) {\n return;\n }\n if (\n lookupPropertyNames.includes(foundProperty?.name) &&\n foundProperty?.extendedProperties?.useLookup === LookupTypeEnums.Api\n ) {\n // TODO: handle getting lookup data with api call\n // const response = await executeQueryWithParameters(\n // 'aa5d1fe1-1128-4d08-9ddb-58ad4fcf00e4'\n // );\n // console.log(response?.data);\n }\n list.push({\n ...item,\n isDivider: false,\n type: foundProperty?.type,\n propertyWidgetType: propertyWidgetType,\n useLookup: foundProperty?.extendedProperties?.useLookup,\n lookup: foundProperty?.extendedProperties?.lookup,\n apiLookupOptions: apiLookupOptions\n });\n });\n return list;\n }, []);\n return arrayOfFields;\n }, [advancedSearchFields, catalogProperties, lookupPropertyNames]);\n\n const getPropertyFields = useCallback(\n (config) => {\n const searchOperator = selectedSearchOperators\n ? selectedSearchOperators[config?.name]?.value\n : null;\n let options = [];\n if (config?.useLookup === LookupTypeEnums.Csv) {\n options = csvStrToArrayOfObjects(config?.lookup);\n }\n if (searchOperator === 'BETWEEN') {\n return (\n <div style={{ display: 'block', width: '100%' }}>\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: `${config?.columnName} (From)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n <PropertyField\n propertyType={entityType}\n property={{\n key: `${config?.name}:between`,\n label: `${config?.columnName} (To)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n </div>\n );\n }\n\n return (\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: config?.columnName,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n );\n },\n [entityType, selectedSearchOperators]\n );\n\n const fieldComponents = useMemo(() => {\n if (!fieldRows || !fieldRows.length) {\n return null;\n }\n return fieldRows.map((config) => {\n return (\n <div key={config?.id}>\n {!config?.isDivider && (\n <div className={classes.fieldRow}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearchForm-Text'\n udprecordid='udpRecord-InquiryAdvancedSearchForm-Text'\n label='Operator'\n name='searchOperator'\n variant='outlined'\n margin='dense'\n size='small'\n options={getPropertyTypeSearchOperators(config?.type) || []}\n optionKey='label'\n value={\n (selectedSearchOperators &&\n selectedSearchOperators[config?.name]) ||\n ''\n }\n onChange={(value) =>\n handleSearchOperatorChange(value, config?.name)\n }\n classes={{ autocompleteRoot: classes.autocompleteRoot }}\n />\n {getPropertyFields(config)}\n </div>\n )}\n {config?.isDivider && (\n <div className={classes.dividerContainer}>\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n {config?.groupHeader && (\n <div\n style={{\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'center',\n whiteSpace: 'nowrap'\n }}\n >\n <Typography variant='caption'>\n {config?.groupHeader}\n </Typography>\n </div>\n )}\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n </div>\n )}\n </div>\n );\n });\n }, [\n fieldRows,\n classes,\n handleSearchOperatorChange,\n selectedSearchOperators,\n getPropertyTypeSearchOperators,\n getPropertyFields\n ]);\n\n useEffect(() => {\n if (form) {\n setForm(form);\n }\n }, [form, setForm]);\n\n return <div className={clsx(classes.root, root)}>{fieldComponents}</div>;\n};\n","import React, { useState, useMemo, useEffect, useCallback } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { SubmitButton } from '../../utilities/form/SubmitButton.tsx';\nimport { Form } from '../../utilities/form/Form.tsx';\nimport { FormButtons } from '../../utilities/form/FormButtons.tsx';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { orderBy } from 'lodash';\nimport { InquiryAdvancedSearchForm } from './InquiryAdvancedSearchForm';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport { FluentIconButton } from '../../UI/inputs/buttons/FluentIconButton';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { ClearIcon } from '@fluentui/react-icons';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities.js';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n entitySelect: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n fieldsRoot: {\n height: (props) => 'calc(100vh - 288px)'\n },\n title: {\n display: 'flex',\n justifyContent: 'space-between',\n margin: theme.spacing(1)\n },\n buttonWrapper: {\n textAlign: 'center'\n },\n button: {\n textTransform: 'none',\n padding: 0,\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n color: theme.palette.secondary\n }\n}));\n\nexport const InquiryAdvancedSearch = (props) => {\n const {\n entityList,\n onSubmit,\n currentNodeCatalogReturnObject,\n catalogObjects,\n entityValue,\n setEntityValue,\n changeSideBarView,\n tree,\n executeQueryWithParameters\n } = props;\n const classes = useStyles(props);\n\n const [initialSelectedSearchOperators, setInitialSelectedSearchOperators] =\n useState(null);\n const [selectedSearchOperators, setSelectedSearchOperators] = useState(null);\n const [form, setForm] = useState(null);\n\n const entityTree = useMemo(() => {\n if (!entityValue || !tree) {\n return null;\n }\n const matchingEntityTree = tree.treeStructure.find(\n (node) => node.properties.catalogReturnObject === entityValue.value\n );\n let nodeTree = tree;\n if (matchingEntityTree?.properties?.associatedInquiryTree) {\n nodeTree = matchingEntityTree?.properties?.associatedInquiryTree;\n }\n return nodeTree;\n }, [tree, entityValue]);\n\n const catalogProperties = useMemo(() => {\n if (!entityValue || !catalogObjects) {\n return [];\n }\n const foundCatalogObject = catalogObjects.find(\n (catalog) => catalog.catalogObjectName === entityValue.value\n );\n return foundCatalogObject?.properties || [];\n }, [catalogObjects, entityValue]);\n\n const advancedSearchFields = useMemo(() => {\n if (!entityTree) {\n return null;\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchConfiguration =\n parentNode?.properties?.searchConfiguration?.filter(\n (config) => config.advancedSearch\n );\n advancedSearchConfiguration?.forEach(\n (config) =>\n (config.advancedSearch = Number.parseFloat(config.advancedSearch))\n );\n const orderedSearchConfiguration = orderBy(\n advancedSearchConfiguration,\n ['advancedSearch'],\n ['asc']\n );\n\n const groupedAndOrderdFields = {};\n\n orderedSearchConfiguration.forEach((config) => {\n const wholeInt = Math.floor(config.advancedSearch);\n if (!groupedAndOrderdFields[wholeInt]) {\n groupedAndOrderdFields[wholeInt] = [config];\n } else {\n groupedAndOrderdFields[wholeInt].push(config);\n }\n });\n return groupedAndOrderdFields;\n }, [entityTree]);\n\n const asCatalogLookupPropertyNames = useMemo(() => {\n if (!entityTree) {\n return [];\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchPropertyName =\n parentNode?.properties?.searchConfiguration\n ?.filter((config) => config.advancedSearch)\n .map((asConfig) => asConfig.name);\n const filteredProperties = catalogProperties.filter((property) =>\n advancedSearchPropertyName?.includes(property.name)\n );\n const lookupPropertyNames = [];\n filteredProperties.forEach((property) => {\n if (\n property?.extendedProperties?.useLookup !== LookupTypeEnums.No_Lookup ||\n !property?.extendedProperties?.useLookup\n ) {\n lookupPropertyNames.push(property.name);\n }\n });\n return lookupPropertyNames;\n }, [catalogProperties, entityTree]);\n\n const handleEntityChange = (value) => {\n setEntityValue(value);\n };\n\n const handleOnSubmit = useCallback(\n (values) => {\n if (onSubmit) {\n onSubmit(\n values,\n selectedSearchOperators,\n entityValue?.value,\n asCatalogLookupPropertyNames\n );\n }\n },\n [\n onSubmit,\n selectedSearchOperators,\n entityValue,\n asCatalogLookupPropertyNames\n ]\n );\n\n const handleClearFilter = useCallback(() => {\n if (form) {\n form.reset();\n }\n setSelectedSearchOperators(initialSelectedSearchOperators);\n }, [initialSelectedSearchOperators, form]);\n\n useEffect(() => {\n if (entityList?.length) {\n const foundEntity = entityList.find(\n (entity) => entity.value === currentNodeCatalogReturnObject\n );\n if (foundEntity) {\n setEntityValue(foundEntity);\n }\n }\n }, [entityList, currentNodeCatalogReturnObject, setEntityValue]);\n\n useEffect(() => {\n if (advancedSearchFields) {\n const mergedFields = [].concat.apply(\n [],\n Object.values(advancedSearchFields)\n );\n const initialSearchOperators = mergedFields.reduce((operators, field) => {\n if (field.advancedSearchOperator) {\n const foundOperator = SearchOperators.find(\n (op) => op.value === field.advancedSearchOperator\n );\n operators[field.name] = foundOperator ?? SearchOperators[0];\n } else {\n operators[field.name] = SearchOperators[0];\n }\n return operators;\n }, {});\n\n setInitialSelectedSearchOperators(initialSearchOperators);\n setSelectedSearchOperators(initialSearchOperators);\n }\n }, [advancedSearchFields]);\n\n return (\n <div className={classes.root}>\n <div>\n <Divider />\n </div>\n <div className={classes.title}>\n <Typography variant='subtitle1'>Advanced Search</Typography>\n <FluentIconButton\n id='udpRecord-InquiryAdvancedSearch-ClearIcon'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearIcon'\n icon={ClearIcon}\n onClick={() => changeSideBarView(0)}\n />\n </div>\n <div className={classes.entitySelect}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearch-TextField'\n udprecordid='udpRecord-InquiryAdvancedSearch-TextField'\n label='Entity'\n variant='outlined'\n margin='normal'\n size='small'\n fullWidth\n options={entityList}\n optionKey='label'\n value={entityValue}\n onChange={handleEntityChange}\n />\n </div>\n <Form onSubmit={handleOnSubmit}>\n <InquiryAdvancedSearchForm\n advancedSearchFields={advancedSearchFields}\n selectedSearchOperators={selectedSearchOperators}\n setSelectedSearchOperators={setSelectedSearchOperators}\n catalogProperties={catalogProperties}\n entityType={getSanitizedName(entityValue?.value)}\n lookupPropertyNames={asCatalogLookupPropertyNames}\n classes={{ root: classes.fieldsRoot }}\n executeQueryWithParameters={executeQueryWithParameters}\n setForm={setForm}\n />\n <div className={classes.submitWrapper}>\n <div className={classes.buttonWrapper}>\n <FluentButton\n id='udpRecord-InquiryAdvancedSearch-ClearFilter'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearFilter'\n onClick={handleClearFilter}\n className={classes.button}\n >\n <Typography variant='subtitle1'>Clear Filter</Typography>\n </FluentButton>\n <FormButtons>\n <SubmitButton\n id='udpRecord-InquiryAdvancedSearch-Search'\n udprecordid='udpRecord-InquiryAdvancedSearch-Search'\n variant='contained'\n color='primary'\n disablePristine={false}\n disabled={!entityValue}\n fullWidth\n style={{ marginRight: 8, marginLeft: 8 }}\n >\n Search\n </SubmitButton>\n </FormButtons>\n </div>\n </div>\n </Form>\n </div>\n );\n};\n","import { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { FilterOperators } from '../../models/SearchOperator.ts';\nimport {\n SearchGroupingType,\n SearchSortDirection,\n LogicalSearchOperatorEnums\n} from '../../enums/unitySystemEnums.ts';\n\nexport const InquirySearchDatasource = (\n queryData,\n apiMethodId,\n searchFilterElements,\n logicalSearchOperator = LogicalSearchOperatorEnums.And,\n executeQuery,\n searchFilterGroups\n) => {\n return {\n async getRows(params) {\n const {\n startRow,\n endRow,\n rowGroupCols,\n groupKeys,\n valueCols,\n filterModel,\n sortModel\n } = params.request;\n const page = endRow / 20;\n const searchObject = getSearchObject(\n searchFilterElements,\n page,\n null,\n false,\n logicalSearchOperator,\n searchFilterGroups\n );\n\n // handle server-side sorting on ag-grid\n if (sortModel.length) {\n const orderElements = searchObject.orderElements;\n sortModel.forEach((sortItem) => {\n const formattedPropertyName =\n sortItem.colId.charAt(0).toUpperCase() + sortItem.colId.slice(1);\n\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (element) {\n element.sortDirection = sortItem.sort.toUpperCase();\n } else {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: sortItem.sort.toUpperCase()\n });\n }\n });\n }\n\n // handle server-side filtering on ag-grid\n if (Object.keys(filterModel).length) {\n const filterElements = searchObject.filterElements;\n Object.keys(filterModel).forEach((key) => {\n const filterItem = filterModel[key];\n const formattedPropertyName =\n key.charAt(0).toUpperCase() + key.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = filterItem.filter;\n element.searchOperator = FilterOperators[filterItem.type];\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: filterItem.filter,\n searchOperator: FilterOperators[filterItem.type]\n });\n }\n });\n }\n\n // construct search for initial grouping\n if (rowGroupCols.length && !groupKeys.length) {\n const formattedPropertyName =\n rowGroupCols[0].field.charAt(0).toUpperCase() +\n rowGroupCols[0].field.slice(1);\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n\n // construct the filter for grouped columns\n if (groupKeys.length) {\n // construct search for last grouped element\n if (groupKeys.length === rowGroupCols.length) {\n searchObject.groupingType = '';\n const filterElements = searchObject.filterElements;\n groupKeys.forEach((key, index) => {\n const rowGroupCol = rowGroupCols[index];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = key;\n element.searchOperator = '=';\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: key,\n searchOperator: '='\n });\n }\n });\n } else {\n // construct search for the next grouped element\n groupKeys.forEach((key, index) => {\n const formattedPropertyNameForSearch =\n rowGroupCols[index].field.charAt(0).toUpperCase() +\n rowGroupCols[index].field.slice(1);\n\n searchObject.filterElements.push({\n searchField: formattedPropertyNameForSearch,\n searchValue: key,\n searchOperator: '='\n });\n });\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n const searchIndex = groupKeys.length;\n const rowGroupCol = rowGroupCols[searchIndex];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n }\n\n if (\n !startRow &&\n rowGroupCols.length === 0 &&\n !sortModel.length &&\n !Object.keys(filterModel).length &&\n !groupKeys.length &&\n queryData\n ) {\n if (queryData.pageList && queryData.pageList) {\n params.successCallback(queryData.pageList, queryData.total);\n } else {\n // TODO: add an overlay to display no rows\n params.successCallback([], 0);\n }\n } else {\n let response = null;\n if (executeQuery) {\n const data = { data: searchObject };\n response = await executeQuery(data, apiMethodId);\n }\n const rowData = response?.data;\n if (rowData) {\n if (rowData?.pageList?.length > 0) {\n params.successCallback(rowData.pageList, rowData.total);\n } else {\n params.successCallback([], 0);\n }\n } else {\n params.successCallback([], 0);\n }\n }\n }\n };\n};\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { useAgGridApi, AgTable } from '../../utilities/aggrid/AgTable.tsx';\nimport {\n useGridFormat,\n useExport\n} from '../../utilities/aggrid/GridFunctions.js';\nimport { PrimaryActionHeader } from '../../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { ServerSideRowModelModule } from '@ag-grid-enterprise/server-side-row-model';\nimport { camelToPascalCaseWithSpace } from '../../utilities/input/StringUtilities';\nimport { InquirySearchDatasource } from './InquirySearchDatasource';\nimport { getSearchIdentifiers } from '../../utilities/search/SearchUtilities';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { sortBy } from 'lodash';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: (props) => {\n const rowCount =\n props?.queryData?.pageList?.length > 10\n ? 10\n : props?.queryData?.pageList?.length ?? 0;\n const topResultsOnlyHeight = rowCount * 48 + 60;\n const moreResultsHeight = rowCount * 48 + 116;\n return props.topResultsOnly ? topResultsOnlyHeight : moreResultsHeight;\n }\n }\n}));\n\nexport const InquirySearchTable = (props) => {\n const {\n apiMethodId,\n associatedInquiryTree,\n catalogReturnObject,\n catalogObjects,\n columns,\n executeQuery,\n queryColumnsData,\n isAdvancedSearch,\n onRowDoubleClick,\n queryData,\n searchFilterElements,\n searchFilterGroups,\n setSelectedSearchRows,\n treeStructure,\n topResultsOnly = false,\n topResultsSize = 50\n } = props;\n\n const classes = useStyles(props);\n const { gridApi, onGridReady } = useAgGridApi();\n const [agGridOptions] = useState({});\n const [gridFormat] = useGridFormat();\n const [exportGrid] = useExport();\n\n const searchIdentifier = useMemo(() => {\n const identifiers =\n getSearchIdentifiers(catalogObjects, catalogReturnObject) || [];\n return identifiers.toString();\n }, [catalogObjects, catalogReturnObject]);\n\n const columnDefs = useMemo(() => {\n let commonCols = columns.map((column) => {\n let matchingColumnIndex = null;\n const matchingColumn = queryColumnsData.find((c, index) => {\n if (c.name === column?.name) {\n matchingColumnIndex = index;\n }\n return c.name === column?.name;\n });\n\n let def = {\n headerName: column.alias || camelToPascalCaseWithSpace(column.name),\n field: column.name\n // cellStyle: (params) => ValidateCellStylesByConditionals(params, column)\n };\n if (matchingColumn) {\n def = {\n headerName:\n matchingColumn.alias ||\n camelToPascalCaseWithSpace(matchingColumn.name),\n field: matchingColumn.name\n };\n }\n\n if (column?.extendedProperties?.searchable) {\n def = {\n ...def,\n filter: 'agTextColumnFilter',\n filterParams: {\n suppressAndOrCondition: true,\n filterOptions: [\n 'equals',\n 'contains',\n 'notEqual',\n 'greaterThan',\n 'lessThan',\n 'greaterThanOrEqual',\n 'lessThanOrEqual'\n ]\n },\n enableRowGroup: true\n };\n }\n if (column?.extendedProperties?.orderable) {\n def = {\n ...def,\n sortable: true\n };\n }\n def.hide = !matchingColumn;\n def.index = matchingColumnIndex;\n return def;\n });\n\n const currentNode = treeStructure.find(\n (node) => node.properties?.catalogReturnObject === catalogReturnObject\n );\n const searchConfiguration =\n currentNode?.properties?.searchConfiguration || null;\n let requiresOrdering = false;\n if (searchConfiguration) {\n requiresOrdering = searchConfiguration.some(\n (config) => !!config.results.trim()\n );\n }\n if (requiresOrdering) {\n // Sort columns using the searchConfiguration results\n const searchConfigWithResults = searchConfiguration.filter(\n (config) => !!config.results\n );\n commonCols.forEach((col) => {\n col.index = null;\n const foundSearchConfig = searchConfigWithResults.find(\n (config) => config.name === col.field\n );\n if (foundSearchConfig) {\n col.index = parseFloat(foundSearchConfig.results);\n }\n });\n }\n // Sort columns\n commonCols = sortBy(commonCols, (col) => col.index);\n return commonCols;\n }, [columns, queryColumnsData, treeStructure, catalogReturnObject]);\n\n const defaultColDef = useMemo(\n () => ({\n resizable: true,\n editable: false,\n // filter: true,\n enableValue: true,\n allowedAggFuncs: ['sum', 'min', 'max', 'count', 'avg', 'first', 'last']\n }),\n []\n );\n\n const rowData = useMemo(() => {\n if (!queryData) return [];\n return queryData?.pageList?.slice(0, topResultsSize);\n }, [queryData, topResultsSize]);\n\n const handleSelectionChanged = useCallback(() => {\n const selectedRows = gridApi.getSelectedRows();\n setSelectedSearchRows(\n catalogReturnObject,\n selectedRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n );\n }, [\n gridApi,\n catalogReturnObject,\n setSelectedSearchRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n ]);\n\n const handleRowDoubleClicked = useCallback(\n (event) => {\n if (!gridApi) return;\n if (onRowDoubleClick) {\n onRowDoubleClick(event.node.data, catalogReturnObject);\n }\n },\n [gridApi, onRowDoubleClick, catalogReturnObject]\n );\n\n useEffect(() => {\n if (!gridApi) return;\n gridApi.sizeColumnsToFit();\n let datasource = InquirySearchDatasource(\n queryData,\n apiMethodId,\n searchFilterElements,\n isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or,\n executeQuery,\n searchFilterGroups\n );\n // eslint-disable-next-line no-unused-expressions\n gridApi?.setServerSideDatasource(datasource);\n }, [\n gridApi,\n apiMethodId,\n searchFilterElements,\n queryData,\n isAdvancedSearch,\n executeQuery,\n searchFilterGroups\n ]);\n\n return (\n <div>\n {!topResultsOnly && (\n <>\n <PrimaryActionHeader\n hidePAB={true}\n // LAA UNT-2624: remove whitespace caused by the action row\n hideActionRow={true}\n expandAllItems={() => gridFormat(gridApi, 'expand')}\n collapse={() => gridFormat(gridApi, 'collapse')}\n resizeGrid={() => gridFormat(gridApi, 'resize')}\n exportGrid={() => exportGrid(gridApi, 'csv')}\n grid\n // value={value}\n // altInputs={value === 0 && childrenTabSwitcher}\n />\n <AgTable\n className={classes.root}\n modules={[ServerSideRowModelModule]}\n rowModelType={'serverSide'}\n serverSideStoreType={'partial'}\n pagination={true}\n paginationPageSize={20}\n cacheOverflowSize={2}\n maxConcurrentDatasourceRequests={1}\n cacheBlockSize={20}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n // animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n </>\n )}\n {topResultsOnly && (\n <AgTable\n className={classes.root}\n rowData={rowData || []}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles, LinearProgress } from '@material-ui/core';\nimport {\n getSearchObject,\n getSearchIdentifiers\n} from '../../utilities/search/SearchUtilities';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { InquirySearchTable } from './InquirySearchTable';\nimport clsx from 'clsx';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { useSearchFilterParamsMap } from '../../hooks/useSearchFilterParamsMap';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflowX: 'auto'\n },\n searchCard: {\n paddingBottom: theme.spacing(2)\n },\n emptyStateWrapper: {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '25vh'\n }\n}));\n\nexport const InquirySearchContainer = (props) => {\n const {\n advancedSearchItems,\n catalogObjects,\n classes: classProps,\n executeQueryAdHoc,\n isAdvancedSearch,\n loadSingleNode,\n onRowDoubleClick,\n searchItems,\n setSelectedSearchRows,\n apiMethodInstanceId\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n const [searchList, setSearchList] = useState(null);\n const [loading, setLoading] = useState(false);\n const {\n getQueryFilterElements,\n getQueryFilterGroups,\n getQuerySearchOperator\n } = useSearchFilterParamsMap();\n\n const getQueryColumnsData = useCallback((apiMethodInstance) => {\n if (!apiMethodInstance) return [];\n let catalogMods = [];\n try {\n const catalogModificationStr = apiMethodInstance.catalogModification;\n const catalogModification = JSON.parse(catalogModificationStr);\n catalogMods = catalogModification;\n } catch {\n console.warn('Error parsing apiMethodInstance catalogModification');\n }\n return catalogMods;\n }, []);\n\n useEffect(() => {\n if (!catalogObjects) {\n setLoading(true);\n }\n if (!searchItems || !catalogObjects?.length) return;\n setLoading(true);\n const promises = [];\n let list = [];\n const promiseIndexMap = {};\n const itemsList = !isAdvancedSearch\n ? searchItems\n : advancedSearchItems || [];\n itemsList.forEach((item, index) => {\n //Get filter elements, filter groups, and operator from query\n let filterElementsFromQuery = getQueryFilterElements(\n item.apiMethodInstance\n ); //will this handle groups? if there is group within data builder\n let filterGroups = getQueryFilterGroups(item.apiMethodInstance);\n const logicalOperatorFromQuery = getQuerySearchOperator(\n item.apiMethodInstance\n );\n // Assigning queryColumnsData object here to know which columns are hidden based on\n // data browser query\n item.queryColumnsData = getQueryColumnsData(item.apiMethodInstance);\n\n //create new outer filter group to contain all filters in data builder query\n let outerQueryGroupId = 0;\n let queryOuterGroup = null;\n if (!!filterElementsFromQuery.length) {\n outerQueryGroupId = filterGroups.length + 1;\n queryOuterGroup = {\n groupId: outerQueryGroupId,\n logicalSearchOperator: logicalOperatorFromQuery\n };\n }\n\n //create new outer filter group to contain all filters from tree builder\n let outerTreeBuilderGroupId = 0;\n let inquiryOuterGroup = null;\n if (!!item?.searchFilterElements?.length) {\n outerTreeBuilderGroupId = outerQueryGroupId + 1;\n inquiryOuterGroup = {\n groupId: outerTreeBuilderGroupId,\n logicalSearchOperator: isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or\n };\n }\n\n //make the new outer query group the parent of non parent query groups (top level groups)\n filterGroups = filterGroups.map((group) => {\n if (!group.parentGroupId) {\n group.parentGroupId = outerQueryGroupId;\n }\n return group;\n });\n\n //make the new outer group the group of filter elements with no group (top level filter elements)\n filterElementsFromQuery = filterElementsFromQuery.map((element) => {\n if (!element.groupId) {\n element.groupId = outerQueryGroupId;\n }\n return element;\n });\n\n //add outer tree builder group Id to all tree builder filter elements\n item.searchFilterElements = item.searchFilterElements.map((element) => {\n element.groupId = outerTreeBuilderGroupId;\n return element;\n });\n\n //combine data builder query filters and tree builder filters\n const searchFilterElements = filterElementsFromQuery.concat(\n item.searchFilterElements || []\n );\n\n // Reassigning searchFilterElements to use the data browser filter elements\n // and the searched one\n item.searchFilterElements = searchFilterElements;\n\n //add new outer filter groups to filter group array\n if (!!inquiryOuterGroup) {\n filterGroups.push(inquiryOuterGroup);\n }\n if (!!queryOuterGroup) {\n filterGroups.push(queryOuterGroup);\n }\n\n item.searchFilterGroups = filterGroups;\n\n const searchObject = getSearchObject(\n searchFilterElements,\n 1,\n null,\n false,\n LogicalSearchOperatorEnums.And,\n filterGroups\n );\n let shouldSearch = true;\n if (!searchFilterElements.some((sfe) => sfe.searchOperator !== '=')) {\n const equalsSearchFilterElements = searchFilterElements.filter(\n (sfe) => sfe.searchOperator === '='\n );\n if (!!equalsSearchFilterElements.length) {\n const catalogObject = catalogObjects.find(\n (co) => co.catalogObjectName === item.catalogReturnObject\n );\n const coProperties = catalogObject?.properties || [];\n if (!!coProperties.length) {\n equalsSearchFilterElements.forEach((esfe) => {\n if (!shouldSearch) {\n return;\n }\n const matchingProperty = coProperties.find(\n (cop) =>\n cop.name?.toLowerCase() === esfe.searchField?.toLowerCase()\n );\n\n if (matchingProperty?.type) {\n let compareNumber = true;\n let parsedValue = esfe.searchValue;\n switch (matchingProperty.type) {\n case 'int':\n const intRegex = /[^0-9]/;\n if (intRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseInt(esfe.searchValue);\n }\n break;\n case 'double':\n case 'decimal':\n case 'float':\n const floatRegex = /[^0-9.]/;\n if (floatRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseFloat(esfe.searchValue);\n }\n break;\n // Add additional handling for different types below\n default:\n compareNumber = false;\n break;\n }\n if (compareNumber && isNaN(parsedValue)) {\n shouldSearch = false;\n }\n }\n });\n }\n }\n }\n if (shouldSearch && executeQueryAdHoc) {\n const data = { data: searchObject };\n promiseIndexMap[promises.length] = index;\n promises.push(executeQueryAdHoc(data, item.apiMethodId));\n }\n list.push({ queryData: null, searchItem: item });\n });\n Promise.all(promises.map((p) => p.catch((e) => e))).then((responses) => {\n responses.forEach((response, i) => {\n const index = promiseIndexMap[i];\n if (response.status === 200) {\n const querySearchObj = list[index];\n querySearchObj.queryData = response.data;\n } else if (!response.status) {\n // handle response error\n const querySearchObj = list[index];\n console.error(\n `Retrieval Error Occured for ${querySearchObj?.searchItem?.catalogReturnObject}`\n );\n }\n });\n let matchingItem = list.find(\n (item) =>\n item?.searchItem?.apiMethodInstance?.apiMethodInstanceId ===\n apiMethodInstanceId && item?.queryData?.pageList?.length === 1\n );\n\n // Fallback to first item with single entry\n if (!matchingItem) {\n matchingItem = list.find(\n (item) => item?.queryData?.pageList?.length === 1\n );\n }\n\n if (matchingItem) {\n const querySearchObj = matchingItem;\n const node = {};\n const searchItem = querySearchObj?.searchItem;\n const identifiers =\n getSearchIdentifiers(\n catalogObjects,\n searchItem.catalogReturnObject\n ) || [];\n node[searchItem.catalogReturnObject] = {\n rows: matchingItem?.queryData?.pageList,\n apiMethodId: searchItem.apiMethodId,\n searchIdentifier: identifiers.toString(),\n treeStructure: searchItem.treeStructure\n };\n\n loadSingleNode(node);\n }\n\n setSearchList(list);\n setLoading(false);\n });\n }, [\n searchItems,\n isAdvancedSearch,\n advancedSearchItems,\n loadSingleNode,\n catalogObjects,\n executeQueryAdHoc,\n getQueryFilterElements,\n getQueryColumnsData,\n getQueryFilterGroups,\n getQuerySearchOperator,\n apiMethodInstanceId\n ]);\n\n return (\n <div className={clsx(classes.root, root)}>\n {loading && <LinearProgress />}\n {searchList?.map((searchObj) => {\n return (\n <div\n key={searchObj.searchItem.catalogReturnObject}\n className={classes.searchCard}\n >\n <AmbientCard\n key={`${searchObj.searchItem.catalogReturnObject}-${searchObj?.queryData?.total}`}\n title={`${getSanitizedName(\n searchObj.searchItem.catalogReturnObject\n )} - ${\n searchObj.error\n ? searchObj.error\n : searchObj?.queryData?.total || '0'\n }`}\n moreMessage='Top 10 results...'\n moreButton='Load More'\n moreButtonExpanded='Minimize'\n more={!!searchObj?.queryData?.pageList?.length}\n header\n fullWidth\n globalToggle\n collapseChildrenWhenExpanded\n toggleGlobalExpanded={!!searchObj?.queryData?.total}\n extendedList={\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n }\n >\n {!!searchObj?.queryData?.pageList?.length && (\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n topResultsOnly={true}\n topResultsSize={10}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n )}\n </AmbientCard>\n </div>\n );\n })}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search-DdbraDFl.js","names":["useStyles","uuid","useStyles","Form","element","useStyles"],"sources":["../src/inquiry/search/InquiryAdvancedSearchForm.jsx","../src/inquiry/search/InquiryAdvancedSearch.jsx","../src/inquiry/search/InquirySearchDatasource.js","../src/inquiry/search/InquirySearchTable.jsx","../src/inquiry/search/InquirySearchContainer.jsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport clsx from 'clsx';\nimport { v4 as uuid } from 'uuid';\nimport { PropertyTypeEnum } from '../../enums/propertyTypeEnums.ts';\nimport { PropertyField } from '../../UI/property/PropertyFields';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { csvStrToArrayOfObjects } from '../../utilities/input/SelectUtilities';\nimport { useForm } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n overflowX: 'auto'\n },\n fieldRow: { display: 'flex', alignItems: 'center' },\n dividerContainer: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%'\n },\n divider: { width: '100%', marginTop: theme.spacing(1) },\n autocompleteRoot: {\n width: '38%',\n marginRight: theme.spacing(1)\n }\n}));\n\nexport const InquiryAdvancedSearchForm = (props) => {\n const {\n advancedSearchFields,\n selectedSearchOperators,\n setSelectedSearchOperators,\n catalogProperties,\n entityType,\n lookupPropertyNames,\n classes: classProps,\n executeQueryWithParameters,\n setForm\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n\n const form = useForm();\n\n const handleSearchOperatorChange = useCallback(\n (value, fieldName) => {\n if (fieldName) {\n let updatedSelectedSearchOps = {};\n if (selectedSearchOperators) {\n updatedSelectedSearchOps = { ...selectedSearchOperators };\n }\n updatedSelectedSearchOps[fieldName] = value;\n setSelectedSearchOperators(updatedSelectedSearchOps);\n }\n },\n [selectedSearchOperators, setSelectedSearchOperators]\n );\n\n const getPropertyWidgetType = (type, useLookup) => {\n if (!type) {\n return null;\n }\n let propertyWidgetType = '';\n switch (type) {\n case PropertyTypeEnum.Int:\n case PropertyTypeEnum.Long:\n propertyWidgetType = 'IntegerWidget';\n break;\n case PropertyTypeEnum.DateTime:\n propertyWidgetType = 'DateTimeWidget';\n break;\n case PropertyTypeEnum.Boolean:\n propertyWidgetType = 'BooleanWidget';\n break;\n default:\n propertyWidgetType = 'TextWidget';\n }\n\n if (\n useLookup === LookupTypeEnums.Api ||\n useLookup === LookupTypeEnums.Csv\n ) {\n propertyWidgetType = 'AutoCompleteWidget';\n }\n\n return propertyWidgetType;\n };\n\n const getPropertyTypeSearchOperators = useCallback((type) => {\n if (!type) {\n return [];\n }\n switch (type) {\n case PropertyTypeEnum.Boolean:\n return SearchOperators.filter((operator) => operator.value === '=');\n default:\n return SearchOperators;\n }\n }, []);\n\n const fieldRows = useMemo(() => {\n if (!advancedSearchFields || !catalogProperties) {\n return [];\n }\n const keys = Object.keys(advancedSearchFields);\n\n const arrayOfFields = keys.reduce((list, key) => {\n const groupedItems = advancedSearchFields[key];\n let groupHeader = '';\n const foundGroupItem = groupedItems.find((item) => !!item.groupHeader);\n if (foundGroupItem) {\n groupHeader = foundGroupItem.groupHeader;\n }\n list.push({ groupHeader: groupHeader, isDivider: true, id: uuid() });\n groupedItems.forEach(async (item) => {\n const foundProperty = catalogProperties.find(\n (property) => property.name === item.name\n );\n const propertyWidgetType = getPropertyWidgetType(\n foundProperty?.type,\n foundProperty?.extendedProperties?.useLookup\n );\n let apiLookupOptions = null;\n if (\n !item.searchable &&\n !foundProperty?.extendedProperties?.searchable\n ) {\n return;\n }\n if (\n lookupPropertyNames.includes(foundProperty?.name) &&\n foundProperty?.extendedProperties?.useLookup === LookupTypeEnums.Api\n ) {\n // TODO: handle getting lookup data with api call\n // const response = await executeQueryWithParameters(\n // 'aa5d1fe1-1128-4d08-9ddb-58ad4fcf00e4'\n // );\n // console.log(response?.data);\n }\n list.push({\n ...item,\n isDivider: false,\n type: foundProperty?.type,\n propertyWidgetType: propertyWidgetType,\n useLookup: foundProperty?.extendedProperties?.useLookup,\n lookup: foundProperty?.extendedProperties?.lookup,\n apiLookupOptions: apiLookupOptions\n });\n });\n return list;\n }, []);\n return arrayOfFields;\n }, [advancedSearchFields, catalogProperties, lookupPropertyNames]);\n\n const getPropertyFields = useCallback(\n (config) => {\n const searchOperator = selectedSearchOperators\n ? selectedSearchOperators[config?.name]?.value\n : null;\n let options = [];\n if (config?.useLookup === LookupTypeEnums.Csv) {\n options = csvStrToArrayOfObjects(config?.lookup);\n }\n if (searchOperator === 'BETWEEN') {\n return (\n <div style={{ display: 'block', width: '100%' }}>\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: `${config?.columnName} (From)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n <PropertyField\n propertyType={entityType}\n property={{\n key: `${config?.name}:between`,\n label: `${config?.columnName} (To)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n </div>\n );\n }\n\n return (\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: config?.columnName,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n );\n },\n [entityType, selectedSearchOperators]\n );\n\n const fieldComponents = useMemo(() => {\n if (!fieldRows || !fieldRows.length) {\n return null;\n }\n return fieldRows.map((config) => {\n return (\n <div key={config?.id}>\n {!config?.isDivider && (\n <div className={classes.fieldRow}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearchForm-Text'\n udprecordid='udpRecord-InquiryAdvancedSearchForm-Text'\n label='Operator'\n name='searchOperator'\n variant='outlined'\n margin='dense'\n size='small'\n options={getPropertyTypeSearchOperators(config?.type) || []}\n optionKey='label'\n value={\n (selectedSearchOperators &&\n selectedSearchOperators[config?.name]) ||\n ''\n }\n onChange={(value) =>\n handleSearchOperatorChange(value, config?.name)\n }\n classes={{ autocompleteRoot: classes.autocompleteRoot }}\n />\n {getPropertyFields(config)}\n </div>\n )}\n {config?.isDivider && (\n <div className={classes.dividerContainer}>\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n {config?.groupHeader && (\n <div\n style={{\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'center',\n whiteSpace: 'nowrap'\n }}\n >\n <Typography variant='caption'>\n {config?.groupHeader}\n </Typography>\n </div>\n )}\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n </div>\n )}\n </div>\n );\n });\n }, [\n fieldRows,\n classes,\n handleSearchOperatorChange,\n selectedSearchOperators,\n getPropertyTypeSearchOperators,\n getPropertyFields\n ]);\n\n useEffect(() => {\n if (form) {\n setForm(form);\n }\n }, [form, setForm]);\n\n return <div className={clsx(classes.root, root)}>{fieldComponents}</div>;\n};\n","import React, { useState, useMemo, useEffect, useCallback } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { SubmitButton } from '../../utilities/form/SubmitButton.tsx';\nimport { Form } from '../../utilities/form/Form.tsx';\nimport { FormButtons } from '../../utilities/form/FormButtons.tsx';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { orderBy } from 'lodash';\nimport { InquiryAdvancedSearchForm } from './InquiryAdvancedSearchForm';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport { FluentIconButton } from '../../UI/inputs/buttons/FluentIconButton';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { ClearIcon } from '@fluentui/react-icons';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities.js';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n entitySelect: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n fieldsRoot: {\n height: (props) => 'calc(100vh - 288px)'\n },\n title: {\n display: 'flex',\n justifyContent: 'space-between',\n margin: theme.spacing(1)\n },\n buttonWrapper: {\n textAlign: 'center'\n },\n button: {\n textTransform: 'none',\n padding: 0,\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n color: theme.palette.secondary\n }\n}));\n\nexport const InquiryAdvancedSearch = (props) => {\n const {\n entityList,\n onSubmit,\n currentNodeCatalogReturnObject,\n catalogObjects,\n entityValue,\n setEntityValue,\n changeSideBarView,\n tree,\n executeQueryWithParameters\n } = props;\n const classes = useStyles(props);\n\n const [initialSelectedSearchOperators, setInitialSelectedSearchOperators] =\n useState(null);\n const [selectedSearchOperators, setSelectedSearchOperators] = useState(null);\n const [form, setForm] = useState(null);\n\n const entityTree = useMemo(() => {\n if (!entityValue || !tree) {\n return null;\n }\n const matchingEntityTree = tree.treeStructure.find(\n (node) => node.properties.catalogReturnObject === entityValue.value\n );\n let nodeTree = tree;\n if (matchingEntityTree?.properties?.associatedInquiryTree) {\n nodeTree = matchingEntityTree?.properties?.associatedInquiryTree;\n }\n return nodeTree;\n }, [tree, entityValue]);\n\n const catalogProperties = useMemo(() => {\n if (!entityValue || !catalogObjects) {\n return [];\n }\n const foundCatalogObject = catalogObjects.find(\n (catalog) => catalog.catalogObjectName === entityValue.value\n );\n return foundCatalogObject?.properties || [];\n }, [catalogObjects, entityValue]);\n\n const advancedSearchFields = useMemo(() => {\n if (!entityTree) {\n return null;\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchConfiguration =\n parentNode?.properties?.searchConfiguration?.filter(\n (config) => config.advancedSearch\n );\n advancedSearchConfiguration?.forEach(\n (config) =>\n (config.advancedSearch = Number.parseFloat(config.advancedSearch))\n );\n const orderedSearchConfiguration = orderBy(\n advancedSearchConfiguration,\n ['advancedSearch'],\n ['asc']\n );\n\n const groupedAndOrderdFields = {};\n\n orderedSearchConfiguration.forEach((config) => {\n const wholeInt = Math.floor(config.advancedSearch);\n if (!groupedAndOrderdFields[wholeInt]) {\n groupedAndOrderdFields[wholeInt] = [config];\n } else {\n groupedAndOrderdFields[wholeInt].push(config);\n }\n });\n return groupedAndOrderdFields;\n }, [entityTree]);\n\n const asCatalogLookupPropertyNames = useMemo(() => {\n if (!entityTree) {\n return [];\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchPropertyName =\n parentNode?.properties?.searchConfiguration\n ?.filter((config) => config.advancedSearch)\n .map((asConfig) => asConfig.name);\n const filteredProperties = catalogProperties.filter((property) =>\n advancedSearchPropertyName?.includes(property.name)\n );\n const lookupPropertyNames = [];\n filteredProperties.forEach((property) => {\n if (\n property?.extendedProperties?.useLookup !== LookupTypeEnums.No_Lookup ||\n !property?.extendedProperties?.useLookup\n ) {\n lookupPropertyNames.push(property.name);\n }\n });\n return lookupPropertyNames;\n }, [catalogProperties, entityTree]);\n\n const handleEntityChange = (value) => {\n setEntityValue(value);\n };\n\n const handleOnSubmit = useCallback(\n (values) => {\n if (onSubmit) {\n onSubmit(\n values,\n selectedSearchOperators,\n entityValue?.value,\n asCatalogLookupPropertyNames\n );\n }\n },\n [\n onSubmit,\n selectedSearchOperators,\n entityValue,\n asCatalogLookupPropertyNames\n ]\n );\n\n const handleClearFilter = useCallback(() => {\n if (form) {\n form.reset();\n }\n setSelectedSearchOperators(initialSelectedSearchOperators);\n }, [initialSelectedSearchOperators, form]);\n\n useEffect(() => {\n if (entityList?.length) {\n const foundEntity = entityList.find(\n (entity) => entity.value === currentNodeCatalogReturnObject\n );\n if (foundEntity) {\n setEntityValue(foundEntity);\n }\n }\n }, [entityList, currentNodeCatalogReturnObject, setEntityValue]);\n\n useEffect(() => {\n if (advancedSearchFields) {\n const mergedFields = [].concat.apply(\n [],\n Object.values(advancedSearchFields)\n );\n const initialSearchOperators = mergedFields.reduce((operators, field) => {\n if (field.advancedSearchOperator) {\n const foundOperator = SearchOperators.find(\n (op) => op.value === field.advancedSearchOperator\n );\n operators[field.name] = foundOperator ?? SearchOperators[0];\n } else {\n operators[field.name] = SearchOperators[0];\n }\n return operators;\n }, {});\n\n setInitialSelectedSearchOperators(initialSearchOperators);\n setSelectedSearchOperators(initialSearchOperators);\n }\n }, [advancedSearchFields]);\n\n return (\n <div className={classes.root}>\n <div>\n <Divider />\n </div>\n <div className={classes.title}>\n <Typography variant='subtitle1'>Advanced Search</Typography>\n <FluentIconButton\n id='udpRecord-InquiryAdvancedSearch-ClearIcon'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearIcon'\n icon={ClearIcon}\n onClick={() => changeSideBarView(0)}\n />\n </div>\n <div className={classes.entitySelect}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearch-TextField'\n udprecordid='udpRecord-InquiryAdvancedSearch-TextField'\n label='Entity'\n variant='outlined'\n margin='normal'\n size='small'\n fullWidth\n options={entityList}\n optionKey='label'\n value={entityValue}\n onChange={handleEntityChange}\n />\n </div>\n <Form onSubmit={handleOnSubmit}>\n <InquiryAdvancedSearchForm\n advancedSearchFields={advancedSearchFields}\n selectedSearchOperators={selectedSearchOperators}\n setSelectedSearchOperators={setSelectedSearchOperators}\n catalogProperties={catalogProperties}\n entityType={getSanitizedName(entityValue?.value)}\n lookupPropertyNames={asCatalogLookupPropertyNames}\n classes={{ root: classes.fieldsRoot }}\n executeQueryWithParameters={executeQueryWithParameters}\n setForm={setForm}\n />\n <div className={classes.submitWrapper}>\n <div className={classes.buttonWrapper}>\n <FluentButton\n id='udpRecord-InquiryAdvancedSearch-ClearFilter'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearFilter'\n onClick={handleClearFilter}\n className={classes.button}\n >\n <Typography variant='subtitle1'>Clear Filter</Typography>\n </FluentButton>\n <FormButtons>\n <SubmitButton\n id='udpRecord-InquiryAdvancedSearch-Search'\n udprecordid='udpRecord-InquiryAdvancedSearch-Search'\n variant='contained'\n color='primary'\n disablePristine={false}\n disabled={!entityValue}\n fullWidth\n style={{ marginRight: 8, marginLeft: 8 }}\n >\n Search\n </SubmitButton>\n </FormButtons>\n </div>\n </div>\n </Form>\n </div>\n );\n};\n","import { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { FilterOperators } from '../../models/SearchOperator.ts';\nimport {\n SearchGroupingType,\n SearchSortDirection,\n LogicalSearchOperatorEnums\n} from '../../enums/unitySystemEnums.ts';\n\nexport const InquirySearchDatasource = (\n queryData,\n apiMethodId,\n searchFilterElements,\n logicalSearchOperator = LogicalSearchOperatorEnums.And,\n executeQuery,\n searchFilterGroups\n) => {\n return {\n async getRows(params) {\n const {\n startRow,\n endRow,\n rowGroupCols,\n groupKeys,\n valueCols,\n filterModel,\n sortModel\n } = params.request;\n const page = endRow / 20;\n const searchObject = getSearchObject(\n searchFilterElements,\n page,\n null,\n false,\n logicalSearchOperator,\n searchFilterGroups\n );\n\n // handle server-side sorting on ag-grid\n if (sortModel.length) {\n const orderElements = searchObject.orderElements;\n sortModel.forEach((sortItem) => {\n const formattedPropertyName =\n sortItem.colId.charAt(0).toUpperCase() + sortItem.colId.slice(1);\n\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (element) {\n element.sortDirection = sortItem.sort.toUpperCase();\n } else {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: sortItem.sort.toUpperCase()\n });\n }\n });\n }\n\n // handle server-side filtering on ag-grid\n if (Object.keys(filterModel).length) {\n const filterElements = searchObject.filterElements;\n Object.keys(filterModel).forEach((key) => {\n const filterItem = filterModel[key];\n const formattedPropertyName =\n key.charAt(0).toUpperCase() + key.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = filterItem.filter;\n element.searchOperator = FilterOperators[filterItem.type];\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: filterItem.filter,\n searchOperator: FilterOperators[filterItem.type]\n });\n }\n });\n }\n\n // construct search for initial grouping\n if (rowGroupCols.length && !groupKeys.length) {\n const formattedPropertyName =\n rowGroupCols[0].field.charAt(0).toUpperCase() +\n rowGroupCols[0].field.slice(1);\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n\n // construct the filter for grouped columns\n if (groupKeys.length) {\n // construct search for last grouped element\n if (groupKeys.length === rowGroupCols.length) {\n searchObject.groupingType = '';\n const filterElements = searchObject.filterElements;\n groupKeys.forEach((key, index) => {\n const rowGroupCol = rowGroupCols[index];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = key;\n element.searchOperator = '=';\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: key,\n searchOperator: '='\n });\n }\n });\n } else {\n // construct search for the next grouped element\n groupKeys.forEach((key, index) => {\n const formattedPropertyNameForSearch =\n rowGroupCols[index].field.charAt(0).toUpperCase() +\n rowGroupCols[index].field.slice(1);\n\n searchObject.filterElements.push({\n searchField: formattedPropertyNameForSearch,\n searchValue: key,\n searchOperator: '='\n });\n });\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n const searchIndex = groupKeys.length;\n const rowGroupCol = rowGroupCols[searchIndex];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n }\n\n if (\n !startRow &&\n rowGroupCols.length === 0 &&\n !sortModel.length &&\n !Object.keys(filterModel).length &&\n !groupKeys.length &&\n queryData\n ) {\n if (queryData.pageList && queryData.pageList) {\n params.successCallback(queryData.pageList, queryData.total);\n } else {\n // TODO: add an overlay to display no rows\n params.successCallback([], 0);\n }\n } else {\n let response = null;\n if (executeQuery) {\n const data = { data: searchObject };\n response = await executeQuery(data, apiMethodId);\n }\n const rowData = response?.data;\n if (rowData) {\n if (rowData?.pageList?.length > 0) {\n params.successCallback(rowData.pageList, rowData.total);\n } else {\n params.successCallback([], 0);\n }\n } else {\n params.successCallback([], 0);\n }\n }\n }\n };\n};\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { useAgGridApi, AgTable } from '../../utilities/aggrid/AgTable.tsx';\nimport {\n useGridFormat,\n useExport\n} from '../../utilities/aggrid/GridFunctions.js';\nimport { PrimaryActionHeader } from '../../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { ServerSideRowModelModule } from '@ag-grid-enterprise/server-side-row-model';\nimport { camelToPascalCaseWithSpace } from '../../utilities/input/StringUtilities';\nimport { InquirySearchDatasource } from './InquirySearchDatasource';\nimport { getSearchIdentifiers } from '../../utilities/search/SearchUtilities';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { sortBy } from 'lodash';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: (props) => {\n const rowCount =\n props?.queryData?.pageList?.length > 10\n ? 10\n : props?.queryData?.pageList?.length ?? 0;\n const topResultsOnlyHeight = rowCount * 48 + 60;\n const moreResultsHeight = rowCount * 48 + 116;\n return props.topResultsOnly ? topResultsOnlyHeight : moreResultsHeight;\n }\n }\n}));\n\nexport const InquirySearchTable = (props) => {\n const {\n apiMethodId,\n associatedInquiryTree,\n catalogReturnObject,\n catalogObjects,\n columns,\n executeQuery,\n queryColumnsData,\n isAdvancedSearch,\n onRowDoubleClick,\n queryData,\n searchFilterElements,\n searchFilterGroups,\n setSelectedSearchRows,\n treeStructure,\n topResultsOnly = false,\n topResultsSize = 50\n } = props;\n\n const classes = useStyles(props);\n const { gridApi, onGridReady } = useAgGridApi();\n const [agGridOptions] = useState({});\n const [gridFormat] = useGridFormat();\n const [exportGrid] = useExport();\n\n const searchIdentifier = useMemo(() => {\n const identifiers =\n getSearchIdentifiers(catalogObjects, catalogReturnObject) || [];\n return identifiers.toString();\n }, [catalogObjects, catalogReturnObject]);\n\n const columnDefs = useMemo(() => {\n let commonCols = columns.map((column) => {\n let matchingColumnIndex = null;\n const matchingColumn = queryColumnsData.find((c, index) => {\n if (c.name === column?.name) {\n matchingColumnIndex = index;\n }\n return c.name === column?.name;\n });\n\n let def = {\n headerName: column.alias || camelToPascalCaseWithSpace(column.name),\n field: column.name\n // cellStyle: (params) => ValidateCellStylesByConditionals(params, column)\n };\n if (matchingColumn) {\n def = {\n headerName:\n matchingColumn.alias ||\n camelToPascalCaseWithSpace(matchingColumn.name),\n field: matchingColumn.name\n };\n }\n\n if (column?.extendedProperties?.searchable) {\n def = {\n ...def,\n filter: 'agTextColumnFilter',\n filterParams: {\n suppressAndOrCondition: true,\n filterOptions: [\n 'equals',\n 'contains',\n 'notEqual',\n 'greaterThan',\n 'lessThan',\n 'greaterThanOrEqual',\n 'lessThanOrEqual'\n ]\n },\n enableRowGroup: true\n };\n }\n if (column?.extendedProperties?.orderable) {\n def = {\n ...def,\n sortable: true\n };\n }\n def.hide = !matchingColumn;\n def.index = matchingColumnIndex;\n return def;\n });\n\n const currentNode = treeStructure.find(\n (node) => node.properties?.catalogReturnObject === catalogReturnObject\n );\n const searchConfiguration =\n currentNode?.properties?.searchConfiguration || null;\n let requiresOrdering = false;\n if (searchConfiguration) {\n requiresOrdering = searchConfiguration.some(\n (config) => !!config.results.trim()\n );\n }\n if (requiresOrdering) {\n // Sort columns using the searchConfiguration results\n const searchConfigWithResults = searchConfiguration.filter(\n (config) => !!config.results\n );\n commonCols.forEach((col) => {\n col.index = null;\n const foundSearchConfig = searchConfigWithResults.find(\n (config) => config.name === col.field\n );\n if (foundSearchConfig) {\n col.index = parseFloat(foundSearchConfig.results);\n }\n });\n }\n // Sort columns\n commonCols = sortBy(commonCols, (col) => col.index);\n return commonCols;\n }, [columns, queryColumnsData, treeStructure, catalogReturnObject]);\n\n const defaultColDef = useMemo(\n () => ({\n resizable: true,\n editable: false,\n // filter: true,\n enableValue: true,\n allowedAggFuncs: ['sum', 'min', 'max', 'count', 'avg', 'first', 'last']\n }),\n []\n );\n\n const rowData = useMemo(() => {\n if (!queryData) return [];\n return queryData?.pageList?.slice(0, topResultsSize);\n }, [queryData, topResultsSize]);\n\n const handleSelectionChanged = useCallback(() => {\n const selectedRows = gridApi.getSelectedRows();\n setSelectedSearchRows(\n catalogReturnObject,\n selectedRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n );\n }, [\n gridApi,\n catalogReturnObject,\n setSelectedSearchRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n ]);\n\n const handleRowDoubleClicked = useCallback(\n (event) => {\n if (!gridApi) return;\n if (onRowDoubleClick) {\n onRowDoubleClick(event.node.data, catalogReturnObject);\n }\n },\n [gridApi, onRowDoubleClick, catalogReturnObject]\n );\n\n useEffect(() => {\n if (!gridApi) return;\n gridApi.sizeColumnsToFit();\n let datasource = InquirySearchDatasource(\n queryData,\n apiMethodId,\n searchFilterElements,\n isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or,\n executeQuery,\n searchFilterGroups\n );\n // eslint-disable-next-line no-unused-expressions\n gridApi?.setServerSideDatasource(datasource);\n }, [\n gridApi,\n apiMethodId,\n searchFilterElements,\n queryData,\n isAdvancedSearch,\n executeQuery,\n searchFilterGroups\n ]);\n\n return (\n <div>\n {!topResultsOnly && (\n <>\n <PrimaryActionHeader\n hidePAB={true}\n // LAA UNT-2624: remove whitespace caused by the action row\n hideActionRow={true}\n expandAllItems={() => gridFormat(gridApi, 'expand')}\n collapse={() => gridFormat(gridApi, 'collapse')}\n resizeGrid={() => gridFormat(gridApi, 'resize')}\n exportGrid={() => exportGrid(gridApi, 'csv')}\n grid\n // value={value}\n // altInputs={value === 0 && childrenTabSwitcher}\n />\n <AgTable\n className={classes.root}\n modules={[ServerSideRowModelModule]}\n rowModelType={'serverSide'}\n serverSideStoreType={'partial'}\n pagination={true}\n paginationPageSize={20}\n cacheOverflowSize={2}\n maxConcurrentDatasourceRequests={1}\n cacheBlockSize={20}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n // animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n </>\n )}\n {topResultsOnly && (\n <AgTable\n className={classes.root}\n rowData={rowData || []}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles, LinearProgress } from '@material-ui/core';\nimport {\n getSearchObject,\n getSearchIdentifiers\n} from '../../utilities/search/SearchUtilities';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { InquirySearchTable } from './InquirySearchTable';\nimport clsx from 'clsx';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { useSearchFilterParamsMap } from '../../hooks/useSearchFilterParamsMap';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflowX: 'auto'\n },\n searchCard: {\n paddingBottom: theme.spacing(2)\n },\n emptyStateWrapper: {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '25vh'\n }\n}));\n\nexport const InquirySearchContainer = (props) => {\n const {\n advancedSearchItems,\n catalogObjects,\n classes: classProps,\n executeQueryAdHoc,\n isAdvancedSearch,\n loadSingleNode,\n onRowDoubleClick,\n searchItems,\n setSelectedSearchRows,\n apiMethodInstanceId\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n const [searchList, setSearchList] = useState(null);\n const [loading, setLoading] = useState(false);\n const {\n getQueryFilterElements,\n getQueryFilterGroups,\n getQuerySearchOperator\n } = useSearchFilterParamsMap();\n\n const getQueryColumnsData = useCallback((apiMethodInstance) => {\n if (!apiMethodInstance) return [];\n let catalogMods = [];\n try {\n const catalogModificationStr = apiMethodInstance.catalogModification;\n const catalogModification = JSON.parse(catalogModificationStr);\n catalogMods = catalogModification;\n } catch {\n console.warn('Error parsing apiMethodInstance catalogModification');\n }\n return catalogMods;\n }, []);\n\n useEffect(() => {\n if (!catalogObjects) {\n setLoading(true);\n }\n if (!searchItems || !catalogObjects?.length) return;\n setLoading(true);\n const promises = [];\n let list = [];\n const promiseIndexMap = {};\n const itemsList = !isAdvancedSearch\n ? searchItems\n : advancedSearchItems || [];\n itemsList.forEach((item, index) => {\n //Get filter elements, filter groups, and operator from query\n let filterElementsFromQuery = getQueryFilterElements(\n item.apiMethodInstance\n ); //will this handle groups? if there is group within data builder\n let filterGroups = getQueryFilterGroups(item.apiMethodInstance);\n const logicalOperatorFromQuery = getQuerySearchOperator(\n item.apiMethodInstance\n );\n // Assigning queryColumnsData object here to know which columns are hidden based on\n // data browser query\n item.queryColumnsData = getQueryColumnsData(item.apiMethodInstance);\n\n //create new outer filter group to contain all filters in data builder query\n let outerQueryGroupId = 0;\n let queryOuterGroup = null;\n if (!!filterElementsFromQuery.length) {\n outerQueryGroupId = filterGroups.length + 1;\n queryOuterGroup = {\n groupId: outerQueryGroupId,\n logicalSearchOperator: logicalOperatorFromQuery\n };\n }\n\n //create new outer filter group to contain all filters from tree builder\n let outerTreeBuilderGroupId = 0;\n let inquiryOuterGroup = null;\n if (!!item?.searchFilterElements?.length) {\n outerTreeBuilderGroupId = outerQueryGroupId + 1;\n inquiryOuterGroup = {\n groupId: outerTreeBuilderGroupId,\n logicalSearchOperator: isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or\n };\n }\n\n //make the new outer query group the parent of non parent query groups (top level groups)\n filterGroups = filterGroups.map((group) => {\n if (!group.parentGroupId) {\n group.parentGroupId = outerQueryGroupId;\n }\n return group;\n });\n\n //make the new outer group the group of filter elements with no group (top level filter elements)\n filterElementsFromQuery = filterElementsFromQuery.map((element) => {\n if (!element.groupId) {\n element.groupId = outerQueryGroupId;\n }\n return element;\n });\n\n //add outer tree builder group Id to all tree builder filter elements\n item.searchFilterElements = item.searchFilterElements.map((element) => {\n element.groupId = outerTreeBuilderGroupId;\n return element;\n });\n\n //combine data builder query filters and tree builder filters\n const searchFilterElements = filterElementsFromQuery.concat(\n item.searchFilterElements || []\n );\n\n // Reassigning searchFilterElements to use the data browser filter elements\n // and the searched one\n item.searchFilterElements = searchFilterElements;\n\n //add new outer filter groups to filter group array\n if (!!inquiryOuterGroup) {\n filterGroups.push(inquiryOuterGroup);\n }\n if (!!queryOuterGroup) {\n filterGroups.push(queryOuterGroup);\n }\n\n item.searchFilterGroups = filterGroups;\n\n const searchObject = getSearchObject(\n searchFilterElements,\n 1,\n null,\n false,\n LogicalSearchOperatorEnums.And,\n filterGroups\n );\n let shouldSearch = true;\n if (!searchFilterElements.some((sfe) => sfe.searchOperator !== '=')) {\n const equalsSearchFilterElements = searchFilterElements.filter(\n (sfe) => sfe.searchOperator === '='\n );\n if (!!equalsSearchFilterElements.length) {\n const catalogObject = catalogObjects.find(\n (co) => co.catalogObjectName === item.catalogReturnObject\n );\n const coProperties = catalogObject?.properties || [];\n if (!!coProperties.length) {\n equalsSearchFilterElements.forEach((esfe) => {\n if (!shouldSearch) {\n return;\n }\n const matchingProperty = coProperties.find(\n (cop) =>\n cop.name?.toLowerCase() === esfe.searchField?.toLowerCase()\n );\n\n if (matchingProperty?.type) {\n let compareNumber = true;\n let parsedValue = esfe.searchValue;\n switch (matchingProperty.type) {\n case 'int':\n const intRegex = /[^0-9]/;\n if (intRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseInt(esfe.searchValue);\n }\n break;\n case 'double':\n case 'decimal':\n case 'float':\n const floatRegex = /[^0-9.]/;\n if (floatRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseFloat(esfe.searchValue);\n }\n break;\n // Add additional handling for different types below\n default:\n compareNumber = false;\n break;\n }\n if (compareNumber && isNaN(parsedValue)) {\n shouldSearch = false;\n }\n }\n });\n }\n }\n }\n if (shouldSearch && executeQueryAdHoc) {\n const data = { data: searchObject };\n promiseIndexMap[promises.length] = index;\n promises.push(executeQueryAdHoc(data, item.apiMethodId));\n }\n list.push({ queryData: null, searchItem: item });\n });\n Promise.all(promises.map((p) => p.catch((e) => e))).then((responses) => {\n responses.forEach((response, i) => {\n const index = promiseIndexMap[i];\n if (response.status === 200) {\n const querySearchObj = list[index];\n querySearchObj.queryData = response.data;\n } else if (!response.status) {\n // handle response error\n const querySearchObj = list[index];\n console.error(\n `Retrieval Error Occured for ${querySearchObj?.searchItem?.catalogReturnObject}`\n );\n }\n });\n let matchingItem = list.find(\n (item) =>\n item?.searchItem?.apiMethodInstance?.apiMethodInstanceId ===\n apiMethodInstanceId && item?.queryData?.pageList?.length === 1\n );\n\n // Fallback to first item with single entry\n if (!matchingItem) {\n matchingItem = list.find(\n (item) => item?.queryData?.pageList?.length === 1\n );\n }\n\n if (matchingItem) {\n const querySearchObj = matchingItem;\n const node = {};\n const searchItem = querySearchObj?.searchItem;\n const identifiers =\n getSearchIdentifiers(\n catalogObjects,\n searchItem.catalogReturnObject\n ) || [];\n node[searchItem.catalogReturnObject] = {\n rows: matchingItem?.queryData?.pageList,\n apiMethodId: searchItem.apiMethodId,\n searchIdentifier: identifiers.toString(),\n treeStructure: searchItem.treeStructure\n };\n\n loadSingleNode(node);\n }\n\n setSearchList(list);\n setLoading(false);\n });\n }, [\n searchItems,\n isAdvancedSearch,\n advancedSearchItems,\n loadSingleNode,\n catalogObjects,\n executeQueryAdHoc,\n getQueryFilterElements,\n getQueryColumnsData,\n getQueryFilterGroups,\n getQuerySearchOperator,\n apiMethodInstanceId\n ]);\n\n return (\n <div className={clsx(classes.root, root)}>\n {loading && <LinearProgress />}\n {searchList?.map((searchObj) => {\n return (\n <div\n key={searchObj.searchItem.catalogReturnObject}\n className={classes.searchCard}\n >\n <AmbientCard\n key={`${searchObj.searchItem.catalogReturnObject}-${searchObj?.queryData?.total}`}\n title={`${getSanitizedName(\n searchObj.searchItem.catalogReturnObject\n )} - ${\n searchObj.error\n ? searchObj.error\n : searchObj?.queryData?.total || '0'\n }`}\n moreMessage='Top 10 results...'\n moreButton='Load More'\n moreButtonExpanded='Minimize'\n more={!!searchObj?.queryData?.pageList?.length}\n header\n fullWidth\n globalToggle\n collapseChildrenWhenExpanded\n toggleGlobalExpanded={!!searchObj?.queryData?.total}\n extendedList={\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n }\n >\n {!!searchObj?.queryData?.pageList?.length && (\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n topResultsOnly={true}\n topResultsSize={10}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n )}\n </AmbientCard>\n </div>\n );\n })}\n </div>\n );\n};\n"],"mappings":"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"}
|