mig-schema-table 3.0.54 → 3.0.56
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/SchemaTable/SchemaColumnFilterPopover/FilterFormComponent/index.d.ts +2 -1
- package/dist/SchemaTable/SchemaColumnFilterPopover/FilterFormComponent/index.js +25 -22
- package/dist/SchemaTable/SchemaColumnFilterPopover/index.d.ts +3 -1
- package/dist/SchemaTable/SchemaColumnFilterPopover/index.js +2 -2
- package/dist/SchemaTable/Th/index.d.ts +2 -1
- package/dist/SchemaTable/Th/index.js +5 -3
- package/dist/SchemaTable/index.d.ts +4 -2
- package/dist/SchemaTable/index.js +15 -9
- package/package.json +1 -1
|
@@ -7,8 +7,9 @@ export interface IFilterFormComponentProps {
|
|
|
7
7
|
onChange: (newValue?: TColumnFilterValue) => void;
|
|
8
8
|
onInputKeyDown: (e: React.KeyboardEvent) => void;
|
|
9
9
|
propConfig?: IColumnConfig<any>;
|
|
10
|
+
propIsRequired: boolean;
|
|
10
11
|
propName: string;
|
|
11
12
|
propSchema: oas31.SchemaObject;
|
|
12
13
|
}
|
|
13
|
-
declare const _default: React.MemoExoticComponent<({ columnFilterValue, onChange, onInputKeyDown, propConfig, propName, propSchema, }: IFilterFormComponentProps) => import("react/jsx-runtime").JSX.Element>;
|
|
14
|
+
declare const _default: React.MemoExoticComponent<({ columnFilterValue, onChange, onInputKeyDown, propConfig, propIsRequired, propName, propSchema, }: IFilterFormComponentProps) => import("react/jsx-runtime").JSX.Element>;
|
|
14
15
|
export default _default;
|
|
@@ -4,7 +4,7 @@ import { t } from "../../../inc/string";
|
|
|
4
4
|
import { DEFAULT_DATE_FORMAT, DEFAULT_DATE_TIME_FORMAT, } from "../../../inc/constant";
|
|
5
5
|
import DatePicker from "react-datepicker";
|
|
6
6
|
import nl from "date-fns/locale/nl";
|
|
7
|
-
const FilterFormComponent = ({ columnFilterValue, onChange, onInputKeyDown, propConfig, propName, propSchema, }) => {
|
|
7
|
+
const FilterFormComponent = ({ columnFilterValue, onChange, onInputKeyDown, propConfig, propIsRequired, propName, propSchema, }) => {
|
|
8
8
|
const { type, format, minimum, maximum } = propSchema;
|
|
9
9
|
const value = columnFilterValue;
|
|
10
10
|
switch (type) {
|
|
@@ -48,28 +48,31 @@ const FilterFormComponent = ({ columnFilterValue, onChange, onInputKeyDown, prop
|
|
|
48
48
|
const dateRangeValue = (columnFilterValue || {
|
|
49
49
|
from: undefined,
|
|
50
50
|
to: undefined,
|
|
51
|
+
filterEmpty: undefined,
|
|
51
52
|
});
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
53
|
+
return (_jsxs("div", { children: [propIsRequired ? null : (_jsxs("div", { children: [_jsxs("label", Object.assign({ className: "d-flex" }, { children: [_jsx("input", { type: "checkbox", className: "m-0 me-1", checked: !!dateRangeValue.filterEmpty, onChange: () => {
|
|
54
|
+
onChange(Object.assign(Object.assign({}, dateRangeValue), { filterEmpty: !dateRangeValue.filterEmpty }));
|
|
55
|
+
} }), "Hide empty values"] })), _jsx("hr", {})] })), _jsxs("div", Object.assign({ className: "input-group d-flex" }, { children: [_jsxs("div", Object.assign({ className: "d-flex flex-column m-1" }, { children: [_jsx("label", { children: "Start date-time" }), _jsx(DatePicker, { autoFocus: true, dateFormat: dateFormat, "data-prop-name": propName, locale: nl, selected: dateRangeValue.from, onChange: (date) => {
|
|
56
|
+
if (!date && !dateRangeValue.to) {
|
|
57
|
+
onChange(undefined);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (dateRangeValue.to && date && date > dateRangeValue.to) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
onChange(Object.assign(Object.assign({}, columnFilterValue), { from: date || undefined }));
|
|
64
|
+
}, placeholderText: dateFormat, isClearable: true, selectsStart: true, showTimeSelect: format === "date-time", timeIntervals: 15, shouldCloseOnSelect: format === "date" })] })), _jsxs("div", Object.assign({ className: "d-flex flex-column m-1" }, { children: [_jsx("label", { children: "End date-time" }), _jsx(DatePicker, { id: "filter-date", dateFormat: dateFormat, "data-prop-name": propName, locale: nl, selectsEnd: true, selected: dateRangeValue.to, onChange: (date) => {
|
|
65
|
+
if (!date && !dateRangeValue.from) {
|
|
66
|
+
onChange(undefined);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (dateRangeValue.from &&
|
|
70
|
+
date &&
|
|
71
|
+
date < dateRangeValue.from) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
onChange(Object.assign(Object.assign({}, columnFilterValue), { to: date || undefined }));
|
|
75
|
+
}, placeholderText: dateFormat, isClearable: true, startDate: dateRangeValue.from, endDate: dateRangeValue.to, showTimeSelect: format === "date-time", timeIntervals: 15, shouldCloseOnSelect: format === "date" })] }))] }))] }));
|
|
73
76
|
}
|
|
74
77
|
// falls through
|
|
75
78
|
default:
|
|
@@ -6,13 +6,15 @@ export interface ISchemaColumnFilterPopoverConfig {
|
|
|
6
6
|
referenceElement: HTMLElement;
|
|
7
7
|
propName: string;
|
|
8
8
|
propConfig?: IColumnConfig<any>;
|
|
9
|
+
propIsRequired: boolean;
|
|
9
10
|
}
|
|
10
11
|
type TSchemaColumnFilterPopoverProps = ISchemaColumnFilterPopoverConfig & {
|
|
11
12
|
onChange: (newValue?: TColumnFilterValue) => void;
|
|
12
13
|
onInputKeyDown: (e: React.KeyboardEvent) => void;
|
|
14
|
+
propIsRequired: boolean;
|
|
13
15
|
propSchema: oas31.SchemaObject;
|
|
14
16
|
value: TColumnFilterValue;
|
|
15
17
|
onClose: () => void;
|
|
16
18
|
};
|
|
17
|
-
declare const _default: React.MemoExoticComponent<({ onChange, onClose, onInputKeyDown, propName, propSchema, referenceElement, value, propConfig, }: TSchemaColumnFilterPopoverProps) => import("react/jsx-runtime").JSX.Element>;
|
|
19
|
+
declare const _default: React.MemoExoticComponent<({ onChange, onClose, onInputKeyDown, propIsRequired, propName, propSchema, referenceElement, value, propConfig, }: TSchemaColumnFilterPopoverProps) => import("react/jsx-runtime").JSX.Element>;
|
|
18
20
|
export default _default;
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
import FilterFormComponent from "./FilterFormComponent";
|
|
4
4
|
import { usePopper } from "react-popper";
|
|
5
|
-
const SchemaColumnFilterPopover = ({ onChange, onClose, onInputKeyDown, propName, propSchema, referenceElement, value, propConfig, }) => {
|
|
5
|
+
const SchemaColumnFilterPopover = ({ onChange, onClose, onInputKeyDown, propIsRequired, propName, propSchema, referenceElement, value, propConfig, }) => {
|
|
6
6
|
const [popperElement, setPopperElement] = React.useState(null);
|
|
7
7
|
const [arrowElement, setArrowElement] = React.useState(null);
|
|
8
8
|
const { styles, attributes } = usePopper(referenceElement, popperElement, {
|
|
@@ -33,6 +33,6 @@ const SchemaColumnFilterPopover = ({ onChange, onClose, onInputKeyDown, propName
|
|
|
33
33
|
classNames.push(`bs-popover-${attributes.popper["data-popper-placement"]}`);
|
|
34
34
|
}
|
|
35
35
|
const FilterForm = (propConfig === null || propConfig === void 0 ? void 0 : propConfig.FilterForm) || FilterFormComponent;
|
|
36
|
-
return (_jsxs("div", Object.assign({ className: classNames.join(" "), role: "tooltip", ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [_jsx("div", { className: "popover-arrow", ref: setArrowElement, style: styles.arrow }), _jsx("div", Object.assign({ className: "popover-body" }, { children: _jsx(FilterForm, { onChange: onChange, onInputKeyDown: onInputKeyDown,
|
|
36
|
+
return (_jsxs("div", Object.assign({ className: classNames.join(" "), role: "tooltip", ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [_jsx("div", { className: "popover-arrow", ref: setArrowElement, style: styles.arrow }), _jsx("div", Object.assign({ className: "popover-body" }, { children: _jsx(FilterForm, { columnFilterValue: value, onChange: onChange, onInputKeyDown: onInputKeyDown, propConfig: propConfig, propIsRequired: propIsRequired, propName: propName, propSchema: propSchema }) }))] })));
|
|
37
37
|
};
|
|
38
38
|
export default React.memo(SchemaColumnFilterPopover);
|
|
@@ -15,6 +15,7 @@ interface IThProps {
|
|
|
15
15
|
numberOfSelectedRows?: number;
|
|
16
16
|
onSelectAllIndexesHandler?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
17
17
|
propConfig?: IColumnConfig<any>;
|
|
18
|
+
propIsRequired: boolean;
|
|
18
19
|
propName: string;
|
|
19
20
|
schema?: oas31.SchemaObject;
|
|
20
21
|
setPopoverConfig?: Dispatch<SetStateAction<ISchemaColumnFilterPopoverConfig | undefined>>;
|
|
@@ -23,5 +24,5 @@ interface IThProps {
|
|
|
23
24
|
sortAsc?: boolean;
|
|
24
25
|
style: CSSProperties;
|
|
25
26
|
}
|
|
26
|
-
declare const _default: ({
|
|
27
|
+
declare const _default: ({ columnFilterStatus, disableColumnFilter, isAllChecked, isSortable, numberOfSelectedRows, onSelectAllIndexesHandler, propConfig, propIsRequired, propName, schema, setPopoverConfig, setSortAsc, setSortColumn, sortAsc, style, }: IThProps) => import("react/jsx-runtime").JSX.Element;
|
|
27
28
|
export default _default;
|
|
@@ -9,7 +9,7 @@ export var EColumnFilterStatus;
|
|
|
9
9
|
EColumnFilterStatus["AVAILABLE"] = "AVAILABLE";
|
|
10
10
|
EColumnFilterStatus["ACTIVE"] = "ACTIVE";
|
|
11
11
|
})(EColumnFilterStatus || (EColumnFilterStatus = {}));
|
|
12
|
-
const Th = ({
|
|
12
|
+
const Th = ({ columnFilterStatus, disableColumnFilter, isAllChecked, isSortable, numberOfSelectedRows, onSelectAllIndexesHandler, propConfig, propIsRequired, propName, schema, setPopoverConfig, setSortAsc, setSortColumn, sortAsc, style, }) => {
|
|
13
13
|
const thDivProps = {
|
|
14
14
|
style,
|
|
15
15
|
className: `schema-table__th schema-table__th--column-filter-status-${columnFilterStatus} ${isSortable ? "schema-table__th--sortable" : "schema-table__th--unsortable"}`,
|
|
@@ -43,15 +43,17 @@ const Th = ({ isAllChecked, columnFilterStatus, disableColumnFilter, isSortable,
|
|
|
43
43
|
return undefined;
|
|
44
44
|
}
|
|
45
45
|
return {
|
|
46
|
-
referenceElement,
|
|
47
|
-
propName,
|
|
48
46
|
propConfig,
|
|
47
|
+
propIsRequired,
|
|
48
|
+
propName,
|
|
49
|
+
referenceElement,
|
|
49
50
|
};
|
|
50
51
|
});
|
|
51
52
|
}, [
|
|
52
53
|
columnFilterStatus,
|
|
53
54
|
disableColumnFilter,
|
|
54
55
|
propConfig,
|
|
56
|
+
propIsRequired,
|
|
55
57
|
propName,
|
|
56
58
|
setPopoverConfig,
|
|
57
59
|
]);
|
|
@@ -40,10 +40,12 @@ export interface ISchemaTableProps<T> {
|
|
|
40
40
|
style?: React.CSSProperties;
|
|
41
41
|
width: number;
|
|
42
42
|
}
|
|
43
|
-
export
|
|
43
|
+
export interface IDateColumnFilterValue {
|
|
44
44
|
from?: Date;
|
|
45
45
|
to?: Date;
|
|
46
|
-
|
|
46
|
+
filterEmpty?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export type TColumnFilterValue = string | number | boolean | IDateColumnFilterValue;
|
|
47
49
|
declare function SchemaTable<T>({ Heading, checkedIndexes, disabledCheckedIndexes, config, customElement, data, defaultColumnFilters, defaultSortAsc, defaultSortColumn, getRowClassName, getRowSelected, maxHeight, isSearchable, isColumnFilterable, isSortable, onCheckedIndexesChange, onRowClick, rowHeight, schema, searchPlaceholder, style, width, onRowDoubleClick, enableAutoFocus, }: ISchemaTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
48
50
|
declare const _default: typeof SchemaTable;
|
|
49
51
|
export default _default;
|
|
@@ -43,7 +43,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
43
43
|
sortColumn,
|
|
44
44
|
sourceData,
|
|
45
45
|
]);
|
|
46
|
-
const { properties = {} } = schema;
|
|
46
|
+
const { properties = {}, required = [] } = schema;
|
|
47
47
|
const columnNames = React.useMemo(() => {
|
|
48
48
|
const columns = Object.keys(properties);
|
|
49
49
|
if (onCheckedIndexesChange) {
|
|
@@ -208,7 +208,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
208
208
|
const propSchema = properties[propName];
|
|
209
209
|
// @ts-ignore
|
|
210
210
|
const rawValue = sourceData[item._index][propName];
|
|
211
|
-
switch (propSchema.type) {
|
|
211
|
+
switch (propSchema === null || propSchema === void 0 ? void 0 : propSchema.type) {
|
|
212
212
|
case "boolean":
|
|
213
213
|
case "integer":
|
|
214
214
|
result = rawValue === columnFilterValue;
|
|
@@ -218,11 +218,16 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
218
218
|
if (typeof columnFilterValue === "object" &&
|
|
219
219
|
(propSchema.format === "date" ||
|
|
220
220
|
propSchema.format === "date-time")) {
|
|
221
|
-
const { from, to } = columnFilterValue;
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
const { from, to, filterEmpty } = columnFilterValue;
|
|
222
|
+
if (!rawValue) {
|
|
223
|
+
result = !filterEmpty;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
const rawDate = rawValue ? new Date(rawValue) : undefined;
|
|
227
|
+
if ((from && (!rawDate || rawDate < from)) ||
|
|
228
|
+
(to && (!rawDate || rawDate > to))) {
|
|
229
|
+
result = false;
|
|
230
|
+
}
|
|
226
231
|
}
|
|
227
232
|
return;
|
|
228
233
|
}
|
|
@@ -358,7 +363,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
358
363
|
const schema = (propName === SELECT_ALL_COLUMN_NAME
|
|
359
364
|
? { type: "boolean" }
|
|
360
365
|
: properties[propName]);
|
|
361
|
-
return (_jsx(Th, { isAllChecked: isAllRowsChecked, columnFilterStatus: columnFilterStatus, disableColumnFilter: disableColumnFilter, isSortable: !!isSortable, numberOfSelectedRows: checkedIndexes === null || checkedIndexes === void 0 ? void 0 : checkedIndexes.length, onSelectAllIndexesHandler: onSelectAllIndexesHandler, propConfig: propConfig, propName: propName, schema: schema, setPopoverConfig: setPopoverConfig, setSortAsc: onSetSortAsc, setSortColumn: onSetSortColumn, sortAsc: sortColumn === propName ? sortAsc : undefined, style: style }));
|
|
366
|
+
return (_jsx(Th, { isAllChecked: isAllRowsChecked, columnFilterStatus: columnFilterStatus, disableColumnFilter: disableColumnFilter, isSortable: !!isSortable, numberOfSelectedRows: checkedIndexes === null || checkedIndexes === void 0 ? void 0 : checkedIndexes.length, onSelectAllIndexesHandler: onSelectAllIndexesHandler, propConfig: propConfig, propIsRequired: required.includes(propName), propName: propName, schema: schema, setPopoverConfig: setPopoverConfig, setSortAsc: onSetSortAsc, setSortColumn: onSetSortColumn, sortAsc: sortColumn === propName ? sortAsc : undefined, style: style }));
|
|
362
367
|
}, [
|
|
363
368
|
checkedIndexes === null || checkedIndexes === void 0 ? void 0 : checkedIndexes.length,
|
|
364
369
|
columnFilterMap,
|
|
@@ -372,6 +377,7 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
372
377
|
onSetSortAsc,
|
|
373
378
|
onSetSortColumn,
|
|
374
379
|
properties,
|
|
380
|
+
required,
|
|
375
381
|
sortAsc,
|
|
376
382
|
sortColumn,
|
|
377
383
|
]);
|
|
@@ -455,6 +461,6 @@ function SchemaTable({ Heading = VariableSizeList, checkedIndexes, disabledCheck
|
|
|
455
461
|
backgroundColor: "#CCC",
|
|
456
462
|
alignItems: "center",
|
|
457
463
|
justifyContent: "center",
|
|
458
|
-
} }, { children: isDirty ? (_jsx("button", Object.assign({ onClick: refreshData, className: "btn border" }, { children: "Refresh data" }))) : (_jsx("div", { children: "\u231B Loading..." })) }))), popoverConfig ? (_jsx(SchemaColumnFilterPopover, { referenceElement: popoverConfig.referenceElement, onClose: onPopoverClose, onChange: onSchemaColumnFilterChange, onInputKeyDown: onInputKeyDown, propName: popoverConfig.propName, propSchema: schema.properties[popoverConfig.propName], value: columnFilterMap[popoverConfig.propName], propConfig: popoverConfig.propConfig })) : null] })));
|
|
464
|
+
} }, { children: isDirty ? (_jsx("button", Object.assign({ onClick: refreshData, className: "btn border" }, { children: "Refresh data" }))) : (_jsx("div", { children: "\u231B Loading..." })) }))), popoverConfig ? (_jsx(SchemaColumnFilterPopover, { referenceElement: popoverConfig.referenceElement, onClose: onPopoverClose, onChange: onSchemaColumnFilterChange, onInputKeyDown: onInputKeyDown, propIsRequired: popoverConfig.propIsRequired, propName: popoverConfig.propName, propSchema: schema.properties[popoverConfig.propName], value: columnFilterMap[popoverConfig.propName], propConfig: popoverConfig.propConfig })) : null] })));
|
|
459
465
|
}
|
|
460
466
|
export default React.memo(SchemaTable);
|