pixelize-design-library 2.1.58 → 2.1.60

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.
@@ -96,48 +96,174 @@ Object.defineProperty(exports, "__esModule", { value: true });
96
96
  // );
97
97
  // };
98
98
  // export default TableActions;
99
+ // import React, { useEffect, useRef, useState } from "react";
100
+ // import {
101
+ // Button,
102
+ // IconButton,
103
+ // Popover,
104
+ // PopoverBody,
105
+ // PopoverContent,
106
+ // PopoverTrigger,
107
+ // Portal,
108
+ // VStack,
109
+ // } from "@chakra-ui/react";
110
+ // import { EllipsisVertical, ExternalLink, Pencil, Trash2 } from "lucide-react";
111
+ // const TableActions = ({ row }: any) => {
112
+ // const [isOpen, setIsOpen] = useState(false);
113
+ // const ref = useRef<HTMLDivElement>(null);
114
+ // // Listen for "close-all-popovers"
115
+ // useEffect(() => {
116
+ // const handler = () => setIsOpen(false);
117
+ // window.addEventListener("close-all-popovers", handler);
118
+ // return () => window.removeEventListener("close-all-popovers", handler);
119
+ // }, []);
120
+ // useEffect(() => {
121
+ // const handleClickOutside = (event: MouseEvent) => {
122
+ // if (ref.current && !ref.current.contains(event.target as Node)) {
123
+ // setIsOpen(false);
124
+ // }
125
+ // };
126
+ // if (isOpen) {
127
+ // document.addEventListener("mousedown", handleClickOutside);
128
+ // }
129
+ // return () => document.removeEventListener("mousedown", handleClickOutside);
130
+ // }, [isOpen]);
131
+ // const handleOpen = () => {
132
+ // // Close all others first
133
+ // window.dispatchEvent(new Event("close-all-popovers"));
134
+ // setIsOpen(true);
135
+ // };
136
+ // const handleClose = () => setIsOpen(false);
137
+ // return (
138
+ // <Popover
139
+ // placement="bottom-start"
140
+ // isOpen={isOpen}
141
+ // onOpen={handleOpen}
142
+ // onClose={handleClose}
143
+ // closeOnBlur
144
+ // >
145
+ // <PopoverTrigger>
146
+ // <IconButton
147
+ // aria-label="Link"
148
+ // color="black"
149
+ // icon={<EllipsisVertical size={17} />}
150
+ // size="sm"
151
+ // p={0}
152
+ // variant="ghost"
153
+ // _hover={{ transform: "scale(1.2)" }}
154
+ // onClick={() => (isOpen ? handleClose() : handleOpen())}
155
+ // />
156
+ // </PopoverTrigger>
157
+ // <Portal>
158
+ // <PopoverContent w="auto" minW="150px" boxShadow="lg" p={0} zIndex={999}>
159
+ // <PopoverBody>
160
+ // <VStack align="stretch" spacing={1}>
161
+ // {row.onLink && (
162
+ // <Button
163
+ // size="sm"
164
+ // variant="ghost"
165
+ // justifyContent="flex-start"
166
+ // gap={2}
167
+ // onClick={() => {
168
+ // row.onLink(row);
169
+ // handleClose();
170
+ // }}
171
+ // >
172
+ // <ExternalLink size={17} /> View
173
+ // </Button>
174
+ // )}
175
+ // {row.onEdit && (
176
+ // <Button
177
+ // size="sm"
178
+ // variant="ghost"
179
+ // justifyContent="flex-start"
180
+ // gap={2}
181
+ // onClick={() => {
182
+ // row.onEdit(row);
183
+ // handleClose();
184
+ // }}
185
+ // >
186
+ // <Pencil size={17} /> Edit
187
+ // </Button>
188
+ // )}
189
+ // {row.onDelete && (
190
+ // <Button
191
+ // size="sm"
192
+ // variant="ghost"
193
+ // justifyContent="flex-start"
194
+ // colorScheme="red"
195
+ // gap={2}
196
+ // onClick={() => {
197
+ // row.onDelete(row);
198
+ // handleClose();
199
+ // }}
200
+ // >
201
+ // <Trash2 size={17} /> Delete
202
+ // </Button>
203
+ // )}
204
+ // </VStack>
205
+ // </PopoverBody>
206
+ // </PopoverContent>
207
+ // </Portal>
208
+ // </Popover>
209
+ // );
210
+ // };
211
+ // export default TableActions;
99
212
  var react_1 = __importStar(require("react"));
100
213
  var react_2 = require("@chakra-ui/react");
101
214
  var lucide_react_1 = require("lucide-react");
102
215
  var TableActions = function (_a) {
103
216
  var row = _a.row;
104
217
  var _b = (0, react_1.useState)(false), isOpen = _b[0], setIsOpen = _b[1];
218
+ var ref = (0, react_1.useRef)(null);
105
219
  // Listen for "close-all-popovers"
106
220
  (0, react_1.useEffect)(function () {
107
221
  var handler = function () { return setIsOpen(false); };
108
222
  window.addEventListener("close-all-popovers", handler);
109
223
  return function () { return window.removeEventListener("close-all-popovers", handler); };
110
224
  }, []);
225
+ // Detect outside click
226
+ (0, react_1.useEffect)(function () {
227
+ var handleClickOutside = function (event) {
228
+ if (ref.current && !ref.current.contains(event.target)) {
229
+ setIsOpen(false);
230
+ }
231
+ };
232
+ if (isOpen) {
233
+ document.addEventListener("mousedown", handleClickOutside);
234
+ }
235
+ return function () { return document.removeEventListener("mousedown", handleClickOutside); };
236
+ }, [isOpen]);
111
237
  var handleOpen = function () {
112
- // Close all others first
113
- window.dispatchEvent(new Event("close-all-popovers"));
238
+ window.dispatchEvent(new Event("close-all-popovers")); // close others
114
239
  setIsOpen(true);
115
240
  };
116
241
  var handleClose = function () { return setIsOpen(false); };
117
- return (react_1.default.createElement(react_2.Popover, { placement: "bottom-start", isOpen: isOpen, onOpen: handleOpen, onClose: handleClose, closeOnBlur: true },
118
- react_1.default.createElement(react_2.PopoverTrigger, null,
119
- react_1.default.createElement(react_2.IconButton, { "aria-label": "Link", color: "black", icon: react_1.default.createElement(lucide_react_1.EllipsisVertical, { size: 17 }), size: "sm", p: 0, variant: "ghost", _hover: { transform: "scale(1.2)" }, onClick: function () { return (isOpen ? handleClose() : handleOpen()); } })),
120
- react_1.default.createElement(react_2.Portal, null,
121
- react_1.default.createElement(react_2.PopoverContent, { w: "auto", minW: "150px", boxShadow: "lg", p: 0, zIndex: 999 },
122
- react_1.default.createElement(react_2.PopoverBody, null,
123
- react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1 },
124
- row.onLink && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, onClick: function () {
125
- row.onLink(row);
126
- handleClose();
127
- } },
128
- react_1.default.createElement(lucide_react_1.ExternalLink, { size: 17 }),
129
- " View")),
130
- row.onEdit && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, onClick: function () {
131
- row.onEdit(row);
132
- handleClose();
133
- } },
134
- react_1.default.createElement(lucide_react_1.Pencil, { size: 17 }),
135
- " Edit")),
136
- row.onDelete && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", colorScheme: "red", gap: 2, onClick: function () {
137
- row.onDelete(row);
138
- handleClose();
139
- } },
140
- react_1.default.createElement(lucide_react_1.Trash2, { size: 17 }),
141
- " Delete"))))))));
242
+ return (react_1.default.createElement(react_2.Popover, { placement: "bottom-start", isOpen: isOpen, onClose: handleClose, closeOnBlur: false },
243
+ react_1.default.createElement("div", { ref: ref },
244
+ react_1.default.createElement(react_2.PopoverTrigger, null,
245
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Link", color: "black", icon: react_1.default.createElement(lucide_react_1.EllipsisVertical, { size: 17 }), size: "sm", p: 0, variant: "ghost", _hover: { transform: "scale(1.2)" }, onClick: function () { return (isOpen ? handleClose() : handleOpen()); } })),
246
+ react_1.default.createElement(react_2.Portal, null,
247
+ react_1.default.createElement(react_2.PopoverContent, { w: "auto", minW: "150px", boxShadow: "lg", p: 0, zIndex: 999 },
248
+ react_1.default.createElement(react_2.PopoverBody, null,
249
+ react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1 },
250
+ row.onLink && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, onClick: function () {
251
+ row.onLink(row);
252
+ handleClose();
253
+ } },
254
+ react_1.default.createElement(lucide_react_1.ExternalLink, { size: 17 }),
255
+ " View")),
256
+ row.onEdit && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, onClick: function () {
257
+ row.onEdit(row);
258
+ handleClose();
259
+ } },
260
+ react_1.default.createElement(lucide_react_1.Pencil, { size: 17 }),
261
+ " Edit")),
262
+ row.onDelete && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", colorScheme: "red", gap: 2, onClick: function () {
263
+ row.onDelete(row);
264
+ handleClose();
265
+ } },
266
+ react_1.default.createElement(lucide_react_1.Trash2, { size: 17 }),
267
+ " Delete")))))))));
142
268
  };
143
269
  exports.default = TableActions;