{"version":3,"file":"InquirySearchDatasource.mjs","names":["getSearchObject","FilterOperators","SearchGroupingType","SearchSortDirection","LogicalSearchOperatorEnums","InquirySearchDatasource","queryData","apiMethodId","searchFilterElements","logicalSearchOperator","And","executeQuery","searchFilterGroups","getRows","params","startRow","endRow","rowGroupCols","groupKeys","valueCols","filterModel","sortModel","request","page","searchObject","length","orderElements","forEach","sortItem","formattedPropertyName","colId","charAt","toUpperCase","slice","element","find","sortColumn","sortDirection","sort","push","Object","keys","filterElements","key","filterItem","searchField","searchValue","filter","searchOperator","type","field","groupingType","Distinct","groupProperty","includes","Asc","index","rowGroupCol","formattedPropertyNameForSearch","searchIndex","pageList","successCallback","total","response","data","rowData"],"sources":["../../../src/inquiry/search/InquirySearchDatasource.js"],"sourcesContent":["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"],"mappings":"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"}