tp-react-elements 1.3.8 → 1.3.10
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/index.esm4.js +2 -2
- package/dist/_virtual/index.esm5.js +2 -2
- package/dist/_virtual/index.esm7.js +2 -2
- package/dist/components/Form/FormRender.esm.js +3 -3
- package/dist/components/FormComponents/index.esm.js +4 -4
- package/dist/components/PaginatedGrid/DynamicFilterBar.esm.js +1 -1
- package/dist/components/PaginatedGrid/GenericPaginatedGrid.esm.js +30 -17
- package/dist/node_modules/react-date-range/dist/components/Calendar/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/DateRange/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/DefinedRange/index.esm.js +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var DefinedRange = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DefinedRange as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var DateRange = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DateRange as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Calendar = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { Calendar as __exports };
|
|
@@ -5,6 +5,9 @@ import FormCheckBoxGroup from '../FormComponents/FormCheckBoxGroup/FormCheckBoxG
|
|
|
5
5
|
import FormNumberField from '../FormComponents/FormNumberField/FormNumberField.esm.js';
|
|
6
6
|
import FormNumberFieldDecimal from '../FormComponents/FormNumberField/FormNumberFieldDecimal.esm.js';
|
|
7
7
|
import FormRadioGroup from '../FormComponents/FormRadioGroup/FormRadioGroup.esm.js';
|
|
8
|
+
import FormTextAreaField from '../FormComponents/FormTextAreaField/FormTextAreaField.esm.js';
|
|
9
|
+
import FormTextField from '../FormComponents/FormTextField/FormTextField.esm.js';
|
|
10
|
+
import PasswordField from '../FormComponents/PasswordField/PasswordField.esm.js';
|
|
8
11
|
import SingleSelect from '../FormComponents/Select/SingleSelect.esm.js';
|
|
9
12
|
import MultiSelectAutocomplete from '../FormComponents/Select/MultiSelectAutocomplete.esm.js';
|
|
10
13
|
import SingleSelectNonAutoComplete from '../FormComponents/Select/SingleSelectNonAutoComplete.esm.js';
|
|
@@ -15,9 +18,6 @@ import DateRangePickerComponent from '../DateRangePicker/DateRangePicker.esm.js'
|
|
|
15
18
|
import RichTextEditorWrapper from '../FormComponents/RichTextEditor/RichTextEditorWrapper.esm.js';
|
|
16
19
|
import SingleSelectSearchApi from '../FormComponents/Select/SingleSelectSearchApi.esm.js';
|
|
17
20
|
import DatetimepickerWrapper from '../FormComponents/DatePicker/DatetimepickerWrapper.esm.js';
|
|
18
|
-
import FormTextAreaField from '../FormComponents/FormTextAreaField/FormTextAreaField.esm.js';
|
|
19
|
-
import PasswordField from '../FormComponents/PasswordField/PasswordField.esm.js';
|
|
20
|
-
import FormTextField from '../FormComponents/FormTextField/FormTextField.esm.js';
|
|
21
21
|
|
|
22
22
|
// Lazy-loaded heavy components
|
|
23
23
|
// const RichTextEditorWrapper = lazy(() =>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { default as FormNumberField } from './FormNumberField/FormNumberField.esm.js';
|
|
2
2
|
export { default as FormNumberFieldDecimal } from './FormNumberField/FormNumberFieldDecimal.esm.js';
|
|
3
|
+
export { default as FormTextAreaField } from './FormTextAreaField/FormTextAreaField.esm.js';
|
|
4
|
+
export { default as FormTextField } from './FormTextField/FormTextField.esm.js';
|
|
5
|
+
export { default as PasswordField } from './PasswordField/PasswordField.esm.js';
|
|
3
6
|
export { default as FormCheckBox } from './FormCheckBox/FormCheckBox.esm.js';
|
|
4
7
|
export { default as SingleSelect } from './Select/SingleSelect.esm.js';
|
|
5
8
|
export { default as SingleSelectNonAutoComplete } from './Select/SingleSelectNonAutoComplete.esm.js';
|
|
@@ -12,6 +15,7 @@ export { default as FormRadioGroup } from './FormRadioGroup/FormRadioGroup.esm.j
|
|
|
12
15
|
export { default as DatepickerWrapperV2 } from './DatePicker/DatepickerWrapperV2.esm.js';
|
|
13
16
|
export { default as Monthpickerrender } from './DatePicker/Monthpickerrender.esm.js';
|
|
14
17
|
export { default as YearPickerField } from './YearPickerField/YearPickerField.esm.js';
|
|
18
|
+
export { default as TimePicker } from './TimePicker/TimePicker.esm.js';
|
|
15
19
|
export { default as FormRenderFileUpload } from './FileUpload/FormRenderFileUpload.esm.js';
|
|
16
20
|
export { default as FormRenderMultiFileUpload } from './FileUpload/FormRenderMultiFileUpload.esm.js';
|
|
17
21
|
import 'react/jsx-runtime';
|
|
@@ -30,10 +34,6 @@ import '@mui/icons-material/PictureAsPdf';
|
|
|
30
34
|
import '@mui/icons-material/TableChart';
|
|
31
35
|
import '@mui/icons-material/Description';
|
|
32
36
|
export { default as FormErrorField } from './FormErrorField/FormErrorField.esm.js';
|
|
33
|
-
export { default as FormTextAreaField } from './FormTextAreaField/FormTextAreaField.esm.js';
|
|
34
|
-
export { default as FormTextField } from './FormTextField/FormTextField.esm.js';
|
|
35
37
|
export { default as HelperText } from './HelperText/HelperText.esm.js';
|
|
36
|
-
export { default as PasswordField } from './PasswordField/PasswordField.esm.js';
|
|
37
38
|
export { default as RichTextEditor } from './RichTextEditor/RichTextEditor.esm.js';
|
|
38
39
|
export { default as RichTextEditorWrapper } from './RichTextEditor/RichTextEditorWrapper.esm.js';
|
|
39
|
-
export { default as TimePicker } from './TimePicker/TimePicker.esm.js';
|
|
@@ -273,7 +273,7 @@ const ManageFiltersButton = ({ serverFilterDefs, visibleIds, availableColumns, o
|
|
|
273
273
|
display: 'flex',
|
|
274
274
|
alignItems: 'center',
|
|
275
275
|
gap: 0.75,
|
|
276
|
-
}, children: jsxs(Typography, { sx: { fontSize: 11, color: 'primary.main', fontWeight: 600, lineHeight: 1.4 }, children: [visibleIds.length, "/", maxVisible, " filters active \u2014 remove one to add another"] }) })), jsxs(Box, { sx: { py: 1 }, children: [serverFilterDefs.length > 0 && (jsxs(Fragment, { children: [jsx(Typography, { variant: "caption", fontWeight: 700, color: "text.disabled", sx: { px: 2, pb: 0.5, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }, children: "Server Filters" }), jsx(List, { dense: true, disablePadding: true, children: serverFilterDefs.map((def) => {
|
|
276
|
+
}, children: jsxs(Typography, { sx: { fontSize: 11, color: 'primary.main', fontWeight: 600, lineHeight: 1.4 }, children: [visibleIds.length, "/", maxVisible, " filters active \u2014 remove one to add another"] }) })), jsxs(Box, { sx: { py: 1, maxHeight: 360, overflowY: 'auto' }, children: [serverFilterDefs.length > 0 && (jsxs(Fragment, { children: [jsx(Typography, { variant: "caption", fontWeight: 700, color: "text.disabled", sx: { px: 2, pb: 0.5, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }, children: "Server Filters" }), jsx(List, { dense: true, disablePadding: true, children: serverFilterDefs.map((def) => {
|
|
277
277
|
const selected = visibleIds.includes(def.id);
|
|
278
278
|
const blocked = atLimit && !selected; // at cap and not yet shown → disabled
|
|
279
279
|
const pill = TYPE_PILL[def.type];
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useRef, useLayoutEffect, useMemo } from 'react';
|
|
3
3
|
import { useMaterialReactTable, MaterialReactTable } from 'material-react-table';
|
|
4
4
|
import { useQuery, keepPreviousData } from '@tanstack/react-query';
|
|
5
|
-
import { Box, Tooltip, IconButton,
|
|
5
|
+
import { Box, Tooltip, IconButton, GlobalStyles, Typography, Select, MenuItem, CircularProgress } from '@mui/material';
|
|
6
6
|
import RefreshIcon from '@mui/icons-material/Refresh';
|
|
7
7
|
import FileDownloadIcon from '@mui/icons-material/FileDownload';
|
|
8
8
|
import FirstPageIcon from '@mui/icons-material/FirstPage';
|
|
@@ -77,12 +77,35 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
77
77
|
return;
|
|
78
78
|
const update = () => {
|
|
79
79
|
const top = el.getBoundingClientRect().top;
|
|
80
|
-
|
|
80
|
+
// CSS max() guarantees a minimum visible height (300px) when the grid
|
|
81
|
+
// starts below the fold or when little viewport space remains — both
|
|
82
|
+
// cases produce a negative/tiny calc() that would otherwise collapse
|
|
83
|
+
// the grid to zero height.
|
|
84
|
+
setAutoHeight(`max(300px, calc(100vh - ${Math.ceil(top) + 8}px))`);
|
|
81
85
|
};
|
|
82
86
|
update();
|
|
87
|
+
// Re-measure on any document resize (window resize, sidebar toggle, etc.)
|
|
83
88
|
const ro = new ResizeObserver(update);
|
|
84
89
|
ro.observe(document.documentElement);
|
|
85
|
-
|
|
90
|
+
// Re-measure when the scroll container scrolls — the grid's
|
|
91
|
+
// viewport-relative top offset shifts with scroll position, so the
|
|
92
|
+
// height must be recalculated to fill the remaining visible space.
|
|
93
|
+
const findScrollParent = (node) => {
|
|
94
|
+
let p = node.parentElement;
|
|
95
|
+
while (p && p !== document.documentElement) {
|
|
96
|
+
const { overflow, overflowY } = window.getComputedStyle(p);
|
|
97
|
+
if (/auto|scroll/.test(overflow) || /auto|scroll/.test(overflowY))
|
|
98
|
+
return p;
|
|
99
|
+
p = p.parentElement;
|
|
100
|
+
}
|
|
101
|
+
return window;
|
|
102
|
+
};
|
|
103
|
+
const scrollParent = findScrollParent(el);
|
|
104
|
+
scrollParent.addEventListener('scroll', update, { passive: true });
|
|
105
|
+
return () => {
|
|
106
|
+
ro.disconnect();
|
|
107
|
+
scrollParent.removeEventListener('scroll', update);
|
|
108
|
+
};
|
|
86
109
|
}, [tableHeight]);
|
|
87
110
|
// Resolved height: explicit prop › auto-calculated › safe fallback
|
|
88
111
|
const resolvedHeight = tableHeight || autoHeight || '60vh';
|
|
@@ -184,8 +207,6 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
184
207
|
a.click();
|
|
185
208
|
URL.revokeObjectURL(url);
|
|
186
209
|
};
|
|
187
|
-
const hasAnyValue = Object.values(filterValues).some(Boolean) ||
|
|
188
|
-
columnFilters.some((f) => f.value);
|
|
189
210
|
// ── Table instance ─────────────────────────────────────────────────────────
|
|
190
211
|
const table = useMaterialReactTable({
|
|
191
212
|
columns: processedColumns,
|
|
@@ -226,12 +247,12 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
226
247
|
enableStickyHeader: true,
|
|
227
248
|
enableRowVirtualization: true,
|
|
228
249
|
// The container fills whatever height is left after the top toolbar and
|
|
229
|
-
// pagination footer.
|
|
230
|
-
//
|
|
250
|
+
// pagination footer. minHeight ensures a visible body even when there are
|
|
251
|
+
// no records; flex: '1 1 0' lets it grow to fill the remaining space.
|
|
231
252
|
muiTableContainerProps: {
|
|
232
253
|
sx: {
|
|
233
254
|
flex: '1 1 0',
|
|
234
|
-
minHeight:
|
|
255
|
+
minHeight: '150px',
|
|
235
256
|
},
|
|
236
257
|
},
|
|
237
258
|
// Paper fills the wrapper Box height and acts as the flex column host for
|
|
@@ -301,15 +322,7 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
301
322
|
muiToolbarAlertBannerProps: isError
|
|
302
323
|
? { color: 'error', children: 'Failed to load data. Please try again.' }
|
|
303
324
|
: undefined,
|
|
304
|
-
renderTopToolbarCustomActions: () => (jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flex: 1, minWidth: 0, pr: 1, gap: 0.5 }, children: [jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flexShrink: 0, gap: 0.25 }, children: [jsx(Tooltip, { title: "
|
|
305
|
-
flexShrink: 0,
|
|
306
|
-
textTransform: 'none',
|
|
307
|
-
fontSize: 12,
|
|
308
|
-
color: 'error.main',
|
|
309
|
-
minWidth: 'auto',
|
|
310
|
-
px: 1,
|
|
311
|
-
'&:hover': { bgcolor: 'rgba(211,47,47,0.06)' },
|
|
312
|
-
}, children: "Clear All" }))] })),
|
|
325
|
+
renderTopToolbarCustomActions: () => (jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flex: 1, minWidth: 0, pr: 1, gap: 0.5 }, children: [jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flexShrink: 0, gap: 0.25 }, children: [jsx(Tooltip, { title: "Clear filters & refresh", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: () => { handleClearAll(); refetch(); }, disabled: isFetching, children: jsx(RefreshIcon, { fontSize: "small" }) }) }) }), jsx(Tooltip, { title: "Export batch as CSV", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: handleExport, disabled: rows.length === 0 || isFetching, children: jsx(FileDownloadIcon, { fontSize: "small" }) }) }) })] }), jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: jsx(DynamicFilterBar, { serverFilterDefs: serverFilterDefs, visibleFilterIds: visibleFilterIds, onToggleFilter: handleToggleFilter, filterValues: filterValues, onFilterValuesChange: handleFilterValuesChange, columnFilters: columnFilters, onColumnFilterChange: setColumnFilters, availableColumns: availableColumns, maxVisibleFilters: maxVisibleFilters }) })] })),
|
|
313
326
|
renderBottomToolbar: ({ table: t }) => (jsx(PaginationFooter, { pageIndex: t.getState().pagination.pageIndex, pageSize: t.getState().pagination.pageSize, totalRecords: totalRecords, isFetching: isFetching, isLoading: isLoading, canPrev: t.getCanPreviousPage() && !isFetching, canNext: t.getCanNextPage() && !isFetching, onFirst: () => t.firstPage(), onPrev: () => t.previousPage(), onNext: () => t.nextPage(), onLast: () => t.lastPage(), onPageSizeChange: (s) => t.setPageSize(s), pageSizeOptions: pageSizeOptions })),
|
|
314
327
|
});
|
|
315
328
|
return (jsxs(Box, { ref: containerRef, className: "tp-gpg-root", sx: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as Calendar } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as Calendar } from '../../../../../_virtual/index.esm7.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
import { __require as requireDayCell } from '../DayCell/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as DateRange } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DateRange } from '../../../../../_virtual/index.esm5.js';
|
|
2
2
|
import React__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 DefinedRange } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DefinedRange } from '../../../../../_virtual/index.esm4.js';
|
|
2
2
|
import React__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';
|