@monolith-forensics/monolith-ui 1.1.91 → 1.2.0

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.
Files changed (95) hide show
  1. package/dist/DateInput/DateInput.d.ts +2 -1
  2. package/dist/DateInput/DateInput.js +9 -6
  3. package/dist/DropDownMenu/DropDownMenu.js +41 -35
  4. package/dist/Input/Input.d.ts +1 -3
  5. package/dist/Input/Input.js +5 -4
  6. package/dist/Loader/Loader.js +0 -1
  7. package/dist/MonolithUIProvider/MonolithUIProvider.d.ts +131 -7
  8. package/dist/MonolithUIProvider/MonolithUIProvider.js +4 -4
  9. package/dist/MonolithUIProvider/index.d.ts +1 -1
  10. package/dist/MonolithUIProvider/index.js +1 -1
  11. package/dist/QueryFilter/DefaultOperators.d.ts +77 -0
  12. package/dist/QueryFilter/DefaultOperators.js +22 -0
  13. package/dist/QueryFilter/QueryFilter.d.ts +5 -0
  14. package/dist/QueryFilter/QueryFilter.js +224 -0
  15. package/dist/QueryFilter/index.d.ts +3 -0
  16. package/dist/QueryFilter/index.js +3 -0
  17. package/dist/QueryFilter/types.d.ts +51 -0
  18. package/dist/QueryFilter/useQueryFilter.d.ts +3 -0
  19. package/dist/QueryFilter/useQueryFilter.js +36 -0
  20. package/dist/{NewTable → Table}/ActionCell.js +4 -3
  21. package/dist/{NewTable → Table}/ColumnResizer.js +1 -1
  22. package/dist/Table/LoadingIndicator.d.ts +4 -0
  23. package/dist/Table/LoadingIndicator.js +76 -0
  24. package/dist/Table/RenderSkeleton.d.ts +6 -0
  25. package/dist/Table/RenderSkeleton.js +25 -0
  26. package/dist/{NewTable → Table}/StateStorage.d.ts +9 -0
  27. package/dist/{NewTable → Table}/StateStorage.js +26 -0
  28. package/dist/Table/Table.d.ts +2 -92
  29. package/dist/Table/Table.js +73 -679
  30. package/dist/{NewTable → Table}/TableComponents.js +27 -22
  31. package/dist/{NewTable → Table}/TableDefaults.d.ts +5 -0
  32. package/dist/{NewTable → Table}/TableDefaults.js +6 -1
  33. package/dist/{NewTable → Table}/TableHeader.js +9 -8
  34. package/dist/Table/TableMenu/InfoBadge.d.ts +10 -0
  35. package/dist/Table/TableMenu/InfoBadge.js +23 -0
  36. package/dist/Table/TableMenu/TableMenu.d.ts +2 -0
  37. package/dist/Table/TableMenu/TableMenu.js +108 -0
  38. package/dist/Table/TableMenu/index.d.ts +2 -0
  39. package/dist/Table/TableMenu/index.js +2 -0
  40. package/dist/{NewTable → Table}/TableProvider.d.ts +1 -1
  41. package/dist/{NewTable → Table}/TableProvider.js +199 -30
  42. package/dist/{NewTable → Table}/TableRow.js +1 -1
  43. package/dist/{NewTable → Table}/VirtualIzedRows.d.ts +0 -1
  44. package/dist/{NewTable → Table}/VirtualIzedRows.js +6 -6
  45. package/dist/{NewTable → Table}/enums.d.ts +4 -0
  46. package/dist/{NewTable → Table}/enums.js +5 -0
  47. package/dist/Table/index.d.ts +4 -3
  48. package/dist/Table/index.js +4 -2
  49. package/dist/{NewTable → Table}/types.d.ts +77 -1
  50. package/dist/Table/types.js +1 -0
  51. package/dist/{NewTable → Table}/useTable.js +1 -1
  52. package/dist/TextInput/TextInput.d.ts +2 -3
  53. package/dist/TextInput/TextInput.js +5 -4
  54. package/dist/hooks/index.d.ts +1 -0
  55. package/dist/hooks/index.js +1 -0
  56. package/dist/hooks/useDelayedBoolean.d.ts +2 -0
  57. package/dist/hooks/useDelayedBoolean.js +17 -0
  58. package/dist/index.d.ts +3 -5
  59. package/dist/index.js +3 -3
  60. package/dist/theme/getTheme.d.ts +3 -0
  61. package/dist/theme/getTheme.js +13 -0
  62. package/dist/theme/index.d.ts +3 -168
  63. package/dist/theme/index.js +3 -12
  64. package/dist/theme/variants.d.ts +7 -172
  65. package/dist/theme/variants.js +6 -5
  66. package/package.json +2 -2
  67. package/dist/NewTable/Table.d.ts +0 -3
  68. package/dist/NewTable/Table.js +0 -83
  69. package/dist/NewTable/index.d.ts +0 -4
  70. package/dist/NewTable/index.js +0 -4
  71. /package/dist/{NewTable → QueryFilter}/types.js +0 -0
  72. /package/dist/{NewTable → Table}/ActionButton.d.ts +0 -0
  73. /package/dist/{NewTable → Table}/ActionButton.js +0 -0
  74. /package/dist/{NewTable → Table}/ActionCell.d.ts +0 -0
  75. /package/dist/{NewTable → Table}/Column.d.ts +0 -0
  76. /package/dist/{NewTable → Table}/Column.js +0 -0
  77. /package/dist/{NewTable → Table}/ColumnResizer.d.ts +0 -0
  78. /package/dist/{NewTable → Table}/SelectionCell.d.ts +0 -0
  79. /package/dist/{NewTable → Table}/SelectionCell.js +0 -0
  80. /package/dist/{NewTable → Table}/StaticRows.d.ts +0 -0
  81. /package/dist/{NewTable → Table}/StaticRows.js +0 -0
  82. /package/dist/{NewTable → Table}/TableComponents.d.ts +0 -0
  83. /package/dist/{NewTable → Table}/TableHeader.d.ts +0 -0
  84. /package/dist/{NewTable → Table}/TableRow.d.ts +0 -0
  85. /package/dist/{NewTable → Table}/Utils/index.d.ts +0 -0
  86. /package/dist/{NewTable → Table}/Utils/index.js +0 -0
  87. /package/dist/{NewTable → Table}/Utils/resizeHandler.d.ts +0 -0
  88. /package/dist/{NewTable → Table}/Utils/resizeHandler.js +0 -0
  89. /package/dist/{NewTable → Table}/Utils/resolveColumnReorder.d.ts +0 -0
  90. /package/dist/{NewTable → Table}/Utils/resolveColumnReorder.js +0 -0
  91. /package/dist/{NewTable → Table}/Utils/resolveColumnResize.d.ts +0 -0
  92. /package/dist/{NewTable → Table}/Utils/resolveColumnResize.js +0 -0
  93. /package/dist/{NewTable → Table}/Utils/syncColumnState.d.ts +0 -0
  94. /package/dist/{NewTable → Table}/Utils/syncColumnState.js +0 -0
  95. /package/dist/{NewTable → Table}/useTable.d.ts +0 -0
@@ -0,0 +1,224 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { useTheme } from "styled-components";
3
+ import { XIcon } from "lucide-react";
4
+ import DropDownMenu from "../DropDownMenu";
5
+ import Button from "../Button";
6
+ import DefaultOperators from "./DefaultOperators";
7
+ import Input from "../Input";
8
+ import DateInput from "../DateInput";
9
+ import { useDebouncedCallback } from "use-debounce";
10
+ const StyledContainer = styled.div `
11
+ display: flex;
12
+ flex-direction: row;
13
+ gap: 1.5px;
14
+ `;
15
+ const RuleContainer = styled(StyledContainer) `
16
+ // first child
17
+ & > *:first-child {
18
+ border-radius: 5px 0 0 5px;
19
+ }
20
+
21
+ // last child
22
+ & > *:last-child {
23
+ border-radius: 0 5px 5px 0;
24
+ }
25
+
26
+ button.mfui-DropDownMenu {
27
+ border-color: transparent;
28
+ }
29
+
30
+ button.mfui-DropDownMenu:hover {
31
+ border-color: ${({ theme }) => theme.palette.primary.main};
32
+ }
33
+ `;
34
+ const FilterContainer = styled(StyledContainer) `
35
+ gap: 10px;
36
+ flex-wrap: wrap;
37
+ `;
38
+ const StyledButton = styled(Button) `
39
+ border-radius: 0;
40
+ font-size: 11px;
41
+ height: 20px;
42
+
43
+ padding: 3px 5px;
44
+
45
+ &:hover {
46
+ background-color: ${({ theme }) => theme.palette.action.hover};
47
+ border-color: ${({ theme }) => theme.palette.primary.main};
48
+ }
49
+ `;
50
+ const BaseLabel = styled.div `
51
+ user-select: none;
52
+
53
+ display: flex;
54
+ flex-direction: row;
55
+ align-items: center;
56
+
57
+ border: 1px solid transparent;
58
+
59
+ background-color: ${({ theme }) => theme.palette.background.secondary};
60
+
61
+ font-size: 11px;
62
+
63
+ height: 20px;
64
+
65
+ padding: 2px 4px;
66
+
67
+ overflow: hidden;
68
+ white-space: nowrap;
69
+ text-overflow: ellipsis;
70
+
71
+ cursor: pointer;
72
+
73
+ &:hover {
74
+ background-color: ${({ theme }) => theme.palette.action.hover};
75
+ }
76
+ `;
77
+ const FieldLabel = styled(BaseLabel) ``;
78
+ const ValueLabel = styled(BaseLabel) ``;
79
+ const StyledInput = styled(Input) `
80
+ height: 20px;
81
+ min-height: 20px;
82
+ width: 100px;
83
+ border-radius: 0;
84
+ font-size: 11px;
85
+ padding: 2px 4px;
86
+
87
+ border-color: transparent;
88
+ background-color: ${({ theme }) => theme.palette.background.secondary};
89
+
90
+ &:hover {
91
+ border-color: ${({ theme }) => theme.palette.primary.main};
92
+ }
93
+ `;
94
+ const StyledDateInput = styled(DateInput) `
95
+ height: 20px;
96
+ // width: 100px;
97
+ font-size: 11px;
98
+ border-radius: 0;
99
+ border-color: transparent;
100
+ background-color: ${({ theme }) => theme.palette.background.secondary};
101
+ `;
102
+ const ValueEditor = ({ rule, inputType, filterDef, onChange }) => {
103
+ var _a, _b, _c;
104
+ const theme = useTheme();
105
+ const handleInputChange = useDebouncedCallback((e) => {
106
+ const value = e.target.value;
107
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value }));
108
+ }, 250);
109
+ const handleMultiSelectChange = useDebouncedCallback((selected) => {
110
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: selected.map((s) => s.value) }));
111
+ }, 100);
112
+ const handleTimestampChange = useDebouncedCallback((timestamp) => {
113
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: timestamp }));
114
+ }, 100);
115
+ switch (inputType) {
116
+ case "text":
117
+ return (_jsx(StyledInput, { placeholder: "Enter Value...", defaultValue: rule.value, onChange: handleInputChange }));
118
+ case "number":
119
+ return (_jsx(StyledInput, { type: "number", placeholder: "Enter Value...", defaultValue: rule.value, onChange: handleInputChange }));
120
+ case "date":
121
+ return (_jsx(StyledDateInput, { arrow: true, enableCalendar: true, format: "YYYY-MM-DD", defaultValue: rule.value, onChange: handleTimestampChange }));
122
+ case "datetime":
123
+ return (_jsx(StyledDateInput, { arrow: true, enableCalendar: true, format: "YYYY-MM-DD HH:mm:ss", defaultValue: rule.value, onChange: handleTimestampChange }));
124
+ case "multiselect":
125
+ let display = Array.isArray(rule.value) && rule.value.length > 0
126
+ ? ((_b = (_a = filterDef === null || filterDef === void 0 ? void 0 : filterDef.selectOptions) === null || _a === void 0 ? void 0 : _a.filter((o) => rule.value.includes(o.value))) === null || _b === void 0 ? void 0 : _b.map((o) => o.label).join(", ")) || "Select Value"
127
+ : "Select Value";
128
+ if (Array.isArray(rule.value) && rule.value.length > 1) {
129
+ display = `${rule.value.length} ${(filterDef === null || filterDef === void 0 ? void 0 : filterDef.pluralLabel) || "Values"}`;
130
+ }
131
+ if (!(filterDef === null || filterDef === void 0 ? void 0 : filterDef.selectOptions)) {
132
+ return _jsx(FieldLabel, { children: "Loading..." });
133
+ }
134
+ return (_jsx(DropDownMenu, { data: (filterDef === null || filterDef === void 0 ? void 0 : filterDef.selectOptions) || [], variant: "outlined", multiselect: true, searchable: true, buttonProps: {
135
+ size: "xxs",
136
+ style: {
137
+ padding: "0px 4px",
138
+ height: 20,
139
+ borderRadius: 0,
140
+ backgroundColor: theme.palette.background.secondary,
141
+ fontSize: 11,
142
+ fontWeight: "normal",
143
+ color: !!rule.value &&
144
+ Array.isArray(rule.value) &&
145
+ rule.value.length > 0
146
+ ? theme.palette.text.primary
147
+ : theme.palette.text.secondary,
148
+ },
149
+ }, dropDownProps: {
150
+ style: { width: 175, maxWidth: 400 },
151
+ }, defaultValue: (_c = filterDef === null || filterDef === void 0 ? void 0 : filterDef.selectOptions) === null || _c === void 0 ? void 0 : _c.filter((o) => Array.isArray(rule.value) &&
152
+ !!rule.value.find((v) => v == o.value)), onChange: handleMultiSelectChange, children: display }));
153
+ default:
154
+ return (_jsx(StyledInput, { placeholder: "Enter Value...", onChange: handleInputChange }));
155
+ }
156
+ };
157
+ const ValueSelector = ({ rule, inputType, filterDef, onChange, }) => {
158
+ const isBetween = rule.operator.value.toLowerCase().includes("between");
159
+ const handleValueChange = (e) => {
160
+ const currentValue = rule.value;
161
+ if (isBetween) {
162
+ const newValue = [e.value];
163
+ if (Array.isArray(currentValue) && currentValue.length === 2) {
164
+ newValue.push(currentValue[1]);
165
+ }
166
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: newValue }));
167
+ return;
168
+ }
169
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: e.value }));
170
+ };
171
+ const handleSecondaryValueChange = (e) => {
172
+ const currentValue = rule.value;
173
+ if (isBetween) {
174
+ // current value already an array?
175
+ if (Array.isArray(currentValue)) {
176
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: [currentValue[0], e.value] }));
177
+ return;
178
+ }
179
+ const newValue = [currentValue, e.value];
180
+ onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: newValue }));
181
+ }
182
+ return;
183
+ };
184
+ return (_jsxs(_Fragment, { children: [_jsx(ValueEditor, { rule: rule, inputType: inputType, filterDef: filterDef, onChange: handleValueChange }), isBetween && (_jsxs(_Fragment, { children: [_jsx(FieldLabel, { children: "and" }), _jsx(ValueEditor, { rule: rule, inputType: inputType, onChange: handleSecondaryValueChange })] }))] }));
185
+ };
186
+ const CloseLabel = styled(StyledButton) `
187
+ padding: 2px;
188
+
189
+ color: ${({ theme }) => theme.palette.text.secondary};
190
+
191
+ &:hover {
192
+ border-color: ${({ theme }) => theme.palette.primary.main};
193
+ }
194
+ `;
195
+ const Rules = ({ rules = [], combinator, showCombinator, filterDefinitions, onDelete, onUpdate, }) => {
196
+ return (_jsxs(_Fragment, { children: [showCombinator === true && (_jsx(FieldLabel, { children: combinator.toUpperCase() })), rules.map((rule, index) => {
197
+ const filterDef = filterDefinitions.find((f) => f.dataField === rule.dataField);
198
+ const operatorOptions = (filterDef === null || filterDef === void 0 ? void 0 : filterDef.operators) || DefaultOperators;
199
+ const inputType = (filterDef === null || filterDef === void 0 ? void 0 : filterDef.inputType) || "text";
200
+ return (_jsxs(RuleContainer, { "data-rule-id": rule.id, children: [_jsx(FieldLabel, { children: rule.label }), _jsx(DropDownMenu, { variant: "outlined", data: operatorOptions,
201
+ // arrow={true}
202
+ buttonProps: {
203
+ title: "Select Operator",
204
+ variant: "contained",
205
+ size: "xxs",
206
+ style: {
207
+ fontWeight: "normal",
208
+ padding: "3px 5px",
209
+ height: 20,
210
+ borderRadius: 0,
211
+ },
212
+ }, onItemSelect: (e) => onUpdate(Object.assign(Object.assign({}, rule), { operator: e })), dropDownProps: {
213
+ style: { width: 175, maxWidth: 400 },
214
+ }, children: rule.operator.label }), _jsx(ValueSelector, { rule: rule, inputType: inputType, filterDef: filterDef, onChange: onUpdate }), _jsx(CloseLabel, { variant: "contained", size: "xxs", onClick: () => onDelete(rule), children: _jsx(XIcon, { size: 16 }) })] }, rule.id));
215
+ })] }));
216
+ };
217
+ const QueryFilter = ({ queryFilter, }) => {
218
+ var _a;
219
+ const { filter, filterDefinitions, showCombinator } = queryFilter;
220
+ if (((_a = filter === null || filter === void 0 ? void 0 : filter.rules) === null || _a === void 0 ? void 0 : _a.length) == 0)
221
+ return null;
222
+ return (_jsx(FilterContainer, { className: "mfui-QueryFilter", children: _jsx(Rules, { rules: filter.rules, combinator: filter.combinator, showCombinator: showCombinator, filterDefinitions: filterDefinitions, onDelete: (rule) => queryFilter.removeRule(rule.id), onUpdate: (rule) => queryFilter.updateRule(rule) }) }));
223
+ };
224
+ export default QueryFilter;
@@ -0,0 +1,3 @@
1
+ export { default as useQueryFilter } from "./useQueryFilter";
2
+ export { default as QueryFilter } from "./QueryFilter";
3
+ export * from "./types";
@@ -0,0 +1,3 @@
1
+ export { default as useQueryFilter } from "./useQueryFilter";
2
+ export { default as QueryFilter } from "./QueryFilter";
3
+ export * from "./types";
@@ -0,0 +1,51 @@
1
+ import { DropDownItem } from "../DropDownMenu";
2
+ export interface UseQueryFilterProps {
3
+ defaultFilter?: Query | null;
4
+ filterDefinitions: FilterDefinition[];
5
+ showCombinator?: boolean;
6
+ onFilterChange?: (filter: any) => void;
7
+ }
8
+ export type QueryFilter = {
9
+ filter: Query;
10
+ filterDefinitions: FilterDefinition[];
11
+ showCombinator?: boolean;
12
+ addRule: (rule: Rule) => void;
13
+ removeRule: (id: string) => void;
14
+ updateRule: (rule: Rule) => void;
15
+ };
16
+ export type UseQueryFilter = (args: UseQueryFilterProps) => QueryFilter;
17
+ export type Combinator = "and" | "or";
18
+ export type Operator = {
19
+ label: string;
20
+ value: string;
21
+ };
22
+ export type EditorType = "text" | "select" | "checkbox" | "radio" | "multiselect" | "date" | "time" | null;
23
+ export interface FilterDefinition {
24
+ dataField: string;
25
+ label: string;
26
+ pluralLabel?: string;
27
+ operators?: Operator[];
28
+ inputType?: HTMLInputElement["type"];
29
+ placeholder?: string;
30
+ selectOptions?: DropDownItem[];
31
+ editorType?: EditorType;
32
+ query?: {
33
+ queryKey: (string | {
34
+ [x: string]: any;
35
+ })[];
36
+ queryFn: (args: any) => Promise<any>;
37
+ };
38
+ }
39
+ export interface Rule {
40
+ id?: string;
41
+ dataField: string;
42
+ value: string | string[] | number | number[];
43
+ operator: Operator;
44
+ label: string;
45
+ }
46
+ export interface RuleGroup {
47
+ rules: Rule[];
48
+ combinator: Combinator;
49
+ }
50
+ export interface Query extends RuleGroup {
51
+ }
@@ -0,0 +1,3 @@
1
+ import { UseQueryFilter } from "./types";
2
+ declare const useQueryFilter: UseQueryFilter;
3
+ export default useQueryFilter;
@@ -0,0 +1,36 @@
1
+ import { useEffect, useState } from "react";
2
+ import shortUUID from "short-uuid";
3
+ const defaultFilter = {
4
+ combinator: "and",
5
+ rules: [],
6
+ };
7
+ const useQueryFilter = (args) => {
8
+ const [filter, setFilter] = useState((args === null || args === void 0 ? void 0 : args.defaultFilter) || defaultFilter);
9
+ const addRule = (rule) => {
10
+ if (!rule.id) {
11
+ rule.id = shortUUID.generate();
12
+ }
13
+ setFilter(Object.assign(Object.assign({}, filter), { rules: [...filter.rules, rule] }));
14
+ };
15
+ const removeRule = (id) => {
16
+ const rules = filter.rules.filter((r) => r.id !== id);
17
+ setFilter(Object.assign(Object.assign({}, filter), { rules }));
18
+ };
19
+ const updateRule = (rule) => {
20
+ const rules = filter.rules.map((r) => (r.id === rule.id ? rule : r));
21
+ setFilter(Object.assign(Object.assign({}, filter), { rules }));
22
+ };
23
+ useEffect(() => {
24
+ var _a;
25
+ (_a = args === null || args === void 0 ? void 0 : args.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(args, filter);
26
+ }, [filter]);
27
+ return {
28
+ filter,
29
+ filterDefinitions: args.filterDefinitions,
30
+ showCombinator: args.showCombinator,
31
+ addRule,
32
+ removeRule,
33
+ updateRule,
34
+ };
35
+ };
36
+ export default useQueryFilter;
@@ -1,9 +1,10 @@
1
1
  import styled from "styled-components";
2
2
  import { TD } from "./TableComponents";
3
+ import TableDefaults from "./TableDefaults";
3
4
  const ActionCell = styled(TD) `
4
- width: 40px;
5
- min-width: 40px;
6
- max-width: 40px;
5
+ width: ${TableDefaults.actionCell.width}px;
6
+ min-width: ${TableDefaults.actionCell.minWidth}px;
7
+ max-width: ${TableDefaults.actionCell.maxWidth}px;
7
8
 
8
9
  display: flex;
9
10
  justify-content: center;
@@ -3,7 +3,7 @@ import styled from "styled-components";
3
3
  import { resizeHandler } from "./Utils";
4
4
  const StyledContainer = styled.div `
5
5
  position: absolute;
6
- right: -2px;
6
+ right: 0px;
7
7
  top: 0;
8
8
  height: 100%;
9
9
  z-index: 1;
@@ -0,0 +1,4 @@
1
+ declare const LoadingIndicator: React.FC<{
2
+ visible?: boolean;
3
+ }>;
4
+ export default LoadingIndicator;
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ import Loader from "../Loader";
4
+ import { useEffect, useState } from "react";
5
+ const StyledContainer = styled.div `
6
+ position: absolute;
7
+ top: 20%;
8
+ left: 50%;
9
+ transform: translate(-50%, -20%);
10
+ z-index: 5;
11
+
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: 10px;
15
+
16
+ font-size: 14px;
17
+
18
+ height: 150px;
19
+ width: 150px;
20
+
21
+ display: flex;
22
+ justify-content: center;
23
+ align-items: center;
24
+
25
+ border-radius: 5px;
26
+ border: 1px solid ${(props) => props.theme.palette.divider};
27
+ background-color: ${(props) => props.theme.palette.background.default};
28
+
29
+ // add blur to background
30
+ // backdrop-filter: blur(5px);
31
+
32
+ // delay visibility
33
+ &.fade-in {
34
+ animation: fadeIn 0.4s forwards; /* Adjust duration as needed */
35
+ }
36
+
37
+ &.fade-out {
38
+ animation: fadeOut 0.4s forwards;
39
+ }
40
+
41
+ @keyframes fadeIn {
42
+ from {
43
+ opacity: 0;
44
+ }
45
+ to {
46
+ opacity: 1;
47
+ }
48
+ }
49
+
50
+ @keyframes fadeOut {
51
+ from {
52
+ opacity: 1;
53
+ }
54
+ to {
55
+ opacity: 0;
56
+ }
57
+ }
58
+ `;
59
+ const LoadingIndicator = ({ visible = false, }) => {
60
+ const [shouldRender, setShouldRender] = useState(visible);
61
+ useEffect(() => {
62
+ if (visible) {
63
+ setShouldRender(true); // Make sure component renders to fade in
64
+ }
65
+ }, [visible]);
66
+ const handleAnimationEnd = () => {
67
+ if (!visible) {
68
+ setShouldRender(false); // Remove component after fade-out animation
69
+ }
70
+ };
71
+ if (!shouldRender) {
72
+ return null;
73
+ }
74
+ return (_jsxs(StyledContainer, { className: visible ? "fade-in" : "fade-out", onAnimationEnd: handleAnimationEnd, children: [_jsx(Loader, { size: 24, style: { margin: "none" }, speed: 550 }), _jsx("div", { children: "Loading..." })] }));
75
+ };
76
+ export default LoadingIndicator;
@@ -0,0 +1,6 @@
1
+ interface RenderSkeletonProps {
2
+ rowHeight: number;
3
+ height: number;
4
+ }
5
+ declare const RenderSkeleton: React.FC<RenderSkeletonProps>;
6
+ export default RenderSkeleton;
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ import useTable from "./useTable";
4
+ const StyledContainer = styled.div `
5
+ position: absolute;
6
+ top: 0;
7
+ left: 0;
8
+
9
+ width: 100%;
10
+ height: 100%;
11
+ `;
12
+ const SkeletonRow = styled.div `
13
+ height: 20px;
14
+ width: 100%;
15
+
16
+ border-bottom: 1px solid ${({ theme }) => theme.palette.divider};
17
+ `;
18
+ const RenderSkeleton = ({ rowHeight, height, }) => {
19
+ const {} = useTable();
20
+ const totalRows = Math.floor(height / rowHeight);
21
+ return (_jsx(StyledContainer, { style: {
22
+ height,
23
+ }, children: [...Array(totalRows)].map((_, i) => (_jsx(SkeletonRow, { style: { height: rowHeight } }, i))) }));
24
+ };
25
+ export default RenderSkeleton;
@@ -1,3 +1,4 @@
1
+ import { Query } from "../QueryFilter";
1
2
  import { ColumnState, SelectionState, SortState, TableState } from "./types";
2
3
  type GetTableStateFn = (key: string) => TableState;
3
4
  type GetColumnStateFn = (key: string) => ColumnState[];
@@ -6,6 +7,10 @@ type GetSelectionStateFn = (key: string) => SelectionState;
6
7
  type SetSelectionStateFn = (key: string, value: any) => void;
7
8
  type GetSortStateStateFn = (key: string) => SortState | null | undefined;
8
9
  type SetSortStateFn = (key: string, value: SortState | undefined | null) => void;
10
+ type GetSearchStateFn = (key: string) => string;
11
+ type SetSearchStateFn = (key: string, value: string) => void;
12
+ type GetFilterStateFn = (key: string) => Query | undefined;
13
+ type SetFilterStateFn = (key: string, value?: Query | null) => void;
9
14
  declare const StateStorage: {
10
15
  getTableState: GetTableStateFn;
11
16
  getColumnState: GetColumnStateFn;
@@ -14,5 +19,9 @@ declare const StateStorage: {
14
19
  setSelectionState: SetSelectionStateFn;
15
20
  getSortState: GetSortStateStateFn;
16
21
  setSortState: SetSortStateFn;
22
+ getSearchState: GetSearchStateFn;
23
+ setSearchState: SetSearchStateFn;
24
+ getFilterState: GetFilterStateFn;
25
+ setFilterState: SetFilterStateFn;
17
26
  };
18
27
  export default StateStorage;
@@ -60,6 +60,28 @@ const setSortState = (key, value) => {
60
60
  const newState = Object.assign(Object.assign({}, previousState), { sortState: value });
61
61
  set(key, newState);
62
62
  };
63
+ const getSearchState = (key) => {
64
+ const data = getTableState(key);
65
+ return data.searchState || "";
66
+ };
67
+ const setSearchState = (key, value) => {
68
+ // get previous state
69
+ const previousState = getTableState(key);
70
+ // merge previous state with new state
71
+ const newState = Object.assign(Object.assign({}, previousState), { searchState: value });
72
+ set(key, newState);
73
+ };
74
+ const getFilterState = (key) => {
75
+ const data = getTableState(key);
76
+ return data.filterState;
77
+ };
78
+ const setFilterState = (key, value) => {
79
+ // get previous state
80
+ const previousState = getTableState(key);
81
+ // merge previous state with new state
82
+ const newState = Object.assign(Object.assign({}, previousState), { filterState: value });
83
+ set(key, newState);
84
+ };
63
85
  const StateStorage = {
64
86
  getTableState,
65
87
  getColumnState,
@@ -68,5 +90,9 @@ const StateStorage = {
68
90
  setSelectionState,
69
91
  getSortState,
70
92
  setSortState,
93
+ getSearchState,
94
+ setSearchState,
95
+ getFilterState,
96
+ setFilterState,
71
97
  };
72
98
  export default StateStorage;
@@ -1,93 +1,3 @@
1
- import "overlayscrollbars/overlayscrollbars.css";
2
- import { ReactElement } from "react";
3
- export interface ColumnProps {
4
- className?: string;
5
- key?: string | number;
6
- dataField: string;
7
- caption: string;
8
- columnId?: string | number;
9
- allowSorting?: boolean;
10
- allowReorder?: boolean;
11
- allowResize?: boolean;
12
- resizeEnabled?: boolean;
13
- width?: number;
14
- visible?: boolean;
15
- enabled?: boolean;
16
- sorting?: {
17
- active: boolean;
18
- direction: "asc" | "desc";
19
- };
20
- format?: {
21
- type: string;
22
- };
23
- props?: any;
24
- render?: (data: any, options: any) => React.ReactNode;
25
- }
26
- export declare const Column: React.FC<ColumnProps>;
27
- interface onResizeProps {
28
- columns: {
29
- dataField: string;
30
- width: number;
31
- }[];
32
- }
33
- type SelectionState = "all" | "none" | "someIncluded" | "someExcluded";
34
- interface TableInstanceProps {
35
- setTableInstance: (e: any) => void;
36
- toggleCompact: () => void;
37
- toggleStripes: () => void;
38
- isCompact: boolean;
39
- isStriped: boolean;
40
- getVirtualSelectionTotal: () => number;
41
- getSelectedRows: () => any[];
42
- getExcludedRows: () => any[];
43
- getSelectionState: () => SelectionState;
44
- clearSelections: () => void;
45
- onColumnResize: (e: onResizeProps) => void;
46
- }
47
- export declare const useTable: () => {
48
- setTableInstance: import("react").Dispatch<import("react").SetStateAction<TableInstanceProps | null>>;
49
- toggleCompact: () => void | undefined;
50
- toggleStripes: () => void | undefined;
51
- isCompact: boolean;
52
- isStriped: boolean;
53
- getVirtualSelectionTotal: () => number;
54
- getSelectedRows: () => any[];
55
- getExcludedRows: () => any[];
56
- getSelectionState: () => {};
57
- clearSelections: () => void | undefined;
58
- onColumnResize: (e: onResizeProps) => void | undefined;
59
- };
60
- interface TableProps {
61
- className?: string;
62
- children: ReactElement<ColumnProps> | ReactElement<ColumnProps>[];
63
- data: {
64
- [key: string]: any;
65
- }[];
66
- rowHeight?: number;
67
- headerHeight?: number;
68
- tableInstance?: TableInstanceProps;
69
- queryKey?: any;
70
- totalRecords?: number;
71
- compact?: boolean;
72
- focusedRow?: {
73
- [key: string]: any;
74
- };
75
- keyValue?: string;
76
- onScroll?: (e: any) => void;
77
- allowColumnResize?: boolean;
78
- allowColumnReorder?: boolean;
79
- showActionColumn?: boolean;
80
- showSelection?: boolean;
81
- selectAll?: boolean;
82
- reloadFn?: () => void;
83
- onColumnReorder?: (e: any) => void;
84
- onSelectionChanged?: (e: any) => void;
85
- onActionButtonClick?: (e: any) => void;
86
- onHeaderClick?: (e: any) => void;
87
- onColumnResize?: (e: any) => void;
88
- onRowUpdated?: (e: any) => void;
89
- onRowClick?: (e: any) => void;
90
- onRowDoubleClick?: (e: any) => void;
91
- }
92
- declare const Table: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<TableProps, never>> & string & Omit<({ className, children, data, rowHeight, headerHeight, tableInstance, queryKey, totalRecords, compact, focusedRow, keyValue, onScroll, allowColumnResize, allowColumnReorder, showActionColumn, showSelection, selectAll, reloadFn, onColumnReorder, onSelectionChanged, onActionButtonClick, onHeaderClick, onColumnResize, onRowUpdated, onRowClick, onRowDoubleClick, }: TableProps) => import("react/jsx-runtime").JSX.Element, keyof import("react").Component<any, {}, any>>;
1
+ import { TableProps } from "./types";
2
+ declare const Table: React.FC<TableProps>;
93
3
  export default Table;