@moontra/moonui-pro 2.3.7 → 2.3.8

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/index.mjs CHANGED
@@ -52210,8 +52210,9 @@ function DataTable({
52210
52210
  const [internalExpandedRows, setInternalExpandedRows] = t__default.useState(/* @__PURE__ */ new Set());
52211
52211
  const expandedRows = controlledExpandedRows || internalExpandedRows;
52212
52212
  const actualPageSize = defaultPageSize || pageSize;
52213
+ const stableData = t__default.useMemo(() => data, [data]);
52213
52214
  const table = useReactTable({
52214
- data,
52215
+ data: stableData,
52215
52216
  columns,
52216
52217
  onSortingChange: onSortingChange !== void 0 ? onSortingChange : setSorting,
52217
52218
  onColumnFiltersChange: onColumnFiltersChange !== void 0 ? onColumnFiltersChange : setColumnFilters,
@@ -52244,6 +52245,12 @@ function DataTable({
52244
52245
  onRowSelect(selectedRows);
52245
52246
  }
52246
52247
  }, [rowSelection, onRowSelect, selectable, table]);
52248
+ const tableState = table.getState();
52249
+ const rows = t__default.useMemo(
52250
+ () => table.getRowModel().rows,
52251
+ // Only recalculate when data or filtering/sorting changes, not on expand/collapse
52252
+ [stableData, tableState.sorting, tableState.columnFilters, tableState.globalFilter, tableState.pagination.pageIndex, tableState.pagination.pageSize]
52253
+ );
52247
52254
  ({
52248
52255
  sorting: features.sorting !== false,
52249
52256
  filtering: features.filtering !== false || filterable,
@@ -52326,15 +52333,13 @@ function DataTable({
52326
52333
  ] }) })
52327
52334
  },
52328
52335
  "loading"
52329
- ) : table.getRowModel().rows?.length ? /* @__PURE__ */ jsx(Fragment, { children: table.getRowModel().rows.map((row, index) => {
52336
+ ) : rows?.length ? /* @__PURE__ */ jsx(Fragment, { children: rows.map((row, index) => {
52330
52337
  const rowId = row.original.id || row.id;
52331
52338
  const isExpanded = enableExpandable && expandedRows.has(rowId);
52332
52339
  return /* @__PURE__ */ jsxs(t__default.Fragment, { children: [
52333
52340
  /* @__PURE__ */ jsx(
52334
- motion.tr,
52341
+ "tr",
52335
52342
  {
52336
- initial: false,
52337
- animate: { opacity: 1 },
52338
52343
  className: cn(
52339
52344
  "border-b transition-colors hover:bg-muted/50",
52340
52345
  row.getIsSelected() && "bg-muted",
@@ -52390,7 +52395,7 @@ function DataTable({
52390
52395
  },
52391
52396
  `${row.id}-expanded`
52392
52397
  ) })
52393
- ] }, row.id);
52398
+ ] }, rowId);
52394
52399
  }) }) : /* @__PURE__ */ jsx(
52395
52400
  motion.tr,
52396
52401
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moontra/moonui-pro",
3
- "version": "2.3.7",
3
+ "version": "2.3.8",
4
4
  "description": "Premium React components for MoonUI - Advanced UI library with 50+ pro components including performance, interactive, and gesture components",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -13,6 +13,7 @@ import {
13
13
  ColumnFiltersState,
14
14
  VisibilityState,
15
15
  OnChangeFn,
16
+ Row,
16
17
  } from '@tanstack/react-table'
17
18
  import { Button } from '../ui/button'
18
19
  import { Input } from '../ui/input'
@@ -182,8 +183,11 @@ export function DataTable<TData, TValue>({
182
183
 
183
184
  const actualPageSize = defaultPageSize || pageSize
184
185
 
186
+ // Memoize data to prevent unnecessary re-renders
187
+ const stableData = React.useMemo(() => data, [data])
188
+
185
189
  const table = useReactTable({
186
- data,
190
+ data: stableData,
187
191
  columns,
188
192
  onSortingChange: onSortingChange !== undefined ? onSortingChange : setSorting,
189
193
  onColumnFiltersChange: onColumnFiltersChange !== undefined ? onColumnFiltersChange : setColumnFilters,
@@ -217,6 +221,14 @@ export function DataTable<TData, TValue>({
217
221
  onRowSelect(selectedRows)
218
222
  }
219
223
  }, [rowSelection, onRowSelect, selectable, table])
224
+
225
+ // Memoize row model to prevent unnecessary re-renders when only expanded state changes
226
+ const tableState = table.getState()
227
+ const rows = React.useMemo(
228
+ () => table.getRowModel().rows,
229
+ // Only recalculate when data or filtering/sorting changes, not on expand/collapse
230
+ [stableData, tableState.sorting, tableState.columnFilters, tableState.globalFilter, tableState.pagination.pageIndex, tableState.pagination.pageSize]
231
+ )
220
232
 
221
233
  // Merge features with defaults
222
234
  const enabledFeatures = {
@@ -336,17 +348,15 @@ export function DataTable<TData, TValue>({
336
348
  </div>
337
349
  </td>
338
350
  </motion.tr>
339
- ) : table.getRowModel().rows?.length ? (
351
+ ) : rows?.length ? (
340
352
  <>
341
- {table.getRowModel().rows.map((row, index) => {
353
+ {rows.map((row, index) => {
342
354
  const rowId = (row.original as any).id || row.id
343
355
  const isExpanded = enableExpandable && expandedRows.has(rowId)
344
356
 
345
357
  return (
346
- <React.Fragment key={row.id}>
347
- <motion.tr
348
- initial={false}
349
- animate={{ opacity: 1 }}
358
+ <React.Fragment key={rowId}>
359
+ <tr
350
360
  className={cn(
351
361
  "border-b transition-colors hover:bg-muted/50",
352
362
  row.getIsSelected() && "bg-muted",
@@ -358,7 +368,7 @@ export function DataTable<TData, TValue>({
358
368
  {flexRender(cell.column.columnDef.cell, cell.getContext())}
359
369
  </td>
360
370
  ))}
361
- </motion.tr>
371
+ </tr>
362
372
 
363
373
  <AnimatePresence initial={false}>
364
374
  {isExpanded && renderSubComponent && (