Skip to content

Commit 701a784

Browse files
committed
Use select componsition to style pf3 select
1 parent cf5b39b commit 701a784

File tree

8 files changed

+170
-22
lines changed

8 files changed

+170
-22
lines changed

packages/common/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"description": "Common components, helpers and other pieces of code",
55
"license": "Apache-2.0",
66
"main": "index.js",
7-
"scripts": {
8-
},
7+
"scripts": {},
98
"repository": "[email protected]:data-driven-forms/react-forms.git",
109
"devDependencies": {
1110
"@babel/core": "^7.2.2",
@@ -47,7 +46,8 @@
4746
"webpack-merge": "^4.1.4"
4847
},
4948
"dependencies": {
50-
"@babel/plugin-proposal-class-properties": "^7.1.0"
49+
"@babel/plugin-proposal-class-properties": "^7.1.0",
50+
"react-select": "^3.0.8"
5151
},
5252
"peerDependencies": {
5353
"react": "^16.6.0",

packages/common/src/select/index.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import React, { Component } from 'react';
2+
import ReactSelect from 'react-select';
3+
import PropTypes from 'prop-types';
4+
5+
class Select extends Component {
6+
render() {
7+
return (
8+
<ReactSelect className={ this.props.classNamePrefix } { ...this.props } />
9+
);
10+
}
11+
}
12+
13+
Select.propTypes = {
14+
options: PropTypes.array,
15+
onChange: PropTypes.func,
16+
classNamePrefix: PropTypes.string.isRequired,
17+
};
18+
19+
Select.defaultProps = {
20+
options: [],
21+
};
22+
23+
const DataDrivenSelect = ({ multi, ...props }) => {
24+
const isMulti = props.isMulti || multi;
25+
const closeMenuOnSelect = !isMulti;
26+
return (
27+
<Select
28+
hideSelectedOptions={ false }
29+
isMulti={ isMulti }
30+
{ ...props }
31+
closeMenuOnSelect={ closeMenuOnSelect }
32+
/>
33+
);
34+
};
35+
36+
DataDrivenSelect.propTypes = {
37+
value: PropTypes.any,
38+
onChange: PropTypes.func,
39+
multi: PropTypes.bool,
40+
placeholder: PropTypes.string,
41+
isMulti: PropTypes.bool,
42+
classNamePrefix: PropTypes.string.isRequired,
43+
};
44+
45+
DataDrivenSelect.defaultProps = {
46+
placeholder: 'Choose...',
47+
isSearchable: false,
48+
isClearable: false,
49+
};
50+
51+
export default DataDrivenSelect;

packages/pf3-component-mapper/demo/index.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ import wizardSchema from './demo-schemas/wizard-schema';
1010
import sandbox from './demo-schemas/sandbox';
1111
import Switch from "../src/form-fields/switch-field";
1212

13+
const selectSchema = {
14+
fields: [{
15+
component: 'select-field',
16+
name: 'select',
17+
label: 'Select',
18+
menuIsOpen: true,
19+
options: [{
20+
label: 'foo',
21+
value: 123
22+
}, {
23+
label: 'bar',
24+
value: 231
25+
}]
26+
}]
27+
}
28+
1329
class App extends React.Component {
1430
render() {
1531
const initialValues = {
@@ -26,7 +42,7 @@ class App extends React.Component {
2642
schemaType="default"
2743
formFieldsMapper={formFieldsMapper}
2844
layoutMapper={layoutMapper}
29-
schema={sandbox}
45+
schema={selectSchema}
3046
onCancel={() => console.log('cancel')}
3147
/>
3248
</Row>

packages/pf3-component-mapper/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
]
8989
},
9090
"dependencies": {
91+
"clsx": "^1.0.4",
9192
"react-day-picker": "^7.3.2",
9293
"react-select": "^2.1.2"
9394
},

packages/pf3-component-mapper/src/form-fields/form-fields.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@ import MultipleChoiceList from './multiple-choice-list';
77
import RequiredLabel from './required-label';
88
import Switch from './switch-field';
99
import { DateTimePicker } from './date-time-picker/date-time-picker';
10-
import Select from './select';
10+
1111
import RagioGroup from './radio';
1212
import PlainText from './plain-text';
1313

14+
import Select from '@data-driven-forms/common/src/select';
15+
import './select/react-select.scss';
16+
import Option from './select/option';
17+
1418
const selectComponent = ({
1519
componentType,
1620
input,
@@ -51,6 +55,10 @@ const selectComponent = ({
5155
),
5256
[componentTypes.SELECT_COMPONENT]: () => <div>
5357
<Select
58+
components={{
59+
Option,
60+
}}
61+
classNamePrefix="ddorg__pf3-component-mapper__select"
5462
loadOptions={ loadOptions }
5563
options={ options }
5664
invalid={ invalid }
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import React from 'react';
2+
import { components } from 'react-select';
3+
import PropTypes from 'prop-types';
4+
import clsx from 'clsx';
5+
6+
const Option = (props) => {
7+
console.log(props);
8+
return (
9+
<div className={ clsx('ddorg__pf3-component-mapper__select__option', {
10+
'ddorg__pf3-component-mapper__select__option--is-focused': props.isFocused,
11+
'ddorg__pf3-component-mapper__select__option--is-selected': props.isSelected,
12+
}) }>
13+
<components.Option { ...props } />
14+
{ props.isSelected && (props.selectProps && !props.selectProps.isCheckbox) && <i className="selected-indicator fa fa-check"></i> }
15+
</div>
16+
);
17+
};
18+
19+
Option.propTypes = {
20+
isFocused: PropTypes.bool,
21+
isSelected: PropTypes.bool,
22+
getStyles: PropTypes.func.isRequired,
23+
selectOption: PropTypes.func,
24+
cx: PropTypes.func.isRequired,
25+
data: PropTypes.shape({
26+
selected: PropTypes.bool,
27+
}),
28+
innerProps: PropTypes.shape({
29+
id: PropTypes.string,
30+
}),
31+
selectProps: PropTypes.shape({
32+
isCheckbox: PropTypes.bool,
33+
}),
34+
};
35+
36+
Option.defaultProps = {
37+
isFocused: false,
38+
isSelected: false,
39+
selectOption: () => undefined,
40+
selectProps: {
41+
isCheckbox: false,
42+
},
43+
innerProps: {
44+
id: 'some-classname',
45+
},
46+
};
47+
48+
export default Option;

packages/pf3-component-mapper/src/form-fields/select/react-select.scss

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,33 @@ div.field-group {
2121
overflow: hidden;
2222
position: relative;
2323
width: 100%;
24+
}
25+
26+
.ddorg__pf3-component-mapper__select {
27+
.ddorg__pf3-component-mapper__select__option {
28+
background-color: #ffffff;
29+
border-color: transparent;
30+
border-style: solid;
31+
border-width: 1px 0;
32+
padding: 1px 10px;
33+
font-weight: 400;
34+
cursor: pointer;
35+
display: flex;
36+
>*:first-child {
37+
flex-grow: 1;
38+
}
39+
}
40+
.ddorg__pf3-component-mapper__select__option--is-focused {
41+
color: #4d5258;
42+
background-color: #edf8ff;
43+
}
44+
.ddorg__pf3-component-mapper__select__option--is-selected {
45+
background-color: #0088ce;
46+
border-color: #0088ce;
47+
color: #fff;
48+
>.selected-indicator {
49+
flex-grow: 0;
50+
align-self: center;
51+
}
52+
}
2453
}

yarn.lock

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5295,17 +5295,18 @@ comma-separated-tokens@^1.0.0:
52955295
version "1.0.7"
52965296
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59"
52975297

5298-
5298+
[email protected], commander@~2.17.1:
52995299
version "2.17.1"
53005300
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
5301+
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
53015302

53025303
53035304
version "2.9.0"
53045305
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
53055306
dependencies:
53065307
graceful-readlink ">= 1.0.0"
53075308

5308-
commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.3:
5309+
commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.8.1, commander@~2.20.3:
53095310
version "2.20.3"
53105311
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
53115312

@@ -14670,7 +14671,7 @@ react-select@^2.1.2, react-select@^2.2.0:
1467014671
react-input-autosize "^2.2.1"
1467114672
react-transition-group "^2.2.1"
1467214673

14673-
react-select@^3.0.4:
14674+
react-select@^3.0.4, react-select@^3.0.8:
1467414675
version "3.0.8"
1467514676
resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.8.tgz#06ff764e29db843bcec439ef13e196865242e0c1"
1467614677
dependencies:
@@ -16040,9 +16041,10 @@ source-map-support@^0.4.15:
1604016041
dependencies:
1604116042
source-map "^0.5.6"
1604216043

16043-
source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12:
16044+
source-map-support@^0.5.6, source-map-support@~0.5.6:
1604416045
version "0.5.16"
1604516046
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
16047+
integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
1604616048
dependencies:
1604716049
buffer-from "^1.0.0"
1604816050
source-map "^0.6.0"
@@ -16721,21 +16723,14 @@ terser-webpack-plugin@^2.2.1:
1672116723
terser "^4.3.9"
1672216724
webpack-sources "^1.4.3"
1672316725

16724-
16725-
version "4.0.0"
16726-
resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374"
16727-
dependencies:
16728-
commander "^2.19.0"
16729-
source-map "~0.6.1"
16730-
source-map-support "~0.5.10"
16731-
16732-
terser@^4.1.0, terser@^4.1.2, terser@^4.3.9:
16733-
version "4.4.0"
16734-
resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.0.tgz#22c46b4817cf4c9565434bfe6ad47336af259ac3"
16726+
[email protected], [email protected], terser@^4.1.0, terser@^4.1.2, terser@^4.3.9:
16727+
version "3.14.1"
16728+
resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.1.tgz#cc4764014af570bc79c79742358bd46926018a32"
16729+
integrity sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==
1673516730
dependencies:
16736-
commander "^2.20.0"
16731+
commander "~2.17.1"
1673716732
source-map "~0.6.1"
16738-
source-map-support "~0.5.12"
16733+
source-map-support "~0.5.6"
1673916734

1674016735
test-exclude@^4.2.1:
1674116736
version "4.2.3"

0 commit comments

Comments
 (0)