react-restyle-components 0.4.40 → 0.4.41

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.
@@ -151,9 +151,34 @@ export const Table = forwardRef(function TableComponent(props, ref) {
151
151
  const [toggleDragOverColumn, setToggleDragOverColumn] = useState(null);
152
152
  // Internal state for reordered columns (used in popup and for rendering)
153
153
  const [reorderedColumns, setReorderedColumns] = useState(columns);
154
- // Sync reorderedColumns when columns prop changes
154
+ // Sync reorderedColumns when columns prop structure changes (columns added/removed)
155
+ // We only reset when the actual column dataFields change, not on every reference change
155
156
  useEffect(() => {
156
- setReorderedColumns(columns);
157
+ const currentDataFields = reorderedColumns
158
+ .map((c) => c.dataField)
159
+ .sort()
160
+ .join(',');
161
+ const newDataFields = columns
162
+ .map((c) => c.dataField)
163
+ .sort()
164
+ .join(',');
165
+ if (currentDataFields !== newDataFields) {
166
+ // Columns structure changed - merge new columns while preserving order where possible
167
+ const newColumnMap = new Map(columns.map((c) => [c.dataField, c]));
168
+ const existingDataFields = new Set(reorderedColumns.map((c) => c.dataField));
169
+ // Keep existing order for columns that still exist, update their data
170
+ const preserved = reorderedColumns
171
+ .filter((c) => newColumnMap.has(c.dataField))
172
+ .map((c) => newColumnMap.get(c.dataField));
173
+ // Add new columns at the end
174
+ const added = columns.filter((c) => !existingDataFields.has(c.dataField));
175
+ setReorderedColumns([...preserved, ...added]);
176
+ }
177
+ else {
178
+ // Same columns but maybe different data - update column data while preserving order
179
+ const columnMap = new Map(columns.map((c) => [c.dataField, c]));
180
+ setReorderedColumns(reorderedColumns.map((c) => columnMap.get(c.dataField) || c));
181
+ }
157
182
  }, [columns]);
158
183
  // Close column toggle panel on outside click
159
184
  useEffect(() => {
@@ -703,11 +728,11 @@ export const Table = forwardRef(function TableComponent(props, ref) {
703
728
  const result = toggleExpand(row);
704
729
  expandable?.onExpandChange?.(result.expandedKeys, result.expanded, row);
705
730
  }, [toggleExpand, expandable]);
706
- // Filtered column list for toggle panel
731
+ // Filtered column list for toggle panel - use reorderedColumns to preserve reorder state
707
732
  const filteredToggleColumns = useMemo(() => {
708
- return columns.filter((c) => c.dataField !== keyField &&
733
+ return reorderedColumns.filter((c) => c.dataField !== keyField &&
709
734
  c.text.toLowerCase().includes(columnSearch.toLowerCase()));
710
- }, [columns, keyField, columnSearch]);
735
+ }, [reorderedColumns, keyField, columnSearch]);
711
736
  // Get row key
712
737
  const getRowKey = useCallback((row) => row[keyField], [keyField]);
713
738
  // Render cell content
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AG Grid Component
3
+ * A comprehensive, AG Grid-like data table with all enterprise features
4
+ * Reference: https://www.ag-grid.com/react-data-grid/getting-started/
5
+ */
6
+ import React from 'react';
7
+ import type { AgGridProps, AgGridRef } from './types';
8
+ export declare const AgGrid: <T extends Record<string, any>>(props: AgGridProps<T> & {
9
+ ref?: React.ForwardedRef<AgGridRef<T>> | undefined;
10
+ }) => React.ReactElement;
11
+ export default AgGrid;