@salesforce/design-system-react
Version:
Salesforce Lightning Design System for React
135 lines (127 loc) • 2.9 kB
JSX
/* eslint-disable no-console, react/prop-types */
import React from 'react';
import Combobox from '~/components/combobox';
import Icon from '~/components/icon';
import IconSettings from '~/components/icon-settings';
const accounts = [
{
id: '1',
label: 'Acme',
subTitle: 'Account • San Francisco',
type: 'account',
},
{
id: '2',
label: 'Salesforce.com, Inc.',
subTitle: 'Account • San Francisco',
type: 'account',
},
{
id: '3',
label: "Paddy's Pub",
subTitle: 'Account • Boston, MA',
type: 'account',
},
{
id: '4',
label: 'Tyrell Corp',
subTitle: 'Account • San Francisco, CA',
type: 'account',
},
{
id: '5',
label: 'Paper St. Soap Company',
subTitle: 'Account • Beloit, WI',
type: 'account',
},
{
id: '6',
label: 'Nakatomi Investments',
subTitle: 'Account • Chicago, IL',
type: 'account',
},
{ id: '7', label: 'Acme Landscaping', type: 'account' },
{
id: '8',
label: 'Acme Construction',
subTitle: 'Account • Grand Marais, MN',
type: 'account',
},
];
const accountsWithIcon = accounts.map((elem) => ({
...elem,
...{
icon: (
<Icon
assistiveText={{ label: 'Account' }}
category="standard"
size="x-small"
name={elem.type}
/>
),
},
}));
const CustomMenuItem = (props) => (
<span className="slds-media">
<span className="slds-m-left_x-small slds-m-right_x-small">
{props.option.icon}
</span>
<span className="slds-media__body">
<span className="slds-truncate" title={props.option.label}>
{props.selected ? (
<span className="slds-assistive-text">
{props.assistiveText.optionSelectedInMenu}
</span>
) : null}{' '}
{props.option.label}
</span>
</span>
</span>
);
CustomMenuItem.displayName = 'CustomMenuItem';
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
inputValue: '',
selection: [],
};
}
render() {
return (
<IconSettings iconPath="/assets/icons">
<Combobox
id="combobox-readonly-single-custom-item"
events={{
onSelect: (event, data) => {
if (this.props.action) {
this.props.action('onSelect')(
event,
...Object.keys(data).map((key) => data[key])
);
} else if (console) {
console.log('onSelect', event, data);
}
this.setState({
inputValue: '',
selection: data.selection,
});
},
}}
labels={{
label: 'Search',
placeholderReadOnly: 'Select company',
}}
onRenderMenuItem={CustomMenuItem}
options={accountsWithIcon}
selection={this.state.selection}
value={this.state.inputValue}
variant="readonly"
{...this.props}
/>
</IconSettings>
);
}
}
Example.displayName = 'ComboboxExample';
export default Example; // export is replaced with `ReactDOM.render(<Example />, mountNode);` at runtime