@panneau/field-number 1.0.0-alpha.251 → 1.0.0-alpha.263

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.
Files changed (3) hide show
  1. package/es/index.js +37 -8
  2. package/lib/index.js +40 -9
  3. package/package.json +10 -9
package/es/index.js CHANGED
@@ -2,10 +2,12 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
3
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
4
4
  import React, { useCallback, useState } from 'react';
5
- import PropTypes from 'prop-types';
6
- import classNames from 'classnames';
7
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
8
5
  import { faChevronDown } from '@fortawesome/free-solid-svg-icons';
6
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
+ import classNames from 'classnames';
8
+ import isNaN from 'lodash/isNaN';
9
+ import isNumber from 'lodash/isNumber';
10
+ import PropTypes from 'prop-types';
9
11
  import TextField from '@panneau/field-text';
10
12
 
11
13
  var styles = {"container":"panneau-field-number-container","arrow":"panneau-field-number-arrow","arrowIcon":"panneau-field-number-arrowIcon","dataListItems":"panneau-field-number-dataListItems","dataListItem":"panneau-field-number-dataListItem","dataListItemButton":"panneau-field-number-dataListItemButton"};
@@ -32,6 +34,13 @@ var defaultProps = {
32
34
  onChange: null
33
35
  };
34
36
 
37
+ function isNumeric(str) {
38
+ if (typeof str !== 'string') return false; // we only process strings!
39
+
40
+ return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
41
+ !isNaN(parseFloat(str));
42
+ }
43
+
35
44
  var NumberField = function NumberField(_ref) {
36
45
  var value = _ref.value,
37
46
  step = _ref.step,
@@ -44,13 +53,33 @@ var NumberField = function NumberField(_ref) {
44
53
  props = _objectWithoutProperties(_ref, _excluded);
45
54
 
46
55
  var parseValue = useCallback(function (newValue) {
47
- return _float ? parseFloat(newValue) : parseInt(newValue, 10);
48
- });
56
+ if (newValue !== null) {
57
+ if (_float) {
58
+ return newValue;
59
+ }
60
+
61
+ if (isNumber(newValue)) {
62
+ return newValue;
63
+ }
64
+
65
+ if (isNumeric(newValue)) {
66
+ return _float ? parseFloat(newValue) : parseInt(newValue, 10);
67
+ }
68
+ }
69
+
70
+ return null;
71
+ }, [_float]);
49
72
  var onInputChange = useCallback(function (val) {
50
73
  if (onChange !== null) {
51
- onChange(val !== null && val.length ? parseValue(val) : null);
74
+ if (_float) {
75
+ onChange(val !== null && val.length > 0 ? val : null);
76
+ } else {
77
+ onChange(val !== null && val.length > 0 ? parseValue(val) : null);
78
+ }
79
+
80
+ onChange(val !== null && val.length > 0 ? parseValue(val) : null);
52
81
  }
53
- }, [onChange]); // Datalist
82
+ }, [onChange, _float]); // Datalist
54
83
 
55
84
  var hasDataList = dataList !== null;
56
85
 
@@ -70,7 +99,7 @@ var NumberField = function NumberField(_ref) {
70
99
  }
71
100
  }, [setDataListActive, hasDataList, dataListActive]);
72
101
  var onDataListClick = useCallback(function (dataListValue) {
73
- if (onChange !== null) {
102
+ if (onChange !== null && dataListValue !== null) {
74
103
  onChange(parseValue(dataListValue));
75
104
  setDataListActive(false);
76
105
  }
package/lib/index.js CHANGED
@@ -6,10 +6,12 @@ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
6
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
7
7
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
8
8
  var React = require('react');
9
- var PropTypes = require('prop-types');
10
- var classNames = require('classnames');
11
- var reactFontawesome = require('@fortawesome/react-fontawesome');
12
9
  var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
10
+ var reactFontawesome = require('@fortawesome/react-fontawesome');
11
+ var classNames = require('classnames');
12
+ var isNaN = require('lodash/isNaN');
13
+ var isNumber = require('lodash/isNumber');
14
+ var PropTypes = require('prop-types');
13
15
  var TextField = require('@panneau/field-text');
14
16
 
15
17
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -18,8 +20,10 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
18
20
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
19
21
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
20
22
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
- var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
23
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
24
+ var isNaN__default = /*#__PURE__*/_interopDefaultLegacy(isNaN);
25
+ var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);
26
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
23
27
  var TextField__default = /*#__PURE__*/_interopDefaultLegacy(TextField);
24
28
 
25
29
  var styles = {"container":"panneau-field-number-container","arrow":"panneau-field-number-arrow","arrowIcon":"panneau-field-number-arrowIcon","dataListItems":"panneau-field-number-dataListItems","dataListItem":"panneau-field-number-dataListItem","dataListItemButton":"panneau-field-number-dataListItemButton"};
@@ -46,6 +50,13 @@ var defaultProps = {
46
50
  onChange: null
47
51
  };
48
52
 
53
+ function isNumeric(str) {
54
+ if (typeof str !== 'string') return false; // we only process strings!
55
+
56
+ return !isNaN__default["default"](str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
57
+ !isNaN__default["default"](parseFloat(str));
58
+ }
59
+
49
60
  var NumberField = function NumberField(_ref) {
50
61
  var value = _ref.value,
51
62
  step = _ref.step,
@@ -58,13 +69,33 @@ var NumberField = function NumberField(_ref) {
58
69
  props = _objectWithoutProperties__default["default"](_ref, _excluded);
59
70
 
60
71
  var parseValue = React.useCallback(function (newValue) {
61
- return _float ? parseFloat(newValue) : parseInt(newValue, 10);
62
- });
72
+ if (newValue !== null) {
73
+ if (_float) {
74
+ return newValue;
75
+ }
76
+
77
+ if (isNumber__default["default"](newValue)) {
78
+ return newValue;
79
+ }
80
+
81
+ if (isNumeric(newValue)) {
82
+ return _float ? parseFloat(newValue) : parseInt(newValue, 10);
83
+ }
84
+ }
85
+
86
+ return null;
87
+ }, [_float]);
63
88
  var onInputChange = React.useCallback(function (val) {
64
89
  if (onChange !== null) {
65
- onChange(val !== null && val.length ? parseValue(val) : null);
90
+ if (_float) {
91
+ onChange(val !== null && val.length > 0 ? val : null);
92
+ } else {
93
+ onChange(val !== null && val.length > 0 ? parseValue(val) : null);
94
+ }
95
+
96
+ onChange(val !== null && val.length > 0 ? parseValue(val) : null);
66
97
  }
67
- }, [onChange]); // Datalist
98
+ }, [onChange, _float]); // Datalist
68
99
 
69
100
  var hasDataList = dataList !== null;
70
101
 
@@ -84,7 +115,7 @@ var NumberField = function NumberField(_ref) {
84
115
  }
85
116
  }, [setDataListActive, hasDataList, dataListActive]);
86
117
  var onDataListClick = React.useCallback(function (dataListValue) {
87
- if (onChange !== null) {
118
+ if (onChange !== null && dataListValue !== null) {
88
119
  onChange(parseValue(dataListValue));
89
120
  setDataListActive(false);
90
121
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/field-number",
3
- "version": "1.0.0-alpha.251",
3
+ "version": "1.0.0-alpha.263",
4
4
  "description": "A number field",
5
5
  "keywords": [
6
6
  "javascript"
@@ -44,26 +44,27 @@
44
44
  "prepare": "../../scripts/prepare-package.sh"
45
45
  },
46
46
  "devDependencies": {
47
- "react": "^16.8.0 || ^17.0.0",
48
- "react-dom": "^16.8.0 || ^17.0.0"
47
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
48
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
49
49
  },
50
50
  "peerDependencies": {
51
- "react": "^16.8.0 || ^17.0.0",
52
- "react-dom": "^16.8.0 || ^17.0.0"
51
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
52
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
53
53
  },
54
54
  "dependencies": {
55
55
  "@babel/runtime": "^7.12.5",
56
56
  "@fortawesome/fontawesome-svg-core": "^1.2.35",
57
57
  "@fortawesome/free-solid-svg-icons": "^5.15.3",
58
58
  "@fortawesome/react-fontawesome": "^0.1.14",
59
- "@panneau/core": "^1.0.0-alpha.242",
60
- "@panneau/field-text": "^1.0.0-alpha.251",
61
- "@panneau/themes": "^1.0.0-alpha.242",
59
+ "@panneau/core": "^1.0.0-alpha.263",
60
+ "@panneau/field-text": "^1.0.0-alpha.263",
61
+ "@panneau/themes": "^1.0.0-alpha.263",
62
62
  "classnames": "^2.2.6",
63
+ "lodash": "^4.17.21",
63
64
  "prop-types": "^15.7.2"
64
65
  },
65
66
  "publishConfig": {
66
67
  "access": "public"
67
68
  },
68
- "gitHead": "0689c7dda90c8842be1e7c28c6fa1824da25577b"
69
+ "gitHead": "6174c89cf31725bd7940c1a3791578f0e975a52a"
69
70
  }