pixelize-design-library 2.1.62 → 2.1.64

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.
@@ -225,7 +225,7 @@ var SearchSelect = function (_a) {
225
225
  (isMultiple || inputValue || !selectedValues.length || !isMultiple) && (react_1.default.createElement(react_2.Input, { ref: inputRef, variant: "unstyled", flex: "1", minW: "5rem", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onFocus: function () {
226
226
  setFocused(true);
227
227
  setIsOpen(true);
228
- }, onBlur: function () { return setFocused(false); }, placeholder: placeholder })),
228
+ }, onBlur: function () { return setFocused(false); }, placeholder: selectedValues.length ? "" : placeholder })),
229
229
  react_1.default.createElement(react_2.Box, { ml: "auto", display: "flex", alignItems: "center", gap: 1 },
230
230
  isRemoveAllIcon && selectedValues.length > 0 && (react_1.default.createElement(ToolTip_1.default, { placement: "top", label: "Remove All", hasArrow: true, bg: theme.colors.gray[600], color: theme.colors.white, fontSize: "0.75rem" },
231
231
  react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.X, { size: 12, color: theme.colors.black }), "aria-label": "Clear all", variant: "ghost", size: "sm", onClick: handleClearAll, sx: {
@@ -54,19 +54,19 @@ var lucide_react_1 = require("lucide-react");
54
54
  var ManageColumns = function (_a) {
55
55
  var columns = _a.columns, childInputMethodsRef = _a.childInputMethodsRef;
56
56
  var theme = (0, useCustomTheme_1.useCustomTheme)();
57
- var _b = (0, react_1.useState)(columns.map(function (o) { return (__assign(__assign({}, o), { isHidden: !o.isHidden })); })), items = _b[0], setItems = _b[1];
57
+ // keep isHidden as it is (true = hidden, false = visible)
58
+ var _b = (0, react_1.useState)(columns), items = _b[0], setItems = _b[1];
58
59
  var _c = (0, react_1.useState)(""), searchTerm = _c[0], setSearchTerm = _c[1];
59
60
  var _d = (0, react_1.useState)(null), draggedItemIndex = _d[0], setDraggedItemIndex = _d[1];
61
+ var _e = (0, react_1.useState)(null), error = _e[0], setError = _e[1];
60
62
  (0, react_1.useImperativeHandle)(childInputMethodsRef, function () {
61
63
  return {
62
64
  getManageColumnsData: function () {
63
- return items.map(function (o) { return (__assign(__assign({}, o), { isHidden: !o.isHidden })); });
65
+ return items;
64
66
  },
65
67
  };
66
68
  }, [items]);
67
- var handleDragStart = function (index) {
68
- setDraggedItemIndex(index);
69
- };
69
+ var handleDragStart = function (index) { return setDraggedItemIndex(index); };
70
70
  var handleDragOver = function (e, index) {
71
71
  e.preventDefault();
72
72
  if (draggedItemIndex === null || draggedItemIndex === index)
@@ -78,30 +78,44 @@ var ManageColumns = function (_a) {
78
78
  setDraggedItemIndex(index);
79
79
  setItems(newItems);
80
80
  };
81
- var handleDragEnd = function () {
82
- setDraggedItemIndex(null);
83
- };
81
+ var handleDragEnd = function () { return setDraggedItemIndex(null); };
82
+ // ✅ Prevent unchecking last visible column
84
83
  var toggleCheckbox = function (index) {
85
84
  var newItems = __spreadArray([], items, true);
85
+ var visibleCount = newItems.filter(function (i) { return !i.isHidden; }).length; // count visible
86
+ if (!newItems[index].isHidden && visibleCount === 1) {
87
+ setError("At least one column must remain visible.");
88
+ return;
89
+ }
86
90
  newItems[index].isHidden = !newItems[index].isHidden;
87
91
  setItems(newItems);
92
+ setError(null);
88
93
  };
89
94
  var filteredItems = items.filter(function (item) {
90
95
  return item.label.toString().toLowerCase().includes(searchTerm.toLowerCase());
91
96
  });
97
+ // ✅ Select all logic
98
+ var allChecked = items.every(function (item) { return !item.isHidden; });
99
+ var someChecked = items.some(function (item) { return !item.isHidden; }) && !allChecked;
100
+ var handleSelectAll = function () {
101
+ if (allChecked) {
102
+ // if all visible → keep first visible, hide rest
103
+ setItems(items.map(function (item, i) { return (__assign(__assign({}, item), { isHidden: i === 0 ? false : true })); }));
104
+ setError("At least one column must remain visible.");
105
+ }
106
+ else {
107
+ // make all visible
108
+ setItems(items.map(function (item) { return (__assign(__assign({}, item), { isHidden: false })); }));
109
+ setError(null);
110
+ }
111
+ };
92
112
  return (react_1.default.createElement(react_2.Box, { mt: "5" },
93
113
  react_1.default.createElement(react_2.Input, { placeholder: "Search", mb: "4", value: searchTerm, onChange: function (e) { return setSearchTerm(e.target.value); } }),
94
114
  !searchTerm.length && (react_1.default.createElement(react_2.Flex, { align: "center", mb: "2" },
95
- react_1.default.createElement(Checkbox_1.default, { label: "Select all", isChecked: items.every(function (item) { return item.isHidden; }), onChange: function () {
96
- var allChecked = items.every(function (item) { return item.isHidden; });
97
- setItems(items.map(function (item) { return (__assign(__assign({}, item), { isHidden: !allChecked })); }));
98
- } }))),
99
- react_1.default.createElement(react_2.List, { spacing: "2" }, filteredItems.length > 0 ? (filteredItems.map(function (item, index) { return (react_1.default.createElement(react_2.ListItem, { key: item.id, draggable: true, onDragStart: function () { return handleDragStart(index); }, onDragOver: function (e) { return handleDragOver(e, index); }, onDragEnd: handleDragEnd, bg: theme.colors.gray[50], display: "flex", alignItems: "center",
100
- // justifyContent="space-between"
101
- borderRadius: "md", border: "1px solid", borderColor: "gray.200", cursor: "grab", position: "relative", fontSize: 14 },
115
+ react_1.default.createElement(Checkbox_1.default, { label: "Select all", isChecked: allChecked, isIndeterminate: someChecked, onChange: handleSelectAll }))),
116
+ react_1.default.createElement(react_2.List, { spacing: "2" }, filteredItems.length > 0 ? (filteredItems.map(function (item, index) { return (react_1.default.createElement(react_2.ListItem, { key: item.id, draggable: true, onDragStart: function () { return handleDragStart(index); }, onDragOver: function (e) { return handleDragOver(e, index); }, onDragEnd: handleDragEnd, bg: theme.colors.gray[50], display: "flex", alignItems: "center", borderRadius: "md", border: "1px solid", borderColor: "gray.200", cursor: "grab", position: "relative", fontSize: 14, px: "2", py: "1" },
102
117
  react_1.default.createElement(react_2.IconButton, { "aria-label": "Drag", icon: react_1.default.createElement(lucide_react_1.GripVertical, null), variant: "ghost", cursor: "grab", mr: "1" }),
103
- react_1.default.createElement(Checkbox_1.default, { isChecked: item.isHidden, label: String(item.label), onChange: function () { return toggleCheckbox(index); }, sx: {
104
- marginRight: "4",
105
- } }))); })) : (react_1.default.createElement(react_2.Text, { color: "gray.500", textAlign: "center" }, "No items found")))));
118
+ react_1.default.createElement(Checkbox_1.default, { isChecked: !item.isHidden, label: String(item.label), onChange: function () { return toggleCheckbox(index); }, sx: { marginRight: "4" } }))); })) : (react_1.default.createElement(react_2.Text, { color: "gray.500", textAlign: "center" }, "No items found"))),
119
+ error && (react_1.default.createElement(react_2.Text, { color: "red.500", mt: "3", fontSize: "sm" }, error))));
106
120
  };
107
121
  exports.default = ManageColumns;