@adamjanicki/ui-extended 1.0.4 → 1.0.6

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.
@@ -84,6 +84,11 @@ interface Props<T> {
84
84
  * Footer node to render at the bottom of the popover
85
85
  */
86
86
  footer?: React.ReactNode;
87
+ /**
88
+ * Close the popover when the footer is clicked
89
+ * @default true
90
+ */
91
+ closeOnFooterClick?: boolean;
87
92
  /**
88
93
  * A callback to be called when the user hits the enter key while no option is selected
89
94
  */
@@ -29,14 +29,14 @@ import { classNames } from "@adamjanicki/ui/utils/util";
29
29
  var defaultRenderOption = function (option) { return (_jsx("div", { className: "ajui-autocomplete-default-rendering", children: "".concat(option) })); };
30
30
  var Autocomplete = function (props) {
31
31
  var _a, _b;
32
- var options = props.options, _c = props.renderOption, renderOption = _c === void 0 ? defaultRenderOption : _c, _d = props.filterOption, filterOption = _d === void 0 ? function () { return true; } : _d, groupBy = props.groupBy, renderGroup = props.renderGroup, noOptionsNode = props.noOptionsNode, _e = props.InputProps, InputProps = _e === void 0 ? {} : _e, _f = props.freeSolo, freeSolo = _f === void 0 ? false : _f, _g = props.focusOnSelect, focusOnSelect = _g === void 0 ? true : _g, value = props.value, onInputChange = props.onInputChange, onSelect = props.onSelect, popoverProps = props.popoverProps, footer = props.footer, _h = props.listItemProps, listItemProps = _h === void 0 ? {} : _h, _j = props.listProps, listProps = _j === void 0 ? {} : _j, onUnselectedEnter = props.onUnselectedEnter, rest = __rest(props, ["options", "renderOption", "filterOption", "groupBy", "renderGroup", "noOptionsNode", "InputProps", "freeSolo", "focusOnSelect", "value", "onInputChange", "onSelect", "popoverProps", "footer", "listItemProps", "listProps", "onUnselectedEnter"]);
32
+ var options = props.options, _c = props.renderOption, renderOption = _c === void 0 ? defaultRenderOption : _c, _d = props.filterOption, filterOption = _d === void 0 ? function () { return true; } : _d, groupBy = props.groupBy, renderGroup = props.renderGroup, noOptionsNode = props.noOptionsNode, _e = props.InputProps, InputProps = _e === void 0 ? {} : _e, _f = props.freeSolo, freeSolo = _f === void 0 ? false : _f, _g = props.focusOnSelect, focusOnSelect = _g === void 0 ? true : _g, value = props.value, onInputChange = props.onInputChange, onSelect = props.onSelect, popoverProps = props.popoverProps, footer = props.footer, _h = props.listItemProps, listItemProps = _h === void 0 ? {} : _h, _j = props.listProps, listProps = _j === void 0 ? {} : _j, onUnselectedEnter = props.onUnselectedEnter, _k = props.closeOnFooterClick, closeOnFooterClick = _k === void 0 ? true : _k, rest = __rest(props, ["options", "renderOption", "filterOption", "groupBy", "renderGroup", "noOptionsNode", "InputProps", "freeSolo", "focusOnSelect", "value", "onInputChange", "onSelect", "popoverProps", "footer", "listItemProps", "listProps", "onUnselectedEnter", "closeOnFooterClick"]);
33
33
  var inputContainerRef = React.useRef(null);
34
34
  var inputRef = React.useRef(null);
35
35
  var onRef = React.useRef(null);
36
36
  var nextRef = React.useRef(null);
37
37
  var prevRef = React.useRef(null);
38
- var _k = React.useState(), on = _k[0], setOn = _k[1];
39
- var _l = React.useState(false), open = _l[0], setOpen = _l[1];
38
+ var _l = React.useState(), on = _l[0], setOn = _l[1];
39
+ var _m = React.useState(false), open = _m[0], setOpen = _m[1];
40
40
  var filteredOptions = options.filter(filterOption);
41
41
  var groupMap = new Map();
42
42
  if (groupBy) {
@@ -75,7 +75,7 @@ var Autocomplete = function (props) {
75
75
  setOpen(true);
76
76
  };
77
77
  var handleKeys = function (_a) {
78
- var _b, _c;
78
+ var _b, _c, _d;
79
79
  var code = _a.code;
80
80
  if (code === "Escape") {
81
81
  closeMenu();
@@ -89,13 +89,15 @@ var Autocomplete = function (props) {
89
89
  var child = current.firstChild;
90
90
  if (child && child.nodeName === "A")
91
91
  (_b = child.click) === null || _b === void 0 ? void 0 : _b.call(child);
92
- return current.click();
92
+ current.click();
93
+ if (!focusOnSelect)
94
+ return (_c = inputRef.current) === null || _c === void 0 ? void 0 : _c.blur();
93
95
  }
94
96
  else if (onUnselectedEnter) {
95
97
  onUnselectedEnter();
96
98
  closeMenu();
97
99
  if (!focusOnSelect)
98
- return (_c = inputRef.current) === null || _c === void 0 ? void 0 : _c.blur();
100
+ return (_d = inputRef.current) === null || _d === void 0 ? void 0 : _d.blur();
99
101
  }
100
102
  }
101
103
  if (modulo > 0 && code === "ArrowDown") {
@@ -150,6 +152,6 @@ var Autocomplete = function (props) {
150
152
  : undefined, listItemProps.className), onClick: function () { return handleChange(option); }, children: renderOption(option) }))] }, index));
151
153
  })
152
154
  : !freeSolo &&
153
- (noOptionsNode || defaultRenderOption("No results found")) })), footer] }))] })) }));
155
+ (noOptionsNode || defaultRenderOption("No results found")) })), footer && (_jsx("div", { onClick: closeOnFooterClick ? closeMenu : undefined, children: footer }))] }))] })) }));
154
156
  };
155
157
  export default Autocomplete;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adamjanicki/ui-extended",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "More advanced UI components and hooks for React in TypeScript",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
package/style.css CHANGED
@@ -23,7 +23,7 @@
23
23
  max-height: 300px;
24
24
  display: flex;
25
25
  flex-direction: column;
26
- padding: 0.25rem;
26
+ padding: 0.5rem;
27
27
  margin: 0;
28
28
  }
29
29
 
package/utils/types.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * The type of corner to display, controlling the border radius property.
3
- */
4
- export type CornerType = "pill" | "rounded" | "sharp";
5
- /**
6
- * The type of message associated with a piece of content.
7
- */
8
- export type ContentType = "success" | "warning" | "error" | "info" | "static";
package/utils/types.js DELETED
@@ -1 +0,0 @@
1
- export {};