{"version":3,"file":"SearchSideSheet.mjs","names":["React","useCallback","useMemo","useRef","useTranslation","ServerSideUdpGrid","useApiMutation","FilterOperators","UdpDrawer","UdpButton","EMPTY_FILTERS","SearchSideSheet","props","open","handleClose","exclude","title","productApiBase","searchApi","colDefs","gridTitle","idField","formIdField","handleSearch","searchBarFieldName","defaultFilters","width","height","t","gridApiRef","mutateAsync","searchData","method","handleGridApiCallback","api","current","handleCloseSideSheet","save","data","getSelectedRows","dataSource","getRows","request","success","fail","pageSize","getGridOption","filterElements","filterModel","Object","entries","map","key","value","searchField","searchOperator","type","searchValue","filter","length","push","orderElements","sortModel","sortObj","sortColumn","colId","sortDirection","sort","toUpperCase","pagesize","pageNumber","startRow","then","response","rowData","pageList","rowCount","total","catch","error","gridHeaderConfig","columnDefs","gridOptions","getRowId","params","toString","rowSelection","mode","enableClickSelection","headerCheckbox","checkboxes","find","selectedItem","onModelUpdated","forEachNode","node","setSelected","pagination","gridFunctions","functions","name","callback","setFilterModel","textFilterPayload","filterType","debounce","defaultValue"],"sources":["../../../../src/UI/inputs/fieldArrayCard/SearchSideSheet.jsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ServerSideUdpGrid } from '../../templates/newGrid/ServerSideUdpGrid';\nimport { useApiMutation } from '../../../utilities/useApiMutation';\nimport { FilterOperators } from '../../../models/SearchOperator';\nimport { UdpDrawer, UdpButton } from '../../fluent-web-components';\n\nconst EMPTY_FILTERS = [];\n\nconst SearchSideSheet = (props) => {\n  const {\n    open,\n    handleClose,\n    exclude,\n    title,\n    productApiBase,\n    searchApi,\n    colDefs = [],\n    gridTitle,\n    idField,\n    formIdField,\n    handleSearch,\n    searchBarFieldName,\n    defaultFilters = EMPTY_FILTERS,\n    width = '800px',\n    height = '70vh'\n  } = props;\n  const { t } = useTranslation();\n  const gridApiRef = useRef(null);\n\n  const { mutateAsync: searchData } = useApiMutation(\n    productApiBase,\n    searchApi,\n    { method: 'POST' }\n  );\n\n  const handleGridApiCallback = useCallback((api) => {\n    gridApiRef.current = api;\n  }, []);\n\n  const handleCloseSideSheet = useCallback(\n    (save = false) => {\n      let data = [];\n      if (save) {\n        data = gridApiRef.current?.getSelectedRows() ?? [];\n      }\n      handleClose(data);\n    },\n    [handleClose]\n  );\n\n  const dataSource = useMemo(\n    () => ({\n      getRows: async ({ request, success, fail, api }) => {\n        const pageSize = api.getGridOption('paginationPageSize');\n\n        if (handleSearch) {\n          handleSearch(pageSize, request, success, fail);\n          return;\n        }\n        const filterElements = request?.filterModel\n          ? Object.entries(request.filterModel)?.map(([key, value]) => {\n              return {\n                searchField: key,\n                searchOperator: FilterOperators[value?.type],\n                searchValue: value?.filter\n              };\n            })\n          : [];\n\n        if (defaultFilters?.length > 0) {\n          filterElements.push(...defaultFilters);\n        }\n\n        const orderElements = request?.sortModel\n          ? request.sortModel?.map((sortObj) => {\n              return {\n                sortColumn: sortObj?.colId,\n                sortDirection: sortObj?.sort?.toUpperCase()\n              };\n            })\n          : [];\n        await searchData({\n          data: {\n            filterElements: filterElements,\n            orderElements: orderElements,\n            pagesize: pageSize,\n            pageNumber: (request?.startRow ?? 0) / pageSize + 1\n          }\n        })\n          .then((response) => {\n            success({\n              rowData: response?.pageList,\n              rowCount: response?.total\n            });\n          })\n          .catch((error) => {\n            fail();\n          });\n      }\n    }),\n    [searchData, handleSearch, defaultFilters]\n  );\n\n  const gridHeaderConfig = useMemo(\n    () => ({\n      title: gridTitle\n    }),\n    [gridTitle]\n  );\n\n  const columnDefs = useMemo(() => colDefs, [colDefs]);\n\n  const gridOptions = useMemo(\n    () => ({\n      getRowId: (params) => params.data?.[idField]?.toString(),\n      rowSelection: {\n        mode: 'multiRow',\n        enableClickSelection: false,\n        headerCheckbox: false,\n        checkboxes: (params) =>\n          params.data &&\n          !exclude?.find(\n            (selectedItem) =>\n              selectedItem[formIdField] === params.data?.[idField]\n          )\n      },\n      onModelUpdated: (params) => {\n        params.api.forEachNode((node) => {\n          if (\n            node.data &&\n            exclude?.find(\n              (selectedItem) =>\n                selectedItem[formIdField] === node.data?.[idField]\n            )\n          ) {\n            node.setSelected(true);\n          }\n        });\n      },\n      pagination: true\n    }),\n    [exclude, formIdField, idField]\n  );\n\n  const gridFunctions = useMemo(() => {\n    const functions = [\n      { name: 'agGridSizeColumnsToFit' },\n      { name: 'agGridAutoSizeColumns' },\n      { name: 'agGridResetColumns' },\n      { name: 'agGridHideShowColumns' },\n      { name: 'agGridRefreshData' }\n    ];\n\n    if (searchBarFieldName) {\n      // eslint-disable-next-line react-hooks/refs\n      functions.push({\n        name: 'quickFilter',\n        params: {\n          callback: (value) => {\n            if (!value) {\n              gridApiRef.current?.setFilterModel(null);\n              return;\n            }\n\n            const textFilterPayload = {\n              [searchBarFieldName]: {\n                filterType: 'text',\n                type: 'contains',\n                filter: value\n              }\n            };\n            gridApiRef.current?.setFilterModel(textFilterPayload);\n          },\n          debounce: 300\n        }\n      });\n    }\n\n    return functions;\n  }, [searchBarFieldName]);\n\n  return (\n    <UdpDrawer\n      open={open}\n      onDrawerClose={() => handleCloseSideSheet()}\n      drawerTitle={title}\n      drawerWidth={width}\n      buttonLabel={t('ui.fieldArray.choose', { defaultValue: 'Choose' })}\n      onSubmit={() => handleCloseSideSheet(true)}\n    >\n      <ServerSideUdpGrid\n        dataSource={dataSource}\n        columnDefs={columnDefs}\n        gridHeaderConfig={gridHeaderConfig}\n        gridOptions={gridOptions}\n        gridHeight={height}\n        gridApiCallback={handleGridApiCallback}\n        gridFunctions={gridFunctions}\n      />\n      <UdpButton\n        slot='footer'\n        appearance='primary'\n        onClick={() => handleCloseSideSheet(true)}\n      >\n        {t('ui.fieldArray.choose', { defaultValue: 'Choose' })}\n      </UdpButton>\n    </UdpDrawer>\n  );\n};\n\nexport default SearchSideSheet;\n"],"mappings":"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"}