Create a generic select field

This commit is contained in:
Philipp Stracker 2025-01-23 15:18:54 +01:00
parent 59d971d5fe
commit 5e9abb8d80
No known key found for this signature in database
3 changed files with 65 additions and 38 deletions

View file

@ -1,5 +1,5 @@
// Fields
.ppcp-r {
.ppcp-r-app {
input[type='text'] {
border-color: $color-gray-700;
width: 100%;
@ -13,7 +13,7 @@
}
// MultiSelect control
.ppcp-r {
.ppcp-r-app {
.ppcp-r__radio-wrapper {
align-items: flex-start;
gap: 12px;
@ -33,45 +33,43 @@
padding-left: 32px;
}
// Select control styles
.ppcp-r__control {
border-radius: 2px;
border-color: $color-gray-700;
min-height: auto;
padding: 0;
}
.ppcp-r__input-container {
padding: 0;
margin: 0;
}
.ppcp-r__value-container {
padding: 0 0 0 7px;
}
.ppcp-r__indicator {
padding: 5px;
}
.ppcp-r__indicator-separator {
display: none;
}
.ppcp-r__value-container--has-value {
.ppcp-r__single-value {
color: $color-gray-800;
// Styles for "react-select" (see `Fields/Select.js`)
.ppcp-r-select {
.ppcp__control {
border-radius: 2px;
border-color: $color-gray-700;
min-height: auto;
padding: 0;
}
}
.ppcp-r__placeholder,
.ppcp-r__single-value {
@include font(13, 20, 400);
}
.ppcp__input-container {
padding: 0;
margin: 0;
}
.ppcp-r__option {
.ppcp-r__option--is-selected {
background-color: $color-gray-200;
.ppcp__value-container {
padding: 0 0 0 7px;
}
.ppcp__indicator {
padding: 5px;
}
.ppcp__value-container--has-value {
.ppcp__single-value {
color: $color-gray-800;
}
}
.ppcp__placeholder,
.ppcp__single-value {
@include font(13, 20, 400);
}
.ppcp__option {
.ppcp__option--is-selected {
background-color: $color-gray-200;
}
}
}
}

View file

@ -0,0 +1,28 @@
import { Icon } from '@wordpress/components';
import { chevronDown, chevronUp } from '@wordpress/icons';
// TODO: Replace this with the WordPress select control once V2 with multi-select is ready.
// see https://wordpress.github.io/gutenberg/?path=/story/components-customselectcontrol-v2--multiple-selection
import { default as ReactSelect, components } from 'react-select';
const DropdownIndicator = ( props ) => (
<components.DropdownIndicator { ...props }>
<Icon icon={ props.selectProps.menuIsOpen ? chevronUp : chevronDown } />
</components.DropdownIndicator>
);
const IndicatorSeparator = () => null;
const Select = ( { options, value, onChange, isMulti, placeholder } ) => (
<ReactSelect
className="ppcp-r-select"
classNamePrefix="ppcp"
isMulti={ isMulti }
options={ options }
value={ value }
onChange={ onChange }
placeholder={ placeholder }
components={ { DropdownIndicator, IndicatorSeparator } }
/>
);
export default Select;

View file

@ -7,3 +7,4 @@ export { default as CheckboxGroup } from './CheckboxGroup';
export { default as PayPalRdb } from './RadioButton';
export { default as PayPalRdbWithContent } from './RadioContent';
export { default as SelectBox } from './SelectableContent';
export { default as Select } from './Select';