pixelize-design-library 2.2.112 → 2.2.113
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.
|
@@ -194,25 +194,26 @@ var FilterSidebar = function (_a) {
|
|
|
194
194
|
react_1.default.createElement(react_2.Text, { fontSize: "12px", color: theme.colors.gray[800], whiteSpace: "nowrap" },
|
|
195
195
|
currentMin,
|
|
196
196
|
range.unit ? " ".concat(range.unit) : "")))),
|
|
197
|
-
react_1.default.createElement(react_2.
|
|
198
|
-
react_1.default.createElement(react_2.
|
|
199
|
-
react_1.default.createElement(react_2.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
react_1.default.createElement(
|
|
197
|
+
react_1.default.createElement(react_2.Portal, null,
|
|
198
|
+
react_1.default.createElement(react_2.PopoverContent, { width: "6rem", p: 0, zIndex: 1600 },
|
|
199
|
+
react_1.default.createElement(react_2.PopoverBody, { p: 0 },
|
|
200
|
+
react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 0, maxH: "12rem", overflowY: "auto" }, values.map(function (v) { return (react_1.default.createElement(react_2.Flex, { key: "min-".concat(v), px: 2, py: 1, align: "center", justify: "space-between", cursor: "pointer", bg: currentMin === v ? theme.colors.red[50] : theme.colors.white, borderLeftWidth: currentMin === v ? 3 : 0, borderLeftStyle: "solid", borderLeftColor: currentMin === v ? theme.colors.red[400] : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: function () {
|
|
201
|
+
var min = v;
|
|
202
|
+
var max = currentMax;
|
|
203
|
+
var nextVal = [Math.min(min, max), Math.max(min, max)];
|
|
204
|
+
setInternalSelected(function (prev) {
|
|
205
|
+
var _a;
|
|
206
|
+
var next = __assign(__assign({}, prev), (_a = {}, _a[section.id] = nextVal, _a));
|
|
207
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(next);
|
|
208
|
+
return next;
|
|
209
|
+
});
|
|
210
|
+
setOpenPrice({});
|
|
211
|
+
} },
|
|
212
|
+
react_1.default.createElement(react_2.Text, { fontSize: "sm", color: theme.colors.gray[800] },
|
|
213
|
+
v,
|
|
214
|
+
range.unit ? " ".concat(range.unit) : ""),
|
|
215
|
+
currentMin === v ? (react_1.default.createElement(react_2.Box, { bg: theme.colors.red[100], borderRadius: "full", p: 1, display: "flex", alignItems: "center" },
|
|
216
|
+
react_1.default.createElement(lucide_react_1.Check, { size: 9, color: theme.colors.red[600] }))) : null)); })))))),
|
|
216
217
|
react_1.default.createElement(react_2.Popover, { isOpen: openPrice.id === section.id && openPrice.target === "max", onClose: function () { return setOpenPrice({}); }, placement: "bottom-start", closeOnBlur: true },
|
|
217
218
|
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
218
219
|
react_1.default.createElement(react_2.Flex, { borderWidth: "0", borderRadius: "md", alignItems: "center", px: 3, py: 2, bg: theme.colors.gray[50], borderColor: theme.colors.gray[300], cursor: "pointer", onClick: function () { return setOpenPrice({ id: section.id, target: "max" }); }, gap: 2, overflow: "hidden" },
|
|
@@ -41,18 +41,19 @@ var CompactSelect = function (_a) {
|
|
|
41
41
|
react_1.default.createElement(react_2.Box, { as: "button", type: "button", w: "100%", h: typeof height === "number" ? "".concat(height, "px") : height, display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, px: 2, border: "0.063rem solid", borderColor: "gray.300", bg: "white", borderRadius: "0.25rem", onClick: function () { return setIsOpen(function (prev) { return !prev; }); } },
|
|
42
42
|
react_1.default.createElement(react_2.Text, { fontSize: size === "xs" ? "0.75rem" : "0.875rem", color: "gray.800", noOfLines: 1, textAlign: "left" }, (value === null || value === void 0 ? void 0 : value.label) || placeholder),
|
|
43
43
|
isOpen ? react_1.default.createElement(lucide_react_1.ChevronUp, { size: 12 }) : react_1.default.createElement(lucide_react_1.ChevronDown, { size: 12 }))),
|
|
44
|
-
react_1.default.createElement(react_2.
|
|
45
|
-
react_1.default.createElement(react_2.
|
|
46
|
-
react_1.default.createElement(react_2.
|
|
47
|
-
react_1.default.createElement(react_2.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
react_1.default.createElement(react_2.
|
|
44
|
+
react_1.default.createElement(react_2.Portal, null,
|
|
45
|
+
react_1.default.createElement(react_2.PopoverContent, { w: "100%", maxW: "14rem", p: 0, zIndex: 1600 },
|
|
46
|
+
react_1.default.createElement(react_2.PopoverBody, { p: 2 },
|
|
47
|
+
react_1.default.createElement(react_2.VStack, { spacing: 2, align: "stretch" },
|
|
48
|
+
react_1.default.createElement(react_2.Input, { size: size, placeholder: "Search", value: query, onChange: function (e) { return setQuery(e.target.value); }, sx: { fontSize: "0.75rem", height: "22px" } }),
|
|
49
|
+
react_1.default.createElement(react_2.Box, { maxH: "12rem", overflowY: "auto", borderTop: "1px solid", borderColor: "gray.100" },
|
|
50
|
+
filtered.map(function (opt) { return (react_1.default.createElement(react_2.Box, { key: opt.id, px: 2, py: 1, cursor: "pointer", _hover: { bg: "gray.50" }, bg: (value === null || value === void 0 ? void 0 : value.id) === opt.id ? "gray.100" : "transparent", onClick: function () {
|
|
51
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(opt);
|
|
52
|
+
setIsOpen(false);
|
|
53
|
+
setQuery("");
|
|
54
|
+
} },
|
|
55
|
+
react_1.default.createElement(react_2.Text, { fontSize: "0.75rem" }, opt.label))); }),
|
|
56
|
+
filtered.length === 0 && (react_1.default.createElement(react_2.Box, { px: 2, py: 2 },
|
|
57
|
+
react_1.default.createElement(react_2.Text, { fontSize: "0.75rem", color: "gray.500" }, "No results"))))))))));
|
|
57
58
|
};
|
|
58
59
|
exports.default = CompactSelect;
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
export type FilterItem = {
|
|
3
3
|
id: string;
|
|
4
4
|
label: string;
|
|
5
|
-
type?: "text" | "select";
|
|
5
|
+
type?: "text" | "select" | "user";
|
|
6
6
|
option?: {
|
|
7
7
|
id: string;
|
|
8
8
|
label: string;
|
|
@@ -19,7 +19,7 @@ export type SelectedFilterItem = {
|
|
|
19
19
|
id: string;
|
|
20
20
|
condition?: string;
|
|
21
21
|
value?: any;
|
|
22
|
-
type?: "text" | "select";
|
|
22
|
+
type?: "text" | "select" | "user";
|
|
23
23
|
};
|
|
24
24
|
export type LeftFilterPaneProps = {
|
|
25
25
|
title?: string;
|
|
@@ -57,13 +57,16 @@ var TextOperationControls_1 = require("./TextOperationControls");
|
|
|
57
57
|
var SelectOperationControls_1 = require("./SelectOperationControls");
|
|
58
58
|
var CompactSelect_1 = __importDefault(require("./CompactSelect"));
|
|
59
59
|
var LeftFilterPane = function (_a) {
|
|
60
|
-
var _b, _c
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
60
|
+
var _b, _c;
|
|
61
|
+
var _d = _a.title, title = _d === void 0 ? "Filter" : _d, _e = _a.height, height = _e === void 0 ? 300 : _e, sections = _a.sections, selectedProp = _a.selected, onApply = _a.onApply, onClear = _a.onClear, theme = _a.theme;
|
|
62
|
+
var _f = (0, react_1.useState)(!!(selectedProp === null || selectedProp === void 0 ? void 0 : selectedProp.search)), isSearching = _f[0], setIsSearching = _f[1];
|
|
63
|
+
var _g = (0, react_1.useState)({}), localSelected = _g[0], setLocalSelected = _g[1];
|
|
64
64
|
var searchRef = (0, react_1.useRef)(null);
|
|
65
65
|
(0, react_1.useEffect)(function () {
|
|
66
66
|
setLocalSelected(selectedProp || {});
|
|
67
|
+
if (selectedProp === null || selectedProp === void 0 ? void 0 : selectedProp.search) {
|
|
68
|
+
setIsSearching(true);
|
|
69
|
+
}
|
|
67
70
|
}, [selectedProp]);
|
|
68
71
|
var selected = localSelected;
|
|
69
72
|
var search = selected.search || "";
|
|
@@ -101,7 +104,7 @@ var LeftFilterPane = function (_a) {
|
|
|
101
104
|
if (checked) {
|
|
102
105
|
if (sectionItems.some(function (i) { return i.id === itemId; }))
|
|
103
106
|
return prev;
|
|
104
|
-
return __assign(__assign({}, prev), (_a = {}, _a[sectionId] = __spreadArray(__spreadArray([], sectionItems, true), [{ id: itemId, type: type, condition: type === "
|
|
107
|
+
return __assign(__assign({}, prev), (_a = {}, _a[sectionId] = __spreadArray(__spreadArray([], sectionItems, true), [{ id: itemId, type: type, condition: (type === "select" || type === "user") ? "is" : "contains", value: "" }], false), _a));
|
|
105
108
|
}
|
|
106
109
|
else {
|
|
107
110
|
return __assign(__assign({}, prev), (_b = {}, _b[sectionId] = sectionItems.filter(function (i) { return i.id !== itemId; }), _b));
|
|
@@ -141,7 +144,9 @@ var LeftFilterPane = function (_a) {
|
|
|
141
144
|
if (!search.trim())
|
|
142
145
|
return sections;
|
|
143
146
|
var q = search.toLowerCase();
|
|
144
|
-
return sections
|
|
147
|
+
return sections
|
|
148
|
+
.map(function (sec) { return (__assign(__assign({}, sec), { items: (sec.items || []).filter(function (i) { return i.label.toLowerCase().includes(q); }) })); })
|
|
149
|
+
.filter(function (sec) { return (sec.items || []).length > 0; });
|
|
145
150
|
}, [search, sections]);
|
|
146
151
|
var handleApply = function () {
|
|
147
152
|
onApply === null || onApply === void 0 ? void 0 : onApply(selected);
|
|
@@ -165,7 +170,9 @@ var LeftFilterPane = function (_a) {
|
|
|
165
170
|
setSearch("");
|
|
166
171
|
setIsSearching(false);
|
|
167
172
|
} }))))))),
|
|
168
|
-
react_1.default.createElement(react_2.Box, { flex: "1", overflowY: "auto" }, filteredSections.length > 1 ? (react_1.default.createElement(react_2.Accordion, { allowMultiple: true, defaultIndex:
|
|
173
|
+
react_1.default.createElement(react_2.Box, { flex: "1", overflowY: "auto" }, filteredSections.length > 0 ? (filteredSections.length > 1 ? (react_1.default.createElement(react_2.Accordion, { allowMultiple: true, defaultIndex: filteredSections
|
|
174
|
+
.map(function (s, i) { return (s.initiallyExpanded ? i : -1); })
|
|
175
|
+
.filter(function (i) { return i >= 0; }) }, filteredSections.map(function (sec) {
|
|
169
176
|
var _a;
|
|
170
177
|
return (react_1.default.createElement(react_2.AccordionItem, { key: sec.id, border: "none" },
|
|
171
178
|
react_1.default.createElement("h2", null,
|
|
@@ -198,7 +205,7 @@ var LeftFilterPane = function (_a) {
|
|
|
198
205
|
if ((activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "text") {
|
|
199
206
|
return (react_1.default.createElement(TextOperationControls_1.TextOperationControls, { operator: activeItem.condition || "contains", value: activeItem.value || "", onOperatorChange: function (op) { return setTextOperator(sec.id, activeItem.id, op); }, onValueChange: function (val) { return setTextValue(sec.id, activeItem.id, val); } }));
|
|
200
207
|
}
|
|
201
|
-
if ((activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "select") {
|
|
208
|
+
if ((activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "select" || (activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "user") {
|
|
202
209
|
var def = (sec.items || []).find(function (i) { return i.id === activeItem.id; });
|
|
203
210
|
var opts = (def === null || def === void 0 ? void 0 : def.selectOption) || (def === null || def === void 0 ? void 0 : def.option) || [];
|
|
204
211
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -227,7 +234,7 @@ var LeftFilterPane = function (_a) {
|
|
|
227
234
|
},
|
|
228
235
|
} }),
|
|
229
236
|
checked && it.type === "text" && (react_1.default.createElement(TextOperationControls_1.TextOperationControls, { operator: activeItem.condition || "contains", value: activeItem.value || "", onOperatorChange: function (op) { return setTextOperator(sec.id, it.id, op); }, onValueChange: function (val) { return setTextValue(sec.id, it.id, val); } })),
|
|
230
|
-
|
|
237
|
+
(it.type === "select" || it.type === "user") && checked && (react_1.default.createElement(react_2.Box, { mt: 2 },
|
|
231
238
|
react_1.default.createElement(SelectOperationControls_1.SelectOperationControls, { operator: activeItem.condition || "is", onOperatorChange: function (op) { return setTextOperator(sec.id, it.id, op); }, size: "xs", ml: "1.25rem", mt: 2 }),
|
|
232
239
|
react_1.default.createElement(react_2.Box, { mt: 2, ml: "1.25rem" },
|
|
233
240
|
react_1.default.createElement(CompactSelect_1.default, { placeholder: it.label, size: "xs", height: "22px", options: it.selectOption || it.option || [], value: activeItem.value, onSelect: function (option) {
|
|
@@ -264,29 +271,50 @@ var LeftFilterPane = function (_a) {
|
|
|
264
271
|
if ((activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "text") {
|
|
265
272
|
return (react_1.default.createElement(TextOperationControls_1.TextOperationControls, { operator: activeItem.condition || "contains", value: activeItem.value || "", onOperatorChange: function (op) { return setTextOperator(sec.id, activeItem.id, op); }, onValueChange: function (val) { return setTextValue(sec.id, activeItem.id, val); } }));
|
|
266
273
|
}
|
|
274
|
+
if ((activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "select" || (activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "user") {
|
|
275
|
+
var def = (sec.items || []).find(function (i) { return i.id === activeItem.id; });
|
|
276
|
+
var opts = (def === null || def === void 0 ? void 0 : def.selectOption) || (def === null || def === void 0 ? void 0 : def.option) || [];
|
|
277
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
278
|
+
react_1.default.createElement(SelectOperationControls_1.SelectOperationControls, { operator: activeItem.condition || "is", onOperatorChange: function (op) { return setTextOperator(sec.id, activeItem.id, op); }, size: "xs", ml: "1.25rem", mt: 2 }),
|
|
279
|
+
react_1.default.createElement(react_2.Box, { mt: 2, ml: "1.25rem" },
|
|
280
|
+
react_1.default.createElement(CompactSelect_1.default, { placeholder: def === null || def === void 0 ? void 0 : def.label, size: "xs", height: "22px", options: opts, value: activeItem.value, onSelect: function (option) {
|
|
281
|
+
setTextValue(sec.id, activeItem.id, option);
|
|
282
|
+
} }))));
|
|
283
|
+
}
|
|
267
284
|
return null;
|
|
268
285
|
})())) : (react_1.default.createElement(react_2.VStack, { spacing: 2, align: "stretch" }, (sec.items || []).map(function (it) {
|
|
269
286
|
var sectionItems = selected[sec.id] || [];
|
|
270
287
|
var activeItem = sectionItems.find(function (i) { return i.id === it.id; });
|
|
271
288
|
var checked = !!activeItem;
|
|
272
|
-
return (react_1.default.createElement(
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
289
|
+
return (react_1.default.createElement(react_1.default.Fragment, { key: it.id },
|
|
290
|
+
react_1.default.createElement(Checkbox_1.default, { label: it.label, labelFontSize: "0.75rem", showLabelTooltip: it.label.length > 18, labelTooltip: it.label, labelClampLines: 1, isChecked: checked, onChange: function (e) { return toggleItem(sec.id, it.id, e.target.checked, it.type); }, size: "sm", iconSize: "0.5rem", spacing: "0.5rem", sx: {
|
|
291
|
+
'.chakra-checkbox__control': {
|
|
292
|
+
width: '12px',
|
|
293
|
+
height: '12px',
|
|
294
|
+
mt: '2px',
|
|
295
|
+
},
|
|
296
|
+
'.chakra-checkbox__label': {
|
|
297
|
+
lineHeight: '1rem',
|
|
298
|
+
whiteSpace: 'normal',
|
|
299
|
+
wordBreak: 'break-word',
|
|
300
|
+
},
|
|
301
|
+
} }),
|
|
302
|
+
checked && it.type === "text" && (react_1.default.createElement(TextOperationControls_1.TextOperationControls, { operator: activeItem.condition || "contains", value: activeItem.value || "", onOperatorChange: function (op) { return setTextOperator(sec.id, it.id, op); }, onValueChange: function (val) { return setTextValue(sec.id, it.id, val); } })),
|
|
303
|
+
(it.type === "select" || it.type === "user") && checked && (react_1.default.createElement(react_2.Box, { mt: 2 },
|
|
304
|
+
react_1.default.createElement(SelectOperationControls_1.SelectOperationControls, { operator: activeItem.condition || "is", onOperatorChange: function (op) { return setTextOperator(sec.id, it.id, op); }, size: "xs", ml: "1.25rem", mt: 2 }),
|
|
305
|
+
react_1.default.createElement(react_2.Box, { mt: 2, ml: "1.25rem" },
|
|
306
|
+
react_1.default.createElement(CompactSelect_1.default, { placeholder: it.label, size: "xs", height: "22px", options: it.selectOption || it.option || [], value: activeItem.value, onSelect: function (option) {
|
|
307
|
+
setTextValue(sec.id, it.id, option);
|
|
308
|
+
} }))))));
|
|
284
309
|
}))))));
|
|
285
|
-
}))),
|
|
310
|
+
}))) : (react_1.default.createElement(react_2.Box, { p: 4, textAlign: "center" },
|
|
311
|
+
react_1.default.createElement(react_2.Text, { fontSize: "xs", color: "gray.500" }, "No filters found")))),
|
|
286
312
|
react_1.default.createElement(react_2.HStack, { px: 4, py: 3, borderTop: "1px solid", borderColor: "gray.200", spacing: 3 },
|
|
287
313
|
react_1.default.createElement(react_2.Button, { flex: 1, variant: "outline", size: "sm", onClick: handleClear, fontSize: "xs", colorScheme: "red" }, "Clear All"),
|
|
288
314
|
react_1.default.createElement(react_2.Button, { flex: 1, colorScheme: "primary",
|
|
289
315
|
// bg={theme.colors?.red?.[500]}
|
|
290
|
-
color: "white", size: "sm", onClick: handleApply,
|
|
316
|
+
color: "white", size: "sm", onClick: handleApply,
|
|
317
|
+
// _hover={{ bg: theme.colors?.red?.[600] }}
|
|
318
|
+
fontSize: "xs" }, "Apply"))));
|
|
291
319
|
};
|
|
292
320
|
exports.default = LeftFilterPane;
|