envoc-form 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
7
7
 
8
8
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
9
9
 
10
+ import classNames from 'classnames';
10
11
  import React, { useEffect, useRef } from 'react';
11
12
  import { default as ReactSelect } from 'react-select';
12
13
  export var overrideTheme = function overrideTheme(theme) {
@@ -22,6 +23,8 @@ var red = '#f86c6b';
22
23
  var inputBorderColor = '#c2cfd6';
23
24
  var inputBorderColorFocused = '#8ad4ee';
24
25
  var inputBoxShadowFocused = '0 0 0 0.2rem rgba(32, 168, 216, 0.25)';
26
+ var placeholderColor = '#9ca3af';
27
+ var disabledSingleValueColor = '#4b5563';
25
28
  export var customStyles = {
26
29
  control: function control(provided, _ref) {
27
30
  var isFocused = _ref.isFocused,
@@ -39,6 +42,17 @@ export var customStyles = {
39
42
  return _objectSpread(_objectSpread({}, provided), {}, {
40
43
  zIndex: 3
41
44
  });
45
+ },
46
+ singleValue: function singleValue(provided, state) {
47
+ var color = state.isDisabled ? disabledSingleValueColor : '';
48
+ return _objectSpread(_objectSpread({}, provided), {}, {
49
+ color: color
50
+ });
51
+ },
52
+ placeholder: function placeholder(defaultStyles) {
53
+ return _objectSpread(_objectSpread({}, defaultStyles), {}, {
54
+ color: placeholderColor
55
+ });
42
56
  }
43
57
  }; // internal to forms use only
44
58
 
@@ -48,7 +62,7 @@ export default function ReactSelectInput(_ref2) {
48
62
  disabled = _ref2.disabled,
49
63
  onSelected = _ref2.onSelected,
50
64
  onChange = _ref2.onChange,
51
- onBlur = _ref2.onBlur,
65
+ _onBlur = _ref2.onBlur,
52
66
  value = _ref2.value,
53
67
  options = _ref2.options,
54
68
  defaultValue = _ref2.defaultValue,
@@ -61,6 +75,23 @@ export default function ReactSelectInput(_ref2) {
61
75
  useEffect(function () {
62
76
  onSelectedRef.current && onSelectedRef.current(selectedItems);
63
77
  }, [selectedItems]);
78
+ var onBlurRef = useRef(_onBlur);
79
+ onBlurRef.current = _onBlur;
80
+ var touched = meta.touched;
81
+ useEffect(function () {
82
+ if (!touched) return; // without the timer set to 0, if the empty option is selected the required message doesn't appear until clicked away from the select input
83
+
84
+ var timerRef = setTimeout(function () {
85
+ onBlurRef.current && onBlurRef.current();
86
+ }, 0);
87
+ return function () {
88
+ clearTimeout(timerRef);
89
+ };
90
+ }, [value, touched]);
91
+ var classes = classNames(className, 'react-select-input', {
92
+ 'is-invalid': !!meta.error,
93
+ disabled: disabled
94
+ });
64
95
  return /*#__PURE__*/React.createElement(ReactSelect, _extends({}, props, {
65
96
  options: options,
66
97
  isDisabled: disabled,
@@ -71,7 +102,10 @@ export default function ReactSelectInput(_ref2) {
71
102
  getOptionValue: getOptionValue,
72
103
  value: selectedItems,
73
104
  onChange: handleChange,
74
- className: "react-select-input",
105
+ onBlur: function onBlur() {
106
+ return _onBlur();
107
+ },
108
+ className: classes,
75
109
  theme: overrideTheme,
76
110
  styles: customStyles,
77
111
  menuPortalTarget: document.body,
@@ -16,6 +16,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
16
16
 
17
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
18
 
19
+ var _classnames = _interopRequireDefault(require("classnames"));
20
+
19
21
  var _react = _interopRequireWildcard(require("react"));
20
22
 
21
23
  var _reactSelect = _interopRequireDefault(require("react-select"));
@@ -45,6 +47,8 @@ var red = '#f86c6b';
45
47
  var inputBorderColor = '#c2cfd6';
46
48
  var inputBorderColorFocused = '#8ad4ee';
47
49
  var inputBoxShadowFocused = '0 0 0 0.2rem rgba(32, 168, 216, 0.25)';
50
+ var placeholderColor = '#9ca3af';
51
+ var disabledSingleValueColor = '#4b5563';
48
52
  var customStyles = {
49
53
  control: function control(provided, _ref) {
50
54
  var isFocused = _ref.isFocused,
@@ -62,6 +66,17 @@ var customStyles = {
62
66
  return _objectSpread(_objectSpread({}, provided), {}, {
63
67
  zIndex: 3
64
68
  });
69
+ },
70
+ singleValue: function singleValue(provided, state) {
71
+ var color = state.isDisabled ? disabledSingleValueColor : '';
72
+ return _objectSpread(_objectSpread({}, provided), {}, {
73
+ color: color
74
+ });
75
+ },
76
+ placeholder: function placeholder(defaultStyles) {
77
+ return _objectSpread(_objectSpread({}, defaultStyles), {}, {
78
+ color: placeholderColor
79
+ });
65
80
  }
66
81
  }; // internal to forms use only
67
82
 
@@ -73,7 +88,7 @@ function ReactSelectInput(_ref2) {
73
88
  disabled = _ref2.disabled,
74
89
  onSelected = _ref2.onSelected,
75
90
  onChange = _ref2.onChange,
76
- onBlur = _ref2.onBlur,
91
+ _onBlur = _ref2.onBlur,
77
92
  value = _ref2.value,
78
93
  options = _ref2.options,
79
94
  defaultValue = _ref2.defaultValue,
@@ -85,6 +100,23 @@ function ReactSelectInput(_ref2) {
85
100
  (0, _react.useEffect)(function () {
86
101
  onSelectedRef.current && onSelectedRef.current(selectedItems);
87
102
  }, [selectedItems]);
103
+ var onBlurRef = (0, _react.useRef)(_onBlur);
104
+ onBlurRef.current = _onBlur;
105
+ var touched = meta.touched;
106
+ (0, _react.useEffect)(function () {
107
+ if (!touched) return; // without the timer set to 0, if the empty option is selected the required message doesn't appear until clicked away from the select input
108
+
109
+ var timerRef = setTimeout(function () {
110
+ onBlurRef.current && onBlurRef.current();
111
+ }, 0);
112
+ return function () {
113
+ clearTimeout(timerRef);
114
+ };
115
+ }, [value, touched]);
116
+ var classes = (0, _classnames["default"])(className, 'react-select-input', {
117
+ 'is-invalid': !!meta.error,
118
+ disabled: disabled
119
+ });
88
120
  return /*#__PURE__*/_react["default"].createElement(_reactSelect["default"], (0, _extends2["default"])({}, props, {
89
121
  options: options,
90
122
  isDisabled: disabled,
@@ -95,7 +127,10 @@ function ReactSelectInput(_ref2) {
95
127
  getOptionValue: getOptionValue,
96
128
  value: selectedItems,
97
129
  onChange: handleChange,
98
- className: "react-select-input",
130
+ onBlur: function onBlur() {
131
+ return _onBlur();
132
+ },
133
+ className: classes,
99
134
  theme: overrideTheme,
100
135
  styles: customStyles,
101
136
  menuPortalTarget: document.body,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "envoc-form",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Envoc form components",
5
5
  "keywords": [
6
6
  "react-component",
@@ -26,7 +26,7 @@
26
26
  "axios": "^0.21.1",
27
27
  "classnames": "^2.3.1",
28
28
  "date-fns": "^2.22.1",
29
- "envoc-request": "^3.1.0",
29
+ "envoc-request": "^3.2.0",
30
30
  "lru-cache": "^6.0.0",
31
31
  "prop-types": "^15.7.2",
32
32
  "react-date-picker": "^8.2.0",
@@ -110,7 +110,7 @@ exports[`AddressInput has matching snapshot 1`] = `
110
110
  class=" css-lbak6p-Component"
111
111
  >
112
112
  <div
113
- class=" css-1osw1h9-placeholder"
113
+ class=" css-1vk4ta-placeholder"
114
114
  >
115
115
  State
116
116
  </div>
@@ -23,7 +23,7 @@ exports[`BoolInput has matching snapshot 1`] = `
23
23
  class=" css-lbak6p-Component"
24
24
  >
25
25
  <div
26
- class=" css-1osw1h9-placeholder"
26
+ class=" css-1vk4ta-placeholder"
27
27
  >
28
28
  Select...
29
29
  </div>
@@ -234,7 +234,7 @@ exports[`FormInput has matching select snapshot 1`] = `
234
234
  class=" css-lbak6p-Component"
235
235
  >
236
236
  <div
237
- class=" css-1osw1h9-placeholder"
237
+ class=" css-1vk4ta-placeholder"
238
238
  >
239
239
  Select...
240
240
  </div>
@@ -1,3 +1,4 @@
1
+ import classNames from 'classnames';
1
2
  import React, { useEffect, useRef } from 'react';
2
3
  import { default as ReactSelect } from 'react-select';
3
4
 
@@ -17,6 +18,8 @@ const red = '#f86c6b';
17
18
  const inputBorderColor = '#c2cfd6';
18
19
  const inputBorderColorFocused = '#8ad4ee';
19
20
  const inputBoxShadowFocused = '0 0 0 0.2rem rgba(32, 168, 216, 0.25)';
21
+ const placeholderColor = '#9ca3af';
22
+ const disabledSingleValueColor = '#4b5563';
20
23
 
21
24
  export const customStyles = {
22
25
  control: (provided, { isFocused, selectProps }) => {
@@ -35,6 +38,13 @@ export const customStyles = {
35
38
  };
36
39
  },
37
40
  menu: (provided) => ({ ...provided, zIndex: 3 }),
41
+ singleValue: (provided, state) => {
42
+ const color = state.isDisabled ? disabledSingleValueColor : '';
43
+ return { ...provided, color };
44
+ },
45
+ placeholder: (defaultStyles) => {
46
+ return { ...defaultStyles, color: placeholderColor };
47
+ },
38
48
  };
39
49
 
40
50
  // internal to forms use only
@@ -59,6 +69,28 @@ export default function ReactSelectInput({
59
69
  onSelectedRef.current && onSelectedRef.current(selectedItems);
60
70
  }, [selectedItems]);
61
71
 
72
+ const onBlurRef = useRef(onBlur);
73
+ onBlurRef.current = onBlur;
74
+ const { touched } = meta;
75
+
76
+ useEffect(() => {
77
+ if (!touched) return;
78
+
79
+ // without the timer set to 0, if the empty option is selected the required message doesn't appear until clicked away from the select input
80
+ const timerRef = setTimeout(() => {
81
+ onBlurRef.current && onBlurRef.current();
82
+ }, 0);
83
+
84
+ return () => {
85
+ clearTimeout(timerRef);
86
+ };
87
+ }, [value, touched]);
88
+
89
+ const classes = classNames(className, 'react-select-input', {
90
+ 'is-invalid': !!meta.error,
91
+ disabled: disabled,
92
+ });
93
+
62
94
  return (
63
95
  <ReactSelect
64
96
  {...props}
@@ -69,7 +101,8 @@ export default function ReactSelectInput({
69
101
  getOptionValue={getOptionValue}
70
102
  value={selectedItems}
71
103
  onChange={handleChange}
72
- className="react-select-input"
104
+ onBlur={() => onBlur()}
105
+ className={classes}
73
106
  theme={overrideTheme}
74
107
  styles={customStyles}
75
108
  menuPortalTarget={document.body}