{"version":3,"file":"aggridHelpers.mjs","names":["useMemo","IServerSideDatasource","IServerSideGetRowsParams","SearchGroupingType","useConvertFilterModelToSearchFilters","useServerSideDatasource","refetchData","refetchGroupData","filterChanged","setFilterChanged","$","_c","convertFilterModelToSearchFilters","t0","getRows","params","endRow","sortModel","filterModel","rowGroupCols","groupKeys","request","refetch","pageSize","api","paginationGetPageSize","pageNumber","current","isNaN","column","colId","sortDirection","sort","sortInfo","push","sortColumn","searchFilters","groupingColumns","map","_temp","groupingType","length","Distinct","forEach","key","index","rowGroupCol","element_0","find","element","searchField","field","searchValue","searchOperator","id","searchValueType","search","orderElements","filterElements","groupProperty","hideOverlay","response","data","catch","success","rowData","rowCount","showNoRowsOverlay","pageList","parseInt","total","headers","totalrows","paginationGoToFirstPage","fail","ds","dataSource","col"],"sources":["../../../src/utilities/aggrid/aggridHelpers.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n  IServerSideDatasource,\n  IServerSideGetRowsParams\n} from '@ag-grid-community/core';\nimport { SearchGroupingType } from '../../enums/unitySystemEnums';\nimport { useConvertFilterModelToSearchFilters } from '../search/SearchUtilities';\n\nexport const useServerSideDatasource = (\n  refetchData: Function,\n  refetchGroupData: any,\n  filterChanged: any, // a ref (from useRef()) for detecting when a grid's filters have been changed\n  setFilterChanged: any\n) => {\n  const convertFilterModelToSearchFilters =\n    useConvertFilterModelToSearchFilters();\n\n  const dataSource = useMemo(() => {\n    const ds: IServerSideDatasource = {\n      async getRows(params: IServerSideGetRowsParams) {\n        if (!params) return;\n        const {\n          startRow,\n          endRow,\n          sortModel,\n          filterModel,\n          rowGroupCols,\n          groupKeys\n        } = params?.request || {};\n        let refetch = refetchData;\n        const pageSize = params?.api?.paginationGetPageSize();\n        let pageNumber =\n          filterChanged.current === true ? 1 : (endRow as number) / pageSize;\n        if (isNaN(pageNumber)) {\n          pageNumber = 1;\n        }\n\n        // Sorting\n        let column = sortModel[0]?.colId ?? '';\n        let sortDirection = sortModel[0]?.sort ?? '';\n        let sortInfo: any = [];\n        if (column && sortDirection) {\n          sortInfo.push({ sortColumn: column, sortDirection: sortDirection });\n        }\n\n        // Filtering\n        let searchFilters: any = [];\n        searchFilters = convertFilterModelToSearchFilters(filterModel);\n\n        // Grouping\n        const groupingColumns = rowGroupCols?.map((col) => col.id);\n        let groupingType = '';\n        // As we are attempting to mimic the grouping functionality of the unity-fluent-library component AmbientGridTemplate which allows\n        // grouping on only one column/property at a time, the following logic is to ensure the appropriate grouping endpoint is hit\n        // and that the grouping portion of the query in the back-end is added (setting groupingType = AGGREGATE or DISTINCT takes care of this)\n        // only when selecting a column to group by. Then, expanding that group would hit a different endpoint to retrieve all rows using the grouping\n        // value as a filter value.\n        if (groupingColumns.length > 0 && groupKeys.length === 0) {\n          groupingType = SearchGroupingType.Distinct;\n          refetch = refetchGroupData ? refetchGroupData : refetchData;\n        }\n\n        // Create the filter for the grouped column\n        if (groupKeys.length) {\n          if (groupKeys.length === rowGroupCols.length) {\n            groupKeys.forEach((key, index) => {\n              const rowGroupCol = rowGroupCols[index];\n              const element = searchFilters.find(\n                (element: any) => element.searchField === rowGroupCol.field\n              );\n              if (element) {\n                element.searchValue = key;\n                element.searchOperator = '=';\n              } else {\n                searchFilters.push({\n                  searchField: rowGroupCol.field ?? rowGroupCol.id,\n                  searchValue: key,\n                  searchOperator: '=',\n                  searchValueType: 0\n                });\n              }\n            });\n          }\n        }\n\n        let search: any;\n        search = {\n          eagerLoad: groupingType ? false : true,\n          pageNumber: pageNumber,\n          pageSize: pageSize,\n          orderElements: sortInfo,\n          filterElements: searchFilters,\n          groupingType: groupingType,\n          groupProperty: groupingColumns\n        };\n\n        params.api.hideOverlay();\n\n        const response = await refetch({ data: search }).catch(() => {\n          params.success({ rowData: [], rowCount: 0 });\n          params.api.showNoRowsOverlay();\n        });\n\n        if (response) {\n          const rowData = response.data;\n          if (rowData) {\n            // we are expecting response of type Univerus.Unity.Commons.Api.Model.Page, but need to maintain support for MDM\n            if (typeof rowData === 'object' && rowData.pageList) {\n              params.success({\n                rowData: rowData.pageList,\n                rowCount: parseInt(rowData.total)\n              });\n            } else if (rowData.length > 0) {\n              params.success({\n                rowData: rowData,\n                rowCount: parseInt(response.headers['totalrows'])\n              });\n            } else {\n              params.success({ rowData: [], rowCount: 0 });\n            }\n            if (filterChanged.current === true) {\n              params.api.paginationGoToFirstPage();\n              setFilterChanged(false);\n            }\n          } else {\n            params.success({ rowData: [], rowCount: 0 });\n            params.api.showNoRowsOverlay();\n          }\n        } else {\n          params.fail();\n        }\n      }\n    };\n    return ds;\n  }, [\n    convertFilterModelToSearchFilters,\n    filterChanged,\n    refetchData,\n    refetchGroupData,\n    setFilterChanged\n  ]);\n  return dataSource;\n};\n"],"mappings":"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"}