Socket
Socket
Sign inDemoInstall

@hig/multi-downshift

Package Overview
Dependencies
Maintainers
6
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@hig/multi-downshift - npm Package Compare versions

Comparing version 2.1.0 to 2.2.0

420

build/index.es.js

@@ -6,16 +6,81 @@ import React from 'react';

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
return keys;
}
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
return target;
}
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
return obj;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
const _excluded = ["onClick", "item"],
_excluded2 = ["children", "inputValue"];
/**

@@ -38,236 +103,217 @@ * @typedef {import("downshift").DownshiftProps<any>} Props

var MultiDownshift = function (_React$Component) {
_inherits(MultiDownshift, _React$Component);
class MultiDownshift extends React.Component {
constructor() {
var _this;
function MultiDownshift() {
var _ref;
super(...arguments);
_this = this;
var _temp, _this, _ret;
_defineProperty(this, "state", {
selectedItems: this.getDefaultSelectedItem(),
lastClickedItem: ""
});
_classCallCheck(this, MultiDownshift);
_defineProperty(this, "getRemoveButtonProps", function () {
let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
let {
onClick,
item
} = _ref,
props = _objectWithoutProperties(_ref, _excluded);
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiDownshift.__proto__ || Object.getPrototypeOf(MultiDownshift)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
selectedItems: _this.getDefaultSelectedItem()
}, _this.getRemoveButtonProps = function () {
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var onClick = _ref2.onClick,
item = _ref2.item,
props = _objectWithoutProperties(_ref2, ["onClick", "item"]);
/**
* @param {MouseEvent} event
*/
var handleRemoveButtonClick = function handleRemoveButtonClick(event) {
const handleRemoveButtonClick = event => {
event.stopPropagation();
_this.unselectItem(item);
};
var handleClick = combineEventHandlers(onClick, handleRemoveButtonClick);
return _extends({}, props, {
const handleClick = combineEventHandlers(onClick, handleRemoveButtonClick);
return _objectSpread2(_objectSpread2({}, props), {}, {
onClick: handleClick
});
}, _this.stateReducer = function (state, changes) {
});
_defineProperty(this, "stateReducer", (state, changes) => {
switch (changes.type) {
case Downshift.stateChangeTypes.clickItem:
return _extends({}, changes, {
return _objectSpread2(_objectSpread2({}, changes), {}, {
isOpen: true
});
default:
return changes;
}
}, _this.handleSelect = function (selectedItem, downshift) {
var selectedItems = _this.getSelectedItems();
var triggerChange = _this.createChangeTrigger(downshift);
});
_defineProperty(this, "handleSelect", (selectedItem, downshift) => {
const selectedItems = this.getSelectedItems();
const triggerChange = this.createChangeTrigger(downshift, selectedItem);
if (selectedItems.includes(selectedItem)) {
_this.unselectItem(selectedItem, triggerChange);
this.unselectItem(selectedItem, triggerChange);
} else {
_this.selectItem(selectedItem, triggerChange);
this.selectItem(selectedItem, triggerChange);
}
}, _this.renderPresenter = function (downshift) {
return _this.props.children(_this.getStateAndHelpers(downshift));
}, _temp), _possibleConstructorReturn(_this, _ret);
});
_defineProperty(this, "renderPresenter", downshift => this.props.children(this.getStateAndHelpers(downshift)));
}
_createClass(MultiDownshift, [{
key: "getDefaultSelectedItem",
value: function getDefaultSelectedItem() {
var initialSelectedItems = this.props.initialSelectedItems;
getDefaultSelectedItem() {
const {
initialSelectedItems
} = this.props;
return initialSelectedItems;
}
/**
* @returns {any[]}
*/
return initialSelectedItems;
}
getSelectedItems() {
const controlledSelectedItems = this.props.selectedItems;
const {
selectedItems
} = this.state;
return controlledSelectedItems !== undefined ? controlledSelectedItems : selectedItems;
}
/**
* @param {import("downshift").ControllerStateAndHelpers<any>} downshift
* @returns {ControllerStateAndHelpers}
*/
/**
* @returns {any[]}
*/
}, {
key: "getSelectedItems",
value: function getSelectedItems() {
var controlledSelectedItems = this.props.selectedItems;
var selectedItems = this.state.selectedItems;
getStateAndHelpers(downshift) {
const selectedItems = this.getSelectedItems();
const {
getRemoveButtonProps
} = this;
return _objectSpread2(_objectSpread2({}, downshift), {}, {
getRemoveButtonProps,
selectedItems
});
}
/**
* @param {GetRemoveButtonPropsOptions} options
* @returns {any}
*/
return controlledSelectedItems !== undefined ? controlledSelectedItems : selectedItems;
}
/**
* @returns {import("downshift").ControllerStateAndHelpers}
*/
getDownshiftProps() {
const _this$props = this.props,
{
children,
inputValue
} = _this$props,
otherProps = _objectWithoutProperties(_this$props, _excluded2);
/**
* @param {import("downshift").ControllerStateAndHelpers<any>} downshift
* @returns {ControllerStateAndHelpers}
*/
const controlledInputValue = inputValue !== undefined ? inputValue : this.selectedItemsToString();
return _objectSpread2(_objectSpread2({}, otherProps), {}, {
inputValue: controlledInputValue,
onSelect: this.handleSelect,
stateReducer: this.stateReducer
});
}
/**
* @param {import("downshift").DownshiftState<any>} state
* @param {import("downshift").StateChangeOptions<any>} changes
* @returns {import("downshift").Partial<StateChangeOptions<any>>}
*/
}, {
key: "getStateAndHelpers",
value: function getStateAndHelpers(downshift) {
var selectedItems = this.getSelectedItems();
var getRemoveButtonProps = this.getRemoveButtonProps;
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
createChangeTrigger(downshift, selectedItem) {
const multiDownshift = this.getStateAndHelpers(downshift);
return () => {
const {
onChange
} = this.props;
const selectedItems = this.getSelectedItems();
return _extends({}, downshift, {
getRemoveButtonProps: getRemoveButtonProps,
selectedItems: selectedItems
});
}
if (this.state.lastClickedItem !== selectedItem) {
this.setState({
lastClickedItem: selectedItem
});
}
/**
* @param {GetRemoveButtonPropsOptions} options
* @returns {any}
*/
if (onChange) {
onChange(selectedItems, multiDownshift);
}, {
key: "getDownshiftProps",
/**
* @returns {import("downshift").ControllerStateAndHelpers}
*/
value: function getDownshiftProps() {
var _props = this.props,
children = _props.children,
inputValue = _props.inputValue,
otherProps = _objectWithoutProperties(_props, ["children", "inputValue"]);
var controlledInputValue = inputValue !== undefined ? inputValue : this.selectedItemsToString();
return _extends({}, otherProps, {
inputValue: controlledInputValue,
onSelect: this.handleSelect,
stateReducer: this.stateReducer
});
}
/**
* @param {import("downshift").DownshiftState<any>} state
* @param {import("downshift").StateChangeOptions<any>} changes
* @returns {import("downshift").Partial<StateChangeOptions<any>>}
*/
}, {
key: "createChangeTrigger",
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
value: function createChangeTrigger(downshift) {
var _this2 = this;
var multiDownshift = this.getStateAndHelpers(downshift);
return function () {
var onChange = _this2.props.onChange;
var selectedItems = _this2.getSelectedItems();
if (onChange) {
onChange(selectedItems, multiDownshift);
if (this.state.lastClickedItem === selectedItem) {
onChange(selectedItem, multiDownshift);
}
};
}
}
};
}
/**
* @returns {string}
* @todo Add intelligent formatting
*/
/**
* @param {any} selectedItem
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
}, {
key: "selectedItemsToString",
selectedItemsToString() {
const {
itemToString
} = this.props;
const selectedItems = this.getSelectedItems();
return selectedItems.map(itemToString).join(", ");
}
/**
* @param {any} item
* @param {Function} done
*/
/**
* @returns {string}
* @todo Add intelligent formatting
*/
value: function selectedItemsToString() {
var itemToString = this.props.itemToString;
unselectItem(item, done) {
const selectedItems = this.getSelectedItems();
const nextSelectedItems = selectedItems.filter(selectedItem => selectedItem !== item);
this.setState({
selectedItems: nextSelectedItems
}, done);
}
/**
* @param {any} removedItem
* @param {Function} done
*/
var selectedItems = this.getSelectedItems();
return selectedItems.map(itemToString).join(", ");
}
selectItem(item, done) {
const selectedItems = this.getSelectedItems();
const nextSelectedItems = [...selectedItems, item];
this.setState({
selectedItems: nextSelectedItems
}, done);
}
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
/**
* @param {any} item
* @param {Function} done
*/
}, {
key: "unselectItem",
value: function unselectItem(item, done) {
var selectedItems = this.getSelectedItems();
var nextSelectedItems = selectedItems.filter(function (selectedItem) {
return selectedItem !== item;
});
render() {
return /*#__PURE__*/React.createElement(Downshift, this.getDownshiftProps(), this.renderPresenter);
}
this.setState({ selectedItems: nextSelectedItems }, done);
}
}
/**
* @param {any} removedItem
* @param {Function} done
*/
}, {
key: "selectItem",
value: function selectItem(item, done) {
var selectedItems = this.getSelectedItems();
var nextSelectedItems = [].concat(_toConsumableArray(selectedItems), [item]);
this.setState({ selectedItems: nextSelectedItems }, done);
}
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
}, {
key: "render",
value: function render() {
return React.createElement(
Downshift,
this.getDownshiftProps(),
this.renderPresenter
);
}
}]);
return MultiDownshift;
}(React.Component);
MultiDownshift.propTypes = _extends({}, Downshift.propTypes, {
_defineProperty(MultiDownshift, "propTypes", _objectSpread2(_objectSpread2({}, Downshift.propTypes), {}, {
/** Controlled: the currently selected items */
selectedItems: PropTypes.arrayOf(PropTypes.any),
/** Items selected by default */
initialSelectedItems: PropTypes.arrayOf(PropTypes.any)
}));
_defineProperty(MultiDownshift, "defaultProps", {
initialSelectedItems: []
});
MultiDownshift.defaultProps = {
initialSelectedItems: []
};
MultiDownshift.__docgenInfo = {

@@ -305,2 +351,2 @@ "description": "@typedef {import(\"downshift\").ControllerStateAndHelpers<any>} ControllerStateAndHelpers\n@property {function(GetRemoveButtonPropsOptions): any} getRemoveButtonProps\n@property {any[]} selectedItems",

export default MultiDownshift;
export { MultiDownshift as default };

@@ -5,23 +5,92 @@ 'use strict';

function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = _interopDefault(require('react'));
var PropTypes = _interopDefault(require('prop-types'));
var Downshift = _interopDefault(require('downshift'));
var React = require('react');
var PropTypes = require('prop-types');
var Downshift = require('downshift');
var utils = require('@hig/utils');
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
var Downshift__default = /*#__PURE__*/_interopDefaultLegacy(Downshift);
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
return keys;
}
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
const _excluded = ["onClick", "item"],
_excluded2 = ["children", "inputValue"];
/**

@@ -44,236 +113,217 @@ * @typedef {import("downshift").DownshiftProps<any>} Props

var MultiDownshift = function (_React$Component) {
_inherits(MultiDownshift, _React$Component);
class MultiDownshift extends React__default["default"].Component {
constructor() {
var _this;
function MultiDownshift() {
var _ref;
super(...arguments);
_this = this;
var _temp, _this, _ret;
_defineProperty(this, "state", {
selectedItems: this.getDefaultSelectedItem(),
lastClickedItem: ""
});
_classCallCheck(this, MultiDownshift);
_defineProperty(this, "getRemoveButtonProps", function () {
let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
let {
onClick,
item
} = _ref,
props = _objectWithoutProperties(_ref, _excluded);
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiDownshift.__proto__ || Object.getPrototypeOf(MultiDownshift)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
selectedItems: _this.getDefaultSelectedItem()
}, _this.getRemoveButtonProps = function () {
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var onClick = _ref2.onClick,
item = _ref2.item,
props = _objectWithoutProperties(_ref2, ["onClick", "item"]);
/**
* @param {MouseEvent} event
*/
var handleRemoveButtonClick = function handleRemoveButtonClick(event) {
const handleRemoveButtonClick = event => {
event.stopPropagation();
_this.unselectItem(item);
};
var handleClick = utils.combineEventHandlers(onClick, handleRemoveButtonClick);
return _extends({}, props, {
const handleClick = utils.combineEventHandlers(onClick, handleRemoveButtonClick);
return _objectSpread2(_objectSpread2({}, props), {}, {
onClick: handleClick
});
}, _this.stateReducer = function (state, changes) {
});
_defineProperty(this, "stateReducer", (state, changes) => {
switch (changes.type) {
case Downshift.stateChangeTypes.clickItem:
return _extends({}, changes, {
case Downshift__default["default"].stateChangeTypes.clickItem:
return _objectSpread2(_objectSpread2({}, changes), {}, {
isOpen: true
});
default:
return changes;
}
}, _this.handleSelect = function (selectedItem, downshift) {
var selectedItems = _this.getSelectedItems();
var triggerChange = _this.createChangeTrigger(downshift);
});
_defineProperty(this, "handleSelect", (selectedItem, downshift) => {
const selectedItems = this.getSelectedItems();
const triggerChange = this.createChangeTrigger(downshift, selectedItem);
if (selectedItems.includes(selectedItem)) {
_this.unselectItem(selectedItem, triggerChange);
this.unselectItem(selectedItem, triggerChange);
} else {
_this.selectItem(selectedItem, triggerChange);
this.selectItem(selectedItem, triggerChange);
}
}, _this.renderPresenter = function (downshift) {
return _this.props.children(_this.getStateAndHelpers(downshift));
}, _temp), _possibleConstructorReturn(_this, _ret);
});
_defineProperty(this, "renderPresenter", downshift => this.props.children(this.getStateAndHelpers(downshift)));
}
_createClass(MultiDownshift, [{
key: "getDefaultSelectedItem",
value: function getDefaultSelectedItem() {
var initialSelectedItems = this.props.initialSelectedItems;
getDefaultSelectedItem() {
const {
initialSelectedItems
} = this.props;
return initialSelectedItems;
}
/**
* @returns {any[]}
*/
return initialSelectedItems;
}
getSelectedItems() {
const controlledSelectedItems = this.props.selectedItems;
const {
selectedItems
} = this.state;
return controlledSelectedItems !== undefined ? controlledSelectedItems : selectedItems;
}
/**
* @param {import("downshift").ControllerStateAndHelpers<any>} downshift
* @returns {ControllerStateAndHelpers}
*/
/**
* @returns {any[]}
*/
}, {
key: "getSelectedItems",
value: function getSelectedItems() {
var controlledSelectedItems = this.props.selectedItems;
var selectedItems = this.state.selectedItems;
getStateAndHelpers(downshift) {
const selectedItems = this.getSelectedItems();
const {
getRemoveButtonProps
} = this;
return _objectSpread2(_objectSpread2({}, downshift), {}, {
getRemoveButtonProps,
selectedItems
});
}
/**
* @param {GetRemoveButtonPropsOptions} options
* @returns {any}
*/
return controlledSelectedItems !== undefined ? controlledSelectedItems : selectedItems;
}
/**
* @returns {import("downshift").ControllerStateAndHelpers}
*/
getDownshiftProps() {
const _this$props = this.props,
{
children,
inputValue
} = _this$props,
otherProps = _objectWithoutProperties(_this$props, _excluded2);
/**
* @param {import("downshift").ControllerStateAndHelpers<any>} downshift
* @returns {ControllerStateAndHelpers}
*/
const controlledInputValue = inputValue !== undefined ? inputValue : this.selectedItemsToString();
return _objectSpread2(_objectSpread2({}, otherProps), {}, {
inputValue: controlledInputValue,
onSelect: this.handleSelect,
stateReducer: this.stateReducer
});
}
/**
* @param {import("downshift").DownshiftState<any>} state
* @param {import("downshift").StateChangeOptions<any>} changes
* @returns {import("downshift").Partial<StateChangeOptions<any>>}
*/
}, {
key: "getStateAndHelpers",
value: function getStateAndHelpers(downshift) {
var selectedItems = this.getSelectedItems();
var getRemoveButtonProps = this.getRemoveButtonProps;
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
createChangeTrigger(downshift, selectedItem) {
const multiDownshift = this.getStateAndHelpers(downshift);
return () => {
const {
onChange
} = this.props;
const selectedItems = this.getSelectedItems();
return _extends({}, downshift, {
getRemoveButtonProps: getRemoveButtonProps,
selectedItems: selectedItems
});
}
if (this.state.lastClickedItem !== selectedItem) {
this.setState({
lastClickedItem: selectedItem
});
}
/**
* @param {GetRemoveButtonPropsOptions} options
* @returns {any}
*/
if (onChange) {
onChange(selectedItems, multiDownshift);
}, {
key: "getDownshiftProps",
/**
* @returns {import("downshift").ControllerStateAndHelpers}
*/
value: function getDownshiftProps() {
var _props = this.props,
children = _props.children,
inputValue = _props.inputValue,
otherProps = _objectWithoutProperties(_props, ["children", "inputValue"]);
var controlledInputValue = inputValue !== undefined ? inputValue : this.selectedItemsToString();
return _extends({}, otherProps, {
inputValue: controlledInputValue,
onSelect: this.handleSelect,
stateReducer: this.stateReducer
});
}
/**
* @param {import("downshift").DownshiftState<any>} state
* @param {import("downshift").StateChangeOptions<any>} changes
* @returns {import("downshift").Partial<StateChangeOptions<any>>}
*/
}, {
key: "createChangeTrigger",
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
value: function createChangeTrigger(downshift) {
var _this2 = this;
var multiDownshift = this.getStateAndHelpers(downshift);
return function () {
var onChange = _this2.props.onChange;
var selectedItems = _this2.getSelectedItems();
if (onChange) {
onChange(selectedItems, multiDownshift);
if (this.state.lastClickedItem === selectedItem) {
onChange(selectedItem, multiDownshift);
}
};
}
}
};
}
/**
* @returns {string}
* @todo Add intelligent formatting
*/
/**
* @param {any} selectedItem
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
}, {
key: "selectedItemsToString",
selectedItemsToString() {
const {
itemToString
} = this.props;
const selectedItems = this.getSelectedItems();
return selectedItems.map(itemToString).join(", ");
}
/**
* @param {any} item
* @param {Function} done
*/
/**
* @returns {string}
* @todo Add intelligent formatting
*/
value: function selectedItemsToString() {
var itemToString = this.props.itemToString;
unselectItem(item, done) {
const selectedItems = this.getSelectedItems();
const nextSelectedItems = selectedItems.filter(selectedItem => selectedItem !== item);
this.setState({
selectedItems: nextSelectedItems
}, done);
}
/**
* @param {any} removedItem
* @param {Function} done
*/
var selectedItems = this.getSelectedItems();
return selectedItems.map(itemToString).join(", ");
}
selectItem(item, done) {
const selectedItems = this.getSelectedItems();
const nextSelectedItems = [...selectedItems, item];
this.setState({
selectedItems: nextSelectedItems
}, done);
}
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
/**
* @param {any} item
* @param {Function} done
*/
}, {
key: "unselectItem",
value: function unselectItem(item, done) {
var selectedItems = this.getSelectedItems();
var nextSelectedItems = selectedItems.filter(function (selectedItem) {
return selectedItem !== item;
});
render() {
return /*#__PURE__*/React__default["default"].createElement(Downshift__default["default"], this.getDownshiftProps(), this.renderPresenter);
}
this.setState({ selectedItems: nextSelectedItems }, done);
}
}
/**
* @param {any} removedItem
* @param {Function} done
*/
_defineProperty(MultiDownshift, "propTypes", _objectSpread2(_objectSpread2({}, Downshift__default["default"].propTypes), {}, {
/** Controlled: the currently selected items */
selectedItems: PropTypes__default["default"].arrayOf(PropTypes__default["default"].any),
}, {
key: "selectItem",
value: function selectItem(item, done) {
var selectedItems = this.getSelectedItems();
var nextSelectedItems = [].concat(_toConsumableArray(selectedItems), [item]);
/** Items selected by default */
initialSelectedItems: PropTypes__default["default"].arrayOf(PropTypes__default["default"].any)
}));
this.setState({ selectedItems: nextSelectedItems }, done);
}
_defineProperty(MultiDownshift, "defaultProps", {
initialSelectedItems: []
});
/**
* @param {import("downshift").ControllerStateAndHelpers} downshift
*/
}, {
key: "render",
value: function render() {
return React.createElement(
Downshift,
this.getDownshiftProps(),
this.renderPresenter
);
}
}]);
return MultiDownshift;
}(React.Component);
MultiDownshift.propTypes = _extends({}, Downshift.propTypes, {
/** Controlled: the currently selected items */
selectedItems: PropTypes.arrayOf(PropTypes.any),
/** Items selected by default */
initialSelectedItems: PropTypes.arrayOf(PropTypes.any)
});
MultiDownshift.defaultProps = {
initialSelectedItems: []
};
MultiDownshift.__docgenInfo = {

@@ -311,2 +361,2 @@ "description": "@typedef {import(\"downshift\").ControllerStateAndHelpers<any>} ControllerStateAndHelpers\n@property {function(GetRemoveButtonPropsOptions): any} getRemoveButtonProps\n@property {any[]} selectedItems",

exports.default = MultiDownshift;
exports["default"] = MultiDownshift;

@@ -0,1 +1,13 @@

# [@hig/multi-downshift-v2.2.0](https://github.com/Autodesk/hig/compare/@hig/multi-downshift@2.1.0...@hig/multi-downshift@2.2.0) (2022-05-20)
### Bug Fixes
* trigger onChange when same option clicked back to back ([f7f317d](https://github.com/Autodesk/hig/commit/f7f317d))
### Features
* update to Downshift 6.0.0 ([ff46de1](https://github.com/Autodesk/hig/commit/ff46de1))
# [@hig/multi-downshift-v2.1.0](https://github.com/Autodesk/hig/compare/@hig/multi-downshift@2.0.0...@hig/multi-downshift@2.1.0) (2022-01-24)

@@ -2,0 +14,0 @@

{
"name": "@hig/multi-downshift",
"version": "2.1.0",
"version": "2.2.0",
"description": "Multi-selection support for Downshift",

@@ -30,3 +30,3 @@ "author": "Autodesk Inc.",

"peerDependencies": {
"downshift": "^3.2.0",
"downshift": "^6.0.0",
"react": "^17.0.0"

@@ -33,0 +33,0 @@ },

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc