react-better-html 1.1.174 → 1.1.176
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.d.mts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +34 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +34 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -765,6 +765,7 @@ type TableColumn<DataItem> = {
|
|
|
765
765
|
clickStopPropagation?: boolean;
|
|
766
766
|
} & (TextColumn<DataItem> | ElementColumn<DataItem> | ImageColumn<DataItem> | CheckboxColumn<DataItem> | ExpandColumn<DataItem>) & (NumberFilter<DataItem> | DateFilter<DataItem> | ListFilter<DataItem>);
|
|
767
767
|
type TableProps<DataItem> = {
|
|
768
|
+
name?: string;
|
|
768
769
|
columns: TableColumn<DataItem>[];
|
|
769
770
|
data: DataItem[];
|
|
770
771
|
/** @default false */
|
|
@@ -780,6 +781,16 @@ type TableProps<DataItem> = {
|
|
|
780
781
|
isInsideTableExpandRow?: boolean;
|
|
781
782
|
containsOverflowComponents?: boolean;
|
|
782
783
|
wrapperComponentRef?: React.Ref<HTMLDivElement>;
|
|
784
|
+
/**
|
|
785
|
+
* @default false
|
|
786
|
+
* @requires name
|
|
787
|
+
*/
|
|
788
|
+
memoizeFilters?: boolean;
|
|
789
|
+
/**
|
|
790
|
+
* The lifespan of the memoized filters in milliseconds. The time will reset if the user changes the filters or reloads the page.
|
|
791
|
+
* @default 7200000 (2 hours)
|
|
792
|
+
*/
|
|
793
|
+
memoizeFiltersLifespan?: number;
|
|
783
794
|
getRowStyle?: (item: DataItem, index: number) => ComponentStyle;
|
|
784
795
|
onClickRow?: (item: DataItem, index: number) => void;
|
|
785
796
|
onClickAllCheckboxes?: (checked: boolean) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -765,6 +765,7 @@ type TableColumn<DataItem> = {
|
|
|
765
765
|
clickStopPropagation?: boolean;
|
|
766
766
|
} & (TextColumn<DataItem> | ElementColumn<DataItem> | ImageColumn<DataItem> | CheckboxColumn<DataItem> | ExpandColumn<DataItem>) & (NumberFilter<DataItem> | DateFilter<DataItem> | ListFilter<DataItem>);
|
|
767
767
|
type TableProps<DataItem> = {
|
|
768
|
+
name?: string;
|
|
768
769
|
columns: TableColumn<DataItem>[];
|
|
769
770
|
data: DataItem[];
|
|
770
771
|
/** @default false */
|
|
@@ -780,6 +781,16 @@ type TableProps<DataItem> = {
|
|
|
780
781
|
isInsideTableExpandRow?: boolean;
|
|
781
782
|
containsOverflowComponents?: boolean;
|
|
782
783
|
wrapperComponentRef?: React.Ref<HTMLDivElement>;
|
|
784
|
+
/**
|
|
785
|
+
* @default false
|
|
786
|
+
* @requires name
|
|
787
|
+
*/
|
|
788
|
+
memoizeFilters?: boolean;
|
|
789
|
+
/**
|
|
790
|
+
* The lifespan of the memoized filters in milliseconds. The time will reset if the user changes the filters or reloads the page.
|
|
791
|
+
* @default 7200000 (2 hours)
|
|
792
|
+
*/
|
|
793
|
+
memoizeFiltersLifespan?: number;
|
|
783
794
|
getRowStyle?: (item: DataItem, index: number) => ComponentStyle;
|
|
784
795
|
onClickRow?: (item: DataItem, index: number) => void;
|
|
785
796
|
onClickAllCheckboxes?: (checked: boolean) => void;
|
package/dist/index.js
CHANGED
|
@@ -5898,6 +5898,9 @@ var DropdownComponent = (0, import_react18.forwardRef)(function Dropdown({
|
|
|
5898
5898
|
] }),
|
|
5899
5899
|
[filteredOptions, value, focusedOptionIndex, theme2.colors, onClickOption, renderOption, renderOptionDivider]
|
|
5900
5900
|
);
|
|
5901
|
+
(0, import_react18.useEffect)(() => {
|
|
5902
|
+
setInternalValue(controlledValue);
|
|
5903
|
+
}, [controlledValue]);
|
|
5901
5904
|
(0, import_react18.useEffect)(() => {
|
|
5902
5905
|
if (isOpen) {
|
|
5903
5906
|
setIsOpenLate.setTrue();
|
|
@@ -5933,7 +5936,7 @@ var DropdownComponent = (0, import_react18.forwardRef)(function Dropdown({
|
|
|
5933
5936
|
}, [withDebounce, onChangeSearch, debouncedSearchQuery]);
|
|
5934
5937
|
const displayValue = withSearch && isFocused ? searchQuery : selectedOption?.label ?? "";
|
|
5935
5938
|
const withClearButton = isOpen && selectedOption;
|
|
5936
|
-
const readyPlaceholder = placeholder
|
|
5939
|
+
const readyPlaceholder = placeholder ?? `Select an ${label?.toLowerCase() ?? "option"}`;
|
|
5937
5940
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Div_default.column, { width: "100%", position: "relative", userSelect: "none", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Div_default.row, { position: "relative", width: "100%", children: [
|
|
5938
5941
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
5939
5942
|
InputField_default,
|
|
@@ -6218,6 +6221,7 @@ function Calendar({ value, minDate, maxDate, onChange }) {
|
|
|
6218
6221
|
days.map((day, index) => {
|
|
6219
6222
|
const thisDayDate = new Date(currentYear, currentMonth, day);
|
|
6220
6223
|
const isSelected = day !== void 0 && day === currentDate?.getDate() && currentMonth === currentDate.getMonth() && currentYear === currentDate.getFullYear();
|
|
6224
|
+
const isToday = thisDayDate.getDate() === (/* @__PURE__ */ new Date()).getDate() && thisDayDate.getMonth() === (/* @__PURE__ */ new Date()).getMonth() && thisDayDate.getFullYear() === (/* @__PURE__ */ new Date()).getFullYear();
|
|
6221
6225
|
const isWeekend = thisDayDate.getDay() === 6 || thisDayDate.getDay() === 0;
|
|
6222
6226
|
const isDisabled = minDate && thisDayDate.getTime() < minDate.getTime() || maxDate && thisDayDate.getTime() > maxDate.getTime();
|
|
6223
6227
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
@@ -6229,7 +6233,8 @@ function Calendar({ value, minDate, maxDate, onChange }) {
|
|
|
6229
6233
|
alignItems: "center",
|
|
6230
6234
|
justifyContent: "center",
|
|
6231
6235
|
backgroundColor: isSelected ? theme2.colors.primary : theme2.colors.backgroundContent,
|
|
6232
|
-
filterHover: !isDisabled ? "brightness(0.9)" : void 0,
|
|
6236
|
+
filterHover: day && !isDisabled ? "brightness(0.9)" : void 0,
|
|
6237
|
+
border: `1px solid ${isToday ? theme2.colors.primary : theme2.colors.primary + "00"}`,
|
|
6233
6238
|
borderRadius: theme2.styles.borderRadius / 2,
|
|
6234
6239
|
padding: theme2.styles.space / 2,
|
|
6235
6240
|
cursor: day ? !isDisabled ? "pointer" : "not-allowed" : void 0,
|
|
@@ -7890,6 +7895,7 @@ var filterPresetsText = {
|
|
|
7890
7895
|
nextYear: "Next year"
|
|
7891
7896
|
};
|
|
7892
7897
|
var TableComponent = (0, import_react25.forwardRef)(function Table({
|
|
7898
|
+
name,
|
|
7893
7899
|
columns,
|
|
7894
7900
|
data,
|
|
7895
7901
|
isStriped,
|
|
@@ -7901,6 +7907,8 @@ var TableComponent = (0, import_react25.forwardRef)(function Table({
|
|
|
7901
7907
|
isInsideTableExpandRow,
|
|
7902
7908
|
containsOverflowComponents,
|
|
7903
7909
|
wrapperComponentRef,
|
|
7910
|
+
memoizeFilters,
|
|
7911
|
+
memoizeFiltersLifespan = 72e5,
|
|
7904
7912
|
getRowStyle,
|
|
7905
7913
|
onClickRow,
|
|
7906
7914
|
onClickAllCheckboxes,
|
|
@@ -7918,7 +7926,15 @@ var TableComponent = (0, import_react25.forwardRef)(function Table({
|
|
|
7918
7926
|
const [checkedItems, setCheckedItems] = (0, import_react25.useState)([]);
|
|
7919
7927
|
const [expandedRows, setExpandedRows] = (0, import_react25.useState)([]);
|
|
7920
7928
|
const [currentPage, setCurrentPage] = (0, import_react25.useState)(1);
|
|
7921
|
-
const [filterData, setFilterData] = (0, import_react25.useState)({
|
|
7929
|
+
const [filterData, setFilterData] = (0, import_react25.useState)(() => {
|
|
7930
|
+
if (!memoizeFilters || !name) return {};
|
|
7931
|
+
const localStorageData = JSON.parse(localStorage.getItem(`react-better-html-table-filters-${name}`) || "{}");
|
|
7932
|
+
const timestamp = localStorageData.timestamp;
|
|
7933
|
+
const data2 = localStorageData.data ?? {};
|
|
7934
|
+
const timeDiff = Date.now() - timestamp;
|
|
7935
|
+
if (timeDiff > memoizeFiltersLifespan) return {};
|
|
7936
|
+
return data2;
|
|
7937
|
+
});
|
|
7922
7938
|
const [openedFilterColumnIndex, setOpenedFilterColumnIndex] = (0, import_react25.useState)();
|
|
7923
7939
|
const [filterListSelectedItems, setFilterListSelectedItems] = (0, import_react25.useState)();
|
|
7924
7940
|
const openedFilterData = openedFilterColumnIndex ? filterData[openedFilterColumnIndex] : void 0;
|
|
@@ -8173,6 +8189,10 @@ var TableComponent = (0, import_react25.forwardRef)(function Table({
|
|
|
8173
8189
|
} else if (column.filter === "date" && filter.type === "date" || column.filter === "date-time" && filter.type === "date-time") {
|
|
8174
8190
|
const minDate = filter.min ? new Date(filter.min) : void 0;
|
|
8175
8191
|
const maxDate = filter.max ? new Date(filter.max) : void 0;
|
|
8192
|
+
if (column.filter === "date") {
|
|
8193
|
+
minDate?.setHours(0, 0, 0, 0);
|
|
8194
|
+
maxDate?.setHours(23, 59, 59, 999);
|
|
8195
|
+
}
|
|
8176
8196
|
const itemValue = column.getValue?.(item) ?? new Date(column.type === "text" && column.keyName ? String(item[column.keyName]) : "");
|
|
8177
8197
|
if (filter.min !== void 0 && minDate && itemValue < minDate) return false;
|
|
8178
8198
|
if (filter.max !== void 0 && maxDate && itemValue > maxDate) return false;
|
|
@@ -8256,6 +8276,17 @@ var TableComponent = (0, import_react25.forwardRef)(function Table({
|
|
|
8256
8276
|
(0, import_react25.useEffect)(() => {
|
|
8257
8277
|
onChangeFilter?.(filterData);
|
|
8258
8278
|
}, [onChangeFilter, filterData]);
|
|
8279
|
+
(0, import_react25.useEffect)(() => {
|
|
8280
|
+
if (!memoizeFilters) return;
|
|
8281
|
+
if (!name) return;
|
|
8282
|
+
localStorage.setItem(
|
|
8283
|
+
`react-better-html-table-filters-${name}`,
|
|
8284
|
+
JSON.stringify({
|
|
8285
|
+
timestamp: Date.now(),
|
|
8286
|
+
data: filterData
|
|
8287
|
+
})
|
|
8288
|
+
);
|
|
8289
|
+
}, [memoizeFilters, name, filterData]);
|
|
8259
8290
|
(0, import_react25.useEffect)(() => {
|
|
8260
8291
|
onChangeFilterDataValue?.(dataAfterFilter);
|
|
8261
8292
|
}, [onChangeFilterDataValue, dataAfterFilter]);
|