UNPKG

sccoreui

Version:

ui-sccore

698 lines (697 loc) 47.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deepClone = exports.handleCheckboxClick = exports.getGroupIds = exports.handleUncheckedState = exports.handleCheckedState = exports.updateGroupState = exports.determineConditions = exports.updateRecords = exports.autoGroupColumnDef = exports.fillOperation = exports.updateCells = exports.getCheckedStatus = exports.sortColumns = exports.parseIfNeeded = exports.applyDefaultFilters = exports.isComponentDisable = exports.initialCheckBoxData = void 0; const tslib_1 = require("tslib"); const react_1 = tslib_1.__importDefault(require("react")); const constants_1 = require("./constants"); const type_1 = require("../types/type"); // initial checkbox data exports.initialCheckBoxData = { allBoxChecked: false, isIndeterminate: false, includedRecords: [], excludedRecords: [], rowId: null, headerCheckBoxStatus: constants_1.GRID_CHECKBOX_STATUS.NEUTRAL, }; const isComponentDisable = (state) => { return state === type_1.VisibilityState.DISABLE; }; exports.isComponentDisable = isComponentDisable; const applyDefaultFilters = (defaultFilters) => { const filters = defaultFilters === null || defaultFilters === void 0 ? void 0 : defaultFilters.map((item) => { var _a, _b; // Handle both input formats: // Format 1 (API output): { selectedColumn: { code: {...} }, selectedOperation: 1, value, logicalOperator } // Format 2 (internal): { columnName: {...}, condition: {...}, value, logicalOperator } const selectedColumn = (item === null || item === void 0 ? void 0 : item.selectedColumn) || { code: item === null || item === void 0 ? void 0 : item.columnName }; const selectedOperation = (_a = item === null || item === void 0 ? void 0 : item.selectedOperation) !== null && _a !== void 0 ? _a : (typeof (item === null || item === void 0 ? void 0 : item.condition) === 'object' ? (_b = item === null || item === void 0 ? void 0 : item.condition) === null || _b === void 0 ? void 0 : _b.value : item === null || item === void 0 ? void 0 : item.condition); const obj = { logicalOperator: item === null || item === void 0 ? void 0 : item.logicalOperator, selectedColumn: selectedColumn, selectedOperation: selectedOperation, value: item === null || item === void 0 ? void 0 : item.value, }; return obj; }); return filters; }; exports.applyDefaultFilters = applyDefaultFilters; const isValidJsonString = (str) => { try { JSON.parse(str); return true; } catch (error) { return false; } }; const parseIfNeeded = (value) => { if (isValidJsonString(value)) { return JSON.parse(value); } else { return value; } }; exports.parseIfNeeded = parseIfNeeded; const sortColumns = (columns) => { const sortedColumns = columns === null || columns === void 0 ? void 0 : columns.sort((a, b) => { (a.body = a.cellRenderer), // Update the rederer key to avoid recursion (b.body = b.cellRenderer); // Update the rederer key to avoid recursion if (!a.seq) return 1; if (!b.seq) return -1; return a.seq - b.seq; }); return sortedColumns; }; exports.sortColumns = sortColumns; // Give checkbox checked status const getCheckedStatus = (row, featureDetails, GRID_CHECKBOX_STATUS) => { const { allBoxChecked, excludedRecords, includedRecords, headerCheckBoxStatus, } = featureDetails.checkBoxSelection; if (allBoxChecked) { return !excludedRecords.includes(row); } else { if (excludedRecords.some((y) => y.id === row.id)) { return false; } if (headerCheckBoxStatus === GRID_CHECKBOX_STATUS.NEUTRAL && (row === null || row === void 0 ? void 0 : row.isSelected)) { // if (!includedRecords.includes(row)) { // // includedRecords.push(row); // // setFeatureDetails((prev) => ({ // // ...prev, // // checkBoxSelection: { // // ...prev.checkBoxSelection, // // includedRecords: [...includedRecords], // // }, // // })); // } return true; } return includedRecords.some((y) => y.id === row.id); } }; exports.getCheckedStatus = getCheckedStatus; const updateCells = (updatedRowData, setUpdateRowData, api) => { if (!api) return; // Find the row node by ID const rowNode = api.getRowNode(updatedRowData.id); if (rowNode) { // Update the row data rowNode.setData(updatedRowData); // Optionally, you can refresh the grid api.refreshCells({ rowNodes: [rowNode], force: true }); // Reset the update flag setUpdateRowData({ shouldUpdate: false, rowData: null }); } }; exports.updateCells = updateCells; // Fill data in grid through drag const fillOperation = (params, api, editedRecords, setEditedRecords) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c, _d, _e, _f, _g; const { finalRange } = params; const { startRow, endRow, columns, // startColumn } = finalRange; const columnDetails = columns[0].colDef; const parentRowData = (_c = api.getDisplayedRowAtIndex((_b = (_a = params === null || params === void 0 ? void 0 : params.initialRange) === null || _a === void 0 ? void 0 : _a.startRow) === null || _b === void 0 ? void 0 : _b.rowIndex)) === null || _c === void 0 ? void 0 : _c.data; // Get current updated rows const currentUpdatedRows = []; // Collect all selected rows for (let i = startRow.rowIndex; i <= endRow.rowIndex; i++) { // Get the row node const rowNode = api.getDisplayedRowAtIndex(i); if (!rowNode) continue; // Skip if rowNode is undefined const rowData = rowNode === null || rowNode === void 0 ? void 0 : rowNode.data; // Check if rowData exists and update the field if (rowData && rowNode.id != (parentRowData === null || parentRowData === void 0 ? void 0 : parentRowData.id)) { // Skip edit for same values if ((rowData === null || rowData === void 0 ? void 0 : rowData[columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field]) === (parentRowData === null || parentRowData === void 0 ? void 0 : parentRowData[columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field])) continue; // If Dragged cell is grouped only group headers should edit vice versa to child cells if (((_d = rowData === null || rowData === void 0 ? void 0 : rowData.orgHierarchy) === null || _d === void 0 ? void 0 : _d.length) !== ((_e = parentRowData === null || parentRowData === void 0 ? void 0 : parentRowData.orgHierarchy) === null || _e === void 0 ? void 0 : _e.length)) continue; // if( rowData?.[columnDetails?.field] == EMPTY_RECORD || rowData?.type !== parentRowData?.type || !rowData?.[columnDetails?.field] ){ // continue // } rowData[columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field] = parentRowData[columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field]; if (rowData === null || rowData === void 0 ? void 0 : rowData.edited) { rowData === null || rowData === void 0 ? void 0 : rowData.edited.push(columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field); } else { rowData.edited = []; rowData === null || rowData === void 0 ? void 0 : rowData.edited.push(columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field); } const schemaForEdit = { row: rowData, field: [], isCustomAttribute: columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.isCustomAttribute, }; if (!((_f = schemaForEdit === null || schemaForEdit === void 0 ? void 0 : schemaForEdit.field) === null || _f === void 0 ? void 0 : _f.includes(columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field))) { (_g = schemaForEdit === null || schemaForEdit === void 0 ? void 0 : schemaForEdit.field) === null || _g === void 0 ? void 0 : _g.push(columnDetails === null || columnDetails === void 0 ? void 0 : columnDetails.field); } currentUpdatedRows.push(schemaForEdit); // Update the row rowNode.setData(rowData); } } const mergeArraysData = mergeArrays(currentUpdatedRows, editedRecords); if (setEditedRecords) { setEditedRecords(mergeArraysData); } // Refresh the cells to show the updated data api.refreshCells({ force: true }); }); exports.fillOperation = fillOperation; // Merge previous updated arrays and current updated arrays const mergeArrays = (currentUpdatedRows, updatedRecords) => { const mergedMap = new Map(); // Add all entries from arr1 to the map currentUpdatedRows === null || currentUpdatedRows === void 0 ? void 0 : currentUpdatedRows.forEach((item) => { mergedMap.set(item.row.id, Object.assign({}, item)); }); // Merge entries from arr2 to the map updatedRecords === null || updatedRecords === void 0 ? void 0 : updatedRecords.forEach((item) => { const existing = mergedMap.get(item.row.id); if (existing) { // Merge row fields Object.assign(existing.row, item.row); // Merge field arrays, avoiding duplicates existing.field = Array.from(new Set([...existing.field, ...item.field])); } else { mergedMap.set(item.row.id, Object.assign({}, item)); } }); // Convert map back to array return Array.from(mergedMap.values()); }; const autoGroupColumnDef = (isTreeEnable, headerName, groupField, GroupHeaderComponent, headerCheckboxRenderer, enableCheckboxForGroupHeader, displayGroupCount, rowGroupColumnWidth, ChildRendererForGroup, HeaderRendererForGroup) => { if (isTreeEnable) { return { headerName: headerName ? headerName : "Group", minWidth: rowGroupColumnWidth || 300, // cellRenderer:(params)=> params.data?.name , cellRendererParams: { suppressCount: true, }, }; } else { return { field: groupField || "group", headerComponent: enableCheckboxForGroupHeader ? () => headerCheckboxRenderer("", GroupHeaderComponent) : GroupHeaderComponent, cellRenderer: "agGroupCellRenderer", minWidth: rowGroupColumnWidth || 300, cellRendererParams: (params) => { var _a; // Render custom component for all group childs if (!params.node.group && ChildRendererForGroup) { return { suppressCount: true, innerRenderer: ChildRendererForGroup, }; } // Render checkbox for specific group header if ((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.group) { return { suppressCount: false, checkbox: false, innerRenderer: HeaderRendererForGroup, }; } // Return specific params for group rows to use default rendering return { suppressCount: typeof displayGroupCount === "boolean" ? !displayGroupCount : true, }; }, }; } }; exports.autoGroupColumnDef = autoGroupColumnDef; const removeDuplicates = (array) => { return [...new Map(array.map(item => [item.id, item])).values()]; }; // function to update the records based on checkbox state // This function determines how to update `includedRecords` and `excludedRecords` // depending on whether all checkboxes are checked or not (`allBoxChecked` state) const updateRecords = (rowData, featureDetails, _gridData) => { const { excludedRecords, includedRecords, allBoxChecked, headerCheckBoxStatus } = featureDetails.checkBoxSelection; let newExcludedRecords = [...excludedRecords]; let newIncludedRecords = [...includedRecords]; // When all checkboxes are checked if (allBoxChecked) { // Update excluded records: add or remove the current rowData if (excludedRecords === null || excludedRecords === void 0 ? void 0 : excludedRecords.some((row) => row.id === rowData.id)) { newExcludedRecords = excludedRecords === null || excludedRecords === void 0 ? void 0 : excludedRecords.filter((item) => (item === null || item === void 0 ? void 0 : item.id) !== (rowData === null || rowData === void 0 ? void 0 : rowData.id)); newIncludedRecords = removeDuplicates([...includedRecords, rowData]); rowData.isSelected = !rowData.isSelected; } else if (includedRecords === null || includedRecords === void 0 ? void 0 : includedRecords.some((row) => row.id === rowData.id)) { newIncludedRecords = includedRecords === null || includedRecords === void 0 ? void 0 : includedRecords.filter((item) => { if ((item === null || item === void 0 ? void 0 : item.id) !== (rowData === null || rowData === void 0 ? void 0 : rowData.id)) { return true; } else { newExcludedRecords.push(rowData); // Set isSelected to false if removing the row newExcludedRecords = removeDuplicates(newExcludedRecords); return false; // Exclude this item from the new array } }); } else { newExcludedRecords = [...newExcludedRecords, Object.assign(Object.assign({}, rowData), { isSelected: false })]; newExcludedRecords = removeDuplicates(newExcludedRecords); } newExcludedRecords = (excludedRecords === null || excludedRecords === void 0 ? void 0 : excludedRecords.some((row) => row.id === rowData.id)) ? excludedRecords === null || excludedRecords === void 0 ? void 0 : excludedRecords.filter((item) => (item === null || item === void 0 ? void 0 : item.id) !== (rowData === null || rowData === void 0 ? void 0 : rowData.id)) : [...excludedRecords, rowData]; // Update the excluded records and indeterminate state // Note: We no longer auto-reset allBoxChecked when excluded count equals visible rows // because in server-side mode, filtered results may show fewer records than total. return Object.assign(Object.assign({}, featureDetails === null || featureDetails === void 0 ? void 0 : featureDetails.checkBoxSelection), { excludedRecords: newExcludedRecords, includedRecords: newIncludedRecords, rowId: rowData.id, isIndeterminate: (newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.length) > 0 }); } // When not all checkboxes are checked else { // Update included records: add or remove the current rowData if (includedRecords === null || includedRecords === void 0 ? void 0 : includedRecords.some((row) => row.id === rowData.id)) { newIncludedRecords = includedRecords === null || includedRecords === void 0 ? void 0 : includedRecords.filter((item) => { if ((item === null || item === void 0 ? void 0 : item.id) !== (rowData === null || rowData === void 0 ? void 0 : rowData.id)) { return true; } else { newExcludedRecords.push(rowData); // Set isSelected to false if removing the row newExcludedRecords = removeDuplicates(newExcludedRecords); return false; // Exclude this item from the new array } }); } else if (rowData.isSelected) { newExcludedRecords = [...newExcludedRecords, Object.assign(Object.assign({}, rowData), { isSelected: false })]; newExcludedRecords = removeDuplicates(newExcludedRecords); rowData.isSelected = !rowData.isSelected; } else if (excludedRecords.some((row) => row.id === rowData.id)) { newExcludedRecords = [...excludedRecords.filter((y) => y.id !== rowData.id)]; newIncludedRecords = removeDuplicates([...includedRecords, rowData]); rowData.isSelected = !rowData.isSelected; } else { newIncludedRecords = removeDuplicates([...includedRecords, rowData]); } // Check if no records are selected; reset if so if ((newIncludedRecords === null || newIncludedRecords === void 0 ? void 0 : newIncludedRecords.length) === 0 && (newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.length) === 0) { return exports.initialCheckBoxData; } // Otherwise, update the included records // Note: We no longer auto-set allBoxChecked=true when all visible rows are selected // because in server-side mode, filtered results may show fewer records than total. // allBoxChecked should only be set via explicit header checkbox click. return Object.assign(Object.assign({}, featureDetails === null || featureDetails === void 0 ? void 0 : featureDetails.checkBoxSelection), { headerCheckBoxStatus: headerCheckBoxStatus === constants_1.GRID_CHECKBOX_STATUS.UNCHECKED ? constants_1.GRID_CHECKBOX_STATUS.NEUTRAL : headerCheckBoxStatus, includedRecords: newIncludedRecords, rowId: rowData.id, excludedRecords: newExcludedRecords }); } }; exports.updateRecords = updateRecords; // Utility function to determine conditions for updating group states // Based on various flags and states, determines whether to add or remove group IDs const determineConditions = (isChecked, allBoxChecked, isEveryParentGroupInclude, isEverySuperParentGroupInclude, isSomeParentGroupExcluded, isSomeSuperParentGroupExcluded) => ({ addParent: (!allBoxChecked && isChecked && isEveryParentGroupInclude) || (allBoxChecked && isChecked && !isSomeParentGroupExcluded), addSuperParent: (!allBoxChecked && isChecked && isEverySuperParentGroupInclude) || (allBoxChecked && isChecked && !isSomeSuperParentGroupExcluded), removeParent: (!allBoxChecked && !isChecked && !isEveryParentGroupInclude) || (allBoxChecked && !isChecked && isSomeParentGroupExcluded), removeSuperParent: (!allBoxChecked && !isChecked && !isEverySuperParentGroupInclude) || (allBoxChecked && !isChecked && isSomeSuperParentGroupExcluded), }); exports.determineConditions = determineConditions; // Function to update the selected groups in the state // Takes the group ID and a boolean flag `add` to decide whether to add or remove the group ID const updateSelectedGroup = (id, add, setSelectedGroup) => { setSelectedGroup((prev) => { if (add) { // If `add` is true, add the group ID if it does not already exist in the state if (!prev.includes(id)) { return [...prev, id]; } } else { // If `add` is false, remove the group ID from the state return prev.filter((groupId) => groupId !== id); } return prev; }); }; // function to update the selected groups in the state // Manages adding or removing group IDs based on the grouping column count and conditions const updateGroupState = (groupingColumns, parentId, superParentId, conditions, setSelectedGroup) => { const { addParent, addSuperParent, removeParent, removeSuperParent } = conditions; // Handle logic when there are 2 grouping columns if (groupingColumns === 2) { if (addSuperParent) updateSelectedGroup(superParentId, true, setSelectedGroup); // Add super parent group ID if (addParent) { updateSelectedGroup(parentId, true, setSelectedGroup); } // Add parent group ID if (removeSuperParent) updateSelectedGroup(superParentId, false, setSelectedGroup); // Remove super parent group ID if (removeParent) updateSelectedGroup(parentId, false, setSelectedGroup); // Remove parent group ID } // Handle logic when there is 1 grouping column else if (groupingColumns === 1) { if (addParent) { updateSelectedGroup(parentId, true, setSelectedGroup); // Add parent ID } if (removeParent) { updateSelectedGroup(parentId, false, setSelectedGroup); // Remove parent group ID } } }; exports.updateGroupState = updateGroupState; // ------------------------------------- group header checkbox ------------------------------------------- // Utility function to gather all child and parent data for a group const gatherGroupData = (params) => { var _a, _b, _c, _d; const groupData = (_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.allLeafChildren) === null || _b === void 0 ? void 0 : _b.map((childNode) => childNode === null || childNode === void 0 ? void 0 : childNode.data); const parentGroupData = (_d = (_c = params === null || params === void 0 ? void 0 : params.node.parent) === null || _c === void 0 ? void 0 : _c.allLeafChildren) === null || _d === void 0 ? void 0 : _d.map((childNode) => childNode === null || childNode === void 0 ? void 0 : childNode.data); return { groupData, parentGroupData }; }; // Utility function to handle checked state updates const handleCheckedState = (params, featureDetails, gridData, setFeatureDetails, setSelectedGroup, groupingColumns) => { const { excludedRecords, includedRecords, allBoxChecked } = featureDetails === null || featureDetails === void 0 ? void 0 : featureDetails.checkBoxSelection; const { groupData, parentGroupData } = gatherGroupData(params); let newExcludedRecords = [...excludedRecords]; let newIncludedRecords = [...includedRecords]; // newExcludedRecords.filter((item) => item?.id !== group.id) // Update records based on the checkbox state groupData.forEach((group) => { var _a, _b; if (allBoxChecked) { newExcludedRecords = (newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.includes(group)) ? newExcludedRecords.filter((item) => (item === null || item === void 0 ? void 0 : item.id) !== group.id) : newExcludedRecords; } else if (!((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.leafGroup) && ((_b = params === null || params === void 0 ? void 0 : params.node) === null || _b === void 0 ? void 0 : _b.level) === 0) { newIncludedRecords = newIncludedRecords.includes(group) ? newIncludedRecords : [...newIncludedRecords, group]; } else { newIncludedRecords = newIncludedRecords.includes(group) ? newIncludedRecords : [...newIncludedRecords, group]; } }); updateCheckboxData(newIncludedRecords, newExcludedRecords, gridData, featureDetails, setFeatureDetails, allBoxChecked); // const isParent = determineParentGroupState(parentGroupData, newIncludedRecords, newExcludedRecords, allBoxChecked, groupData); handleGroupSelection(params, setSelectedGroup, groupingColumns, newIncludedRecords, newExcludedRecords, parentGroupData, allBoxChecked); }; exports.handleCheckedState = handleCheckedState; // Utility function to handle unchecked state updates const handleUncheckedState = (params, featureDetails, gridData, setFeatureDetails, setSelectedGroup, groupingColumns) => { const { excludedRecords, includedRecords, allBoxChecked } = featureDetails.checkBoxSelection; const { groupData, parentGroupData } = gatherGroupData(params); let newExcludedRecords = [...excludedRecords]; let newIncludedRecords = [...includedRecords]; // Update records based on the checkbox state groupData.forEach((group) => { if (allBoxChecked) { newExcludedRecords = newExcludedRecords.includes(group) ? newExcludedRecords : [...newExcludedRecords, group]; } else { newIncludedRecords = newIncludedRecords.includes(group) ? newIncludedRecords.filter((item) => { if (item.id !== group.id) group.isSelected = false; return item.id !== group.id; }) : [...newIncludedRecords, group]; } }); updateCheckboxData(newIncludedRecords, newExcludedRecords, gridData, featureDetails, setFeatureDetails, allBoxChecked); const isEveryParentGroupInclude = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.every((parent) => newIncludedRecords.some((included) => (included === null || included === void 0 ? void 0 : included.id) === (parent === null || parent === void 0 ? void 0 : parent.id))); const isParent = determineParentGroupState(parentGroupData, newIncludedRecords, newExcludedRecords, allBoxChecked); handleGroupDeselection(params, setSelectedGroup, groupingColumns, isParent, isEveryParentGroupInclude); }; exports.handleUncheckedState = handleUncheckedState; // Utility function to update checkbox data in the state const updateCheckboxData = (newIncludedRecords, newExcludedRecords, gridData, featureDetails, setFeatureDetails, allBoxChecked) => { var _a, _b, _c, _d; if ((newIncludedRecords === null || newIncludedRecords === void 0 ? void 0 : newIncludedRecords.length) === 0 && ((_a = gridData === null || gridData === void 0 ? void 0 : gridData.rowData) === null || _a === void 0 ? void 0 : _a.length) === 0 && !allBoxChecked) { setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: Object.assign(Object.assign({}, featureDetails.checkBoxSelection), { excludedRecords: [], includedRecords: [], isIndeterminate: false, allBoxChecked: false }) })); } else if ((newIncludedRecords === null || newIncludedRecords === void 0 ? void 0 : newIncludedRecords.length) === ((_b = gridData === null || gridData === void 0 ? void 0 : gridData.rowData) === null || _b === void 0 ? void 0 : _b.length) && (newIncludedRecords === null || newIncludedRecords === void 0 ? void 0 : newIncludedRecords.length) > 0) { setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: Object.assign(Object.assign({}, featureDetails.checkBoxSelection), { excludedRecords: [], includedRecords: [], isIndeterminate: false, allBoxChecked: true }) })); } else if ((newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.length) === 0 && ((_c = gridData === null || gridData === void 0 ? void 0 : gridData.rowData) === null || _c === void 0 ? void 0 : _c.length) === 0 && allBoxChecked) { setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: Object.assign(Object.assign({}, featureDetails.checkBoxSelection), { excludedRecords: [], includedRecords: [], isIndeterminate: false, allBoxChecked: true }) })); } else if ((newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.length) === ((_d = gridData === null || gridData === void 0 ? void 0 : gridData.rowData) === null || _d === void 0 ? void 0 : _d.length) && (newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.length) > 0) { setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: Object.assign(Object.assign({}, featureDetails.checkBoxSelection), { excludedRecords: [], includedRecords: [], isIndeterminate: false, allBoxChecked: false }) })); } else { setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: Object.assign(Object.assign({}, featureDetails.checkBoxSelection), { excludedRecords: newExcludedRecords, includedRecords: newIncludedRecords, isIndeterminate: featureDetails.checkBoxSelection.allBoxChecked ? true : featureDetails.checkBoxSelection.isIndeterminate }) })); } }; // Utility function to determine parent group inclusion or exclusion states const determineParentGroupState = (parentGroupData, newIncludedRecords, newExcludedRecords, allBoxChecked) => { const isAnyParentGroupInclude = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.every((parent) => newIncludedRecords.some((included) => included.id === parent.id)); const isAnyParentGroupExcluded = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.some((parent) => newExcludedRecords.some((excluded) => excluded.id === parent.id)); return allBoxChecked ? isAnyParentGroupExcluded : isAnyParentGroupInclude; }; // Utility function to handle group selection logic for checked state const handleGroupSelection = (params, setSelectedGroup, groupingColumns, newIncludedRecords, newExcludedRecords, parentGroupData, allBoxChecked) => { var _a, _b, _c, _d, _e, _f, _g, _h; const isEverySuperParentGroupInclude = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.every((parent) => newIncludedRecords.some((included) => (included === null || included === void 0 ? void 0 : included.id) === (parent === null || parent === void 0 ? void 0 : parent.id))); // const isAnyParentGroupInclude = groupData?.some((parent) => // newIncludedRecords.some((included) => included?.id === parent?.id) // ); const isEverySuperParentGroupExcluded = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.every((parent) => newExcludedRecords.some((excluded) => (excluded === null || excluded === void 0 ? void 0 : excluded.id) === (parent === null || parent === void 0 ? void 0 : parent.id))); if (groupingColumns === 2 && !((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.leafGroup) && ((_b = params === null || params === void 0 ? void 0 : params.node) === null || _b === void 0 ? void 0 : _b.level) === 0) { (_d = (_c = params === null || params === void 0 ? void 0 : params.node) === null || _c === void 0 ? void 0 : _c.childrenAfterGroup) === null || _d === void 0 ? void 0 : _d.forEach((childNode) => { setSelectedGroup((prev) => prev.includes(childNode.id) ? prev : [...prev, childNode.id]); }); setSelectedGroup((prev) => prev.includes(params.node.id) ? prev : [...prev, params.node.id]); } else if (((_e = params === null || params === void 0 ? void 0 : params.node) === null || _e === void 0 ? void 0 : _e.leafGroup) && ((_f = params === null || params === void 0 ? void 0 : params.node) === null || _f === void 0 ? void 0 : _f.level) === 1 && !allBoxChecked) { setSelectedGroup((prev) => prev.includes(params.node.id) ? prev : [...prev, params.node.id]); if (isEverySuperParentGroupInclude) { setSelectedGroup((prev) => { var _a, _b, _c, _d; return prev.includes((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id) ? prev : [...prev, (_d = (_c = params === null || params === void 0 ? void 0 : params.node) === null || _c === void 0 ? void 0 : _c.parent) === null || _d === void 0 ? void 0 : _d.id]; }); } } else if (((_g = params === null || params === void 0 ? void 0 : params.node) === null || _g === void 0 ? void 0 : _g.leafGroup) && ((_h = params === null || params === void 0 ? void 0 : params.node) === null || _h === void 0 ? void 0 : _h.level) === 1 && allBoxChecked) { setSelectedGroup((prev) => prev.includes(params.node.id) ? prev : [...prev, params.node.id]); if (isEverySuperParentGroupExcluded || (newExcludedRecords === null || newExcludedRecords === void 0 ? void 0 : newExcludedRecords.length) === 0) { setSelectedGroup((prev) => { var _a, _b, _c, _d; return prev.includes((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id) ? prev : [...prev, (_d = (_c = params === null || params === void 0 ? void 0 : params.node) === null || _c === void 0 ? void 0 : _c.parent) === null || _d === void 0 ? void 0 : _d.id]; }); } } else { setSelectedGroup((prev) => { var _a, _b; return prev.includes((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.id) ? prev : [...prev, (_b = params === null || params === void 0 ? void 0 : params.node) === null || _b === void 0 ? void 0 : _b.id]; }); } }; // Utility function to handle group deselection logic for unchecked state const handleGroupDeselection = (params, setSelectedGroup, groupingColumns, isParent, isEveryParentGroupInclude) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; if (groupingColumns === 2 && !((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.leafGroup) && ((_b = params === null || params === void 0 ? void 0 : params.node) === null || _b === void 0 ? void 0 : _b.level) === 0) { (_d = (_c = params === null || params === void 0 ? void 0 : params.node) === null || _c === void 0 ? void 0 : _c.childrenAfterGroup) === null || _d === void 0 ? void 0 : _d.forEach((childNode) => { setSelectedGroup((prev) => prev === null || prev === void 0 ? void 0 : prev.filter((id) => id !== (childNode === null || childNode === void 0 ? void 0 : childNode.id))); }); setSelectedGroup((prev) => prev === null || prev === void 0 ? void 0 : prev.filter((id) => { var _a; return id !== ((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.id); })); } else if (((_e = params === null || params === void 0 ? void 0 : params.node) === null || _e === void 0 ? void 0 : _e.leafGroup) && ((_f = params === null || params === void 0 ? void 0 : params.node) === null || _f === void 0 ? void 0 : _f.level) === 1 && !isEveryParentGroupInclude) { // Handle cases where current node is a leaf group at level 1 setSelectedGroup((prev) => { if (prev === null || prev === void 0 ? void 0 : prev.includes(params.node.id)) { return prev === null || prev === void 0 ? void 0 : prev.filter((id) => { var _a; return id !== ((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.id); }); } return prev; }); setSelectedGroup((prev) => { var _a, _b; if (prev === null || prev === void 0 ? void 0 : prev.includes((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id)) { return prev === null || prev === void 0 ? void 0 : prev.filter((id) => { var _a, _b; return id !== ((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id); }); } return prev; }); } else if (((_g = params === null || params === void 0 ? void 0 : params.node) === null || _g === void 0 ? void 0 : _g.leafGroup) && ((_h = params === null || params === void 0 ? void 0 : params.node) === null || _h === void 0 ? void 0 : _h.level) === 1 && !isParent) { setSelectedGroup((prev) => { if (prev === null || prev === void 0 ? void 0 : prev.includes(params.node.id)) { return prev === null || prev === void 0 ? void 0 : prev.filter((id) => { var _a; return id !== ((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.id); }); } return prev; }); setSelectedGroup((prev) => { var _a, _b; if (prev === null || prev === void 0 ? void 0 : prev.includes((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id)) { return prev === null || prev === void 0 ? void 0 : prev.filter((id) => { var _a, _b; return id !== ((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id); }); } return prev; }); } else if (((_j = params === null || params === void 0 ? void 0 : params.node) === null || _j === void 0 ? void 0 : _j.leafGroup) && ((_k = params === null || params === void 0 ? void 0 : params.node) === null || _k === void 0 ? void 0 : _k.level) === 1 && isParent) { setSelectedGroup((prev) => { var _a, _b; if (prev.includes((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id)) { return prev.filter((id) => { var _a, _b; return id !== ((_b = (_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id); }); } return prev; }); } else { setSelectedGroup((prev) => prev.filter((id) => id !== params.node.id)); } }; // ------------------------------------- group header checkbox ------------------------------------------- // iterating over eachnode and return first and second group ids const getGroupIds = (gridRef) => { var _a, _b; const firstGroupIds = []; const secondGroupIds = []; (_b = (_a = gridRef === null || gridRef === void 0 ? void 0 : gridRef.current) === null || _a === void 0 ? void 0 : _a.api) === null || _b === void 0 ? void 0 : _b.forEachNode((node) => { if (node === null || node === void 0 ? void 0 : node.group) { if ((node === null || node === void 0 ? void 0 : node.level) === 0) { // Store the ID of the first level group firstGroupIds === null || firstGroupIds === void 0 ? void 0 : firstGroupIds.push(node === null || node === void 0 ? void 0 : node.id); } else if ((node === null || node === void 0 ? void 0 : node.level) === 1) { // Store the ID of the second level group secondGroupIds === null || secondGroupIds === void 0 ? void 0 : secondGroupIds.push(node === null || node === void 0 ? void 0 : node.id); } } }); return { firstGroupIds, secondGroupIds }; }; exports.getGroupIds = getGroupIds; const handleCheckboxClick = (e, params, featureDetails, gridData, setFeatureDetails, groupingColumns, setSelectedGroup, selectColumns, serverSideRowLeveSelection) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { var _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u; const isChecked = e.checked; const { data: rowData } = params; // Update checkbox data and set the updated state const updatedCheckBoxData = yield (0, exports.updateRecords)(rowData, featureDetails, gridData); const checkBoxObject = Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: updatedCheckBoxData }); selectColumns && selectColumns(checkBoxObject); yield setFeatureDetails(checkBoxObject); yield serverSideRowLeveSelection(checkBoxObject); // Gather parent and super parent group data for condition checks const parentGroupData = (_k = (_j = (_h = params === null || params === void 0 ? void 0 : params.node) === null || _h === void 0 ? void 0 : _h.parent) === null || _j === void 0 ? void 0 : _j.childrenAfterGroup) === null || _k === void 0 ? void 0 : _k.map((childNode) => childNode === null || childNode === void 0 ? void 0 : childNode.data); const superParentData = (_p = (_o = (_m = (_l = params === null || params === void 0 ? void 0 : params.node) === null || _l === void 0 ? void 0 : _l.parent) === null || _m === void 0 ? void 0 : _m.parent) === null || _o === void 0 ? void 0 : _o.allLeafChildren) === null || _p === void 0 ? void 0 : _p.map((children) => children === null || children === void 0 ? void 0 : children.data); // Determine if all or any parent groups are included/excluded const isEveryParentGroupInclude = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.every((parent) => { var _a; return (_a = updatedCheckBoxData === null || updatedCheckBoxData === void 0 ? void 0 : updatedCheckBoxData.includedRecords) === null || _a === void 0 ? void 0 : _a.some((included) => (included === null || included === void 0 ? void 0 : included.id) === (parent === null || parent === void 0 ? void 0 : parent.id)); }); // const isEveryParentGroupExcluded = parentGroupData?.every((parent) => // updatedCheckBoxData?.excludedRecords?.some( // (excluded) => excluded?.id === parent?.id // ) // ); const isSomeParentGroupExcluded = parentGroupData === null || parentGroupData === void 0 ? void 0 : parentGroupData.some((parent) => { var _a; return (_a = updatedCheckBoxData === null || updatedCheckBoxData === void 0 ? void 0 : updatedCheckBoxData.excludedRecords) === null || _a === void 0 ? void 0 : _a.some((excluded) => (excluded === null || excluded === void 0 ? void 0 : excluded.id) === (parent === null || parent === void 0 ? void 0 : parent.id)); }); // const isEverySuperParentGroupExcluded = superParentData?.every((parent) => // updatedCheckBoxData?.excludedRecords?.some( // (excluded) => excluded?.id === parent?.id // ) // ); const isSomeSuperParentGroupExcluded = superParentData === null || superParentData === void 0 ? void 0 : superParentData.some((parent) => { var _a; return (_a = updatedCheckBoxData === null || updatedCheckBoxData === void 0 ? void 0 : updatedCheckBoxData.excludedRecords) === null || _a === void 0 ? void 0 : _a.some((excluded) => (excluded === null || excluded === void 0 ? void 0 : excluded.id) === (parent === null || parent === void 0 ? void 0 : parent.id)); }); const isEverySuperParentGroupInclude = superParentData === null || superParentData === void 0 ? void 0 : superParentData.every((parent) => { var _a; return (_a = updatedCheckBoxData === null || updatedCheckBoxData === void 0 ? void 0 : updatedCheckBoxData.includedRecords) === null || _a === void 0 ? void 0 : _a.some((included) => (included === null || included === void 0 ? void 0 : included.id) === (parent === null || parent === void 0 ? void 0 : parent.id)); }); // Determine the conditions to update group state const conditions = (0, exports.determineConditions)(isChecked, updatedCheckBoxData.allBoxChecked, isEveryParentGroupInclude, isEverySuperParentGroupInclude, isSomeParentGroupExcluded, isSomeSuperParentGroupExcluded); // Update group state based on determined conditions (0, exports.updateGroupState)(groupingColumns, (_r = (_q = params === null || params === void 0 ? void 0 : params.node) === null || _q === void 0 ? void 0 : _q.parent) === null || _r === void 0 ? void 0 : _r.id, (_u = (_t = (_s = params === null || params === void 0 ? void 0 : params.node) === null || _s === void 0 ? void 0 : _s.parent) === null || _t === void 0 ? void 0 : _t.parent) === null || _u === void 0 ? void 0 : _u.id, conditions, setSelectedGroup); }); exports.handleCheckboxClick = handleCheckboxClick; const deepClone = (obj) => { var _a, _b, _c; // If the input is not an object or is null, return the value itself (primitive types are returned directly) if (obj === null || typeof obj !== "object") { return obj; } // Handle Date objects by creating a new Date instance with the same value if (obj instanceof Date) { return new Date(obj); } // Handle RegExp objects by creating a new RegExp instance with the same pattern and flags if (obj instanceof RegExp) { return new RegExp(obj); } // Handle React JSX elements // If the object is a valid React element, clone it along with its props and children if (react_1.default.isValidElement(obj)) { const element = obj; // Explicitly assert type to ReactElement // Recursively clone all child elements, if any const clonedChildren = ((_a = element === null || element === void 0 ? void 0 : element.props) === null || _a === void 0 ? void 0 : _a.children) ? (_b = react_1.default.Children) === null || _b === void 0 ? void 0 : _b.map((_c = element === null || element === void 0 ? void 0 : element.props) === null || _c === void 0 ? void 0 : _c.children, (child) => (0, exports.deepClone)(child)) : undefined; // Set to undefined if no children exist // Return a cloned React element with its props and recursively cloned children return react_1.default.cloneElement(element, Object.assign({}, element === null || element === void 0 ? void 0 : element.props), // Spread the existing props clonedChildren // Include cloned children ); } // Handle Arrays // Recursively clone each element in the array if (Array.isArray(obj)) { return obj === null || obj === void 0 ? void 0 : obj.map(exports.deepClone); } // Handle Objects // Recursively clone each property in the object const clonedObj = {}; // Create a new empty object to hold cloned properties for (const key in obj) { // Use hasOwnProperty to avoid cloning inherited properties if (Object.prototype.hasOwnProperty.call(obj, key)) { clonedObj[key] = (0, exports.deepClone)(obj[key]); // Recursively clone each property } } // Return the fully cloned object return clonedObj; }; exports.deepClone = deepClone;