@carbon/ibm-products
Version:
Carbon for IBM Products
127 lines (122 loc) • 4.58 kB
JavaScript
/**
* Copyright IBM Corp. 2020, 2025
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var React = require('react');
var index = require('../../_virtual/index.js');
var AddSelectBody = require('./AddSelectBody.js');
var addSelectUtils = require('./add-select-utils.js');
const componentName = 'AddSelect';
const AddSelect = /*#__PURE__*/React.forwardRef((_ref, ref) => {
let {
items = {
entries: []
},
globalFilters,
...props
} = _ref;
const useNormalizedItems = !!items.entries.find(item => item.children);
const normalizedItems = useNormalizedItems ? addSelectUtils.normalize(items) : null;
const globalFilterOpts = props.multi && globalFilters?.length ? addSelectUtils.getGlobalFilterValues(globalFilters, normalizedItems) : null;
const defaultModifiers = props.multi && items.modifiers ? items.entries.map(item => {
const modifierAttribute = items?.modifiers?.id;
const modifier = {
id: item.id
};
return {
...modifier,
...(modifierAttribute && {
[modifierAttribute]: item[modifierAttribute]
})
};
}) : [];
return /*#__PURE__*/React.createElement(AddSelectBody.AddSelectBody, _rollupPluginBabelHelpers.extends({}, props, {
ref: ref,
items: items,
normalizedItems: normalizedItems,
useNormalizedItems: useNormalizedItems,
globalFilterOpts: globalFilterOpts,
defaultModifiers: defaultModifiers
}));
});
AddSelect.propTypes = {
className: index.default.string,
clearFiltersText: index.default.string,
closeIconDescription: index.default.string.isRequired,
columnInputPlaceholder: index.default.string,
description: index.default.string.isRequired,
filterByLabel: index.default.string,
/**@ts-ignore */
globalFilters: index.default.arrayOf(index.default.shape({
id: index.default.string,
label: index.default.string
})),
globalFiltersIconDescription: index.default.string,
globalFiltersLabel: index.default.string,
globalFiltersPlaceholderText: index.default.string,
globalFiltersPrimaryButtonText: index.default.string,
globalFiltersSecondaryButtonText: index.default.string,
globalSearchLabel: index.default.string.isRequired,
globalSearchPlaceholder: index.default.string,
globalSortBy: index.default.array,
illustrationTheme: index.default.oneOf(['light', 'dark']),
influencerTitle: index.default.string,
/**@ts-ignore */
items: index.default.shape({
modifiers: index.default.shape({
id: index.default.string,
label: index.default.string,
options: index.default.array,
multiSelect: index.default.bool
}),
sortBy: index.default.array,
filterBy: index.default.array,
entries: index.default.arrayOf(index.default.shape({
avatar: index.default.shape({
alt: index.default.string,
icon: index.default.func,
src: index.default.string,
theme: index.default.oneOf(['light', 'dark'])
}),
children: index.default.object,
icon: index.default.func,
id: index.default.string.isRequired,
meta: index.default.oneOfType([index.default.arrayOf(index.default.shape({
id: index.default.string,
title: index.default.string,
value: index.default.string
})), index.default.node]),
subtitle: index.default.string,
title: index.default.string.isRequired,
value: index.default.string.isRequired
})).isRequired
}).isRequired,
itemsLabel: index.default.string.isRequired,
metaIconDescription: index.default.string,
metaPanelTitle: index.default.string,
multi: index.default.bool.isRequired,
navIconDescription: index.default.string,
noResultsDescription: index.default.string.isRequired,
noResultsTitle: index.default.string.isRequired,
noSelectionDescription: index.default.string,
noSelectionTitle: index.default.string,
onClose: index.default.func.isRequired,
onCloseButtonText: index.default.string.isRequired,
onSubmit: index.default.func.isRequired,
onSubmitButtonText: index.default.string.isRequired,
open: index.default.bool.isRequired,
/**
* portal target for the all tags modal
*/
/**@ts-ignore */
portalTarget: index.default.node,
searchResultsTitle: index.default.string,
sortByLabel: index.default.string,
title: index.default.string.isRequired
};
AddSelect.displayName = componentName;
exports.AddSelect = AddSelect;