Skip to content

Commit f8c1ec2

Browse files
committed
Added pf3 select indicators styling
1 parent 701a784 commit f8c1ec2

File tree

9 files changed

+135
-12
lines changed

9 files changed

+135
-12
lines changed

packages/common/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
},
4848
"dependencies": {
4949
"@babel/plugin-proposal-class-properties": "^7.1.0",
50+
"clsx": "^1.0.4",
5051
"react-select": "^3.0.8"
5152
},
5253
"peerDependencies": {

packages/common/src/select/index.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import React, { Component } from 'react';
22
import ReactSelect from 'react-select';
33
import PropTypes from 'prop-types';
4+
import clsx from 'clsx';
45

56
class Select extends Component {
67
render() {
8+
console.log(this.props.invalid)
79
return (
8-
<ReactSelect className={ this.props.classNamePrefix } { ...this.props } />
10+
<ReactSelect className={ clsx(this.props.classNamePrefix, {
11+
'has-error': this.props.invalid,
12+
}) } { ...this.props } />
913
);
1014
}
1115
}
@@ -14,10 +18,12 @@ Select.propTypes = {
1418
options: PropTypes.array,
1519
onChange: PropTypes.func,
1620
classNamePrefix: PropTypes.string.isRequired,
21+
invalid: PropTypes.bool,
1722
};
1823

1924
Select.defaultProps = {
2025
options: [],
26+
invalid: false,
2127
};
2228

2329
const DataDrivenSelect = ({ multi, ...props }) => {

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,13 @@ const selectSchema = {
1515
component: 'select-field',
1616
name: 'select',
1717
label: 'Select',
18+
isRequired: true,
19+
validateOnMount: true,
1820
menuIsOpen: true,
21+
isClearable: true,
22+
validate: [{
23+
type: 'required-validator'
24+
}],
1925
options: [{
2026
label: 'foo',
2127
value: 123

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import PlainText from './plain-text';
1414
import Select from '@data-driven-forms/common/src/select';
1515
import './select/react-select.scss';
1616
import Option from './select/option';
17+
import DropdownIndicator from './select/dropdown-indicator';
18+
import ClearIndicator from './select/clear-indicator';
1719

1820
const selectComponent = ({
1921
componentType,
@@ -56,12 +58,14 @@ const selectComponent = ({
5658
[componentTypes.SELECT_COMPONENT]: () => <div>
5759
<Select
5860
components={{
61+
ClearIndicator,
5962
Option,
63+
DropdownIndicator,
6064
}}
6165
classNamePrefix="ddorg__pf3-component-mapper__select"
6266
loadOptions={ loadOptions }
6367
options={ options }
64-
invalid={ invalid }
68+
invalid={ !!invalid }
6569
input={ input }
6670
placeholder={ placeholder }
6771
isSearchable={ isSearchable }
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
const ClearIndicator = ({
5+
clearValue,
6+
innerProps: { ref, ...restInnerProps },
7+
}) => (
8+
<button { ...restInnerProps } onClick={ clearValue } className="ddorg__pf3-component-mapper__select__close-indicator">
9+
<i className="fa fa-times" />
10+
</button>
11+
);
12+
13+
ClearIndicator.propTypes = {
14+
innerProps: PropTypes.object.isRequired,
15+
clearValue: PropTypes.func,
16+
};
17+
18+
ClearIndicator.defaultProps = {
19+
clearValue: () => undefined,
20+
};
21+
22+
export default ClearIndicator;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
// TODO find icon for loading spinner
5+
6+
const DropdownIndicator = ({ selectProps: { isFetching }}) => isFetching
7+
? <i className="ddorg__pf3-component-mapper__select__dropdown-indicator fa fa-angle-down" />
8+
: <i className="ddorg__pf3-component-mapper__select__dropdown-indicator fa fa-angle-down"/>;
9+
10+
DropdownIndicator.propTypes = {
11+
selectProps: PropTypes.shape({
12+
isFetching: PropTypes.bool,
13+
}).isRequired,
14+
};
15+
16+
export default DropdownIndicator;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import PropTypes from 'prop-types';
44
import clsx from 'clsx';
55

66
const Option = (props) => {
7-
console.log(props);
87
return (
98
<div className={ clsx('ddorg__pf3-component-mapper__select__option', {
109
'ddorg__pf3-component-mapper__select__option--is-focused': props.isFocused,

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

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,49 @@ div.field-group {
2424
}
2525

2626
.ddorg__pf3-component-mapper__select {
27+
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
28+
font-family: "Open Sans", Helvetica, Arial, sans-serif;
29+
padding: 0;
30+
border: 1px solid transparent;
31+
border-color: rgb(187, 187, 187);
32+
display: inline-flex;
33+
min-width: 250px;
34+
max-width: calc(100% - 2px);
35+
&.has-error {
36+
border: 1px solid;
37+
border-color: #cc0000;
38+
}
39+
.ddorg__pf3-component-mapper__select__control {
40+
border: none;
41+
width: 100%;
42+
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
43+
box-shadow: 0 2px 3px rgba(3, 3, 3, 0.1);
44+
padding: 0;
45+
min-height: initial;
46+
background-color: #f1f1f1;
47+
color: #4d5258;
48+
background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%);
49+
background-repeat: repeat-x;
50+
cursor: pointer;
51+
white-space: nowrap;
52+
font-size: 12px;
53+
border-radius: 1px;
54+
font-weight: 600;
55+
&:hover {
56+
background-color: #f1f1f1;
57+
background-image: none;
58+
border-color: #bbbbbb;
59+
color: #4d5258;
60+
}
61+
}
62+
.ddorg__pf3-component-mapper__select__menu {
63+
background: #fff;
64+
margin: 0;
65+
margin-top: 8px;
66+
border-radius: 0;
67+
padding-top: 5px;
68+
padding-bottom: 5px;
69+
}
2770
.ddorg__pf3-component-mapper__select__option {
2871
background-color: #ffffff;
2972
border-color: transparent;
@@ -50,4 +93,21 @@ div.field-group {
5093
align-self: center;
5194
}
5295
}
96+
.ddorg__pf3-component-mapper__select__indicator-separator {
97+
display: none;
98+
}
99+
.ddorg__pf3-component-mapper__select__indicators {
100+
padding: 0;
101+
padding-right: 8px;
102+
&:hover {
103+
color: rgb(77, 82, 88),
104+
};
105+
}
106+
.ddorg__pf3-component-mapper__select__close-indicator {
107+
margin-right: 4px;
108+
padding: 0;
109+
color: #4d5258;
110+
background: none;
111+
border: none;
112+
}
53113
}

yarn.lock

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5295,7 +5295,7 @@ 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-
[email protected], commander@~2.17.1:
5298+
52995299
version "2.17.1"
53005300
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
53015301
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
@@ -5306,7 +5306,7 @@ [email protected]:
53065306
dependencies:
53075307
graceful-readlink ">= 1.0.0"
53085308

5309-
commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.8.1, commander@~2.20.3:
5309+
commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.3:
53105310
version "2.20.3"
53115311
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
53125312

@@ -16041,7 +16041,7 @@ source-map-support@^0.4.15:
1604116041
dependencies:
1604216042
source-map "^0.5.6"
1604316043

16044-
source-map-support@^0.5.6, source-map-support@~0.5.6:
16044+
source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12:
1604516045
version "0.5.16"
1604616046
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
1604716047
integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
@@ -16723,14 +16723,23 @@ terser-webpack-plugin@^2.2.1:
1672316723
terser "^4.3.9"
1672416724
webpack-sources "^1.4.3"
1672516725

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==
16726+
16727+
version "4.0.0"
16728+
resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374"
16729+
integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==
16730+
dependencies:
16731+
commander "^2.19.0"
16732+
source-map "~0.6.1"
16733+
source-map-support "~0.5.10"
16734+
16735+
terser@^4.1.0, terser@^4.1.2, terser@^4.3.9:
16736+
version "4.4.3"
16737+
resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.3.tgz#401abc52b88869cf904412503b1eb7da093ae2f0"
16738+
integrity sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==
1673016739
dependencies:
16731-
commander "~2.17.1"
16740+
commander "^2.20.0"
1673216741
source-map "~0.6.1"
16733-
source-map-support "~0.5.6"
16742+
source-map-support "~0.5.12"
1673416743

1673516744
test-exclude@^4.2.1:
1673616745
version "4.2.3"

0 commit comments

Comments
 (0)