ods-component-lib 1.23.3 → 1.23.4
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/_virtual/{FileSaver.min2.js → FileSaver2.min.js} +1 -1
- package/dist/_virtual/FileSaver2.min.js.map +1 -0
- package/dist/_virtual/{dayjs.min2.js → dayjs2.min.js} +1 -1
- package/dist/_virtual/dayjs2.min.js.map +1 -0
- package/dist/_virtual/es2.array.index-of.js +5 -0
- package/dist/_virtual/es2.array.index-of.js.map +1 -0
- package/dist/_virtual/es2.array.reduce.js +5 -0
- package/dist/_virtual/es2.array.reduce.js.map +1 -0
- package/dist/_virtual/es2.array.reverse.js +5 -0
- package/dist/_virtual/es2.array.reverse.js.map +1 -0
- package/dist/_virtual/{es.promise2.js → es2.promise.js} +1 -1
- package/dist/_virtual/es2.promise.js.map +1 -0
- package/dist/_virtual/es2.regexp.to-string.js +5 -0
- package/dist/_virtual/es2.regexp.to-string.js.map +1 -0
- package/dist/_virtual/es2.string.ends-with.js +5 -0
- package/dist/_virtual/es2.string.ends-with.js.map +1 -0
- package/dist/_virtual/es2.string.includes.js +5 -0
- package/dist/_virtual/es2.string.includes.js.map +1 -0
- package/dist/_virtual/es2.string.match.js +5 -0
- package/dist/_virtual/es2.string.match.js.map +1 -0
- package/dist/_virtual/es2.string.replace.js +5 -0
- package/dist/_virtual/es2.string.replace.js.map +1 -0
- package/dist/_virtual/es2.string.split.js +5 -0
- package/dist/_virtual/es2.string.split.js.map +1 -0
- package/dist/_virtual/es2.string.starts-with.js +5 -0
- package/dist/_virtual/es2.string.starts-with.js.map +1 -0
- package/dist/_virtual/es2.string.trim.js +5 -0
- package/dist/_virtual/es2.string.trim.js.map +1 -0
- package/dist/_virtual/{exceljs.min2.js → exceljs2.min.js} +1 -1
- package/dist/_virtual/exceljs2.min.js.map +1 -0
- package/dist/_virtual/web2.dom-collections.iterator.js +5 -0
- package/dist/_virtual/web2.dom-collections.iterator.js.map +1 -0
- package/dist/components/devextreme/OdsBasicDataGrid/OdsBasicDataGrid.Functions.js.map +1 -1
- package/dist/components/devextreme/OdsBatchEditDataGrid/OdsBatchEditDataGrid.Functions.js.map +1 -1
- package/dist/components/devextreme/OdsMergeCellDataGrid/OdsMergeCellDataGrid.Functions.js.map +1 -1
- package/dist/components/devextreme/OdsRemoteDataGrid.js +1 -1
- package/dist/components/devextreme/OdsRemoteDataGrid.js.map +1 -1
- package/dist/components/devextreme/OdsTransfer.js +14 -14
- package/dist/components/devextreme/OdsTransfer.js.map +1 -1
- package/dist/components/devextreme/OdsTransferV2.js +24 -24
- package/dist/components/devextreme/OdsTransferV2.js.map +1 -1
- package/dist/index.d.ts +24 -31
- package/dist/node_modules/canvg/lib/index.es.js +84 -84
- package/dist/node_modules/canvg/lib/index.es.js.map +1 -1
- package/dist/node_modules/core-js/modules/es.array.index-of.js +1 -1
- package/dist/node_modules/core-js/modules/es.array.reduce.js +1 -1
- package/dist/node_modules/core-js/modules/es.array.reverse.js +1 -1
- package/dist/node_modules/core-js/modules/es.promise.js +1 -1
- package/dist/node_modules/core-js/modules/es.regexp.to-string.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.ends-with.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.includes.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.match.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.replace.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.split.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.starts-with.js +1 -1
- package/dist/node_modules/core-js/modules/es.string.trim.js +1 -1
- package/dist/node_modules/core-js/modules/web.dom-collections.iterator.js +1 -1
- package/dist/node_modules/dayjs/dayjs.min.js +17 -17
- package/dist/node_modules/dayjs/dayjs.min.js.map +1 -1
- package/dist/node_modules/dompurify/dist/purify.es.js +217 -223
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -1
- package/dist/node_modules/exceljs/dist/exceljs.min.js +1 -1
- package/dist/node_modules/fflate/esm/browser.js +295 -335
- package/dist/node_modules/fflate/esm/browser.js.map +1 -1
- package/dist/node_modules/file-saver/dist/FileSaver.min.js +1 -1
- package/dist/node_modules/jspdf/dist/jspdf.es.min.js +1771 -1781
- package/dist/node_modules/jspdf/dist/jspdf.es.min.js.map +1 -1
- package/dist/node_modules/lodash/lodash.js +1154 -1169
- package/dist/node_modules/lodash/lodash.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/regex.js +5 -0
- package/dist/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/rng.js +2 -3
- package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/stringify.js +10 -6
- package/dist/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/v4.js +6 -9
- package/dist/node_modules/uuid/dist/esm-browser/v4.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/validate.js +8 -0
- package/dist/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
- package/package.json +3 -2
- package/dist/_virtual/FileSaver.min2.js.map +0 -1
- package/dist/_virtual/dayjs.min2.js.map +0 -1
- package/dist/_virtual/es.array.index-of2.js +0 -5
- package/dist/_virtual/es.array.index-of2.js.map +0 -1
- package/dist/_virtual/es.array.reduce2.js +0 -5
- package/dist/_virtual/es.array.reduce2.js.map +0 -1
- package/dist/_virtual/es.array.reverse2.js +0 -5
- package/dist/_virtual/es.array.reverse2.js.map +0 -1
- package/dist/_virtual/es.promise2.js.map +0 -1
- package/dist/_virtual/es.regexp.to-string2.js +0 -5
- package/dist/_virtual/es.regexp.to-string2.js.map +0 -1
- package/dist/_virtual/es.string.ends-with2.js +0 -5
- package/dist/_virtual/es.string.ends-with2.js.map +0 -1
- package/dist/_virtual/es.string.includes2.js +0 -5
- package/dist/_virtual/es.string.includes2.js.map +0 -1
- package/dist/_virtual/es.string.match2.js +0 -5
- package/dist/_virtual/es.string.match2.js.map +0 -1
- package/dist/_virtual/es.string.replace2.js +0 -5
- package/dist/_virtual/es.string.replace2.js.map +0 -1
- package/dist/_virtual/es.string.split2.js +0 -5
- package/dist/_virtual/es.string.split2.js.map +0 -1
- package/dist/_virtual/es.string.starts-with2.js +0 -5
- package/dist/_virtual/es.string.starts-with2.js.map +0 -1
- package/dist/_virtual/es.string.trim2.js +0 -5
- package/dist/_virtual/es.string.trim2.js.map +0 -1
- package/dist/_virtual/exceljs.min2.js.map +0 -1
- package/dist/_virtual/web.dom-collections.iterator2.js +0 -5
- package/dist/_virtual/web.dom-collections.iterator2.js.map +0 -1
- package/dist/node_modules/uuid/dist/esm-browser/native.js +0 -7
- package/dist/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OdsRemoteDataGrid.js","sources":["../../../src/components/devextreme/OdsRemoteDataGrid.tsx"],"sourcesContent":["import { createRoot } from \"react-dom/client\";\r\nimport React, {\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n } from \"react\";\r\nimport DataGrid, {\r\n Item as DxItem,\r\n Column,\r\n ColumnChooser,\r\n ColumnChooserSearch,\r\n ColumnChooserSelection,\r\n Export,\r\n FilterPanel,\r\n FilterRow,\r\n HeaderFilter,\r\n LoadPanel,\r\n Position,\r\n SearchPanel,\r\n Sorting,\r\n Toolbar,\r\n StateStoring,\r\n Scrolling,\r\n IDataGridOptions,\r\n Summary,\r\n TotalItem,\r\n IButtonProps,\r\n Selection,\r\n ISelectionProps,\r\n Pager,\r\n IEditingProps,\r\n Editing,\r\n Popup,\r\n Form,\r\n Paging,\r\n ISummaryProps,\r\n MasterDetail \r\n} from \"devextreme-react/data-grid\";\r\nimport { Item } from \"devextreme-react/form\";\r\nimport { exportDataGrid } from \"devextreme/pdf_exporter\";\r\nimport { exportDataGrid as exportDataGridXls } from \"devextreme/excel_exporter\";\r\nimport jsPDF from \"jspdf\";\r\nimport { Workbook } from \"exceljs\";\r\nimport { saveAs } from \"file-saver-es\";\r\nimport dayjs from \"dayjs\";\r\nimport { Tooltip, theme } from \"antd\";\r\nimport { locale, loadMessages } from \"devextreme/localization\";\r\nimport { Lookup } from \"devextreme-react\";\r\nimport debounce from \"lodash/debounce\";\r\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\r\n\r\nimport { ButtonType } from 'antd/es/button/buttonHelpers';\r\nimport queryString from 'query-string';\r\nimport ReactDOM from 'react-dom';\r\nimport DynamicIcon from './datagridUtils/DynamicIcon';\r\nimport OdsButton from \"../antd/button/OdsButton\";\r\nimport OdsTitle from \"../antd/typography/OdsTitle\";\r\nimport OdsDropdown from \"../antd/dropdown/OdsDropdown\";\r\nimport OdsDataGrdiRowButton from \"../antd/button/OdsDataGrdiRowButton\";\r\nimport { isTextEmpty } from \"../../utils/commonFunctions\";\r\n\r\nconst exportFormats = [\"xlsx\"]; //['xlsx', 'pdf'];\r\nlet totalPageCount = 1;\r\nlet loadedPageCount = 1;\r\nlet totalRecordCount = 0;\r\nconst { useToken } = theme;\r\n\r\nexport interface IOdsDataGridProps extends IDataGridOptions {\r\n dataGridPageName?: string;\r\n language: string;\r\n exportFileName: string;\r\n filterEnabledShow: boolean;\r\n pageTitle?: string;\r\n toolbarButtonGroup?: IButtonGroup[];\r\n actionButtonGroup?: IButtonGroup[];\r\n actionButtonGroupCaption?: string;\r\n columns: any[];\r\n detailGridColums?: any[];\r\n pageSize?: number;\r\n actionColumnEnable: boolean;\r\n selectOptions?: ISelectOptions;\r\n columnChooserPositionDisabled?: boolean;\r\n pagingEnable?: boolean;\r\n edit?: IEditingoptions;\r\n isServerSide: boolean;\r\n axiosRequest?: IAxiosProps;\r\n customSummary?: ISummaryRowOptions;\r\n handleEditorPreparing?: any;\r\n isFilterRow?: boolean;\r\n filterData?: any[];\r\n showMasterDetail?: boolean;\r\n detailData?: any;\r\n}\r\n\r\ninterface ISummaryRowOptions {\r\n summaryLoadedDataLabel?: string;\r\n summaryTotalDataLabel?: string;\r\n summaryFilteredDataLabel?: string;\r\n summaryItems?: ISummaryProps[];\r\n summaryTotalCount?: number;\r\n summaryTotalPageCountLabel?: string;\r\n}\r\n\r\ninterface IAxiosProps {\r\n token: string;\r\n requestData?: any;\r\n apiUrl: string;\r\n environmentUrl: string;\r\n requestQueryString?: any;\r\n requestType: string;\r\n}\r\n\r\ninterface IEditingoptions extends IEditingProps {\r\n formItems?: any[];\r\n title?: string;\r\n}\r\n\r\ninterface ISelectOptions extends ISelectionProps {\r\n selectEnable: boolean;\r\n}\r\n\r\ninterface IButtonGroup extends IButtonProps {\r\n type?: ButtonType;\r\n label?: string;\r\n onclick?: React.MouseEventHandler<HTMLElement>;\r\n actionPermission?: boolean;\r\n}\r\n\r\nconst OdsRemoteDataGrid = (props: IOdsDataGridProps) => {\r\n const { token } = useToken();\r\n const [data, setData] = useState([]);\r\n const fileName = props.exportFileName\r\n ? props.exportFileName + dayjs().format(\"YYYYMMDD\")\r\n : \"DatagridExportFile\" + dayjs().format(\"YYYYMMDD\");\r\n const [filteredRowCount, setFilteredRowCount] = useState(0);\r\n const columns = useRef(props.columns);\r\n let gridRef = useRef(null);\r\n const filterApplied = useRef(false);\r\n const [loading, setLoading] = useState(false);\r\n const [contentReady, setContentReady] = useState(false);\r\n const [scrollPosition, setScrollPosition] = useState(0);\r\n\r\n const onCancelEditEvent = new CustomEvent(\"cancelEdit\", {\r\n bubbles: true,\r\n detail: {\r\n rowData: null,\r\n },\r\n });\r\n\r\n const headers = new Headers({\r\n \"Content-Type\": \"application/json\",\r\n Authorization:\r\n \"Bearer \" + (props.axiosRequest ? props.axiosRequest.token : \"\"),\r\n \"Accept-Language\": props.language != \"\" ? props.language : \"EN\",\r\n });\r\n\r\n useEffect(() => {\r\n totalPageCount = 1;\r\n loadedPageCount = 1;\r\n totalRecordCount = 0;\r\n }, [props.dataGridPageName]);\r\n\r\n useEffect(() => {\r\n if (props.axiosRequest !== undefined\r\n && ((props.axiosRequest?.requestData && Object.keys(props.axiosRequest?.requestData).length > 0) || (props.axiosRequest?.requestQueryString))) {\r\n totalPageCount = 1;\r\n loadedPageCount = 1;\r\n totalRecordCount = 0;\r\n setData([]);\r\n fetchData();\r\n }\r\n }, [props.axiosRequest?.requestData, props.axiosRequest?.requestQueryString]);\r\n\r\n useEffect(() => {\r\n if (columns.current !== undefined && columns.current.length > 0) {\r\n const newColumns = columns.current.map((colItem) => {\r\n if (colItem.tooltip !== undefined && colItem.tooltip.enable) {\r\n const headerCellRenderr = () => {\r\n return (\r\n <div>\r\n <span>{colItem.caption}</span>\r\n <Tooltip title={colItem.tooltip.title}>\r\n <InfoCircleOutlined style={{ marginLeft: 5 }} />\r\n </Tooltip>\r\n </div>\r\n );\r\n };\r\n colItem.headerCellRender = headerCellRenderr;\r\n }\r\n\r\n // this process prevents client-side sorting process if grid use server-side\r\n // when calculateSortValue setted anything else from the grid columns sorting process not working for client-side data\r\n if (props.isServerSide)\r\n colItem.calculateSortValue = String(\"dummyFieldForPreventClientSideSorting\")\r\n\r\n return colItem;\r\n });\r\n columns.current = newColumns;\r\n }\r\n }, [props.columns]);\r\n\r\n useEffect(() => {\r\n if (Array.isArray(props.dataSource)) {\r\n setData(props.dataSource);\r\n }\r\n }, [props.dataSource]);\r\n\r\n useEffect(() => {\r\n locale(localStorage.getItem(\"locale\"));\r\n loadMessages(JSON.parse(localStorage.getItem(\"localTranslation\")));\r\n if (gridRef.current) {\r\n gridRef.current?.instance?.()?.updateDimensions();\r\n }\r\n }, []);\r\n\r\n // this useEffect used for check sort change once for component mount process\r\n useEffect(() => {\r\n if (contentReady) checkSortingPropertyForInitilaize();\r\n }, [contentReady]);\r\n\r\n useEffect(() => {\r\n const cssRules = `\r\n .data-exists .dx-datagrid-borders > .dx-datagrid-filter-panel,\r\n .data-exists .dx-datagrid-borders > .dx-datagrid-headers {\r\n border-top: 1px solid rgba(0, 0, 0, 0.06);\r\n padding-right: 0px !important;\r\n }\r\n \r\n .data-exists .dx-datagrid-headers .dx-datagrid-content {\r\n margin-bottom: -1px;\r\n padding-right: 17px !important;\r\n }\r\n `;\r\n\r\n const styleSheet = document.createElement('style');\r\n styleSheet.type = 'text/css';\r\n styleSheet.innerText = cssRules;\r\n document.head.appendChild(styleSheet);\r\n\r\n const checkData = () => {\r\n if (gridRef.current) {\r\n const dataGridInstance = gridRef.current.instance?.();\r\n const dataExists = data.length >= 15;\r\n\r\n const gridElement = dataGridInstance?.element();\r\n if (dataExists) {\r\n gridElement.classList.add('data-exists');\r\n } else {\r\n gridElement.classList.remove('data-exists');\r\n }\r\n }\r\n };\r\n\r\n const dataGridInstance = gridRef.current.instance?.();\r\n dataGridInstance?.on('dataChanged', checkData);\r\n checkData();\r\n\r\n return () => {\r\n document.head.removeChild(styleSheet);\r\n dataGridInstance?.off('dataChanged', checkData);\r\n };\r\n }, [data]);\r\n\r\n // check if there is sorted column and trigger onOptionChanged method for sort process\r\n const checkSortingPropertyForInitilaize = () => {\r\n const { onOptionChanged } = props;\r\n if (onOptionChanged) {\r\n const dataGridInstance = gridRef.current.instance?.();\r\n const sortingState = dataGridInstance?.getVisibleColumns()\r\n .filter((p) => !p.command)\r\n .map((column, index) => ({\r\n index: index, // decrease index for deafult empty column\r\n dataField: column.dataField,\r\n sortOrder: column.sortOrder,\r\n }));\r\n\r\n var sortedColumn = sortingState.find(column => column.sortOrder !== undefined)\r\n if (sortedColumn) {\r\n if (sortedColumn.sortOrder) {\r\n dataGridInstance.option(`columns[${sortedColumn.index}].sortOrder`, sortedColumn.sortOrder);\r\n\r\n // prepare OptionChangedEventInfo data for onOptionChanged method\r\n const fullName = `columns[${sortedColumn.index}].sortOrder`;\r\n const gridEvent = {\r\n component: dataGridInstance,\r\n fullName: fullName,\r\n name: \"optionChanged\",\r\n value: sortedColumn.sortOrder,\r\n previousValue: null,\r\n element: null,\r\n };\r\n\r\n onOptionChanged(gridEvent);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const checkRequestDataHasOnlySortingProperty = (obj) => {\r\n // Get all property names from the object\r\n const keys = Object.keys(obj);\r\n // Check if there is only one property and it is 'Sorting'\r\n return keys.length === 1 && keys[0] === \"Sorting\";\r\n };\r\n\r\n const actionButtons = useMemo(() => {\r\n if (props.actionButtonGroup) {\r\n if (props.actionButtonGroup.length >= 2 && !props.edit) {\r\n return props.actionButtonGroup.slice(0, 2);\r\n } else {\r\n return props.actionButtonGroup;\r\n }\r\n } else {\r\n return [];\r\n }\r\n }, [props.actionButtonGroup]);\r\n\r\n // const kebabMenuButtons = useMemo(() => {\r\n // if (props.actionButtonGroup) {\r\n // if (props.actionButtonGroup.length >= 2 && !props.edit) {\r\n // return props.actionButtonGroup.slice(2, props.actionButtonGroup.length);\r\n // } else {\r\n // return [];\r\n // }\r\n // } else {\r\n // return [];\r\n // }\r\n // }, [props.actionButtonGroup]);\r\n\r\n const fetchData = useCallback(async () => {\r\n if (props.axiosRequest == undefined) return;\r\n\r\n if (props.isServerSide) {\r\n\r\n // check requestData for sorting property if there is only sorting property grid shouldn't do fetch data\r\n if (props.axiosRequest.requestData && checkRequestDataHasOnlySortingProperty(props.axiosRequest.requestData))\r\n return;\r\n\r\n let apiUrl =\r\n props.axiosRequest.environmentUrl + \"\" + props.axiosRequest.apiUrl;\r\n\r\n if (props.axiosRequest.requestData?.PaginatedRequest !== undefined) {\r\n props.axiosRequest.requestData.PaginatedRequest.PageNumber =\r\n loadedPageCount;\r\n props.axiosRequest.requestData.PaginatedRequest.PageSize =\r\n props.pageSize;\r\n }\r\n\r\n if (props.axiosRequest.requestQueryString !== undefined) {\r\n\r\n props.axiosRequest.requestQueryString.maxResultCount = props.pageSize;\r\n\r\n if (loadedPageCount > 1 && totalPageCount >= loadedPageCount) {\r\n props.axiosRequest.requestQueryString.skipCount = ((loadedPageCount - 1) * props.pageSize).toString();\r\n }\r\n\r\n let query = queryString.stringify(props.axiosRequest.requestQueryString);\r\n\r\n apiUrl = `${apiUrl}?${query}`\r\n }\r\n\r\n const requestOptions = {\r\n method: props.axiosRequest.requestType,\r\n headers: headers,\r\n body: JSON.stringify(props.axiosRequest.requestData),\r\n };\r\n\r\n try {\r\n setLoading(true);\r\n const response = await fetch(apiUrl, requestOptions);\r\n\r\n const newData = await response.json();\r\n\r\n if (loadedPageCount == 1) {\r\n setData(newData.Data ? newData.Data : newData);\r\n\r\n loadedPageCount = 1;\r\n } else if (totalPageCount >= loadedPageCount) {\r\n const newArray = newData.Data ? newData.Data : newData;\r\n setData((prevData) => [...prevData, ...newArray]);\r\n }\r\n\r\n getTotalCount(response, newData);\r\n } catch (error) {\r\n console.error(\"Error fetching data:\", error);\r\n setLoading(false);\r\n } finally {\r\n }\r\n }\r\n }, [\r\n props.axiosRequest?.requestData,\r\n props.axiosRequest?.apiUrl,\r\n props.axiosRequest?.environmentUrl,\r\n props.axiosRequest?.requestQueryString,\r\n props.axiosRequest?.requestType,\r\n props.pageSize,\r\n props.isServerSide,\r\n ]);\r\n\r\n const getTotalCount = (response: Response, data: any): void => {\r\n if (data?.PageCount || data?.RowCount) {\r\n totalPageCount = data.PageCount;\r\n totalRecordCount = data.RowCount;\r\n } else {\r\n let totalCount;\r\n\r\n if (response) totalCount = response.headers.get(\"x-total-count\");\r\n\r\n if (totalCount == null) totalCount = data?.rowCount;\r\n\r\n if (totalCount == null) totalCount = data?.length;\r\n\r\n totalRecordCount = parseInt(totalCount, 10) || 0;\r\n totalPageCount = Math.ceil(totalRecordCount / props.pageSize);\r\n }\r\n\r\n setLoading(false);\r\n };\r\n\r\n const onEditorPreparing = useCallback(\r\n (e: any) => {\r\n if (e.row !== undefined && e.parentType === \"dataRow\") {\r\n if (props.handleEditorPreparing) {\r\n props.handleEditorPreparing(e);\r\n }\r\n }\r\n\r\n if (\r\n e.editorOptions &&\r\n e.rowType === \"data\" &&\r\n e.parentType === \"dataRow\"\r\n ) {\r\n e.editorOptions.onValueChanged = function (args) {\r\n if (args.event && args.event.type === \"cancel\")\r\n e.cellElement.dispatchEvent(onCancelEditEvent);\r\n };\r\n }\r\n },\r\n [props.isServerSide]\r\n );\r\n\r\n const getServerSide = useCallback(\r\n async (type: string) => {\r\n if (type === \"reachedBottom\") {\r\n if (totalPageCount <= loadedPageCount) {\r\n return;\r\n } else {\r\n loadedPageCount = loadedPageCount + 1;\r\n await fetchData();\r\n }\r\n }\r\n },\r\n [totalPageCount]\r\n );\r\n\r\n const onExporting = useCallback(\r\n (e: any) => {\r\n if (e.format === \"xlsx\") {\r\n const workbook = new Workbook();\r\n\r\n //Dışa aktarma işlemi sırasında filtre verilerini yeni sütunları ekle\r\n if (props.filterData != null) {\r\n const newColumnFromFilterData = props.filterData.map((filterItem) => ({\r\n dataField: filterItem.key,\r\n caption: filterItem.key\r\n }));\r\n\r\n const newColumns = [...columns.current, ...newColumnFromFilterData];\r\n e.component.beginUpdate();\r\n e.component.option(\"columns\", newColumns);\r\n e.component.endUpdate();\r\n }\r\n exportDataGridXls({\r\n component: e.component,\r\n worksheet: workbook.addWorksheet(\"Main sheet\"),\r\n autoFilterEnabled: true,\r\n customizeCell: function (options) {\r\n //Buradaki kod dg için yanlızca datefilter çalışması için eklendi. Dg üstünde format olarak format: \"dd.MM.yyyy\" şeklinde düzenleme yapıldı, ekranda saat bilgisi görünmesi içie cellRender: datetimeCellRender fonksiyonu eklendi. Format değişikliği yüzünden ezcelde saat bilgisi çıkmıyordu, bu yüzden bu kod bloğu eklendi.\r\n const { gridCell, excelCell } = options;\r\n if (gridCell.column.dataType === \"datetime\" && gridCell.value) {\r\n // Aşağıdaki if bloğu yukarıdaki if bloğu ile birleştirimemeli. Çünkü \"gridCell?.column?.calculateFilterExpression?.name === \"calculateFilterExpressionForColumn\"\"\" olsa bile gridCell.value değeri hezaman undefined geliyor. gridCell.column['meta'] konrolü cellRender eklenmeme durumu için eklendi.\r\n if (\r\n gridCell.column.calculateFilterExpression?.name ===\r\n \"calculateFilterExpressionForColumn\" &&\r\n gridCell.column[\"meta\"]?.hasCustomCellRenderer\r\n ) {\r\n const date = dayjs(gridCell.value);\r\n const offsetMinutes = date.utcOffset();\r\n const sign = offsetMinutes >= 0 ? \"+\" : \"-\";\r\n const hours = Math.floor(Math.abs(offsetMinutes) / 60);\r\n const minutes = Math.abs(offsetMinutes) % 60;\r\n const formattedOffset = `(UTC${sign}${hours\r\n .toString()\r\n .padStart(2, \"0\")}:${minutes.toString().padStart(2, \"0\")})`;\r\n const formattedDate =\r\n date.format(\"DD.MM.YYYY HH:mm\") + \" \" + formattedOffset;\r\n excelCell.value = formattedDate;\r\n }\r\n }\r\n\r\n //girilen filtre değerlerinin uygun başlık altında satıra yazılması \r\n if (gridCell.rowType !== 'header' && props.filterData != null) {\r\n const matchingItem = props.filterData.find(item => item.key === gridCell.column.dataField);\r\n if (matchingItem) {\r\n excelCell.value = matchingItem.value;\r\n }\r\n }\r\n }\r\n }).then(() => {\r\n workbook.xlsx.writeBuffer().then((buffer) => {\r\n saveAs(new Blob([buffer], { type: 'application/octet-stream' }), fileName + '.xlsx');\r\n });\r\n });\r\n } else {\r\n const doc = new jsPDF();\r\n exportDataGrid({\r\n jsPDFDocument: doc,\r\n component: e.component,\r\n indent: 5,\r\n }).then(() => {\r\n doc.save(fileName + '.pdf');\r\n });\r\n }\r\n }, [fileName, props.filterData]);\r\n\r\n const customLoad = useCallback(() => {\r\n let state = JSON.parse(\r\n localStorage.getItem(props.exportFileName + \"Storage\")\r\n );\r\n\r\n if (localStorage.getItem(props.exportFileName + \"Storage\")) {\r\n state.selectedRowKeys = [];\r\n if (props.filterEnabledShow) state.filterPanel = { filterEnabled: false };\r\n else state.filterPanel = { filterEnabled: true };\r\n }\r\n\r\n return state;\r\n }, [props.filterEnabledShow]);\r\n\r\n const customSave = useCallback(\r\n (state: any) => {\r\n state.selectedRowKeys = [];\r\n if (props.filterEnabledShow) state.filterPanel = { filterEnabled: false };\r\n else state.filterPanel = { filterEnabled: true };\r\n\r\n if (data.length === 0) {\r\n if (!state.filterValue && state.filterValue !== null) {\r\n state.filterValue = null;\r\n }\r\n }\r\n localStorage.setItem(\r\n props.exportFileName + \"Storage\",\r\n JSON.stringify(state)\r\n );\r\n },\r\n [props.filterEnabledShow]\r\n );\r\n\r\n const onEditorPrepared = useCallback((info) => {\r\n if (\r\n info.parentType === \"filterRow\" &&\r\n info.editorName === \"dxSelectBox\" &&\r\n info.dataField === \"IsActive\"\r\n ) {\r\n if (info.dataSource != null && info.dataSource.length > 0) {\r\n info.showAllText = info.dataSource.find((i) => {\r\n return i.value === null;\r\n }).label;\r\n info.trueText = info.dataSource.find((i) => {\r\n return i.value === true;\r\n }).label;\r\n info.falseText = info.dataSource.find((i) => {\r\n return i.value === false;\r\n }).label;\r\n }\r\n }\r\n }, []);\r\n\r\n const renderTotal = useCallback(() => {\r\n let result = \"\";\r\n let totalloaded = 0;\r\n\r\n if (\r\n data.length < 50 ||\r\n !props.isServerSide ||\r\n loadedPageCount == totalPageCount\r\n ) {\r\n totalloaded = data.length;\r\n } else {\r\n totalloaded = loadedPageCount * props.pageSize;\r\n }\r\n\r\n if (props.isServerSide) {\r\n result =\r\n totalRecordCount > 0\r\n ? `${totalloaded} ` +\r\n props.customSummary?.summaryLoadedDataLabel +\r\n `- ${totalRecordCount}` +\r\n props.customSummary?.summaryTotalDataLabel\r\n : ``;\r\n result = concatFilteredLabel(result, totalloaded);\r\n }\r\n\r\n if (\r\n props.customSummary?.summaryTotalCount !== undefined &&\r\n !props.isServerSide\r\n ) {\r\n result =\r\n props.customSummary.summaryTotalDataLabel +\r\n \" : \" +\r\n props.customSummary.summaryTotalCount;\r\n result = concatFilteredLabel(result, totalloaded);\r\n }\r\n\r\n if (totalPageCount > 1) {\r\n result = `${result} - ${props.customSummary?.summaryTotalPageCountLabel} ${loadedPageCount} / ${totalPageCount}`;\r\n }\r\n return result;\r\n }, [\r\n data,\r\n filteredRowCount,\r\n loadedPageCount,\r\n props.pageSize,\r\n totalRecordCount,\r\n filterApplied.current,\r\n ]);\r\n\r\n const concatFilteredLabel = (result: string, totalloaded: number) => {\r\n if (\r\n filteredRowCount > 0 &&\r\n totalloaded !== filteredRowCount &&\r\n filterApplied.current\r\n ) {\r\n let filteredLabel =\r\n `${filteredRowCount} ` +\r\n props.customSummary.summaryFilteredDataLabel +\r\n `- `;\r\n result = `${filteredLabel} ${result} `;\r\n }\r\n return result;\r\n };\r\n\r\n function actionCellRender(cellData, props) {\r\n const kebabMenuButtons = props.actionButtonGroup && props.actionButtonGroup.length >= 2 && !props.edit\r\n ? props.actionButtonGroup.slice(2).map(button => ({\r\n icon: <DynamicIcon iconName={button.icon} />,\r\n onClick: (event) => {\r\n const customEvent = {\r\n column: cellData.column,\r\n component: cellData.component,\r\n element: cellData.element,\r\n event: event,\r\n model: cellData.data,\r\n row: cellData.row\r\n };\r\n button.onClick(customEvent);\r\n }\r\n }))\r\n : [];\r\n\r\n const buttonElements = [];\r\n\r\n {\r\n !props.edit &&\r\n actionButtons.forEach((buttonItem, index) => {\r\n const isVisible = typeof buttonItem.visible === 'function'\r\n ? buttonItem.visible({ column: cellData.column, component: cellData.component, row: cellData.row })\r\n : buttonItem.visible;\r\n buttonElements.push(\r\n <OdsDataGrdiRowButton\r\n key={`action-button-${index}`}\r\n hint={buttonItem.hint}\r\n visible={isVisible}\r\n size=\"small\"\r\n type=\"text\"\r\n disabled={\r\n buttonItem.actionPermission === undefined\r\n ? false\r\n : !buttonItem.actionPermission\r\n }\r\n icon={\r\n <DynamicIcon iconName={buttonItem.icon} />\r\n }\r\n onClick={(event) => {\r\n // event.preventDefault();\r\n const customEvent = {\r\n column: cellData.column,\r\n component: cellData.component,\r\n element: cellData.element,\r\n event: event,\r\n model: cellData.data,\r\n row: cellData.row\r\n };\r\n buttonItem.onClick(customEvent);\r\n }}\r\n />\r\n );\r\n });\r\n }\r\n {\r\n props.edit &&\r\n actionButtons.forEach((buttonItem, index) => {\r\n const isVisible = typeof buttonItem.visible === 'function'\r\n ? buttonItem.visible({ column: cellData.column, component: cellData.component, row: cellData.row })\r\n : buttonItem.visible;\r\n\r\n buttonElements.push(\r\n <OdsDataGrdiRowButton\r\n key={`action-button-${index}`}\r\n name={buttonItem.name}\r\n hint={buttonItem.hint}\r\n visible={isVisible}\r\n size=\"small\"\r\n type=\"text\"\r\n disabled={\r\n buttonItem.actionPermission === undefined\r\n ? false\r\n : !buttonItem.actionPermission\r\n }\r\n icon={\r\n <DynamicIcon iconName={buttonItem.icon} />\r\n }\r\n onClick={(event) => {\r\n if (buttonItem.onClick) { \r\n // event.preventDefault();\r\n const customEvent = {\r\n column: cellData.column,\r\n component: cellData.component,\r\n element: cellData.element,\r\n event: event,\r\n model: cellData.data,\r\n row: cellData.row \r\n };\r\n buttonItem.onClick(customEvent);\r\n }\r\n }}\r\n />\r\n );\r\n });\r\n }\r\n\r\n if (kebabMenuButtons.length > 0) {\r\n buttonElements.push(\r\n <OdsDropdown\r\n key={`dropdown-${cellData.rowIndex || cellData.data.ID}`}\r\n menuItems={kebabMenuButtons}\r\n >\r\n <OdsDataGrdiRowButton type=\"text\" icon={<DynamicIcon iconName={\"kebabMenu\"} />} />\r\n </OdsDropdown>\r\n );\r\n }\r\n\r\n return <React.Fragment><div className=\"flex flex-row gap-4 justify-center items-center\">{buttonElements}</div></React.Fragment>;\r\n }\r\n\r\n const onScrollEnd = useCallback(() => {\r\n getServerSide(\"reachedBottom\");\r\n }, [props.axiosRequest?.requestData, getServerSide]);\r\n\r\n const handleScroll = (e: any) => {\r\n const run = debounce((e: any) => {\r\n const scrollable = e.target as HTMLElement;\r\n\r\n const top = scrollable?.scrollTop ?? 0;\r\n const height = scrollable?.clientHeight ?? 0;\r\n const scrollHeight = scrollable?.scrollHeight ?? 0;\r\n const maxHeight = Math.max(top, height, scrollHeight) - 1;\r\n\r\n if (scrollHeight <= height) return;\r\n\r\n const reachedBottom = Math.ceil(top + height) >= maxHeight;\r\n\r\n let lastScrollTop = 0;\r\n if (top < lastScrollTop) return;\r\n\r\n lastScrollTop = top <= 0 ? 0 : top;\r\n if (reachedBottom) onScrollEnd();\r\n\r\n setScrollPosition(top);\r\n }, 200);\r\n\r\n run(e);\r\n };\r\n\r\n useEffect(() => {\r\n const gridElement = gridRef.current.instance?.()?.element();\r\n gridElement.scrollTop = scrollPosition;\r\n }, [data.length]);\r\n\r\n useEffect(() => {\r\n document\r\n .querySelectorAll(\".dx-scrollable-container\")\r\n .forEach((container) => {\r\n container.addEventListener(\"scrollend\", handleScroll);\r\n });\r\n\r\n return () => {\r\n document\r\n .querySelectorAll(\".dx-scrollable-container\")\r\n .forEach((container) => {\r\n container.removeEventListener(\"scrollend\", handleScroll);\r\n });\r\n };\r\n }, [data.length]);\r\n\r\n const handleContentReady = (e) => {\r\n const dataGridInstance = e.component;\r\n const filteredDataCount = dataGridInstance.totalCount();\r\n\r\n if (filterApplied.current && filteredDataCount > 0)\r\n {\r\n setFilteredRowCount(filteredDataCount);\r\n }\r\n else{\r\n setFilteredRowCount(0);\r\n }\r\n\r\n // set content ready state for trigger sort change method only once if content ready\r\n if (!contentReady) setContentReady(true);\r\n };\r\n\r\n const onFilterValueChange = (e) => {\r\n if (e !== null)\r\n filterApplied.current = true;\r\n else {\r\n filterApplied.current = false;\r\n setFilteredRowCount(0);\r\n }\r\n }\r\n\r\n\r\n const onToolbarPreparing = (e) => {\r\n if (props.toolbarButtonGroup && props.toolbarButtonGroup.length > 0) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'before',\r\n template: function (_, __, container) {\r\n const wrapper = document.createElement('div');\r\n container.appendChild(wrapper);\r\n const root = createRoot(wrapper);\r\n\r\n root.render(<React.StrictMode>\r\n {props.toolbarButtonGroup && Array.isArray(props.toolbarButtonGroup) &&\r\n props.toolbarButtonGroup.map((buttonGroupItem, index) => (\r\n <OdsButton key={index} style={{ marginLeft: token.margin }} type={buttonGroupItem.type} onClick={buttonGroupItem.onclick}>\r\n {buttonGroupItem.label}\r\n </OdsButton>\r\n ))\r\n }\r\n </React.StrictMode>);\r\n }\r\n });\r\n }\r\n\r\n if(!isTextEmpty(props.pageTitle)) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'before',\r\n cssClass: 'toolbarTitleItem',\r\n template: function (_, __, container) {\r\n const wrapper = document.createElement('div');\r\n container.appendChild(wrapper);\r\n const root = createRoot(wrapper);\r\n\r\n root.render(<React.StrictMode>\r\n <OdsTitle level={5} style={{ display: \"flex\", alignItems: \"center\", alignSelf: \"stretch\", margin: 0 }}>{props.pageTitle}</OdsTitle>\r\n </React.StrictMode>);\r\n }\r\n });\r\n }\r\n };\r\n const detailGrid = ({ data }) => {\r\n return (\r\n <OdsRemoteDataGrid\r\n {...props}\r\n showMasterDetail={false}\r\n columns={props.detailGridColums}\r\n dataSource={props.detailData[data.key.ID]}\r\n\r\n />\r\n )\r\n };\r\n\r\n return (\r\n <React.Fragment >\r\n\r\n <DataGrid\r\n keyExpr={props.keyExpr}\r\n dataSource={data}\r\n showBorders={true}\r\n columnAutoWidth={false}\r\n onEditorPreparing={onEditorPreparing}\r\n ref={gridRef}\r\n onExporting={onExporting}\r\n height={props.height == undefined ? window.innerHeight - 164 : props.height}\r\n allowColumnResizing={true}\r\n columnResizingMode=\"nextColumn\"\r\n onRowClick={props.onRowClick}\r\n onEditorPrepared={onEditorPrepared}\r\n showRowLines={true}\r\n allowColumnReordering={true}\r\n scrolling={{ useNative: true }}\r\n remoteOperations={false}\r\n paging={{ enabled: false }}\r\n repaintChangesOnly={true}\r\n focusedRowEnabled={false}\r\n onCellClick={e => {\r\n e.cellElement.style.backgroundColor = 'transparent';\r\n }}\r\n filterSyncEnabled={true}\r\n wordWrapEnabled={props.wordWrapEnabled ? props.wordWrapEnabled : false}\r\n columnFixing={{ enabled: true }}\r\n onSelectionChanged={props.onSelectionChanged}\r\n noDataText={props.noDataText}\r\n onSaved={props.onSaved}\r\n onSaving={props.onSaving}\r\n onEditCanceling={props.onEditCanceling}\r\n onContentReady={handleContentReady}\r\n onFilterValueChange={onFilterValueChange}\r\n onOptionChanged={props.onOptionChanged}\r\n onToolbarPreparing={props.onToolbarPreparing || onToolbarPreparing}\r\n >\r\n {columns.current.map((col: any) => (\r\n <Column key={col.dataField} {...col} minWidth={50} >\r\n {col.lookUp && <Lookup {...col.lookUp} />}\r\n {col.dataField === 'IsActive' &&\r\n <HeaderFilter dataSource={[\r\n { text: 'Active', value: true },\r\n { text: 'Passive', value: false },\r\n ]} />\r\n }\r\n\r\n {col.useDynamicHeaderFilter && (\r\n <HeaderFilter\r\n allowSearch={true}\r\n dataSource={[\r\n { text: \"(Blanks)\", value: null }, // Blanks seçeneğini ekleyin\r\n ...(data && data.length > 0 ? data\r\n .filter(\r\n (item) =>\r\n item[col.dataField] !== null &&\r\n item[col.dataField] !== undefined &&\r\n item[col.dataField] !== \"\"\r\n )\r\n .map((item) => ({\r\n text: item[col.dataField].toString(),\r\n value: item[col.dataField],\r\n })) : [])\r\n ]}\r\n />\r\n )}\r\n {col.multiLevelColumns &&\r\n col.multiLevelColumns.map((multiLevelColItem: any) => (\r\n <Column\r\n dataField={multiLevelColItem.dataField}\r\n caption={multiLevelColItem.caption}\r\n width={80}\r\n />\r\n ))}\r\n </Column>\r\n ))}\r\n\r\n {props.actionColumnEnable !== undefined &&\r\n props.actionColumnEnable === true && (\r\n <Column\r\n dataField=\"Actions\"\r\n fixed={true}\r\n allowSorting={false}\r\n caption={props.actionButtonGroupCaption}\r\n type=\"buttons\"\r\n showInColumnChooser={false}\r\n cellRender={(cellData) => actionCellRender(cellData, props)}\r\n /> \r\n )}\r\n {props.showMasterDetail && (\r\n <MasterDetail enabled={true} component={detailGrid} />\r\n )}\r\n\r\n {props.edit && (\r\n <Editing\r\n mode={props.edit.mode}\r\n allowUpdating={props.edit.allowUpdating}\r\n allowDeleting={props.edit.allowDeleting}\r\n allowAdding={props.edit.allowAdding}\r\n useIcons={true}\r\n >\r\n {props.edit.mode === \"popup\" && (\r\n <div>\r\n <Popup\r\n showTitle={true}\r\n width={700}\r\n height={300}\r\n showCloseButton={false}\r\n />\r\n <Form>\r\n {props.edit.formItems &&\r\n props.edit.formItems.map((formItem: any) => (\r\n <Item\r\n itemType={formItem.itemType}\r\n colCount={formItem.colCount}\r\n colSpan={formItem.colSpan}\r\n >\r\n {formItem.items.map((subItem: any) => (\r\n <Item\r\n key={subItem.dataField}\r\n dataField={subItem.dataField}\r\n />\r\n ))}\r\n </Item>\r\n ))}\r\n </Form>\r\n </div>\r\n )}\r\n </Editing>\r\n )}\r\n <Paging defaultPageSize={props.pageSize} />\r\n {props.pagingEnable && (\r\n <Pager\r\n visible={false}\r\n displayMode=\"full\"\r\n showPageSizeSelector={false}\r\n showNavigationButtons={false}\r\n showInfo={false}\r\n />\r\n )}\r\n <Scrolling\r\n showScrollbar=\"always\"\r\n scrollByContent={true}\r\n scrollByThumb={true}\r\n mode={\"virtual\"}\r\n rowRenderingMode=\"virtual\"\r\n />\r\n {loading && <LoadPanel enabled shadingColor=\"rgba(0,0,0,0.4)\" />}\r\n <SearchPanel visible={true} />\r\n <FilterRow\r\n visible={props.isFilterRow != undefined ? props.isFilterRow : true}\r\n />\r\n <FilterPanel visible={true} />\r\n <HeaderFilter visible={true} />\r\n <Sorting mode=\"multiple\" />\r\n <Export\r\n enabled={true}\r\n allowExportSelectedData={true}\r\n formats={exportFormats}\r\n />\r\n {props.selectOptions?.selectEnable && (\r\n <Selection\r\n mode={props.selectOptions?.mode ?? \"multiple\"}\r\n deferred={props.selectOptions?.deferred ?? true}\r\n />\r\n )}\r\n <ColumnChooser enabled={true} mode=\"select\">\r\n {!props.columnChooserPositionDisabled && (\r\n <Position\r\n my=\"right top\"\r\n at=\"right bottom\"\r\n of={\r\n document.querySelector(`.${props.dataGridPageName}`)\r\n ? `.${props.dataGridPageName} .dx-datagrid-column-chooser-button`\r\n : \".dx-datagrid-column-chooser-button\"\r\n }\r\n />\r\n )}\r\n <ColumnChooserSearch\r\n enabled={true}\r\n editorOptions={{ placeholder: \"\" }}\r\n />\r\n\r\n <ColumnChooserSelection\r\n allowSelectAll={true}\r\n selectByClick={true}\r\n recursive={true} />\r\n </ColumnChooser>\r\n <Toolbar>\r\n <DxItem name=\"searchPanel\" />\r\n <DxItem name=\"columnChooserButton\" cssClass='toolbarPanelItems' />\r\n <DxItem name=\"exportButton\" cssClass='toolbarPanelItems' />\r\n </Toolbar>\r\n <Summary calculateCustomSummary={renderTotal}>\r\n <TotalItem\r\n column={columns.current[0].dataField}\r\n summaryType=\"custom\"\r\n displayFormat={renderTotal()}\r\n />\r\n </Summary>\r\n <StateStoring\r\n enabled={true}\r\n type=\"custom\"\r\n customLoad={customLoad}\r\n customSave={customSave} >\r\n </StateStoring>\r\n </DataGrid>\r\n </React.Fragment >\r\n )\r\n}\r\n\r\nexport default OdsRemoteDataGrid;\r\n"],"names":["exportFormats","totalPageCount","loadedPageCount","totalRecordCount","useToken","theme","OdsRemoteDataGrid","props","token","data","setData","useState","fileName","dayjs","filteredRowCount","setFilteredRowCount","columns","useRef","gridRef","filterApplied","loading","setLoading","contentReady","setContentReady","scrollPosition","setScrollPosition","onCancelEditEvent","headers","useEffect","fetchData","newColumns","colItem","headerCellRenderr","jsx","Tooltip","InfoCircleOutlined","locale","loadMessages","checkSortingPropertyForInitilaize","cssRules","styleSheet","checkData","dataGridInstance","dataExists","gridElement","onOptionChanged","sortedColumn","p","column","index","fullName","gridEvent","checkRequestDataHasOnlySortingProperty","obj","keys","actionButtons","useMemo","useCallback","apiUrl","query","queryString","requestOptions","response","newData","newArray","prevData","getTotalCount","totalCount","onEditorPreparing","args","getServerSide","type","onExporting","workbook","Workbook","newColumnFromFilterData","filterItem","exportDataGridXls","options","gridCell","excelCell","date","offsetMinutes","sign","hours","minutes","formattedOffset","formattedDate","matchingItem","item","buffer","saveAs","doc","jsPDF","exportDataGrid","customLoad","state","customSave","onEditorPrepared","info","i","renderTotal","result","totalloaded","concatFilteredLabel","actionCellRender","cellData","kebabMenuButtons","button","DynamicIcon","event","customEvent","buttonElements","buttonItem","isVisible","OdsDataGrdiRowButton","OdsDropdown","React","onScrollEnd","handleScroll","debounce","e","scrollable","top","height","scrollHeight","maxHeight","reachedBottom","lastScrollTop","container","handleContentReady","filteredDataCount","onFilterValueChange","onToolbarPreparing","_","__","wrapper","createRoot","buttonGroupItem","OdsButton","isTextEmpty","OdsTitle","detailGrid","jsxs","DataGrid","col","Column","Lookup","HeaderFilter","multiLevelColItem","MasterDetail","Editing","Popup","Form","formItem","Item","subItem","Paging","Pager","Scrolling","LoadPanel","SearchPanel","FilterRow","FilterPanel","Sorting","Export","Selection","ColumnChooser","Position","ColumnChooserSearch","ColumnChooserSelection","Toolbar","DxItem","Summary","TotalItem","StateStoring"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OdsRemoteDataGrid.js","sources":["../../../src/components/devextreme/OdsRemoteDataGrid.tsx"],"sourcesContent":["import { createRoot } from \"react-dom/client\";\r\nimport React, {\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n } from \"react\";\r\nimport DataGrid, {\r\n Item as DxItem,\r\n Column,\r\n ColumnChooser,\r\n ColumnChooserSearch,\r\n ColumnChooserSelection,\r\n Export,\r\n FilterPanel,\r\n FilterRow,\r\n HeaderFilter,\r\n LoadPanel,\r\n Position,\r\n SearchPanel,\r\n Sorting,\r\n Toolbar,\r\n StateStoring,\r\n Scrolling,\r\n IDataGridOptions,\r\n Summary,\r\n TotalItem,\r\n IButtonProps,\r\n Selection,\r\n ISelectionProps,\r\n Pager,\r\n IEditingProps,\r\n Editing,\r\n Popup,\r\n Form,\r\n Paging,\r\n ISummaryProps,\r\n MasterDetail \r\n} from \"devextreme-react/data-grid\";\r\nimport { Item } from \"devextreme-react/form\";\r\nimport { exportDataGrid } from \"devextreme/pdf_exporter\";\r\nimport { exportDataGrid as exportDataGridXls } from \"devextreme/excel_exporter\";\r\nimport jsPDF from \"jspdf\";\r\nimport { Workbook } from \"exceljs\";\r\nimport { saveAs } from \"file-saver-es\";\r\nimport dayjs from \"dayjs\";\r\nimport { Tooltip, theme } from \"antd\";\r\nimport { locale, loadMessages } from \"devextreme/localization\";\r\nimport { Lookup } from \"devextreme-react\";\r\nimport debounce from \"lodash/debounce\";\r\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\r\n\r\nimport { ButtonType } from 'antd/es/button/buttonHelpers';\r\nimport queryString from 'query-string';\r\nimport ReactDOM from 'react-dom';\r\nimport DynamicIcon from './datagridUtils/DynamicIcon';\r\nimport OdsButton from \"../antd/button/OdsButton\";\r\nimport OdsTitle from \"../antd/typography/OdsTitle\";\r\nimport OdsDropdown from \"../antd/dropdown/OdsDropdown\";\r\nimport OdsDataGrdiRowButton from \"../antd/button/OdsDataGrdiRowButton\";\r\nimport { isTextEmpty } from \"../../utils/commonFunctions\";\r\n\r\nconst exportFormats = [\"xlsx\"]; //['xlsx', 'pdf'];\r\nlet totalPageCount = 1;\r\nlet loadedPageCount = 1;\r\nlet totalRecordCount = 0;\r\nconst { useToken } = theme;\r\n\r\nexport interface IOdsDataGridProps extends IDataGridOptions {\r\n dataGridPageName?: string;\r\n language: string;\r\n exportFileName: string;\r\n filterEnabledShow: boolean;\r\n pageTitle?: string;\r\n toolbarButtonGroup?: IButtonGroup[];\r\n actionButtonGroup?: IButtonGroup[];\r\n actionButtonGroupCaption?: string;\r\n columns: any[];\r\n detailGridColums?: any[];\r\n pageSize?: number;\r\n actionColumnEnable: boolean;\r\n selectOptions?: ISelectOptions;\r\n columnChooserPositionDisabled?: boolean;\r\n pagingEnable?: boolean;\r\n edit?: IEditingoptions;\r\n isServerSide: boolean;\r\n axiosRequest?: IAxiosProps;\r\n customSummary?: ISummaryRowOptions;\r\n handleEditorPreparing?: any;\r\n isFilterRow?: boolean;\r\n filterData?: any[];\r\n showMasterDetail?: boolean;\r\n detailData?: any;\r\n}\r\n\r\ninterface ISummaryRowOptions {\r\n summaryLoadedDataLabel?: string;\r\n summaryTotalDataLabel?: string;\r\n summaryFilteredDataLabel?: string;\r\n summaryItems?: ISummaryProps[];\r\n summaryTotalCount?: number;\r\n summaryTotalPageCountLabel?: string;\r\n}\r\n\r\ninterface IAxiosProps {\r\n requestData?: any;\r\n apiUrl: string;\r\n environmentUrl: string;\r\n requestQueryString?: any;\r\n requestType: string;\r\n}\r\n\r\ninterface IEditingoptions extends IEditingProps {\r\n formItems?: any[];\r\n title?: string;\r\n}\r\n\r\ninterface ISelectOptions extends ISelectionProps {\r\n selectEnable: boolean;\r\n}\r\n\r\ninterface IButtonGroup extends IButtonProps {\r\n type?: ButtonType;\r\n label?: string;\r\n onclick?: React.MouseEventHandler<HTMLElement>;\r\n actionPermission?: boolean;\r\n}\r\n\r\nconst OdsRemoteDataGrid = (props: IOdsDataGridProps) => {\r\n const { token } = useToken();\r\n const [data, setData] = useState([]);\r\n const fileName = props.exportFileName\r\n ? props.exportFileName + dayjs().format(\"YYYYMMDD\")\r\n : \"DatagridExportFile\" + dayjs().format(\"YYYYMMDD\");\r\n const [filteredRowCount, setFilteredRowCount] = useState(0);\r\n const columns = useRef(props.columns);\r\n let gridRef = useRef(null);\r\n const filterApplied = useRef(false);\r\n const [loading, setLoading] = useState(false);\r\n const [contentReady, setContentReady] = useState(false);\r\n const [scrollPosition, setScrollPosition] = useState(0);\r\n\r\n const onCancelEditEvent = new CustomEvent(\"cancelEdit\", {\r\n bubbles: true,\r\n detail: {\r\n rowData: null,\r\n },\r\n });\r\n\r\n const headers = new Headers({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept-Language\": props.language != \"\" ? props.language : \"EN\",\r\n });\r\n\r\n useEffect(() => {\r\n totalPageCount = 1;\r\n loadedPageCount = 1;\r\n totalRecordCount = 0;\r\n }, [props.dataGridPageName]);\r\n\r\n useEffect(() => {\r\n if (props.axiosRequest !== undefined\r\n && ((props.axiosRequest?.requestData && Object.keys(props.axiosRequest?.requestData).length > 0) || (props.axiosRequest?.requestQueryString))) {\r\n totalPageCount = 1;\r\n loadedPageCount = 1;\r\n totalRecordCount = 0;\r\n setData([]);\r\n fetchData();\r\n }\r\n }, [props.axiosRequest?.requestData, props.axiosRequest?.requestQueryString]);\r\n\r\n useEffect(() => {\r\n if (columns.current !== undefined && columns.current.length > 0) {\r\n const newColumns = columns.current.map((colItem) => {\r\n if (colItem.tooltip !== undefined && colItem.tooltip.enable) {\r\n const headerCellRenderr = () => {\r\n return (\r\n <div>\r\n <span>{colItem.caption}</span>\r\n <Tooltip title={colItem.tooltip.title}>\r\n <InfoCircleOutlined style={{ marginLeft: 5 }} />\r\n </Tooltip>\r\n </div>\r\n );\r\n };\r\n colItem.headerCellRender = headerCellRenderr;\r\n }\r\n\r\n // this process prevents client-side sorting process if grid use server-side\r\n // when calculateSortValue setted anything else from the grid columns sorting process not working for client-side data\r\n if (props.isServerSide)\r\n colItem.calculateSortValue = String(\"dummyFieldForPreventClientSideSorting\")\r\n\r\n return colItem;\r\n });\r\n columns.current = newColumns;\r\n }\r\n }, [props.columns]);\r\n\r\n useEffect(() => {\r\n if (Array.isArray(props.dataSource)) {\r\n setData(props.dataSource);\r\n }\r\n }, [props.dataSource]);\r\n\r\n useEffect(() => {\r\n locale(localStorage.getItem(\"locale\"));\r\n loadMessages(JSON.parse(localStorage.getItem(\"localTranslation\")));\r\n if (gridRef.current) {\r\n gridRef.current?.instance?.()?.updateDimensions();\r\n }\r\n }, []);\r\n\r\n // this useEffect used for check sort change once for component mount process\r\n useEffect(() => {\r\n if (contentReady) checkSortingPropertyForInitilaize();\r\n }, [contentReady]);\r\n\r\n useEffect(() => {\r\n const cssRules = `\r\n .data-exists .dx-datagrid-borders > .dx-datagrid-filter-panel,\r\n .data-exists .dx-datagrid-borders > .dx-datagrid-headers {\r\n border-top: 1px solid rgba(0, 0, 0, 0.06);\r\n padding-right: 0px !important;\r\n }\r\n \r\n .data-exists .dx-datagrid-headers .dx-datagrid-content {\r\n margin-bottom: -1px;\r\n padding-right: 17px !important;\r\n }\r\n `;\r\n\r\n const styleSheet = document.createElement('style');\r\n styleSheet.type = 'text/css';\r\n styleSheet.innerText = cssRules;\r\n document.head.appendChild(styleSheet);\r\n\r\n const checkData = () => {\r\n if (gridRef.current) {\r\n const dataGridInstance = gridRef.current.instance?.();\r\n const dataExists = data.length >= 15;\r\n\r\n const gridElement = dataGridInstance?.element();\r\n if (dataExists) {\r\n gridElement.classList.add('data-exists');\r\n } else {\r\n gridElement.classList.remove('data-exists');\r\n }\r\n }\r\n };\r\n\r\n const dataGridInstance = gridRef.current.instance?.();\r\n dataGridInstance?.on('dataChanged', checkData);\r\n checkData();\r\n\r\n return () => {\r\n document.head.removeChild(styleSheet);\r\n dataGridInstance?.off('dataChanged', checkData);\r\n };\r\n }, [data]);\r\n\r\n // check if there is sorted column and trigger onOptionChanged method for sort process\r\n const checkSortingPropertyForInitilaize = () => {\r\n const { onOptionChanged } = props;\r\n if (onOptionChanged) {\r\n const dataGridInstance = gridRef.current.instance?.();\r\n const sortingState = dataGridInstance?.getVisibleColumns()\r\n .filter((p) => !p.command)\r\n .map((column, index) => ({\r\n index: index, // decrease index for deafult empty column\r\n dataField: column.dataField,\r\n sortOrder: column.sortOrder,\r\n }));\r\n\r\n var sortedColumn = sortingState.find(column => column.sortOrder !== undefined)\r\n if (sortedColumn) {\r\n if (sortedColumn.sortOrder) {\r\n dataGridInstance.option(`columns[${sortedColumn.index}].sortOrder`, sortedColumn.sortOrder);\r\n\r\n // prepare OptionChangedEventInfo data for onOptionChanged method\r\n const fullName = `columns[${sortedColumn.index}].sortOrder`;\r\n const gridEvent = {\r\n component: dataGridInstance,\r\n fullName: fullName,\r\n name: \"optionChanged\",\r\n value: sortedColumn.sortOrder,\r\n previousValue: null,\r\n element: null,\r\n };\r\n\r\n onOptionChanged(gridEvent);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const checkRequestDataHasOnlySortingProperty = (obj) => {\r\n // Get all property names from the object\r\n const keys = Object.keys(obj);\r\n // Check if there is only one property and it is 'Sorting'\r\n return keys.length === 1 && keys[0] === \"Sorting\";\r\n };\r\n\r\n const actionButtons = useMemo(() => {\r\n if (props.actionButtonGroup) {\r\n if (props.actionButtonGroup.length >= 2 && !props.edit) {\r\n return props.actionButtonGroup.slice(0, 2);\r\n } else {\r\n return props.actionButtonGroup;\r\n }\r\n } else {\r\n return [];\r\n }\r\n }, [props.actionButtonGroup]);\r\n\r\n // const kebabMenuButtons = useMemo(() => {\r\n // if (props.actionButtonGroup) {\r\n // if (props.actionButtonGroup.length >= 2 && !props.edit) {\r\n // return props.actionButtonGroup.slice(2, props.actionButtonGroup.length);\r\n // } else {\r\n // return [];\r\n // }\r\n // } else {\r\n // return [];\r\n // }\r\n // }, [props.actionButtonGroup]);\r\n\r\n const fetchData = useCallback(async () => {\r\n if (props.axiosRequest == undefined) return;\r\n\r\n if (props.isServerSide) {\r\n\r\n // check requestData for sorting property if there is only sorting property grid shouldn't do fetch data\r\n if (props.axiosRequest.requestData && checkRequestDataHasOnlySortingProperty(props.axiosRequest.requestData))\r\n return;\r\n\r\n let apiUrl =\r\n props.axiosRequest.environmentUrl + \"\" + props.axiosRequest.apiUrl;\r\n\r\n if (props.axiosRequest.requestData?.PaginatedRequest !== undefined) {\r\n props.axiosRequest.requestData.PaginatedRequest.PageNumber =\r\n loadedPageCount;\r\n props.axiosRequest.requestData.PaginatedRequest.PageSize =\r\n props.pageSize;\r\n }\r\n\r\n if (props.axiosRequest.requestQueryString !== undefined) {\r\n\r\n props.axiosRequest.requestQueryString.maxResultCount = props.pageSize;\r\n\r\n if (loadedPageCount > 1 && totalPageCount >= loadedPageCount) {\r\n props.axiosRequest.requestQueryString.skipCount = ((loadedPageCount - 1) * props.pageSize).toString();\r\n }\r\n\r\n let query = queryString.stringify(props.axiosRequest.requestQueryString);\r\n\r\n apiUrl = `${apiUrl}?${query}`\r\n }\r\n\r\n const requestOptions = {\r\n method: props.axiosRequest.requestType,\r\n headers: headers,\r\n credentials: \"include\" as RequestCredentials,\r\n body: JSON.stringify(props.axiosRequest.requestData),\r\n };\r\n\r\n try {\r\n setLoading(true);\r\n const response = await fetch(apiUrl, requestOptions);\r\n\r\n const newData = await response.json();\r\n\r\n if (loadedPageCount == 1) {\r\n setData(newData.Data ? newData.Data : newData);\r\n\r\n loadedPageCount = 1;\r\n } else if (totalPageCount >= loadedPageCount) {\r\n const newArray = newData.Data ? newData.Data : newData;\r\n setData((prevData) => [...prevData, ...newArray]);\r\n }\r\n\r\n getTotalCount(response, newData);\r\n } catch (error) {\r\n console.error(\"Error fetching data:\", error);\r\n setLoading(false);\r\n } finally {\r\n }\r\n }\r\n }, [\r\n props.axiosRequest?.requestData,\r\n props.axiosRequest?.apiUrl,\r\n props.axiosRequest?.environmentUrl,\r\n props.axiosRequest?.requestQueryString,\r\n props.axiosRequest?.requestType,\r\n props.pageSize,\r\n props.isServerSide,\r\n ]);\r\n\r\n const getTotalCount = (response: Response, data: any): void => {\r\n if (data?.PageCount || data?.RowCount) {\r\n totalPageCount = data.PageCount;\r\n totalRecordCount = data.RowCount;\r\n } else {\r\n let totalCount;\r\n\r\n if (response) totalCount = response.headers.get(\"x-total-count\");\r\n\r\n if (totalCount == null) totalCount = data?.rowCount;\r\n\r\n if (totalCount == null) totalCount = data?.length;\r\n\r\n totalRecordCount = parseInt(totalCount, 10) || 0;\r\n totalPageCount = Math.ceil(totalRecordCount / props.pageSize);\r\n }\r\n\r\n setLoading(false);\r\n };\r\n\r\n const onEditorPreparing = useCallback(\r\n (e: any) => {\r\n if (e.row !== undefined && e.parentType === \"dataRow\") {\r\n if (props.handleEditorPreparing) {\r\n props.handleEditorPreparing(e);\r\n }\r\n }\r\n\r\n if (\r\n e.editorOptions &&\r\n e.rowType === \"data\" &&\r\n e.parentType === \"dataRow\"\r\n ) {\r\n e.editorOptions.onValueChanged = function (args) {\r\n if (args.event && args.event.type === \"cancel\")\r\n e.cellElement.dispatchEvent(onCancelEditEvent);\r\n };\r\n }\r\n },\r\n [props.isServerSide]\r\n );\r\n\r\n const getServerSide = useCallback(\r\n async (type: string) => {\r\n if (type === \"reachedBottom\") {\r\n if (totalPageCount <= loadedPageCount) {\r\n return;\r\n } else {\r\n loadedPageCount = loadedPageCount + 1;\r\n await fetchData();\r\n }\r\n }\r\n },\r\n [totalPageCount]\r\n );\r\n\r\n const onExporting = useCallback(\r\n (e: any) => {\r\n if (e.format === \"xlsx\") {\r\n const workbook = new Workbook();\r\n\r\n //Dışa aktarma işlemi sırasında filtre verilerini yeni sütunları ekle\r\n if (props.filterData != null) {\r\n const newColumnFromFilterData = props.filterData.map((filterItem) => ({\r\n dataField: filterItem.key,\r\n caption: filterItem.key\r\n }));\r\n\r\n const newColumns = [...columns.current, ...newColumnFromFilterData];\r\n e.component.beginUpdate();\r\n e.component.option(\"columns\", newColumns);\r\n e.component.endUpdate();\r\n }\r\n exportDataGridXls({\r\n component: e.component,\r\n worksheet: workbook.addWorksheet(\"Main sheet\"),\r\n autoFilterEnabled: true,\r\n customizeCell: function (options) {\r\n //Buradaki kod dg için yanlızca datefilter çalışması için eklendi. Dg üstünde format olarak format: \"dd.MM.yyyy\" şeklinde düzenleme yapıldı, ekranda saat bilgisi görünmesi içie cellRender: datetimeCellRender fonksiyonu eklendi. Format değişikliği yüzünden ezcelde saat bilgisi çıkmıyordu, bu yüzden bu kod bloğu eklendi.\r\n const { gridCell, excelCell } = options;\r\n if (gridCell.column.dataType === \"datetime\" && gridCell.value) {\r\n // Aşağıdaki if bloğu yukarıdaki if bloğu ile birleştirimemeli. Çünkü \"gridCell?.column?.calculateFilterExpression?.name === \"calculateFilterExpressionForColumn\"\"\" olsa bile gridCell.value değeri hezaman undefined geliyor. gridCell.column['meta'] konrolü cellRender eklenmeme durumu için eklendi.\r\n if (\r\n gridCell.column.calculateFilterExpression?.name ===\r\n \"calculateFilterExpressionForColumn\" &&\r\n gridCell.column[\"meta\"]?.hasCustomCellRenderer\r\n ) {\r\n const date = dayjs(gridCell.value);\r\n const offsetMinutes = date.utcOffset();\r\n const sign = offsetMinutes >= 0 ? \"+\" : \"-\";\r\n const hours = Math.floor(Math.abs(offsetMinutes) / 60);\r\n const minutes = Math.abs(offsetMinutes) % 60;\r\n const formattedOffset = `(UTC${sign}${hours\r\n .toString()\r\n .padStart(2, \"0\")}:${minutes.toString().padStart(2, \"0\")})`;\r\n const formattedDate =\r\n date.format(\"DD.MM.YYYY HH:mm\") + \" \" + formattedOffset;\r\n excelCell.value = formattedDate;\r\n }\r\n }\r\n\r\n //girilen filtre değerlerinin uygun başlık altında satıra yazılması \r\n if (gridCell.rowType !== 'header' && props.filterData != null) {\r\n const matchingItem = props.filterData.find(item => item.key === gridCell.column.dataField);\r\n if (matchingItem) {\r\n excelCell.value = matchingItem.value;\r\n }\r\n }\r\n }\r\n }).then(() => {\r\n workbook.xlsx.writeBuffer().then((buffer) => {\r\n saveAs(new Blob([buffer], { type: 'application/octet-stream' }), fileName + '.xlsx');\r\n });\r\n });\r\n } else {\r\n const doc = new jsPDF();\r\n exportDataGrid({\r\n jsPDFDocument: doc,\r\n component: e.component,\r\n indent: 5,\r\n }).then(() => {\r\n doc.save(fileName + '.pdf');\r\n });\r\n }\r\n }, [fileName, props.filterData]);\r\n\r\n const customLoad = useCallback(() => {\r\n let state = JSON.parse(\r\n localStorage.getItem(props.exportFileName + \"Storage\")\r\n );\r\n\r\n if (localStorage.getItem(props.exportFileName + \"Storage\")) {\r\n state.selectedRowKeys = [];\r\n if (props.filterEnabledShow) state.filterPanel = { filterEnabled: false };\r\n else state.filterPanel = { filterEnabled: true };\r\n }\r\n\r\n return state;\r\n }, [props.filterEnabledShow]);\r\n\r\n const customSave = useCallback(\r\n (state: any) => {\r\n state.selectedRowKeys = [];\r\n if (props.filterEnabledShow) state.filterPanel = { filterEnabled: false };\r\n else state.filterPanel = { filterEnabled: true };\r\n\r\n if (data.length === 0) {\r\n if (!state.filterValue && state.filterValue !== null) {\r\n state.filterValue = null;\r\n }\r\n }\r\n localStorage.setItem(\r\n props.exportFileName + \"Storage\",\r\n JSON.stringify(state)\r\n );\r\n },\r\n [props.filterEnabledShow]\r\n );\r\n\r\n const onEditorPrepared = useCallback((info) => {\r\n if (\r\n info.parentType === \"filterRow\" &&\r\n info.editorName === \"dxSelectBox\" &&\r\n info.dataField === \"IsActive\"\r\n ) {\r\n if (info.dataSource != null && info.dataSource.length > 0) {\r\n info.showAllText = info.dataSource.find((i) => {\r\n return i.value === null;\r\n }).label;\r\n info.trueText = info.dataSource.find((i) => {\r\n return i.value === true;\r\n }).label;\r\n info.falseText = info.dataSource.find((i) => {\r\n return i.value === false;\r\n }).label;\r\n }\r\n }\r\n }, []);\r\n\r\n const renderTotal = useCallback(() => {\r\n let result = \"\";\r\n let totalloaded = 0;\r\n\r\n if (\r\n data.length < 50 ||\r\n !props.isServerSide ||\r\n loadedPageCount == totalPageCount\r\n ) {\r\n totalloaded = data.length;\r\n } else {\r\n totalloaded = loadedPageCount * props.pageSize;\r\n }\r\n\r\n if (props.isServerSide) {\r\n result =\r\n totalRecordCount > 0\r\n ? `${totalloaded} ` +\r\n props.customSummary?.summaryLoadedDataLabel +\r\n `- ${totalRecordCount}` +\r\n props.customSummary?.summaryTotalDataLabel\r\n : ``;\r\n result = concatFilteredLabel(result, totalloaded);\r\n }\r\n\r\n if (\r\n props.customSummary?.summaryTotalCount !== undefined &&\r\n !props.isServerSide\r\n ) {\r\n result =\r\n props.customSummary.summaryTotalDataLabel +\r\n \" : \" +\r\n props.customSummary.summaryTotalCount;\r\n result = concatFilteredLabel(result, totalloaded);\r\n }\r\n\r\n if (totalPageCount > 1) {\r\n result = `${result} - ${props.customSummary?.summaryTotalPageCountLabel} ${loadedPageCount} / ${totalPageCount}`;\r\n }\r\n return result;\r\n }, [\r\n data,\r\n filteredRowCount,\r\n loadedPageCount,\r\n props.pageSize,\r\n totalRecordCount,\r\n filterApplied.current,\r\n ]);\r\n\r\n const concatFilteredLabel = (result: string, totalloaded: number) => {\r\n if (\r\n filteredRowCount > 0 &&\r\n totalloaded !== filteredRowCount &&\r\n filterApplied.current\r\n ) {\r\n let filteredLabel =\r\n `${filteredRowCount} ` +\r\n props.customSummary.summaryFilteredDataLabel +\r\n `- `;\r\n result = `${filteredLabel} ${result} `;\r\n }\r\n return result;\r\n };\r\n\r\n function actionCellRender(cellData, props) {\r\n const kebabMenuButtons = props.actionButtonGroup && props.actionButtonGroup.length >= 2 && !props.edit\r\n ? props.actionButtonGroup.slice(2).map(button => ({\r\n icon: <DynamicIcon iconName={button.icon} />,\r\n onClick: (event) => {\r\n const customEvent = {\r\n column: cellData.column,\r\n component: cellData.component,\r\n element: cellData.element,\r\n event: event,\r\n model: cellData.data,\r\n row: cellData.row\r\n };\r\n button.onClick(customEvent);\r\n }\r\n }))\r\n : [];\r\n\r\n const buttonElements = [];\r\n\r\n {\r\n !props.edit &&\r\n actionButtons.forEach((buttonItem, index) => {\r\n const isVisible = typeof buttonItem.visible === 'function'\r\n ? buttonItem.visible({ column: cellData.column, component: cellData.component, row: cellData.row })\r\n : buttonItem.visible;\r\n buttonElements.push(\r\n <OdsDataGrdiRowButton\r\n key={`action-button-${index}`}\r\n hint={buttonItem.hint}\r\n visible={isVisible}\r\n size=\"small\"\r\n type=\"text\"\r\n disabled={\r\n buttonItem.actionPermission === undefined\r\n ? false\r\n : !buttonItem.actionPermission\r\n }\r\n icon={\r\n <DynamicIcon iconName={buttonItem.icon} />\r\n }\r\n onClick={(event) => {\r\n // event.preventDefault();\r\n const customEvent = {\r\n column: cellData.column,\r\n component: cellData.component,\r\n element: cellData.element,\r\n event: event,\r\n model: cellData.data,\r\n row: cellData.row\r\n };\r\n buttonItem.onClick(customEvent);\r\n }}\r\n />\r\n );\r\n });\r\n }\r\n {\r\n props.edit &&\r\n actionButtons.forEach((buttonItem, index) => {\r\n const isVisible = typeof buttonItem.visible === 'function'\r\n ? buttonItem.visible({ column: cellData.column, component: cellData.component, row: cellData.row })\r\n : buttonItem.visible;\r\n\r\n buttonElements.push(\r\n <OdsDataGrdiRowButton\r\n key={`action-button-${index}`}\r\n name={buttonItem.name}\r\n hint={buttonItem.hint}\r\n visible={isVisible}\r\n size=\"small\"\r\n type=\"text\"\r\n disabled={\r\n buttonItem.actionPermission === undefined\r\n ? false\r\n : !buttonItem.actionPermission\r\n }\r\n icon={\r\n <DynamicIcon iconName={buttonItem.icon} />\r\n }\r\n onClick={(event) => {\r\n if (buttonItem.onClick) { \r\n // event.preventDefault();\r\n const customEvent = {\r\n column: cellData.column,\r\n component: cellData.component,\r\n element: cellData.element,\r\n event: event,\r\n model: cellData.data,\r\n row: cellData.row \r\n };\r\n buttonItem.onClick(customEvent);\r\n }\r\n }}\r\n />\r\n );\r\n });\r\n }\r\n\r\n if (kebabMenuButtons.length > 0) {\r\n buttonElements.push(\r\n <OdsDropdown\r\n key={`dropdown-${cellData.rowIndex || cellData.data.ID}`}\r\n menuItems={kebabMenuButtons}\r\n >\r\n <OdsDataGrdiRowButton type=\"text\" icon={<DynamicIcon iconName={\"kebabMenu\"} />} />\r\n </OdsDropdown>\r\n );\r\n }\r\n\r\n return <React.Fragment><div className=\"flex flex-row gap-4 justify-center items-center\">{buttonElements}</div></React.Fragment>;\r\n }\r\n\r\n const onScrollEnd = useCallback(() => {\r\n getServerSide(\"reachedBottom\");\r\n }, [props.axiosRequest?.requestData, getServerSide]);\r\n\r\n const handleScroll = (e: any) => {\r\n const run = debounce((e: any) => {\r\n const scrollable = e.target as HTMLElement;\r\n\r\n const top = scrollable?.scrollTop ?? 0;\r\n const height = scrollable?.clientHeight ?? 0;\r\n const scrollHeight = scrollable?.scrollHeight ?? 0;\r\n const maxHeight = Math.max(top, height, scrollHeight) - 1;\r\n\r\n if (scrollHeight <= height) return;\r\n\r\n const reachedBottom = Math.ceil(top + height) >= maxHeight;\r\n\r\n let lastScrollTop = 0;\r\n if (top < lastScrollTop) return;\r\n\r\n lastScrollTop = top <= 0 ? 0 : top;\r\n if (reachedBottom) onScrollEnd();\r\n\r\n setScrollPosition(top);\r\n }, 200);\r\n\r\n run(e);\r\n };\r\n\r\n useEffect(() => {\r\n const gridElement = gridRef.current.instance?.()?.element();\r\n gridElement.scrollTop = scrollPosition;\r\n }, [data.length]);\r\n\r\n useEffect(() => {\r\n document\r\n .querySelectorAll(\".dx-scrollable-container\")\r\n .forEach((container) => {\r\n container.addEventListener(\"scrollend\", handleScroll);\r\n });\r\n\r\n return () => {\r\n document\r\n .querySelectorAll(\".dx-scrollable-container\")\r\n .forEach((container) => {\r\n container.removeEventListener(\"scrollend\", handleScroll);\r\n });\r\n };\r\n }, [data.length]);\r\n\r\n const handleContentReady = (e) => {\r\n const dataGridInstance = e.component;\r\n const filteredDataCount = dataGridInstance.totalCount();\r\n\r\n if (filterApplied.current && filteredDataCount > 0)\r\n {\r\n setFilteredRowCount(filteredDataCount);\r\n }\r\n else{\r\n setFilteredRowCount(0);\r\n }\r\n\r\n // set content ready state for trigger sort change method only once if content ready\r\n if (!contentReady) setContentReady(true);\r\n };\r\n\r\n const onFilterValueChange = (e) => {\r\n if (e !== null)\r\n filterApplied.current = true;\r\n else {\r\n filterApplied.current = false;\r\n setFilteredRowCount(0);\r\n }\r\n }\r\n\r\n\r\n const onToolbarPreparing = (e) => {\r\n if (props.toolbarButtonGroup && props.toolbarButtonGroup.length > 0) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'before',\r\n template: function (_, __, container) {\r\n const wrapper = document.createElement('div');\r\n container.appendChild(wrapper);\r\n const root = createRoot(wrapper);\r\n\r\n root.render(<React.StrictMode>\r\n {props.toolbarButtonGroup && Array.isArray(props.toolbarButtonGroup) &&\r\n props.toolbarButtonGroup.map((buttonGroupItem, index) => (\r\n <OdsButton key={index} style={{ marginLeft: token.margin }} type={buttonGroupItem.type} onClick={buttonGroupItem.onclick}>\r\n {buttonGroupItem.label}\r\n </OdsButton>\r\n ))\r\n }\r\n </React.StrictMode>);\r\n }\r\n });\r\n }\r\n\r\n if(!isTextEmpty(props.pageTitle)) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'before',\r\n cssClass: 'toolbarTitleItem',\r\n template: function (_, __, container) {\r\n const wrapper = document.createElement('div');\r\n container.appendChild(wrapper);\r\n const root = createRoot(wrapper);\r\n\r\n root.render(<React.StrictMode>\r\n <OdsTitle level={5} style={{ display: \"flex\", alignItems: \"center\", alignSelf: \"stretch\", margin: 0 }}>{props.pageTitle}</OdsTitle>\r\n </React.StrictMode>);\r\n }\r\n });\r\n }\r\n };\r\n const detailGrid = ({ data }) => {\r\n return (\r\n <OdsRemoteDataGrid\r\n {...props}\r\n showMasterDetail={false}\r\n columns={props.detailGridColums}\r\n dataSource={props.detailData[data.key.ID]}\r\n\r\n />\r\n )\r\n };\r\n\r\n return (\r\n <React.Fragment >\r\n\r\n <DataGrid\r\n keyExpr={props.keyExpr}\r\n dataSource={data}\r\n showBorders={true}\r\n columnAutoWidth={false}\r\n onEditorPreparing={onEditorPreparing}\r\n ref={gridRef}\r\n onExporting={onExporting}\r\n height={props.height == undefined ? window.innerHeight - 164 : props.height}\r\n allowColumnResizing={true}\r\n columnResizingMode=\"nextColumn\"\r\n onRowClick={props.onRowClick}\r\n onEditorPrepared={onEditorPrepared}\r\n showRowLines={true}\r\n allowColumnReordering={true}\r\n scrolling={{ useNative: true }}\r\n remoteOperations={false}\r\n paging={{ enabled: false }}\r\n repaintChangesOnly={true}\r\n focusedRowEnabled={false}\r\n onCellClick={e => {\r\n e.cellElement.style.backgroundColor = 'transparent';\r\n }}\r\n filterSyncEnabled={true}\r\n wordWrapEnabled={props.wordWrapEnabled ? props.wordWrapEnabled : false}\r\n columnFixing={{ enabled: true }}\r\n onSelectionChanged={props.onSelectionChanged}\r\n noDataText={props.noDataText}\r\n onSaved={props.onSaved}\r\n onSaving={props.onSaving}\r\n onEditCanceling={props.onEditCanceling}\r\n onContentReady={handleContentReady}\r\n onFilterValueChange={onFilterValueChange}\r\n onOptionChanged={props.onOptionChanged}\r\n onToolbarPreparing={props.onToolbarPreparing || onToolbarPreparing}\r\n >\r\n {columns.current.map((col: any) => (\r\n <Column key={col.dataField} {...col} minWidth={50} >\r\n {col.lookUp && <Lookup {...col.lookUp} />}\r\n {col.dataField === 'IsActive' &&\r\n <HeaderFilter dataSource={[\r\n { text: 'Active', value: true },\r\n { text: 'Passive', value: false },\r\n ]} />\r\n }\r\n\r\n {col.useDynamicHeaderFilter && (\r\n <HeaderFilter\r\n allowSearch={true}\r\n dataSource={[\r\n { text: \"(Blanks)\", value: null }, // Blanks seçeneğini ekleyin\r\n ...(data && data.length > 0 ? data\r\n .filter(\r\n (item) =>\r\n item[col.dataField] !== null &&\r\n item[col.dataField] !== undefined &&\r\n item[col.dataField] !== \"\"\r\n )\r\n .map((item) => ({\r\n text: item[col.dataField].toString(),\r\n value: item[col.dataField],\r\n })) : [])\r\n ]}\r\n />\r\n )}\r\n {col.multiLevelColumns &&\r\n col.multiLevelColumns.map((multiLevelColItem: any) => (\r\n <Column\r\n dataField={multiLevelColItem.dataField}\r\n caption={multiLevelColItem.caption}\r\n width={80}\r\n />\r\n ))}\r\n </Column>\r\n ))}\r\n\r\n {props.actionColumnEnable !== undefined &&\r\n props.actionColumnEnable === true && (\r\n <Column\r\n dataField=\"Actions\"\r\n fixed={true}\r\n allowSorting={false}\r\n caption={props.actionButtonGroupCaption}\r\n type=\"buttons\"\r\n showInColumnChooser={false}\r\n cellRender={(cellData) => actionCellRender(cellData, props)}\r\n /> \r\n )}\r\n {props.showMasterDetail && (\r\n <MasterDetail enabled={true} component={detailGrid} />\r\n )}\r\n\r\n {props.edit && (\r\n <Editing\r\n mode={props.edit.mode}\r\n allowUpdating={props.edit.allowUpdating}\r\n allowDeleting={props.edit.allowDeleting}\r\n allowAdding={props.edit.allowAdding}\r\n useIcons={true}\r\n >\r\n {props.edit.mode === \"popup\" && (\r\n <div>\r\n <Popup\r\n showTitle={true}\r\n width={700}\r\n height={300}\r\n showCloseButton={false}\r\n />\r\n <Form>\r\n {props.edit.formItems &&\r\n props.edit.formItems.map((formItem: any) => (\r\n <Item\r\n itemType={formItem.itemType}\r\n colCount={formItem.colCount}\r\n colSpan={formItem.colSpan}\r\n >\r\n {formItem.items.map((subItem: any) => (\r\n <Item\r\n key={subItem.dataField}\r\n dataField={subItem.dataField}\r\n />\r\n ))}\r\n </Item>\r\n ))}\r\n </Form>\r\n </div>\r\n )}\r\n </Editing>\r\n )}\r\n <Paging defaultPageSize={props.pageSize} />\r\n {props.pagingEnable && (\r\n <Pager\r\n visible={false}\r\n displayMode=\"full\"\r\n showPageSizeSelector={false}\r\n showNavigationButtons={false}\r\n showInfo={false}\r\n />\r\n )}\r\n <Scrolling\r\n showScrollbar=\"always\"\r\n scrollByContent={true}\r\n scrollByThumb={true}\r\n mode={\"virtual\"}\r\n rowRenderingMode=\"virtual\"\r\n />\r\n {loading && <LoadPanel enabled shadingColor=\"rgba(0,0,0,0.4)\" />}\r\n <SearchPanel visible={true} />\r\n <FilterRow\r\n visible={props.isFilterRow != undefined ? props.isFilterRow : true}\r\n />\r\n <FilterPanel visible={true} />\r\n <HeaderFilter visible={true} />\r\n <Sorting mode=\"multiple\" />\r\n <Export\r\n enabled={true}\r\n allowExportSelectedData={true}\r\n formats={exportFormats}\r\n />\r\n {props.selectOptions?.selectEnable && (\r\n <Selection\r\n mode={props.selectOptions?.mode ?? \"multiple\"}\r\n deferred={props.selectOptions?.deferred ?? true}\r\n />\r\n )}\r\n <ColumnChooser enabled={true} mode=\"select\">\r\n {!props.columnChooserPositionDisabled && (\r\n <Position\r\n my=\"right top\"\r\n at=\"right bottom\"\r\n of={\r\n document.querySelector(`.${props.dataGridPageName}`)\r\n ? `.${props.dataGridPageName} .dx-datagrid-column-chooser-button`\r\n : \".dx-datagrid-column-chooser-button\"\r\n }\r\n />\r\n )}\r\n <ColumnChooserSearch\r\n enabled={true}\r\n editorOptions={{ placeholder: \"\" }}\r\n />\r\n\r\n <ColumnChooserSelection\r\n allowSelectAll={true}\r\n selectByClick={true}\r\n recursive={true} />\r\n </ColumnChooser>\r\n <Toolbar>\r\n <DxItem name=\"searchPanel\" />\r\n <DxItem name=\"columnChooserButton\" cssClass='toolbarPanelItems' />\r\n <DxItem name=\"exportButton\" cssClass='toolbarPanelItems' />\r\n </Toolbar>\r\n <Summary calculateCustomSummary={renderTotal}>\r\n <TotalItem\r\n column={columns.current[0].dataField}\r\n summaryType=\"custom\"\r\n displayFormat={renderTotal()}\r\n />\r\n </Summary>\r\n <StateStoring\r\n enabled={true}\r\n type=\"custom\"\r\n customLoad={customLoad}\r\n customSave={customSave} >\r\n </StateStoring>\r\n </DataGrid>\r\n </React.Fragment >\r\n )\r\n}\r\n\r\nexport default OdsRemoteDataGrid;\r\n"],"names":["exportFormats","totalPageCount","loadedPageCount","totalRecordCount","useToken","theme","OdsRemoteDataGrid","props","token","data","setData","useState","fileName","dayjs","filteredRowCount","setFilteredRowCount","columns","useRef","gridRef","filterApplied","loading","setLoading","contentReady","setContentReady","scrollPosition","setScrollPosition","onCancelEditEvent","headers","useEffect","fetchData","newColumns","colItem","headerCellRenderr","jsx","Tooltip","InfoCircleOutlined","locale","loadMessages","checkSortingPropertyForInitilaize","cssRules","styleSheet","checkData","dataGridInstance","dataExists","gridElement","onOptionChanged","sortedColumn","p","column","index","fullName","gridEvent","checkRequestDataHasOnlySortingProperty","obj","keys","actionButtons","useMemo","useCallback","apiUrl","query","queryString","requestOptions","response","newData","newArray","prevData","getTotalCount","totalCount","onEditorPreparing","args","getServerSide","type","onExporting","workbook","Workbook","newColumnFromFilterData","filterItem","exportDataGridXls","options","gridCell","excelCell","date","offsetMinutes","sign","hours","minutes","formattedOffset","formattedDate","matchingItem","item","buffer","saveAs","doc","jsPDF","exportDataGrid","customLoad","state","customSave","onEditorPrepared","info","i","renderTotal","result","totalloaded","concatFilteredLabel","actionCellRender","cellData","kebabMenuButtons","button","DynamicIcon","event","customEvent","buttonElements","buttonItem","isVisible","OdsDataGrdiRowButton","OdsDropdown","React","onScrollEnd","handleScroll","debounce","e","scrollable","top","height","scrollHeight","maxHeight","reachedBottom","lastScrollTop","container","handleContentReady","filteredDataCount","onFilterValueChange","onToolbarPreparing","_","__","wrapper","createRoot","buttonGroupItem","OdsButton","isTextEmpty","OdsTitle","detailGrid","jsxs","DataGrid","col","Column","Lookup","HeaderFilter","multiLevelColItem","MasterDetail","Editing","Popup","Form","formItem","Item","subItem","Paging","Pager","Scrolling","LoadPanel","SearchPanel","FilterRow","FilterPanel","Sorting","Export","Selection","ColumnChooser","Position","ColumnChooserSearch","ColumnChooserSelection","Toolbar","DxItem","Summary","TotalItem","StateStoring"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsxs as h, jsx as u } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
2
|
+
import { useState as f, useRef as F, useCallback as q, useEffect as C } from "react";
|
|
3
3
|
import { Transfer as Q } from "antd";
|
|
4
4
|
import H from "./Transfer.module.scss.js";
|
|
5
|
-
import j, { FilterRow as A, Column as
|
|
6
|
-
import * as
|
|
5
|
+
import j, { FilterRow as A, Column as M, Toolbar as O, Item as $ } from "devextreme-react/data-grid";
|
|
6
|
+
import * as B from "../../node_modules/query-string/base.js";
|
|
7
7
|
import G from "./NoContentComponent.js";
|
|
8
8
|
import K from "../antd/typography/OdsTitle.js";
|
|
9
9
|
import { isTextEmpty as L } from "../../utils/commonFunctions.js";
|
|
@@ -14,38 +14,38 @@ let l = {
|
|
|
14
14
|
};
|
|
15
15
|
const V = (e) => new Headers({
|
|
16
16
|
"Content-Type": "application/json",
|
|
17
|
-
Authorization: "Bearer " + (e.axiosRequest ? e.axiosRequest.token : ""),
|
|
18
17
|
"Accept-Language": e.language != "" ? e.language : "EN"
|
|
19
18
|
}), te = (e) => {
|
|
20
19
|
const D = (t) => t.map((a) => ({
|
|
21
20
|
...a,
|
|
22
21
|
key: a.key || a.Id
|
|
23
|
-
})), [g,
|
|
22
|
+
})), [g, x] = f([]), w = F(null), [I, E] = f([]), [S, R] = f(
|
|
24
23
|
e.targetItems?.map((t) => t[e.keyExpr]) || []
|
|
25
|
-
), [o, P] =
|
|
24
|
+
), [o, P] = f(
|
|
26
25
|
D(e.targetItems || [])
|
|
27
|
-
), [y, T] =
|
|
26
|
+
), [y, T] = f(g || []), b = q(async () => {
|
|
28
27
|
if (!e.axiosRequest) return;
|
|
29
28
|
const t = e.axiosRequest.requestType.toUpperCase() === "GET";
|
|
30
29
|
let a = `${e.axiosRequest.environmentUrl}${e.axiosRequest.apiUrl}`;
|
|
31
30
|
if (e.axiosRequest?.requestData?.PaginatedRequest && (e.axiosRequest.requestData.PaginatedRequest.PageSize = e.pageSize), e.axiosRequest?.requestQueryString && (e.axiosRequest.requestQueryString.maxResultCount = e.pageSize, l.loadedPageCount > 1 && l.totalPageCount >= l.loadedPageCount && (e.axiosRequest.requestQueryString.skipCount = ((l.loadedPageCount - 1) * e.pageSize).toString()), t && e.axiosRequest?.requestQueryString)) {
|
|
32
|
-
const s =
|
|
31
|
+
const s = B.stringify(
|
|
33
32
|
e.axiosRequest.requestQueryString
|
|
34
33
|
);
|
|
35
34
|
a = `${a}?${s}`;
|
|
36
35
|
}
|
|
37
36
|
const n = {
|
|
38
37
|
method: e.axiosRequest.requestType,
|
|
39
|
-
headers: V(e)
|
|
38
|
+
headers: V(e),
|
|
39
|
+
credentials: "include"
|
|
40
40
|
};
|
|
41
41
|
t || (n.body = JSON.stringify(e.axiosRequest?.requestData));
|
|
42
42
|
try {
|
|
43
43
|
const s = await fetch(a, n), i = await s.json();
|
|
44
44
|
if (l.loadedPageCount === 1)
|
|
45
|
-
|
|
45
|
+
x(i.Data ? i.Data : i), l.loadedPageCount = 1;
|
|
46
46
|
else if (l.totalPageCount >= l.loadedPageCount) {
|
|
47
47
|
const r = i.Data ? i.Data : i;
|
|
48
|
-
|
|
48
|
+
x((c) => [...c, ...r]);
|
|
49
49
|
}
|
|
50
50
|
v(s, i);
|
|
51
51
|
} catch {
|
|
@@ -60,7 +60,7 @@ const V = (e) => new Headers({
|
|
|
60
60
|
e.isServerSide
|
|
61
61
|
]);
|
|
62
62
|
C(() => {
|
|
63
|
-
e.axiosRequest && (
|
|
63
|
+
e.axiosRequest && (x([]), b());
|
|
64
64
|
}, [
|
|
65
65
|
e.axiosRequest?.requestData,
|
|
66
66
|
e.axiosRequest?.requestQueryString,
|
|
@@ -214,7 +214,7 @@ const V = (e) => new Headers({
|
|
|
214
214
|
children: [
|
|
215
215
|
e.showFilters ?? /* @__PURE__ */ u(A, { visible: !0 }),
|
|
216
216
|
e.columns.map((d) => /* @__PURE__ */ u(
|
|
217
|
-
|
|
217
|
+
M,
|
|
218
218
|
{
|
|
219
219
|
dataField: d.dataField,
|
|
220
220
|
caption: d.caption,
|
|
@@ -223,7 +223,7 @@ const V = (e) => new Headers({
|
|
|
223
223
|
allowHeaderFiltering: e.showFilters
|
|
224
224
|
}
|
|
225
225
|
)),
|
|
226
|
-
e.displayPageTitle && !L(e.pageTitle) && /* @__PURE__ */ u(
|
|
226
|
+
e.displayPageTitle && !L(e.pageTitle) && /* @__PURE__ */ u(O, { children: /* @__PURE__ */ u($, { location: "before", cssClass: "toolbarTitleItem", children: /* @__PURE__ */ u(
|
|
227
227
|
K,
|
|
228
228
|
{
|
|
229
229
|
level: 5,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OdsTransfer.js","sources":["../../../src/components/devextreme/OdsTransfer.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useRef } from \"react\";\r\nimport { Transfer } from \"antd\";\r\nimport styles from \"./Transfer.module.scss\";\r\nimport DataGrid, {\r\n Item as DxItem,\r\n Column as DxColumn,\r\n FilterRow,\r\n Toolbar,\r\n} from \"devextreme-react/data-grid\";\r\nimport queryString from \"query-string\";\r\nimport NoContentComponent from \"./NoContentComponent\";\r\nimport OdsTitle from \"../antd/typography/OdsTitle\";\r\nimport { isTextEmpty } from \"../../utils/commonFunctions\";\r\n\r\nexport interface Column {\r\n title: string;\r\n dataIndex: string;\r\n key?: string;\r\n caption?: string;\r\n tooltip?: { enable: boolean };\r\n}\r\n\r\nlet constants = {\r\n totalPageCount: 1,\r\n loadedPageCount: 1,\r\n totalRecordCount: 0,\r\n};\r\n\r\ninterface IAxiosProps {\r\n token: string;\r\n requestData?: any;\r\n apiUrl: string;\r\n environmentUrl: string;\r\n requestQueryString?: any;\r\n requestType: string;\r\n}\r\n\r\ninterface ISummaryRowOptions {\r\n summaryLoadedDataLabel?: string;\r\n summaryTotalDataLabel?: string;\r\n summaryFilteredDataLabel?: string;\r\n summaryTotalCount?: number;\r\n summaryTotalPageCountLabel?: string;\r\n summarySumLabel?: string;\r\n summaryAvgLabel?: string;\r\n summaryMinLabel?: string;\r\n summaryMaxLabel?: string;\r\n summaryCountLabel?: string;\r\n}\r\n\r\ninterface OdsTransferProps<RecordType = any> {\r\n dataSource?: RecordType[];\r\n language: string;\r\n pagingEnable?: boolean;\r\n pageSize?: number;\r\n isServerSide: boolean;\r\n axiosRequest?: IAxiosProps;\r\n customSummary?: ISummaryRowOptions;\r\n dataGridPageName?: string;\r\n columns: any[];\r\n pageTitle?: string;\r\n keyExpr: string;\r\n noDataText: string;\r\n defaultPageSize: number;\r\n targetItems?: any[];\r\n noContentMainText: string;\r\n noContentSubText: string;\r\n onTargetChange?: (selectedItems: RecordType[]) => void;\r\n sourceTitle?: string;\r\n targetTitle?: string;\r\n displayPageTitle?: boolean;\r\n className?: string;\r\n rootClassName?: string;\r\n showSearch?: boolean;\r\n render?: any;\r\n useCustomHeader?: boolean;\r\n showFilters?: boolean;\r\n}\r\n\r\nexport const getRequestHeaders = (props) => {\r\n return new Headers({\r\n \"Content-Type\": \"application/json\",\r\n Authorization:\r\n \"Bearer \" + (props.axiosRequest ? props.axiosRequest.token : \"\"),\r\n \"Accept-Language\": props.language != \"\" ? props.language : \"EN\",\r\n });\r\n};\r\n\r\nconst OdsTransfer: React.FC<OdsTransferProps> = (props) => {\r\n const initializeTargetItems = (items) => {\r\n return items.map((item) => ({\r\n ...item,\r\n key: item.key || item.Id,\r\n }));\r\n };\r\n\r\n const [data, setData] = useState([]);\r\n const gridRef = useRef(null);\r\n const [selectedKeys, setSelectedKeys] = useState([]);\r\n const [targetKeys, setTargetKeys] = useState<string[]>(\r\n props.targetItems?.map((item) => item[props.keyExpr]) || []\r\n );\r\n const [targetItems, setTargetItems] = useState(\r\n initializeTargetItems(props.targetItems || [])\r\n );\r\n const [transferDataSource, setTransferDataSource] = useState(data || []);\r\n\r\n const fetchData = useCallback(async () => {\r\n if (!props.axiosRequest) return;\r\n\r\n const isGet = props.axiosRequest.requestType.toUpperCase() === \"GET\";\r\n\r\n let apiUrl = `${props.axiosRequest.environmentUrl}${props.axiosRequest.apiUrl}`;\r\n\r\n if (props.axiosRequest?.requestData?.PaginatedRequest) {\r\n props.axiosRequest.requestData.PaginatedRequest.PageSize = props.pageSize;\r\n }\r\n\r\n if (props.axiosRequest?.requestQueryString) {\r\n props.axiosRequest.requestQueryString.maxResultCount = props.pageSize;\r\n if (\r\n constants.loadedPageCount > 1 &&\r\n constants.totalPageCount >= constants.loadedPageCount\r\n ) {\r\n props.axiosRequest.requestQueryString.skipCount = (\r\n (constants.loadedPageCount - 1) *\r\n props.pageSize\r\n ).toString();\r\n }\r\n\r\n if (isGet && props.axiosRequest?.requestQueryString) {\r\n const query = queryString.stringify(\r\n props.axiosRequest.requestQueryString\r\n );\r\n apiUrl = `${apiUrl}?${query}`;\r\n }\r\n }\r\n const requestOptions: RequestInit = {\r\n method: props.axiosRequest.requestType,\r\n headers: getRequestHeaders(props),\r\n };\r\n\r\n if (!isGet) {\r\n requestOptions.body = JSON.stringify(props.axiosRequest?.requestData);\r\n }\r\n\r\n try {\r\n const response = await fetch(apiUrl, requestOptions);\r\n const newData = await response.json();\r\n if (constants.loadedPageCount === 1) {\r\n setData(newData.Data ? newData.Data : newData);\r\n constants.loadedPageCount = 1;\r\n } else if (constants.totalPageCount >= constants.loadedPageCount) {\r\n const newArray = newData.Data ? newData.Data : newData;\r\n setData((prevData) => [...prevData, ...newArray]);\r\n }\r\n getTotalCount(response, newData);\r\n } catch (error) {\r\n console.error(\"Error fetching data:\", error);\r\n } finally {\r\n }\r\n }, [\r\n props.axiosRequest?.requestData,\r\n props.axiosRequest?.apiUrl,\r\n props.axiosRequest?.environmentUrl,\r\n props.axiosRequest?.requestQueryString,\r\n props.axiosRequest?.requestType,\r\n props.pageSize,\r\n props.isServerSide,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (props.axiosRequest) {\r\n setData([]);\r\n fetchData();\r\n }\r\n }, [\r\n props.axiosRequest?.requestData,\r\n props.axiosRequest?.requestQueryString,\r\n props.axiosRequest?.apiUrl,\r\n props.axiosRequest?.environmentUrl,\r\n ]);\r\n\r\n const getTotalCount = (response: Response, data: any): void => {\r\n if (data?.PageCount || data?.RowCount) {\r\n constants.totalPageCount = data.PageCount;\r\n constants.totalRecordCount = data.RowCount;\r\n } else {\r\n let totalCount;\r\n\r\n if (response) totalCount = response.headers.get(\"x-total-count\");\r\n if (totalCount == null) totalCount = data?.rowCount;\r\n if (totalCount == null) totalCount = data?.length;\r\n\r\n constants.totalRecordCount = parseInt(totalCount, 10) || 0;\r\n constants.totalPageCount = Math.ceil(\r\n constants.totalRecordCount / props.pageSize\r\n );\r\n }\r\n };\r\n\r\n const removeDuplicates = (items, keyExpr) => {\r\n const seen = new Set();\r\n return items.filter((item) => {\r\n const key = item[keyExpr];\r\n return !seen.has(key) && seen.add(key);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n const combinedData = props.targetItems\r\n ? [...props.targetItems, ...data]\r\n : data;\r\n\r\n const uniqueData = removeDuplicates(combinedData, props.keyExpr);\r\n\r\n setTransferDataSource(\r\n uniqueData.map((item) => ({ ...item, key: item[props.keyExpr] }))\r\n );\r\n }, [data, props.targetItems]);\r\n\r\n useEffect(() => {\r\n if (targetItems || props.targetItems) {\r\n setTransferDataSource((prevData) => {\r\n const updatedTargetItems = targetItems.map((item) => ({\r\n ...item,\r\n key: item[props.keyExpr],\r\n }));\r\n const combinedData = [...updatedTargetItems, ...prevData];\r\n const uniqueData = removeDuplicates(combinedData, props.keyExpr);\r\n return uniqueData;\r\n });\r\n\r\n setTargetKeys(\r\n targetItems?.length > 0\r\n ? targetItems?.map((item) => item[props.keyExpr])\r\n : props.targetItems?.map((item) => item[props.keyExpr])\r\n );\r\n }\r\n }, [targetItems, props.keyExpr, props.targetItems]);\r\n\r\n const handleChange = useCallback(\r\n (targetKeys, direction, moveKey) => {\r\n setTargetKeys(targetKeys);\r\n const selectedItems = transferDataSource.filter((item) =>\r\n targetKeys.includes(item[props.keyExpr])\r\n );\r\n\r\n setTargetItems((prevTargetItems) => {\r\n const updatedItems = [...prevTargetItems, ...selectedItems];\r\n return removeDuplicates(\r\n direction === \"left\"\r\n ? updatedItems.filter(\r\n (item) => !moveKey.includes(item[props.keyExpr])\r\n )\r\n : updatedItems,\r\n props.keyExpr\r\n );\r\n });\r\n if (props.onTargetChange) {\r\n const updatedItems = [...targetItems, ...selectedItems];\r\n const uniqueItems = removeDuplicates(\r\n direction === \"left\"\r\n ? updatedItems.filter(\r\n (item) => !moveKey.includes(item[props.keyExpr])\r\n )\r\n : updatedItems,\r\n props.keyExpr\r\n );\r\n props.onTargetChange(uniqueItems);\r\n }\r\n },\r\n [data, transferDataSource, targetItems]\r\n );\r\n\r\n const handleSelectChange = useCallback(\r\n (sourceSelectedKeys, targetSelectedKeys) => {\r\n setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);\r\n },\r\n []\r\n );\r\n\r\n return (\r\n <div className={styles.wrapper}>\r\n <style>{props.isServerSide && `.dx-pager { display: none; }`}</style>\r\n <Transfer\r\n dataSource={transferDataSource}\r\n targetKeys={targetKeys}\r\n selectedKeys={selectedKeys}\r\n onSelectChange={handleSelectChange}\r\n onChange={handleChange}\r\n showSelectAll={false}\r\n titles={[props.sourceTitle, props.targetTitle]}\r\n render={props.render}\r\n className={props.className}\r\n rootClassName={props.rootClassName}\r\n showSearch={props.showSearch}\r\n >\r\n {({ direction, filteredItems, onItemSelectAll }) => {\r\n const onSelectionChanged = ({\r\n selectedRowKeys: changedRowKeys,\r\n currentDeselectedRowKeys,\r\n }) => {\r\n onItemSelectAll(changedRowKeys, true);\r\n if (currentDeselectedRowKeys.length > 0) {\r\n onItemSelectAll(currentDeselectedRowKeys, false);\r\n }\r\n };\r\n\r\n const leftSideEmpty =\r\n direction === \"left\" && filteredItems.length === 0;\r\n const rightSideEmpty =\r\n direction === \"right\" && targetKeys?.length === 0;\r\n\r\n const combinedDataSource =\r\n direction === \"right\"\r\n ? removeDuplicates(\r\n [...filteredItems, ...targetItems],\r\n props.keyExpr\r\n )\r\n : filteredItems;\r\n\r\n const CustomHeader = () => (\r\n <div\r\n className=\"transfer-custom-header\"\r\n style={{\r\n padding: \"8px 16px\",\r\n borderBottom: \"1px solid #f0f0f0\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n {direction === \"left\"\r\n ? props.sourceTitle || \"Available Items\"\r\n : props.targetTitle || \"Selected Items\"}\r\n </div>\r\n );\r\n\r\n return (\r\n <div\r\n className=\"customize-wrapper-content\"\r\n style={{ height: \"100%\", overflow: \"auto\" }}\r\n >\r\n {props.useCustomHeader && <CustomHeader />}\r\n {leftSideEmpty || rightSideEmpty ? (\r\n <div\r\n className=\"empty-list-items-container-wrapper\"\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n height: \"100%\",\r\n minHeight: \"300px\",\r\n }}\r\n >\r\n <NoContentComponent\r\n mainText={props.noContentMainText}\r\n subText={props.noContentSubText}\r\n />\r\n </div>\r\n ) : (\r\n <DataGrid\r\n dataSource={combinedDataSource}\r\n keyExpr={props.keyExpr}\r\n showBorders\r\n paging={{ enabled: true }}\r\n selection={{\r\n mode: \"multiple\",\r\n selectAllMode: \"page\",\r\n showCheckBoxesMode: \"always\",\r\n }}\r\n onSelectionChanged={onSelectionChanged}\r\n columns={props.columns}\r\n columnFixing={{ enabled: true }}\r\n noDataText={props.noDataText}\r\n ref={gridRef}\r\n >\r\n {props.showFilters ?? <FilterRow visible={true} />}\r\n {props.columns.map((column) => (\r\n <DxColumn\r\n dataField={column.dataField}\r\n caption={column.caption}\r\n dataType={column.dataType}\r\n calculateSortValue={column.calculateSortValue}\r\n allowHeaderFiltering={props.showFilters}\r\n />\r\n ))}\r\n {props.displayPageTitle && !isTextEmpty(props.pageTitle) && (\r\n <Toolbar>\r\n <DxItem location=\"before\" cssClass=\"toolbarTitleItem\">\r\n <OdsTitle\r\n level={5}\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n alignSelf: \"stretch\",\r\n margin: 0,\r\n }}\r\n >\r\n {props.pageTitle}\r\n </OdsTitle>\r\n </DxItem>\r\n </Toolbar>\r\n )}\r\n </DataGrid>\r\n )}\r\n </div>\r\n );\r\n }}\r\n </Transfer>\r\n </div>\r\n );\r\n};\r\n\r\nexport default OdsTransfer;\r\n"],"names":["constants","getRequestHeaders","props","OdsTransfer","initializeTargetItems","items","item","data","setData","useState","gridRef","useRef","selectedKeys","setSelectedKeys","targetKeys","setTargetKeys","targetItems","setTargetItems","transferDataSource","setTransferDataSource","fetchData","useCallback","isGet","apiUrl","query","queryString","requestOptions","response","newData","newArray","prevData","getTotalCount","useEffect","totalCount","removeDuplicates","keyExpr","seen","key","combinedData","uniqueData","handleChange","direction","moveKey","selectedItems","prevTargetItems","updatedItems","uniqueItems","handleSelectChange","sourceSelectedKeys","targetSelectedKeys","jsxs","styles","jsx","Transfer","filteredItems","onItemSelectAll","onSelectionChanged","changedRowKeys","currentDeselectedRowKeys","leftSideEmpty","rightSideEmpty","combinedDataSource","CustomHeader","NoContentComponent","DataGrid","FilterRow","column","DxColumn","isTextEmpty","Toolbar","DxItem","OdsTitle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OdsTransfer.js","sources":["../../../src/components/devextreme/OdsTransfer.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useRef } from \"react\";\r\nimport { Transfer } from \"antd\";\r\nimport styles from \"./Transfer.module.scss\";\r\nimport DataGrid, {\r\n Item as DxItem,\r\n Column as DxColumn,\r\n FilterRow,\r\n Toolbar,\r\n} from \"devextreme-react/data-grid\";\r\nimport queryString from \"query-string\";\r\nimport NoContentComponent from \"./NoContentComponent\";\r\nimport OdsTitle from \"../antd/typography/OdsTitle\";\r\nimport { isTextEmpty } from \"../../utils/commonFunctions\";\r\n\r\nexport interface Column {\r\n title: string;\r\n dataIndex: string;\r\n key?: string;\r\n caption?: string;\r\n tooltip?: { enable: boolean };\r\n}\r\n\r\nlet constants = {\r\n totalPageCount: 1,\r\n loadedPageCount: 1,\r\n totalRecordCount: 0,\r\n};\r\n\r\ninterface IAxiosProps {\r\n requestData?: any;\r\n apiUrl: string;\r\n environmentUrl: string;\r\n requestQueryString?: any;\r\n requestType: string;\r\n}\r\n\r\ninterface ISummaryRowOptions {\r\n summaryLoadedDataLabel?: string;\r\n summaryTotalDataLabel?: string;\r\n summaryFilteredDataLabel?: string;\r\n summaryTotalCount?: number;\r\n summaryTotalPageCountLabel?: string;\r\n summarySumLabel?: string;\r\n summaryAvgLabel?: string;\r\n summaryMinLabel?: string;\r\n summaryMaxLabel?: string;\r\n summaryCountLabel?: string;\r\n}\r\n\r\ninterface OdsTransferProps<RecordType = any> {\r\n dataSource?: RecordType[];\r\n language: string;\r\n pagingEnable?: boolean;\r\n pageSize?: number;\r\n isServerSide: boolean;\r\n axiosRequest?: IAxiosProps;\r\n customSummary?: ISummaryRowOptions;\r\n dataGridPageName?: string;\r\n columns: any[];\r\n pageTitle?: string;\r\n keyExpr: string;\r\n noDataText: string;\r\n defaultPageSize: number;\r\n targetItems?: any[];\r\n noContentMainText: string;\r\n noContentSubText: string;\r\n onTargetChange?: (selectedItems: RecordType[]) => void;\r\n sourceTitle?: string;\r\n targetTitle?: string;\r\n displayPageTitle?: boolean;\r\n className?: string;\r\n rootClassName?: string;\r\n showSearch?: boolean;\r\n render?: any;\r\n useCustomHeader?: boolean;\r\n showFilters?: boolean;\r\n}\r\n\r\nexport const getRequestHeaders = (props) => {\r\n return new Headers({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept-Language\": props.language != \"\" ? props.language : \"EN\",\r\n });\r\n};\r\n\r\nconst OdsTransfer: React.FC<OdsTransferProps> = (props) => {\r\n const initializeTargetItems = (items) => {\r\n return items.map((item) => ({\r\n ...item,\r\n key: item.key || item.Id,\r\n }));\r\n };\r\n\r\n const [data, setData] = useState([]);\r\n const gridRef = useRef(null);\r\n const [selectedKeys, setSelectedKeys] = useState([]);\r\n const [targetKeys, setTargetKeys] = useState<string[]>(\r\n props.targetItems?.map((item) => item[props.keyExpr]) || []\r\n );\r\n const [targetItems, setTargetItems] = useState(\r\n initializeTargetItems(props.targetItems || [])\r\n );\r\n const [transferDataSource, setTransferDataSource] = useState(data || []);\r\n\r\n const fetchData = useCallback(async () => {\r\n if (!props.axiosRequest) return;\r\n\r\n const isGet = props.axiosRequest.requestType.toUpperCase() === \"GET\";\r\n\r\n let apiUrl = `${props.axiosRequest.environmentUrl}${props.axiosRequest.apiUrl}`;\r\n\r\n if (props.axiosRequest?.requestData?.PaginatedRequest) {\r\n props.axiosRequest.requestData.PaginatedRequest.PageSize = props.pageSize;\r\n }\r\n\r\n if (props.axiosRequest?.requestQueryString) {\r\n props.axiosRequest.requestQueryString.maxResultCount = props.pageSize;\r\n if (\r\n constants.loadedPageCount > 1 &&\r\n constants.totalPageCount >= constants.loadedPageCount\r\n ) {\r\n props.axiosRequest.requestQueryString.skipCount = (\r\n (constants.loadedPageCount - 1) *\r\n props.pageSize\r\n ).toString();\r\n }\r\n\r\n if (isGet && props.axiosRequest?.requestQueryString) {\r\n const query = queryString.stringify(\r\n props.axiosRequest.requestQueryString\r\n );\r\n apiUrl = `${apiUrl}?${query}`;\r\n }\r\n }\r\n const requestOptions: RequestInit = {\r\n method: props.axiosRequest.requestType,\r\n headers: getRequestHeaders(props),\r\n credentials: \"include\" as RequestCredentials,\r\n };\r\n\r\n if (!isGet) {\r\n requestOptions.body = JSON.stringify(props.axiosRequest?.requestData);\r\n }\r\n\r\n try {\r\n const response = await fetch(apiUrl, requestOptions);\r\n const newData = await response.json();\r\n if (constants.loadedPageCount === 1) {\r\n setData(newData.Data ? newData.Data : newData);\r\n constants.loadedPageCount = 1;\r\n } else if (constants.totalPageCount >= constants.loadedPageCount) {\r\n const newArray = newData.Data ? newData.Data : newData;\r\n setData((prevData) => [...prevData, ...newArray]);\r\n }\r\n getTotalCount(response, newData);\r\n } catch (error) {\r\n console.error(\"Error fetching data:\", error);\r\n } finally {\r\n }\r\n }, [\r\n props.axiosRequest?.requestData,\r\n props.axiosRequest?.apiUrl,\r\n props.axiosRequest?.environmentUrl,\r\n props.axiosRequest?.requestQueryString,\r\n props.axiosRequest?.requestType,\r\n props.pageSize,\r\n props.isServerSide,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (props.axiosRequest) {\r\n setData([]);\r\n fetchData();\r\n }\r\n }, [\r\n props.axiosRequest?.requestData,\r\n props.axiosRequest?.requestQueryString,\r\n props.axiosRequest?.apiUrl,\r\n props.axiosRequest?.environmentUrl,\r\n ]);\r\n\r\n const getTotalCount = (response: Response, data: any): void => {\r\n if (data?.PageCount || data?.RowCount) {\r\n constants.totalPageCount = data.PageCount;\r\n constants.totalRecordCount = data.RowCount;\r\n } else {\r\n let totalCount;\r\n\r\n if (response) totalCount = response.headers.get(\"x-total-count\");\r\n if (totalCount == null) totalCount = data?.rowCount;\r\n if (totalCount == null) totalCount = data?.length;\r\n\r\n constants.totalRecordCount = parseInt(totalCount, 10) || 0;\r\n constants.totalPageCount = Math.ceil(\r\n constants.totalRecordCount / props.pageSize\r\n );\r\n }\r\n };\r\n\r\n const removeDuplicates = (items, keyExpr) => {\r\n const seen = new Set();\r\n return items.filter((item) => {\r\n const key = item[keyExpr];\r\n return !seen.has(key) && seen.add(key);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n const combinedData = props.targetItems\r\n ? [...props.targetItems, ...data]\r\n : data;\r\n\r\n const uniqueData = removeDuplicates(combinedData, props.keyExpr);\r\n\r\n setTransferDataSource(\r\n uniqueData.map((item) => ({ ...item, key: item[props.keyExpr] }))\r\n );\r\n }, [data, props.targetItems]);\r\n\r\n useEffect(() => {\r\n if (targetItems || props.targetItems) {\r\n setTransferDataSource((prevData) => {\r\n const updatedTargetItems = targetItems.map((item) => ({\r\n ...item,\r\n key: item[props.keyExpr],\r\n }));\r\n const combinedData = [...updatedTargetItems, ...prevData];\r\n const uniqueData = removeDuplicates(combinedData, props.keyExpr);\r\n return uniqueData;\r\n });\r\n\r\n setTargetKeys(\r\n targetItems?.length > 0\r\n ? targetItems?.map((item) => item[props.keyExpr])\r\n : props.targetItems?.map((item) => item[props.keyExpr])\r\n );\r\n }\r\n }, [targetItems, props.keyExpr, props.targetItems]);\r\n\r\n const handleChange = useCallback(\r\n (targetKeys, direction, moveKey) => {\r\n setTargetKeys(targetKeys);\r\n const selectedItems = transferDataSource.filter((item) =>\r\n targetKeys.includes(item[props.keyExpr])\r\n );\r\n\r\n setTargetItems((prevTargetItems) => {\r\n const updatedItems = [...prevTargetItems, ...selectedItems];\r\n return removeDuplicates(\r\n direction === \"left\"\r\n ? updatedItems.filter(\r\n (item) => !moveKey.includes(item[props.keyExpr])\r\n )\r\n : updatedItems,\r\n props.keyExpr\r\n );\r\n });\r\n if (props.onTargetChange) {\r\n const updatedItems = [...targetItems, ...selectedItems];\r\n const uniqueItems = removeDuplicates(\r\n direction === \"left\"\r\n ? updatedItems.filter(\r\n (item) => !moveKey.includes(item[props.keyExpr])\r\n )\r\n : updatedItems,\r\n props.keyExpr\r\n );\r\n props.onTargetChange(uniqueItems);\r\n }\r\n },\r\n [data, transferDataSource, targetItems]\r\n );\r\n\r\n const handleSelectChange = useCallback(\r\n (sourceSelectedKeys, targetSelectedKeys) => {\r\n setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);\r\n },\r\n []\r\n );\r\n\r\n return (\r\n <div className={styles.wrapper}>\r\n <style>{props.isServerSide && `.dx-pager { display: none; }`}</style>\r\n <Transfer\r\n dataSource={transferDataSource}\r\n targetKeys={targetKeys}\r\n selectedKeys={selectedKeys}\r\n onSelectChange={handleSelectChange}\r\n onChange={handleChange}\r\n showSelectAll={false}\r\n titles={[props.sourceTitle, props.targetTitle]}\r\n render={props.render}\r\n className={props.className}\r\n rootClassName={props.rootClassName}\r\n showSearch={props.showSearch}\r\n >\r\n {({ direction, filteredItems, onItemSelectAll }) => {\r\n const onSelectionChanged = ({\r\n selectedRowKeys: changedRowKeys,\r\n currentDeselectedRowKeys,\r\n }) => {\r\n onItemSelectAll(changedRowKeys, true);\r\n if (currentDeselectedRowKeys.length > 0) {\r\n onItemSelectAll(currentDeselectedRowKeys, false);\r\n }\r\n };\r\n\r\n const leftSideEmpty =\r\n direction === \"left\" && filteredItems.length === 0;\r\n const rightSideEmpty =\r\n direction === \"right\" && targetKeys?.length === 0;\r\n\r\n const combinedDataSource =\r\n direction === \"right\"\r\n ? removeDuplicates(\r\n [...filteredItems, ...targetItems],\r\n props.keyExpr\r\n )\r\n : filteredItems;\r\n\r\n const CustomHeader = () => (\r\n <div\r\n className=\"transfer-custom-header\"\r\n style={{\r\n padding: \"8px 16px\",\r\n borderBottom: \"1px solid #f0f0f0\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n {direction === \"left\"\r\n ? props.sourceTitle || \"Available Items\"\r\n : props.targetTitle || \"Selected Items\"}\r\n </div>\r\n );\r\n\r\n return (\r\n <div\r\n className=\"customize-wrapper-content\"\r\n style={{ height: \"100%\", overflow: \"auto\" }}\r\n >\r\n {props.useCustomHeader && <CustomHeader />}\r\n {leftSideEmpty || rightSideEmpty ? (\r\n <div\r\n className=\"empty-list-items-container-wrapper\"\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n height: \"100%\",\r\n minHeight: \"300px\",\r\n }}\r\n >\r\n <NoContentComponent\r\n mainText={props.noContentMainText}\r\n subText={props.noContentSubText}\r\n />\r\n </div>\r\n ) : (\r\n <DataGrid\r\n dataSource={combinedDataSource}\r\n keyExpr={props.keyExpr}\r\n showBorders\r\n paging={{ enabled: true }}\r\n selection={{\r\n mode: \"multiple\",\r\n selectAllMode: \"page\",\r\n showCheckBoxesMode: \"always\",\r\n }}\r\n onSelectionChanged={onSelectionChanged}\r\n columns={props.columns}\r\n columnFixing={{ enabled: true }}\r\n noDataText={props.noDataText}\r\n ref={gridRef}\r\n >\r\n {props.showFilters ?? <FilterRow visible={true} />}\r\n {props.columns.map((column) => (\r\n <DxColumn\r\n dataField={column.dataField}\r\n caption={column.caption}\r\n dataType={column.dataType}\r\n calculateSortValue={column.calculateSortValue}\r\n allowHeaderFiltering={props.showFilters}\r\n />\r\n ))}\r\n {props.displayPageTitle && !isTextEmpty(props.pageTitle) && (\r\n <Toolbar>\r\n <DxItem location=\"before\" cssClass=\"toolbarTitleItem\">\r\n <OdsTitle\r\n level={5}\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n alignSelf: \"stretch\",\r\n margin: 0,\r\n }}\r\n >\r\n {props.pageTitle}\r\n </OdsTitle>\r\n </DxItem>\r\n </Toolbar>\r\n )}\r\n </DataGrid>\r\n )}\r\n </div>\r\n );\r\n }}\r\n </Transfer>\r\n </div>\r\n );\r\n};\r\n\r\nexport default OdsTransfer;\r\n"],"names":["constants","getRequestHeaders","props","OdsTransfer","initializeTargetItems","items","item","data","setData","useState","gridRef","useRef","selectedKeys","setSelectedKeys","targetKeys","setTargetKeys","targetItems","setTargetItems","transferDataSource","setTransferDataSource","fetchData","useCallback","isGet","apiUrl","query","queryString","requestOptions","response","newData","newArray","prevData","getTotalCount","useEffect","totalCount","removeDuplicates","keyExpr","seen","key","combinedData","uniqueData","handleChange","direction","moveKey","selectedItems","prevTargetItems","updatedItems","uniqueItems","handleSelectChange","sourceSelectedKeys","targetSelectedKeys","jsxs","styles","jsx","Transfer","filteredItems","onItemSelectAll","onSelectionChanged","changedRowKeys","currentDeselectedRowKeys","leftSideEmpty","rightSideEmpty","combinedDataSource","CustomHeader","NoContentComponent","DataGrid","FilterRow","column","DxColumn","isTextEmpty","Toolbar","DxItem","OdsTitle"],"mappings":"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"}
|