@jobber/components 4.66.7 → 4.67.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.
@@ -172,10 +172,17 @@ export interface ComboboxActionProps {
172
172
  /**
173
173
  * The function to call when the action is clicked.
174
174
  */
175
- onClick(event: React.MouseEvent<HTMLButtonElement>): void;
175
+ onClick(event: React.MouseEvent<HTMLButtonElement>, options: ComboboxActionCallbackOptions): void;
176
176
  /**
177
177
  * The label text of the action.
178
178
  */
179
- readonly label: string;
179
+ readonly label: string | ((options: ComboboxActionCallbackOptions) => string);
180
+ /**
181
+ * Determine if the action is visible for a given item.
182
+ */
183
+ readonly visible?: boolean | ((options: ComboboxActionCallbackOptions) => boolean);
184
+ }
185
+ export interface ComboboxActionCallbackOptions {
186
+ readonly searchValue: string;
180
187
  }
181
188
  export {};
@@ -1,13 +1,5 @@
1
1
  import React, { Dispatch, MutableRefObject, SetStateAction } from "react";
2
2
  import { ComboboxOption } from "./Combobox.types";
3
- export declare const ComboboxContext: React.Context<{
4
- open: boolean;
5
- setOpen: (open: boolean) => void;
6
- selected: ComboboxOption[];
7
- selectionHandler: (option: ComboboxOption) => void;
8
- handleClose: () => void;
9
- shouldScroll: MutableRefObject<boolean>;
10
- }>;
11
3
  export interface ComboboxProviderProps {
12
4
  readonly children: React.ReactNode;
13
5
  readonly selected: ComboboxOption[];
@@ -16,5 +8,7 @@ export interface ComboboxProviderProps {
16
8
  readonly setOpen: Dispatch<SetStateAction<boolean>>;
17
9
  readonly handleClose: () => void;
18
10
  readonly shouldScroll: MutableRefObject<boolean>;
11
+ readonly searchValue: string;
19
12
  }
20
- export declare function ComboboxContextProvider(props: ComboboxProviderProps): JSX.Element;
13
+ export declare const ComboboxContext: React.Context<Omit<ComboboxProviderProps, "children">>;
14
+ export declare function ComboboxContextProvider({ children, ...props }: ComboboxProviderProps): JSX.Element;
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { ComboboxActionProps } from "../../Combobox.types";
3
- export declare function ComboboxAction(props: ComboboxActionProps): JSX.Element;
3
+ export declare function ComboboxAction(props: ComboboxActionProps): JSX.Element | null;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Combobox = require('../Combobox-4343fd6c.js');
5
+ var Combobox = require('../Combobox-eb1e5817.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('react-dom');
@@ -11,6 +11,7 @@ require('../Icon-405a216c.js');
11
11
  require('@jobber/design');
12
12
  require('../Text-4a2bc89f.js');
13
13
  require('../Typography-973b122e.js');
14
+ require('../tslib.es6-5b8768b7.js');
14
15
  require('../Button-163a0641.js');
15
16
  require('react-router-dom');
16
17
  require('@jobber/hooks/useRefocusOnActivator');
@@ -6,6 +6,7 @@ var ReactDOM = require('react-dom');
6
6
  var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
7
7
  var Icon = require('./Icon-405a216c.js');
8
8
  var Text = require('./Text-4a2bc89f.js');
9
+ var tslib_es6 = require('./tslib.es6-5b8768b7.js');
9
10
  var Typography = require('./Typography-973b122e.js');
10
11
  var Button = require('./Button-163a0641.js');
11
12
  var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
@@ -63,15 +64,9 @@ var styles$3 = {"option":"_5QdRGmaNHvc-"};
63
64
  styleInject_es.styleInject(css_248z$3);
64
65
 
65
66
  const ComboboxContext = React__default["default"].createContext({});
66
- function ComboboxContextProvider(props) {
67
- return (React__default["default"].createElement(ComboboxContext.Provider, { value: {
68
- open: props.open,
69
- setOpen: props.setOpen,
70
- selected: props.selected,
71
- selectionHandler: props.selectionHandler,
72
- handleClose: props.handleClose,
73
- shouldScroll: props.shouldScroll,
74
- } }, props.children));
67
+ function ComboboxContextProvider(_a) {
68
+ var { children } = _a, props = tslib_es6.__rest(_a, ["children"]);
69
+ return (React__default["default"].createElement(ComboboxContext.Provider, { value: props }, children));
75
70
  }
76
71
 
77
72
  function ComboboxOption(props) {
@@ -260,9 +255,18 @@ var styles$1 = {"actionContainer":"Ow9wSNnGP-g-","actionButton":"ncp0nKHQ7d8-"};
260
255
  styleInject_es.styleInject(css_248z$1);
261
256
 
262
257
  function ComboboxAction(props) {
258
+ const { searchValue } = React.useContext(ComboboxContext);
259
+ if (props.visible) {
260
+ const isVisible = typeof props.visible === "function" && !props.visible({ searchValue });
261
+ if (isVisible || !props.visible) {
262
+ return null;
263
+ }
264
+ }
265
+ const options = { searchValue };
266
+ const computedLabel = typeof props.label === "string" ? props.label : props.label(options);
263
267
  return (React__default["default"].createElement("div", { className: styles$1.actionContainer },
264
- React__default["default"].createElement("button", { className: styles$1.actionButton, onClick: props.onClick, type: "button", "aria-label": props.label },
265
- React__default["default"].createElement(Typography.Typography, { element: "span", size: "base", textColor: "green", fontWeight: "semiBold" }, props.label))));
268
+ React__default["default"].createElement("button", { className: styles$1.actionButton, onClick: e => props.onClick(e, options), type: "button" },
269
+ React__default["default"].createElement(Typography.Typography, { element: "span", size: "base", textColor: "green", fontWeight: "semiBold" }, computedLabel))));
266
270
  }
267
271
 
268
272
  function ComboboxTrigger({ label = "Select", selected, }) {
@@ -389,7 +393,7 @@ function Combobox(props) {
389
393
  label: option.props.label,
390
394
  }))) || [], [optionElements]);
391
395
  const { selectedOptions, selectedStateSetter, shouldScroll, wrapperRef, searchValue, setSearchValue, open, setOpen, handleClose, handleSelection, } = useCombobox(props.selected, props.onSelect, props.onClose, props.multiSelect);
392
- return (React__default["default"].createElement(ComboboxContextProvider, { selected: selectedOptions, selectionHandler: handleSelection, open: open, setOpen: setOpen, handleClose: handleClose, shouldScroll: shouldScroll },
396
+ return (React__default["default"].createElement(ComboboxContextProvider, { selected: selectedOptions, selectionHandler: handleSelection, open: open, setOpen: setOpen, handleClose: handleClose, shouldScroll: shouldScroll, searchValue: searchValue },
393
397
  React__default["default"].createElement("div", { ref: wrapperRef, className: styles.wrapper },
394
398
  open && (React__default["default"].createElement("div", { className: styles.overlay, onClick: () => handleClose(), "data-testid": "ATL-Combobox-Overlay" })),
395
399
  triggerElement || (React__default["default"].createElement(ComboboxTrigger, { label: props.label, selected: props.selected })),
@@ -25,7 +25,7 @@ var ReactDOM = require('react-dom');
25
25
  var Checkbox = require('../Checkbox-ad7ec2e7.js');
26
26
  var reactRouterDom = require('react-router-dom');
27
27
  var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
28
- var Combobox = require('../Combobox-4343fd6c.js');
28
+ var Combobox = require('../Combobox-eb1e5817.js');
29
29
  var Chip = require('../Chip-168acf3e.js');
30
30
  var Icon = require('../Icon-405a216c.js');
31
31
  var debounce = require('lodash/debounce');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.66.7",
3
+ "version": "4.67.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -83,5 +83,5 @@
83
83
  "> 1%",
84
84
  "IE 10"
85
85
  ],
86
- "gitHead": "5bf46b3890aeddd4a75751f82ad9c48bf4774f96"
86
+ "gitHead": "8050cc83c347bd700c07536f2278ba81ed3bd7a0"
87
87
  }