Skip to content

Commit

Permalink
Combobox single selection - Error Text style fix (#3106)
Browse files Browse the repository at this point in the history
* Fixed combobox single selection css error

* Fixed tests
  • Loading branch information
matiassf authored Apr 7, 2023
1 parent ccbca06 commit d372da2
Show file tree
Hide file tree
Showing 8 changed files with 529 additions and 5 deletions.
162 changes: 162 additions & 0 deletions components/combobox/__docs__/__snapshots__/storybook-stories.storyshot
Original file line number Diff line number Diff line change
Expand Up @@ -4089,6 +4089,87 @@ exports[`DOM snapshots SLDSCombobox Inline Single Selection 1`] = `
</div>
`;

exports[`DOM snapshots SLDSCombobox Inline Single Selection Invalid 1`] = `
<div
className="slds-p-around_medium"
>
<div
className="slds-form-element"
>
<label
className="slds-form-element__label"
htmlFor="combobox-inline-single-invalid"
>
<abbr
className="slds-required"
title="required"
>
*
</abbr>
Search
</label>
<div
className="slds-form-element__control"
>
<div
className="slds-combobox_container"
>
<div
aria-expanded={false}
aria-haspopup="listbox"
className="slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click ignore-react-onclickoutside slds-has-error"
role="combobox"
>
<div
className="slds-combobox__form-element slds-input-has-icon slds-input-has-icon_right"
role="none"
>
<input
aria-activedescendant={null}
aria-autocomplete="list"
aria-describedby="combobox-inline-single-error"
autoComplete="off"
className="slds-input slds-combobox__input"
disabled={false}
id="combobox-inline-single-invalid"
onBlur={[Function]}
onChange={[Function]}
onClick={[Function]}
onFocus={[Function]}
onKeyDown={[Function]}
placeholder="Search Salesforce"
readOnly={false}
required={true}
role="textbox"
type="text"
value=""
/>
<svg
aria-hidden={true}
className="slds-input__icon slds-icon-text-default"
>
<use
href="/assets/icons/utility-sprite/svg/symbols.svg#search"
/>
</svg>
</div>
</div>
</div>
<div
className="slds-has-error"
>
<div
className="slds-form-element__help"
id="combobox-inline-single-error"
>
This field is invalid
</div>
</div>
</div>
</div>
</div>
`;

exports[`DOM snapshots SLDSCombobox Inline Single Selection Predefined Options Only 1`] = `
<div
className="slds-p-around_medium"
Expand Down Expand Up @@ -7327,6 +7408,87 @@ exports[`DOM snapshots SLDSCombobox Snapshot Inline Single Selection 1`] = `
</div>
`;

exports[`DOM snapshots SLDSCombobox Snapshot Inline Single Selection Invalid 1`] = `
<div
className="slds-p-around_medium"
>
<div
className="slds-form-element"
>
<label
className="slds-form-element__label"
htmlFor="combobox-inline-single-invalid"
>
<abbr
className="slds-required"
title="required"
>
*
</abbr>
Search
</label>
<div
className="slds-form-element__control"
>
<div
className="slds-combobox_container"
>
<div
aria-expanded={false}
aria-haspopup="listbox"
className="slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click ignore-react-onclickoutside slds-has-error"
role="combobox"
>
<div
className="slds-combobox__form-element slds-input-has-icon slds-input-has-icon_right"
role="none"
>
<input
aria-activedescendant={null}
aria-autocomplete="list"
aria-describedby="combobox-inline-single-error"
autoComplete="off"
className="slds-input slds-combobox__input"
disabled={false}
id="combobox-inline-single-invalid"
onBlur={[Function]}
onChange={[Function]}
onClick={[Function]}
onFocus={[Function]}
onKeyDown={[Function]}
placeholder="Search Salesforce"
readOnly={false}
required={true}
role="textbox"
type="text"
value=""
/>
<svg
aria-hidden={true}
className="slds-input__icon slds-icon-text-default"
>
<use
href="/assets/icons/utility-sprite/svg/symbols.svg#search"
/>
</svg>
</div>
</div>
</div>
<div
className="slds-has-error"
>
<div
className="slds-form-element__help"
id="combobox-inline-single-error"
>
This field is invalid
</div>
</div>
</div>
</div>
</div>
`;

exports[`DOM snapshots SLDSCombobox Snapshot Inline Single Selection Selected 1`] = `
<div
className="slds-p-around_medium"
Expand Down
8 changes: 8 additions & 0 deletions components/combobox/__docs__/storybook-stories.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import BaseWithInput from '../__examples__/base-with-input';
import Dialog from '../__examples__/dialog.jsx';
import InlineSingle from '../__examples__/inline-single';
import InlineSinglePredefinedOnly from '../__examples__/inline-single-predefined-options-only';
import InlineSingleInvalid from '../__examples__/inline-single-invalid';
import InlineSingleWithCustomOpenState from '../__examples__/inline-single-with-custom-open-state';
import InlineSingleEntityCombobox from '../__examples__/inline-single-entity-combobox';
import InlineSingleSearchAddEntities from '../__examples__/inline-single-search-add-entities';
Expand Down Expand Up @@ -48,6 +49,7 @@ import SnapshotInlineMultipleOpenLoading from '../__examples__/snapshot/inline-m
import SnapshotInlineMultipleSelection from '../__examples__/snapshot/inline-multiple-selection';
import SnapshotInlineMultipleSelectionSelected from '../__examples__/snapshot/inline-multiple-selection-selected';
import SnapshotInlineSingleEntityCombobox from '../__examples__/snapshot/inline-single-entity-combobox';
import SnapshotInlineSingleInvalid from '../__examples__/snapshot/inline-single-invalid';
import SnapshotInlineSingleSelection from '../__examples__/snapshot/inline-single-selection';
import SnapshotInlineSingleSelectionSelected from '../__examples__/snapshot/inline-single-selection-selected';
import SnapshotInlineSingleSearchAddEntitiesOpen from '../__examples__/snapshot/inline-single-search-add-entities-open';
Expand Down Expand Up @@ -89,6 +91,9 @@ storiesOf(COMBOBOX, module)
.add('Inline Single Selection Predefined Options Only', () => (
<InlineSinglePredefinedOnly action={action} />
))
.add('Inline Single Selection Invalid', () => (
<InlineSingleInvalid action={action} />
))
.add('Inline Single Selection With Custom Open State', () => (
<InlineSingleWithCustomOpenState action={action} />
))
Expand Down Expand Up @@ -161,6 +166,9 @@ storiesOf(COMBOBOX, module)
<SnapshotBaseOpenMenuInheritWidthOf action={action} />
))
.add('Snapshot Dialog Open', () => <SnapshotDialogOpen action={action} />)
.add('Snapshot Inline Single Selection Invalid', () => (
<SnapshotInlineSingleInvalid action={action} />
))
.add('Snapshot Inline Single Selection', () => (
<SnapshotInlineSingleSelection action={action} />
))
Expand Down
161 changes: 161 additions & 0 deletions components/combobox/__examples__/inline-single-invalid.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/* eslint-disable no-console, react/prop-types */
import React from 'react';
import Combobox from '~/components/combobox';
import Icon from '~/components/icon';
import comboboxFilterAndLimit from '~/components/combobox/filter';
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"
name={elem.type}
/>
),
},
}));

class Example extends React.Component {
constructor(props) {
super(props);

this.state = {
inputValue: '',
selection: [],
};
}

render() {
return (
<IconSettings iconPath="/assets/icons">
<Combobox
id="combobox-inline-single-invalid"
aria-describedby="combobox-inline-single-error"
events={{
onChange: (event, { value }) => {
if (this.props.action) {
this.props.action('onChange')(event, value);
} else if (console) {
console.log('onChange', event, value);
}
this.setState({ inputValue: value });
},
onRequestRemoveSelectedOption: (event, data) => {
this.setState({
inputValue: '',
selection: data.selection,
});
},
onSubmit: (event, { value }) => {
if (this.props.action) {
this.props.action('onChange')(event, value);
} else if (console) {
console.log('onChange', event, value);
}
this.setState({
inputValue: '',
selection: [
...this.state.selection,
{
label: value,
icon: (
<Icon
assistiveText={{ label: 'Account' }}
category="standard"
name="account"
/>
),
},
],
});
},
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',
placeholder: 'Search Salesforce',
}}
options={comboboxFilterAndLimit({
inputValue: this.state.inputValue,
options: accountsWithIcon,
selection: this.state.selection,
})}
selection={this.state.selection}
value={
this.state.selectedOption
? this.state.selectedOption.label
: this.state.inputValue
}
required
errorText="This field is invalid"
variant="inline-listbox"
/>
</IconSettings>
);
}
}

Example.displayName = 'ComboboxExample';
export default Example; // export is replaced with `ReactDOM.render(<Example />, mountNode);` at runtime
Loading

0 comments on commit d372da2

Please sign in to comment.