tp-react-elements 3.0.2 → 3.0.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.
@@ -1,3 +1,3 @@
1
- var InputRangeField = {};
1
+ var DateInput = {};
2
2
 
3
- export { InputRangeField as __exports };
3
+ export { DateInput as __exports };
@@ -1,3 +1,3 @@
1
- var DateInput = {};
1
+ var InputRangeField = {};
2
2
 
3
- export { DateInput as __exports };
3
+ export { InputRangeField as __exports };
@@ -1,3 +1,3 @@
1
- var DateRange = {};
1
+ var DefinedRange = {};
2
2
 
3
- export { DateRange as __exports };
3
+ export { DefinedRange as __exports };
@@ -1,3 +1,3 @@
1
- var DefinedRange = {};
1
+ var DateRangePicker = {};
2
2
 
3
- export { DefinedRange as __exports };
3
+ export { DateRangePicker as __exports };
@@ -1,3 +1,3 @@
1
- var DateRangePicker = {};
1
+ var DateRange = {};
2
2
 
3
- export { DateRangePicker as __exports };
3
+ export { DateRange as __exports };
@@ -1,5 +1,5 @@
1
1
  import type { TPColumnDef } from './types';
2
- import { type TableCellProps } from '@mui/material';
2
+ import { type SxProps, type TableCellProps, type Theme } from '@mui/material';
3
3
  import { type ServerFilterDef } from './DynamicFilterBar';
4
4
  export type { ServerFilterDef };
5
5
  export type { TPColumnDef } from './types';
@@ -217,6 +217,31 @@ export interface GenericPaginatedGridProps<TData extends object> {
217
217
  column: any;
218
218
  table: any;
219
219
  }) => TableCellProps);
220
+ /**
221
+ * Per-row conditional styling — e.g. highlighting a row's background based
222
+ * on a status field. Called once per row with that row's **original data**
223
+ * (not the MRT `row` wrapper), so the condition logic reads naturally:
224
+ *
225
+ * ```tsx
226
+ * const STATUS_COLORS: Record<string, string> = {
227
+ * Pending: '#ffe0b2', // orange
228
+ * Acknowledged: '#fff9c4', // yellow
229
+ * Completed: '#bbdefb', // blue
230
+ * Released: '#c8e6c9', // green
231
+ * Overdue: '#f8bbd0', // pink
232
+ * };
233
+ *
234
+ * <GenericPaginatedGrid
235
+ * getRowSx={(row) => ({ backgroundColor: STATUS_COLORS[row.status] })}
236
+ * // ...
237
+ * />
238
+ * ```
239
+ *
240
+ * Return `undefined` (or omit a case) for rows that shouldn't be
241
+ * highlighted. Combines safely with row hover/selection styling — this
242
+ * only sets the base background, `sx` arrays layer on top.
243
+ */
244
+ getRowSx?: (row: TData) => SxProps<Theme> | undefined;
220
245
  /**
221
246
  * Optional render function for expanded row detail panels.
222
247
  * When provided, enables row expansion and renders custom content for each expanded row.
@@ -239,5 +264,5 @@ export interface GenericPaginatedGridProps<TData extends object> {
239
264
  */
240
265
  enableExpanding?: boolean;
241
266
  }
242
- declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, gridId, tableHeight, tableMinHeight, tableMaxHeight, autoFillViewport, layoutMode, uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive, pageSizeOptions, showGlobalSearchByDefault, showDensityToggle, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, renderDetailPanel, enableExpanding, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
267
+ declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, gridId, tableHeight, tableMinHeight, tableMaxHeight, autoFillViewport, layoutMode, uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive, pageSizeOptions, showGlobalSearchByDefault, showDensityToggle, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, getRowSx, renderDetailPanel, enableExpanding, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
243
268
  export default GenericPaginatedGrid;
@@ -273,7 +273,7 @@ const PaginationFooter = ({ pageIndex, pageSize, totalRecords, isFetching, isLoa
273
273
  }, children: pageIndex + 1 }), jsx(Tooltip, { title: "Next page", children: jsx("span", { children: jsx(IconButton, { id: `${gridId}_next_page_icon`, size: "small", onClick: onNext, disabled: !canNext, sx: { p: 0.5 }, children: jsx(ChevronRightIcon, { sx: { fontSize: density.footerIconSize } }) }) }) }), jsx(Tooltip, { title: "Last page", children: jsx("span", { children: jsx(IconButton, { id: `${gridId}_last_page_icon`, size: "small", onClick: onLast, disabled: !canNext, sx: { p: 0.5 }, children: jsx(LastPageIcon, { sx: { fontSize: density.footerIconSize } }) }) }) })] })] }));
274
274
  };
275
275
  // ─── GenericPaginatedGrid ─────────────────────────────────────────────────────
276
- function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', gridId, tableHeight, tableMinHeight = '300px', tableMaxHeight, autoFillViewport = true, layoutMode = 'grid', uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive = false, pageSizeOptions = [1000, 5000, 10000], showGlobalSearchByDefault = false, showDensityToggle = false, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters = 4, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, renderDetailPanel, enableExpanding = !!renderDetailPanel, }) {
276
+ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', gridId, tableHeight, tableMinHeight = '300px', tableMaxHeight, autoFillViewport = true, layoutMode = 'grid', uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive = false, pageSizeOptions = [1000, 5000, 10000], showGlobalSearchByDefault = false, showDensityToggle = false, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters = 4, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, getRowSx, renderDetailPanel, enableExpanding = !!renderDetailPanel, }) {
277
277
  // ── Responsive tier detection ────────────────────────────────────────────────
278
278
  // Three tiers (desktop / tablet / mobile) drive auto density, a progressively
279
279
  // lower filter-chip cap, toolbar wrapping, and a stacked pagination footer —
@@ -653,6 +653,13 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
653
653
  ],
654
654
  };
655
655
  }, [resolvedBodyFontSize, gridBodyCellProps]);
656
+ // Row-level conditional highlighting (see `getRowSx` prop doc). Only wired
657
+ // up when the consumer actually supplies it, so grids that don't use this
658
+ // feature pay zero extra cost (MRT falls back to no muiTableBodyRowProps).
659
+ const memoizedBodyRowProps = useCallback(({ row }) => {
660
+ const sx = getRowSx?.(row.original);
661
+ return sx ? { sx } : {};
662
+ }, [getRowSx]);
656
663
  // ── Memoized toolbar render functions ─────────────────────────────────────
657
664
  // Defined with useCallback so MRT receives stable references and does not
658
665
  // re-render the toolbar on every isFetching / data update cycle.
@@ -726,7 +733,16 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
726
733
  onPaginationChange: setPagination,
727
734
  onSortingChange: setSorting,
728
735
  onColumnFiltersChange: setColumnFilters,
729
- onGlobalFilterChange: setGlobalFilter,
736
+ // MRT's own "clear search" (X) button inside the search field calls this
737
+ // with `undefined` (not ''), e.g. via its internal handleClear. Normalize
738
+ // here so `globalFilter` is never anything but a string — code elsewhere
739
+ // in this component (e.g. `isFiltered`) assumes that invariant.
740
+ onGlobalFilterChange: (updater) => {
741
+ setGlobalFilter((prev) => {
742
+ const next = typeof updater === 'function' ? updater(prev) : updater;
743
+ return next ?? '';
744
+ });
745
+ },
730
746
  onColumnPinningChange: (updater) => {
731
747
  setColumnPinning((prev) => {
732
748
  const next = typeof updater === 'function' ? updater(prev) : updater;
@@ -850,6 +866,7 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
850
866
  },
851
867
  muiTableHeadCellProps: memoizedHeadCellProps,
852
868
  muiTableBodyCellProps: memoizedBodyCellProps,
869
+ muiTableBodyRowProps: memoizedBodyRowProps,
853
870
  muiToolbarAlertBannerProps: isError
854
871
  ? { color: 'error', children: 'Failed to load data. Please try again.' }
855
872
  : undefined,
@@ -1,4 +1,4 @@
1
- import { __exports as DateInput } from '../../../../../_virtual/index.esm13.js';
1
+ import { __exports as DateInput } from '../../../../../_virtual/index.esm12.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireClassnames } from '../../../../classnames/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DateRange } from '../../../../../_virtual/index.esm4.js';
1
+ import { __exports as DateRange } from '../../../../../_virtual/index.esm6.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireCalendar } from '../Calendar/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DateRangePicker } from '../../../../../_virtual/index.esm6.js';
1
+ import { __exports as DateRangePicker } from '../../../../../_virtual/index.esm5.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireDateRange } from '../DateRange/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DefinedRange } from '../../../../../_virtual/index.esm5.js';
1
+ import { __exports as DefinedRange } from '../../../../../_virtual/index.esm4.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireStyles } from '../../styles.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as InputRangeField } from '../../../../../_virtual/index.esm12.js';
1
+ import { __exports as InputRangeField } from '../../../../../_virtual/index.esm13.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tp-react-elements",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "React form components library built with React Hook Form and Yup",