intelicoreact 0.0.48 → 0.0.53

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.
@@ -33,18 +33,26 @@ function _default(props) {
33
33
  _props$allowPrev = props.allowPrev,
34
34
  allowPrev = _props$allowPrev === void 0 ? true : _props$allowPrev,
35
35
  _props$allowNext = props.allowNext,
36
- allowNext = _props$allowNext === void 0 ? true : _props$allowNext;
36
+ allowNext = _props$allowNext === void 0 ? true : _props$allowNext,
37
+ params = props.params;
38
+ var minDate = params.minDate,
39
+ maxDate = params.maxDate;
37
40
 
38
41
  var _useState = (0, _react.useState)({}),
39
42
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
40
43
  days = _useState2[0],
41
44
  setDays = _useState2[1];
42
45
 
43
- var selectedDay = (0, _moment.default)(date);
46
+ var _useState3 = (0, _react.useState)(date),
47
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
48
+ showDate = _useState4[0],
49
+ setShowDate = _useState4[1];
50
+
51
+ var selectedDay = (0, _moment.default)(showDate);
44
52
  var isError = 'Invalid date';
45
53
  var title = (0, _react.useMemo)(function () {
46
- return selectedDay.format('MMM') === isError ? isError : "".concat(selectedDay.format('MMM'), " ").concat((0, _moment.default)(date).format('YYYY'));
47
- }, [date]);
54
+ return selectedDay.format('MMM') === isError ? isError : "".concat(selectedDay.format('MMM'), " ").concat((0, _moment.default)(showDate).format('YYYY'));
55
+ }, [date, showDate]);
48
56
  (0, _react.useEffect)(function () {
49
57
  var result = {};
50
58
  var day = selectedDay.startOf('month');
@@ -66,20 +74,23 @@ function _default(props) {
66
74
  }
67
75
 
68
76
  setDays(result);
69
- }, [date]);
77
+ }, [showDate]);
70
78
 
71
79
  var renderDay = function renderDay(week, dayOfWeek) {
72
80
  var day = days[week][dayOfWeek];
73
81
  if (!day) return /*#__PURE__*/_react.default.createElement("div", {
74
82
  className: "calendar__day"
75
83
  });
76
- var isFutureDay = day && (0, _moment.default)(day.date).isAfter((0, _moment.default)(), 'day');
84
+ var isFutureDay = day && maxDate ? (0, _moment.default)(day.date).isAfter((0, _moment.default)(maxDate || ''), 'day') : (0, _moment.default)(day.date).isAfter((0, _moment.default)(), 'day');
85
+ var isBeforeDay = day && (0, _moment.default)(day.date).isBefore((0, _moment.default)(minDate || ''), 'day');
77
86
  var classNames = (0, _classnames.default)('calendar__day', {
78
87
  'calendar__day--clickable': day
79
88
  }, {
80
89
  'calendar__day--disabled': isFutureDay
81
90
  }, {
82
- 'calendar__day--selected': selectedDay.format() === (0, _moment.default)(day.date).format()
91
+ 'calendar__day--disabled': isBeforeDay
92
+ }, {
93
+ 'calendar__day--selected': (0, _moment.default)(date).format() === (0, _moment.default)(day.date).format()
83
94
  });
84
95
  return /*#__PURE__*/_react.default.createElement("div", {
85
96
  key: "".concat(week, "_").concat(dayOfWeek),
@@ -93,11 +104,11 @@ function _default(props) {
93
104
  };
94
105
 
95
106
  var handlePrev = function handlePrev() {
96
- setDate((0, _moment.default)(date).subtract(1, 'month').format('L'));
107
+ setShowDate((0, _moment.default)(showDate).subtract(1, 'month').format('L'));
97
108
  };
98
109
 
99
110
  var handleNext = function handleNext() {
100
- setDate((0, _moment.default)(date).add(1, 'month').format('L'));
111
+ setShowDate((0, _moment.default)(showDate).add(1, 'month').format('L'));
101
112
  };
102
113
 
103
114
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -381,10 +381,10 @@ select.form-input {
381
381
  }
382
382
  }
383
383
 
384
-
385
384
  .calendar-header {
386
385
  display: flex;
387
386
  height: 24px;
387
+ margin: 0 6px;
388
388
 
389
389
  &__title {
390
390
  line-height: 20px;
@@ -2,74 +2,32 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.CalendarSimple = exports.default = void 0;
11
-
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
- var _react = _interopRequireWildcard(require("react"));
8
+ exports.CalendarTemplate = exports.default = void 0;
15
9
 
16
- var _yup = require("yup");
17
-
18
- var _useClickOutside = require("../../../Functions/useClickOutside");
10
+ var _react = _interopRequireDefault(require("react"));
19
11
 
20
12
  var _Calendar = _interopRequireDefault(require("./Calendar"));
21
13
 
22
- var _reactInputMask = _interopRequireDefault(require("react-input-mask"));
23
-
24
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
-
26
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
-
28
14
  global.lng = 'en';
29
15
  var _default = {
30
- title: 'Form Elements/Calendar',
16
+ title: 'UI/Calendar',
31
17
  component: _Calendar.default
32
18
  };
33
19
  exports.default = _default;
34
20
 
35
21
  var Template = function Template(args) {
36
- var _useState = (0, _react.useState)(args.date),
37
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
38
- date = _useState2[0],
39
- _setDate = _useState2[1];
40
-
41
- var _useState3 = (0, _react.useState)(false),
42
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
43
- isOpened = _useState4[0],
44
- setIsOpened = _useState4[1];
45
-
46
- var calendarRef = (0, _react.useRef)(null);
47
- (0, _useClickOutside.useClickOutside)(calendarRef, function () {
48
- return setIsOpened(false);
49
- });
50
- return /*#__PURE__*/_react.default.createElement("div", {
51
- className: "calendar-container",
52
- ref: calendarRef
53
- }, /*#__PURE__*/_react.default.createElement(_reactInputMask.default, {
54
- mask: "99/99/9999",
55
- value: date,
56
- onChange: function onChange(e) {
57
- return _setDate(e.target.value);
58
- },
59
- className: "calendar-dropdown",
60
- onFocus: function onFocus() {
61
- return setIsOpened(!isOpened);
62
- }
63
- }), isOpened ? /*#__PURE__*/_react.default.createElement(_Calendar.default, {
64
- date: date,
65
- setDate: function setDate(newDate) {
66
- return _setDate(newDate);
67
- }
68
- }) : null);
22
+ return /*#__PURE__*/_react.default.createElement(_Calendar.default, args);
69
23
  };
70
24
 
71
- var CalendarSimple = Template.bind({});
72
- exports.CalendarSimple = CalendarSimple;
73
- CalendarSimple.args = {
74
- date: '10/11/2021'
25
+ var CalendarTemplate = Template.bind({});
26
+ exports.CalendarTemplate = CalendarTemplate;
27
+ CalendarTemplate.args = {
28
+ date: '12/03/2021',
29
+ params: {},
30
+ setDate: function setDate() {
31
+ return null;
32
+ }
75
33
  };
@@ -86,8 +86,6 @@ var Dropdown = function Dropdown(_ref) {
86
86
  var filteredOptions = [].concat((0, _toConsumableArray2.default)(filteredItems), (0, _toConsumableArray2.default)(filteredGroups));
87
87
 
88
88
  var handleClickOutside = function handleClickOutside(event) {
89
- console.log(dropdownRef.current.contains(event.target));
90
-
91
89
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
92
90
  setIsOpen(false);
93
91
  setSearchValue(null);
@@ -160,7 +158,10 @@ var Dropdown = function Dropdown(_ref) {
160
158
  className: (0, _classnames.default)(RC, className),
161
159
  ref: dropdownRef
162
160
  }, /*#__PURE__*/_react.default.createElement("button", {
163
- className: "".concat(RC, "__trigger input__wrap ").concat(!value ? 'placeholder' : '', " ").concat(error ? 'error' : '')
161
+ className: "".concat(RC, "__trigger input__wrap ").concat(!value ? 'placeholder' : '', " ").concat(error ? 'error' : ''),
162
+ onClick: function onClick() {
163
+ return !isSearchable ? setIsOpen(!isOpen) : null;
164
+ }
164
165
  }, isSearchable ? /*#__PURE__*/_react.default.createElement("input", {
165
166
  className: "".concat(RC, "__input"),
166
167
  value: searchValue !== null && searchValue !== void 0 ? searchValue : selectedLabel,
@@ -172,10 +173,7 @@ var Dropdown = function Dropdown(_ref) {
172
173
  return setIsOpen(true);
173
174
  }
174
175
  }) : /*#__PURE__*/_react.default.createElement("span", {
175
- className: "text",
176
- onClick: function onClick() {
177
- return setIsOpen(!isOpen);
178
- }
176
+ className: "text"
179
177
  }, selectedLabel || placeholder), /*#__PURE__*/_react.default.createElement("span", {
180
178
  className: (0, _classnames.default)("".concat(RC, "__arrow"), (0, _defineProperty2.default)({}, "".concat(RC, "__arrow_active"), isOpen)),
181
179
  onClick: function onClick() {
@@ -49,7 +49,8 @@ var Input = function Input(_ref) {
49
49
  onKeyUp = _ref.onKeyUp,
50
50
  mask = _ref.mask,
51
51
  error = _ref.error,
52
- icon = _ref.icon;
52
+ icon = _ref.icon,
53
+ symbolsLimit = _ref.symbolsLimit;
53
54
 
54
55
  // STATES
55
56
  var _useState = (0, _react.useState)(false),
@@ -65,8 +66,8 @@ var Input = function Input(_ref) {
65
66
  var inputRef = (0, _react.useRef)(null); // HANDLES
66
67
 
67
68
  var handle = {
68
- change: function change(event) {
69
- var inputValue = event.target.value;
69
+ change: function change(e) {
70
+ var inputValue = e.target ? e.target.value : e;
70
71
 
71
72
  if (isNumeric || type === 'number' && inputValue !== '') {
72
73
  inputValue = parseFloat(inputValue) || '';
@@ -74,7 +75,7 @@ var Input = function Input(_ref) {
74
75
  if (min && +min > inputValue) {
75
76
  inputValue = min;
76
77
  } else if (max && +max < inputValue) inputValue = max;
77
- }
78
+ } else if (symbolsLimit && inputValue.length > +symbolsLimit) inputValue = inputValue.substring(0, +symbolsLimit);
78
79
 
79
80
  onChange(inputValue.toString());
80
81
  },
@@ -71,6 +71,9 @@ var _default = {
71
71
  mask: {
72
72
  description: 'string: force input to masked https://www.npmjs.com/package/react-input-mask'
73
73
  },
74
+ symbolsLimit: {
75
+ description: 'Set limit of symbols in input, overhead will be ignored'
76
+ },
74
77
  onBlur: {
75
78
  description: 'custom callback on blur'
76
79
  },
@@ -109,5 +112,6 @@ InputTemplate.args = {
109
112
  max: '5',
110
113
  placeholder: 'Placeholder',
111
114
  mask: '',
112
- icon: /*#__PURE__*/_react.default.createElement(_reactFeather.User, null)
115
+ icon: /*#__PURE__*/_react.default.createElement(_reactFeather.User, null),
116
+ symbolsLimit: 225
113
117
  };
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _useClickOutside = require("../../../Functions/useClickOutside");
17
+
18
+ var _Calendar = _interopRequireDefault(require("../Calendar/Calendar"));
19
+
20
+ var _reactInputMask = _interopRequireDefault(require("react-input-mask"));
21
+
22
+ var _moment = _interopRequireDefault(require("moment"));
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ var InputCalendar = function InputCalendar(_ref) {
29
+ var data = _ref.data,
30
+ params = _ref.params;
31
+
32
+ var _useState = (0, _react.useState)(data),
33
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
34
+ date = _useState2[0],
35
+ setDate = _useState2[1];
36
+
37
+ var _useState3 = (0, _react.useState)(date),
38
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
39
+ inputValue = _useState4[0],
40
+ setInputValue = _useState4[1];
41
+
42
+ var _useState5 = (0, _react.useState)(false),
43
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
44
+ isOpened = _useState6[0],
45
+ setIsOpened = _useState6[1];
46
+
47
+ var calendarRef = (0, _react.useRef)(null);
48
+ (0, _useClickOutside.useClickOutside)(calendarRef, function () {
49
+ return setIsOpened(false);
50
+ });
51
+
52
+ var changeInputValue = function changeInputValue(value) {
53
+ if (!value.includes('_') && value) {
54
+ setDate((0, _moment.default)(value).format('L'));
55
+ setInputValue((0, _moment.default)(value).format('L'));
56
+ } else {
57
+ setInputValue(value);
58
+ }
59
+ };
60
+
61
+ var changeCalendarDay = function changeCalendarDay(value) {
62
+ setDate(value);
63
+ setInputValue(value);
64
+ };
65
+
66
+ return /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "calendar-container",
68
+ ref: calendarRef
69
+ }, /*#__PURE__*/_react.default.createElement(_reactInputMask.default, {
70
+ mask: "99/99/9999",
71
+ value: inputValue,
72
+ onChange: function onChange(e) {
73
+ return changeInputValue(e.target.value);
74
+ },
75
+ className: "calendar-dropdown",
76
+ onFocus: function onFocus() {
77
+ return setIsOpened(!isOpened);
78
+ }
79
+ }), isOpened ? /*#__PURE__*/_react.default.createElement(_Calendar.default, {
80
+ date: date,
81
+ setDate: function setDate(newDate) {
82
+ return changeCalendarDay(newDate);
83
+ },
84
+ params: params
85
+ }) : null);
86
+ };
87
+
88
+ var _default = InputCalendar;
89
+ exports.default = _default;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.Calendar = exports.default = void 0;
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _yup = require("yup");
15
+
16
+ var _InputCalendar = _interopRequireDefault(require("./InputCalendar"));
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ global.lng = 'en';
23
+ var _default = {
24
+ title: 'Form Elements/InputCalendar',
25
+ component: _InputCalendar.default
26
+ };
27
+ exports.default = _default;
28
+
29
+ var Template = function Template(args) {
30
+ var params = {
31
+ minDate: args === null || args === void 0 ? void 0 : args.minDate,
32
+ maxDate: args === null || args === void 0 ? void 0 : args.maxDate
33
+ };
34
+ return /*#__PURE__*/_react.default.createElement(_InputCalendar.default, {
35
+ data: args.date,
36
+ params: params
37
+ });
38
+ };
39
+
40
+ var Calendar = Template.bind({});
41
+ exports.Calendar = Calendar;
42
+ Calendar.args = {
43
+ date: '10/14/2021',
44
+ minDate: '10/11/2021',
45
+ maxDate: '10/25/2021'
46
+ };
@@ -15,6 +15,7 @@ var Price = function Price(_ref) {
15
15
  unit = _ref$unit === void 0 ? '$' : _ref$unit,
16
16
  unitAfter = _ref.unitAfter,
17
17
  className = _ref.className;
18
+ if (value === undefined || value === null) return null;
18
19
  var formatted;
19
20
 
20
21
  if (value.length <= 3) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "intelicoreact",
3
- "version": "0.0.48",
4
- "description": "",
3
+ "version": "0.0.53",
4
+ "description": "Fix Calendar",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -5,16 +5,17 @@ import { ChevronLeft, ChevronRight } from 'react-feather';
5
5
  import './Calendar.scss';
6
6
 
7
7
  export default function (props) {
8
- const { date, setDate, allowPrev = true, allowNext = true } = props;
9
-
8
+ const { date, setDate, allowPrev = true, allowNext = true, params } = props;
9
+ const { minDate, maxDate } = params;
10
10
  const [days, setDays] = useState({});
11
+ const [showDate, setShowDate] = useState(date);
11
12
 
12
- const selectedDay = moment(date);
13
+ const selectedDay = moment(showDate);
13
14
  const isError = 'Invalid date';
14
15
 
15
16
  const title = useMemo(
16
- () => (selectedDay.format('MMM') === isError ? isError : `${selectedDay.format('MMM')} ${moment(date).format('YYYY')}`),
17
- [date]
17
+ () => (selectedDay.format('MMM') === isError ? isError : `${selectedDay.format('MMM')} ${moment(showDate).format('YYYY')}`),
18
+ [date, showDate]
18
19
  );
19
20
  useEffect(() => {
20
21
  const result = {};
@@ -31,18 +32,20 @@ export default function (props) {
31
32
  day.add(1, 'd');
32
33
  }
33
34
  setDays(result);
34
- }, [date]);
35
+ }, [showDate]);
35
36
 
36
37
  const renderDay = (week, dayOfWeek) => {
37
38
  const day = days[week][dayOfWeek];
38
39
  if (!day) return <div className="calendar__day" />;
39
- const isFutureDay = day && moment(day.date).isAfter(moment(), 'day');
40
+ const isFutureDay = day && maxDate ? moment(day.date).isAfter(moment(maxDate || ''), 'day') : moment(day.date).isAfter(moment(), 'day');
41
+ const isBeforeDay = day && moment(day.date).isBefore(moment(minDate || ''), 'day');
40
42
 
41
43
  const classNames = cn(
42
44
  'calendar__day',
43
45
  { 'calendar__day--clickable': day },
44
46
  { 'calendar__day--disabled': isFutureDay },
45
- { 'calendar__day--selected': selectedDay.format() === moment(day.date).format() }
47
+ { 'calendar__day--disabled': isBeforeDay },
48
+ { 'calendar__day--selected': moment(date).format() === moment(day.date).format() }
46
49
  );
47
50
 
48
51
  return (
@@ -59,11 +62,11 @@ export default function (props) {
59
62
  };
60
63
 
61
64
  const handlePrev = () => {
62
- setDate(moment(date).subtract(1, 'month').format('L'));
65
+ setShowDate(moment(showDate).subtract(1, 'month').format('L'));
63
66
  };
64
67
 
65
68
  const handleNext = () => {
66
- setDate(moment(date).add(1, 'month').format('L'));
69
+ setShowDate(moment(showDate).add(1, 'month').format('L'));
67
70
  };
68
71
 
69
72
  return (
@@ -381,10 +381,10 @@ select.form-input {
381
381
  }
382
382
  }
383
383
 
384
-
385
384
  .calendar-header {
386
385
  display: flex;
387
386
  height: 24px;
387
+ margin: 0 6px;
388
388
 
389
389
  &__title {
390
390
  line-height: 20px;
@@ -1,38 +1,19 @@
1
- import React, { useRef, useState } from 'react';
2
- import { ref } from 'yup';
3
- import { useClickOutside } from '../../../Functions/useClickOutside';
1
+ import React from 'react';
4
2
  import Calendar from './Calendar';
5
- import InputMask from 'react-input-mask';
6
3
 
7
4
  global.lng = 'en';
8
5
 
9
6
  export default {
10
- title: 'Form Elements/Calendar',
7
+ title: 'UI/Calendar',
11
8
  component: Calendar,
12
9
  };
13
10
 
14
- const Template = (args) => {
15
- const [date, setDate] = useState(args.date);
16
- const [isOpened, setIsOpened] = useState(false);
17
- const calendarRef = useRef(null);
18
- useClickOutside(calendarRef, () => setIsOpened(false));
11
+ const Template = args => <Calendar {...args} />;
19
12
 
20
- return (
21
- <div className="calendar-container" ref={calendarRef}>
22
- <InputMask
23
- mask="99/99/9999"
24
- value={date}
25
- onChange={(e) => setDate(e.target.value)}
26
- className="calendar-dropdown"
27
- onFocus={() => setIsOpened(!isOpened)}
28
- />
29
- {isOpened ? <Calendar date={date} setDate={(newDate) => setDate(newDate)} /> : null}
30
- </div>
31
- );
32
- };
33
-
34
- export const CalendarSimple = Template.bind({});
13
+ export const CalendarTemplate = Template.bind({});
35
14
 
36
- CalendarSimple.args = {
37
- date: '10/11/2021',
15
+ CalendarTemplate.args = {
16
+ date: '12/03/2021',
17
+ params: {},
18
+ setDate: () => null,
38
19
  };
@@ -24,7 +24,6 @@ const Dropdown = ({ options, value, error, onChange, placeholder, className, isS
24
24
  const filteredOptions = [...filteredItems, ...filteredGroups];
25
25
 
26
26
  const handleClickOutside = event => {
27
- console.log(dropdownRef.current.contains(event.target));
28
27
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
29
28
  setIsOpen(false);
30
29
  setSearchValue(null);
@@ -76,7 +75,7 @@ const Dropdown = ({ options, value, error, onChange, placeholder, className, isS
76
75
 
77
76
  return (
78
77
  <div className={cn(RC, className)} ref={dropdownRef}>
79
- <button className={`${RC}__trigger input__wrap ${!value ? 'placeholder' : ''} ${error ? 'error' : ''}`} >
78
+ <button className={`${RC}__trigger input__wrap ${!value ? 'placeholder' : ''} ${error ? 'error' : ''}`} onClick={() => !isSearchable ? setIsOpen(!isOpen) : null}>
80
79
  {isSearchable ? (
81
80
  <input
82
81
  className={`${RC}__input`}
@@ -86,7 +85,7 @@ const Dropdown = ({ options, value, error, onChange, placeholder, className, isS
86
85
  onFocus={() => setIsOpen(true)}
87
86
  />
88
87
  ) : (
89
- <span className="text" onClick={() => setIsOpen(!isOpen)}>
88
+ <span className="text">
90
89
  {selectedLabel || placeholder}
91
90
  </span>
92
91
  )}
@@ -23,6 +23,7 @@ const Input = ({
23
23
  mask,
24
24
  error,
25
25
  icon,
26
+ symbolsLimit,
26
27
  }) => {
27
28
  // STATES
28
29
  const [isFocused, setIsFocused] = useState(false);
@@ -30,14 +31,14 @@ const Input = ({
30
31
  const inputRef = useRef(null);
31
32
  // HANDLES
32
33
  const handle = {
33
- change: event => {
34
- let inputValue = event.target.value;
34
+ change: e => {
35
+ let inputValue = e.target ? e.target.value : e;
35
36
  if (isNumeric || (type === 'number' && inputValue !== '')) {
36
37
  inputValue = parseFloat(inputValue) || '';
37
38
  if (min && +min > inputValue) {
38
39
  inputValue = min;
39
40
  } else if (max && +max < inputValue) inputValue = max;
40
- }
41
+ } else if (symbolsLimit && inputValue.length > +symbolsLimit) inputValue = inputValue.substring(0, +symbolsLimit);
41
42
  onChange(inputValue.toString());
42
43
  },
43
44
  toggleEdit: () => {
@@ -70,7 +71,7 @@ const Input = ({
70
71
  onBlur: handle.blur,
71
72
  onKeyUp: handle.keyUp,
72
73
  min,
73
- max
74
+ max,
74
75
  };
75
76
 
76
77
  function renderInput() {
@@ -43,6 +43,7 @@ export default {
43
43
  value: { description: '(* - required prop)' },
44
44
  className: { description: 'string' },
45
45
  mask: { description: 'string: force input to masked https://www.npmjs.com/package/react-input-mask' },
46
+ symbolsLimit: { description: 'Set limit of symbols in input, overhead will be ignored' },
46
47
  onBlur: { description: 'custom callback on blur' },
47
48
  onFocus: { description: 'custom callback on focus' },
48
49
  onKeyUp: { description: 'custom callback on keyup, returns event keyCode' }
@@ -67,5 +68,6 @@ InputTemplate.args = {
67
68
  max: '5',
68
69
  placeholder: 'Placeholder',
69
70
  mask: '',
70
- icon: <User />
71
+ icon: <User />,
72
+ symbolsLimit: 225
71
73
  };
@@ -0,0 +1,43 @@
1
+ import React, { useState, useRef } from 'react';
2
+ import { useClickOutside } from '../../../Functions/useClickOutside';
3
+ import Calendar from '../Calendar/Calendar';
4
+ import InputMask from 'react-input-mask';
5
+ import moment from 'moment';
6
+
7
+ const InputCalendar = ({ data, params }) => {
8
+ const [date, setDate] = useState(data);
9
+ const [inputValue, setInputValue] = useState(date);
10
+ const [isOpened, setIsOpened] = useState(false);
11
+ const calendarRef = useRef(null);
12
+
13
+ useClickOutside(calendarRef, () => setIsOpened(false));
14
+
15
+ const changeInputValue = (value) => {
16
+ if (!value.includes('_') && value) {
17
+ setDate(moment(value).format('L'));
18
+ setInputValue(moment(value).format('L'));
19
+ } else {
20
+ setInputValue(value);
21
+ }
22
+ };
23
+
24
+ const changeCalendarDay = (value) => {
25
+ setDate(value);
26
+ setInputValue(value);
27
+ };
28
+
29
+ return (
30
+ <div className="calendar-container" ref={calendarRef}>
31
+ <InputMask
32
+ mask="99/99/9999"
33
+ value={inputValue}
34
+ onChange={(e) => changeInputValue(e.target.value)}
35
+ className="calendar-dropdown"
36
+ onFocus={() => setIsOpened(!isOpened)}
37
+ />
38
+ {isOpened ? <Calendar date={date} setDate={(newDate) => changeCalendarDay(newDate)} params={params} /> : null}
39
+ </div>
40
+ );
41
+ };
42
+
43
+ export default InputCalendar;
@@ -0,0 +1,27 @@
1
+ import React, { useRef, useState } from 'react';
2
+ import { ref } from 'yup';
3
+ import InputCalendar from './InputCalendar';
4
+
5
+ global.lng = 'en';
6
+
7
+ export default {
8
+ title: 'Form Elements/InputCalendar',
9
+ component: InputCalendar,
10
+ };
11
+
12
+ const Template = (args) => {
13
+ const params = {
14
+ minDate: args?.minDate,
15
+ maxDate: args?.maxDate,
16
+ };
17
+
18
+ return <InputCalendar data={args.date} params={params} />;
19
+ };
20
+
21
+ export const Calendar = Template.bind({});
22
+
23
+ Calendar.args = {
24
+ date: '10/14/2021',
25
+ minDate: '10/11/2021',
26
+ maxDate: '10/25/2021',
27
+ };
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  const Price = ({ value, unit = '$', unitAfter, className }) => {
3
+ if (value === undefined || value === null) return null;
3
4
  let formatted;
4
5
  if (value.length <= 3) {
5
6
  formatted = parseFloat(value).toFixed(2);