colibri-ui 0.8.30 → 0.8.31

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.
@@ -21,13 +21,20 @@ var generateSuggest = function generateSuggest() {
21
21
  });
22
22
  };
23
23
  var checkIsBeforeNow = function checkIsBeforeNow(time, currentDate) {
24
- return currentDate ? dateFns.isBefore(dateFns.parse(time, "HH:mm", currentDate), new Date()) : false;
24
+ if (!currentDate) return false;
25
+ var baseDate = new Date(currentDate);
26
+ baseDate.setHours(0, 0, 0, 0);
27
+ var parsedTime = dateFns.parse(time, "HH:mm", baseDate);
28
+ return dateFns.isBefore(parsedTime, currentDate);
25
29
  };
26
30
  var checkIsBeforeSelectedDate = function checkIsBeforeSelectedDate(time, interval, date) {
27
31
  if (date) {
28
32
  var selectedDate = new Date(date);
29
33
  selectedDate.setMinutes(selectedDate.getMinutes() + interval);
30
- return dateFns.isBefore(dateFns.parse(time, "HH:mm", date), selectedDate);
34
+ var baseDate = new Date(date);
35
+ baseDate.setHours(0, 0, 0, 0);
36
+ var parsedTime = dateFns.parse(time, "HH:mm", baseDate);
37
+ return dateFns.isBefore(parsedTime, selectedDate);
31
38
  }
32
39
  return false;
33
40
  };
@@ -1,11 +1,16 @@
1
1
  import type { SelectProps } from "../Select/index.props";
2
2
  import type { FC } from "react";
3
+ type TimeRange = {
4
+ start: string;
5
+ end: string;
6
+ };
3
7
  interface TimeSelectProps extends Omit<SelectProps<string>, "options"> {
4
8
  interval?: 5 | 10 | 15 | 30;
5
9
  currentDate?: Date | null;
6
10
  selectedDate?: Date | null;
7
11
  name?: string;
8
12
  disabled?: boolean;
13
+ allowedTimeRange?: TimeRange;
9
14
  }
10
15
  declare const TimeSelect: FC<TimeSelectProps>;
11
16
  export default TimeSelect;
@@ -2,6 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
6
  var tslib = require('tslib');
6
7
  var React = require('react');
7
8
  var index$1 = require('../Select/index.js');
@@ -10,8 +11,27 @@ var index = require('./Label/index.js');
10
11
 
11
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
13
 
14
+ var _slicedToArray__default = /*#__PURE__*/_interopDefault(_slicedToArray);
13
15
  var React__default = /*#__PURE__*/_interopDefault(React);
14
16
 
17
+ var isTimeInRange = function isTimeInRange(timeString, range) {
18
+ var _timeString$split$map = timeString.split(":").map(Number),
19
+ _timeString$split$map2 = _slicedToArray__default.default(_timeString$split$map, 2),
20
+ hours = _timeString$split$map2[0],
21
+ minutes = _timeString$split$map2[1];
22
+ var totalMinutes = hours * 60 + minutes;
23
+ var _range$start$split$ma = range.start.split(":").map(Number),
24
+ _range$start$split$ma2 = _slicedToArray__default.default(_range$start$split$ma, 2),
25
+ startHours = _range$start$split$ma2[0],
26
+ startMinutes = _range$start$split$ma2[1];
27
+ var startTotalMinutes = startHours * 60 + startMinutes;
28
+ var _range$end$split$map = range.end.split(":").map(Number),
29
+ _range$end$split$map2 = _slicedToArray__default.default(_range$end$split$map, 2),
30
+ endHours = _range$end$split$map2[0],
31
+ endMinutes = _range$end$split$map2[1];
32
+ var endTotalMinutes = endHours * 60 + endMinutes;
33
+ return totalMinutes >= startTotalMinutes && totalMinutes <= endTotalMinutes;
34
+ };
15
35
  var TimeSelect = function TimeSelect(_a) {
16
36
  var value = _a.value,
17
37
  name = _a.name,
@@ -22,7 +42,8 @@ var TimeSelect = function TimeSelect(_a) {
22
42
  interval = _a$interval === void 0 ? 15 : _a$interval,
23
43
  onChange = _a.onChange,
24
44
  disabled = _a.disabled,
25
- props = tslib.__rest(_a, ["value", "name", "currentDate", "selectedDate", "label", "interval", "onChange", "disabled"]);
45
+ allowedTimeRange = _a.allowedTimeRange,
46
+ props = tslib.__rest(_a, ["value", "name", "currentDate", "selectedDate", "label", "interval", "onChange", "disabled", "allowedTimeRange"]);
26
47
  var baseOptions = React.useMemo(function () {
27
48
  return helpers.generateSuggest(interval).map(function (item) {
28
49
  return {
@@ -35,11 +56,15 @@ var TimeSelect = function TimeSelect(_a) {
35
56
  }, [interval]);
36
57
  var options = React.useMemo(function () {
37
58
  return baseOptions.map(function (option) {
59
+ var timeRangeDisabled = !!allowedTimeRange && !isTimeInRange(option.value, allowedTimeRange);
60
+ var beforeSelectedDisabled = !!selectedDate && helpers.checkIsBeforeSelectedDate(option.value, interval, selectedDate);
61
+ var beforeCurrentDisabled = !!currentDate && helpers.checkIsBeforeNow(option.value, currentDate);
62
+ var isDisabled = timeRangeDisabled || beforeSelectedDisabled || beforeCurrentDisabled;
38
63
  return Object.assign(Object.assign({}, option), {
39
- disabled: !!selectedDate && helpers.checkIsBeforeSelectedDate(option.value, interval, selectedDate) || !!currentDate && helpers.checkIsBeforeNow(option.value, currentDate)
64
+ disabled: isDisabled
40
65
  });
41
66
  });
42
- }, [baseOptions, currentDate, selectedDate, interval]);
67
+ }, [baseOptions, currentDate, selectedDate, interval, allowedTimeRange]);
43
68
  return /*#__PURE__*/React__default.default.createElement(index$1.default, Object.assign({}, props, {
44
69
  name: name,
45
70
  value: value,
package/Tooltip/index.js CHANGED
@@ -62,24 +62,24 @@ var Tooltip = function Tooltip(_ref) {
62
62
  }
63
63
  return React.Children.only(children);
64
64
  }, [children]);
65
- var onToggle = function onToggle(event) {
65
+ var onToggle = React.useCallback(function (event) {
66
66
  event.stopPropagation();
67
67
  setVisible(function (state) {
68
68
  return !state;
69
69
  });
70
- };
71
- var onShow = function onShow() {
70
+ }, []);
71
+ var onShow = React.useCallback(function () {
72
72
  setVisible(true);
73
- };
74
- var onHide = function onHide() {
73
+ }, []);
74
+ var onHide = React.useCallback(function () {
75
75
  setVisible(false);
76
- };
76
+ }, []);
77
77
  var onClickOutside = React.useCallback(function (event) {
78
78
  if (controlElement === null || controlElement === void 0 ? void 0 : controlElement.contains(event.target)) return;
79
79
  onHide();
80
80
  }, [onHide, controlElement]);
81
- var onClickOverlay = React.useCallback(function (e) {
82
- e.stopPropagation();
81
+ var onClickOverlay = React.useCallback(function (event) {
82
+ event.stopPropagation();
83
83
  onHide();
84
84
  }, [onHide]);
85
85
  React.useEffect(function () {
@@ -1,4 +1,4 @@
1
- import { addMinutes, isBefore, parse, format } from 'date-fns';
1
+ import { addMinutes, parse, isBefore, format } from 'date-fns';
2
2
 
3
3
  var day = new Date();
4
4
  day.setHours(24, 0, 0, 0);
@@ -15,13 +15,20 @@ var generateSuggest = function generateSuggest() {
15
15
  });
16
16
  };
17
17
  var checkIsBeforeNow = function checkIsBeforeNow(time, currentDate) {
18
- return currentDate ? isBefore(parse(time, "HH:mm", currentDate), new Date()) : false;
18
+ if (!currentDate) return false;
19
+ var baseDate = new Date(currentDate);
20
+ baseDate.setHours(0, 0, 0, 0);
21
+ var parsedTime = parse(time, "HH:mm", baseDate);
22
+ return isBefore(parsedTime, currentDate);
19
23
  };
20
24
  var checkIsBeforeSelectedDate = function checkIsBeforeSelectedDate(time, interval, date) {
21
25
  if (date) {
22
26
  var selectedDate = new Date(date);
23
27
  selectedDate.setMinutes(selectedDate.getMinutes() + interval);
24
- return isBefore(parse(time, "HH:mm", date), selectedDate);
28
+ var baseDate = new Date(date);
29
+ baseDate.setHours(0, 0, 0, 0);
30
+ var parsedTime = parse(time, "HH:mm", baseDate);
31
+ return isBefore(parsedTime, selectedDate);
25
32
  }
26
33
  return false;
27
34
  };
@@ -1,11 +1,16 @@
1
1
  import type { SelectProps } from "../Select/index.props";
2
2
  import type { FC } from "react";
3
+ type TimeRange = {
4
+ start: string;
5
+ end: string;
6
+ };
3
7
  interface TimeSelectProps extends Omit<SelectProps<string>, "options"> {
4
8
  interval?: 5 | 10 | 15 | 30;
5
9
  currentDate?: Date | null;
6
10
  selectedDate?: Date | null;
7
11
  name?: string;
8
12
  disabled?: boolean;
13
+ allowedTimeRange?: TimeRange;
9
14
  }
10
15
  declare const TimeSelect: FC<TimeSelectProps>;
11
16
  export default TimeSelect;
@@ -1,9 +1,28 @@
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
1
2
  import { __rest } from 'tslib';
2
3
  import React__default, { useMemo } from 'react';
3
4
  import Select from '../Select/index.js';
4
5
  import { generateSuggest, checkIsBeforeSelectedDate, checkIsBeforeNow } from './helpers.js';
5
6
  import OptionLabel from './Label/index.js';
6
7
 
8
+ var isTimeInRange = function isTimeInRange(timeString, range) {
9
+ var _timeString$split$map = timeString.split(":").map(Number),
10
+ _timeString$split$map2 = _slicedToArray(_timeString$split$map, 2),
11
+ hours = _timeString$split$map2[0],
12
+ minutes = _timeString$split$map2[1];
13
+ var totalMinutes = hours * 60 + minutes;
14
+ var _range$start$split$ma = range.start.split(":").map(Number),
15
+ _range$start$split$ma2 = _slicedToArray(_range$start$split$ma, 2),
16
+ startHours = _range$start$split$ma2[0],
17
+ startMinutes = _range$start$split$ma2[1];
18
+ var startTotalMinutes = startHours * 60 + startMinutes;
19
+ var _range$end$split$map = range.end.split(":").map(Number),
20
+ _range$end$split$map2 = _slicedToArray(_range$end$split$map, 2),
21
+ endHours = _range$end$split$map2[0],
22
+ endMinutes = _range$end$split$map2[1];
23
+ var endTotalMinutes = endHours * 60 + endMinutes;
24
+ return totalMinutes >= startTotalMinutes && totalMinutes <= endTotalMinutes;
25
+ };
7
26
  var TimeSelect = function TimeSelect(_a) {
8
27
  var value = _a.value,
9
28
  name = _a.name,
@@ -14,7 +33,8 @@ var TimeSelect = function TimeSelect(_a) {
14
33
  interval = _a$interval === void 0 ? 15 : _a$interval,
15
34
  onChange = _a.onChange,
16
35
  disabled = _a.disabled,
17
- props = __rest(_a, ["value", "name", "currentDate", "selectedDate", "label", "interval", "onChange", "disabled"]);
36
+ allowedTimeRange = _a.allowedTimeRange,
37
+ props = __rest(_a, ["value", "name", "currentDate", "selectedDate", "label", "interval", "onChange", "disabled", "allowedTimeRange"]);
18
38
  var baseOptions = useMemo(function () {
19
39
  return generateSuggest(interval).map(function (item) {
20
40
  return {
@@ -27,11 +47,15 @@ var TimeSelect = function TimeSelect(_a) {
27
47
  }, [interval]);
28
48
  var options = useMemo(function () {
29
49
  return baseOptions.map(function (option) {
50
+ var timeRangeDisabled = !!allowedTimeRange && !isTimeInRange(option.value, allowedTimeRange);
51
+ var beforeSelectedDisabled = !!selectedDate && checkIsBeforeSelectedDate(option.value, interval, selectedDate);
52
+ var beforeCurrentDisabled = !!currentDate && checkIsBeforeNow(option.value, currentDate);
53
+ var isDisabled = timeRangeDisabled || beforeSelectedDisabled || beforeCurrentDisabled;
30
54
  return Object.assign(Object.assign({}, option), {
31
- disabled: !!selectedDate && checkIsBeforeSelectedDate(option.value, interval, selectedDate) || !!currentDate && checkIsBeforeNow(option.value, currentDate)
55
+ disabled: isDisabled
32
56
  });
33
57
  });
34
- }, [baseOptions, currentDate, selectedDate, interval]);
58
+ }, [baseOptions, currentDate, selectedDate, interval, allowedTimeRange]);
35
59
  return /*#__PURE__*/React__default.createElement(Select, Object.assign({}, props, {
36
60
  name: name,
37
61
  value: value,
@@ -51,24 +51,24 @@ var Tooltip = function Tooltip(_ref) {
51
51
  }
52
52
  return Children.only(children);
53
53
  }, [children]);
54
- var onToggle = function onToggle(event) {
54
+ var onToggle = useCallback(function (event) {
55
55
  event.stopPropagation();
56
56
  setVisible(function (state) {
57
57
  return !state;
58
58
  });
59
- };
60
- var onShow = function onShow() {
59
+ }, []);
60
+ var onShow = useCallback(function () {
61
61
  setVisible(true);
62
- };
63
- var onHide = function onHide() {
62
+ }, []);
63
+ var onHide = useCallback(function () {
64
64
  setVisible(false);
65
- };
65
+ }, []);
66
66
  var onClickOutside = useCallback(function (event) {
67
67
  if (controlElement === null || controlElement === void 0 ? void 0 : controlElement.contains(event.target)) return;
68
68
  onHide();
69
69
  }, [onHide, controlElement]);
70
- var onClickOverlay = useCallback(function (e) {
71
- e.stopPropagation();
70
+ var onClickOverlay = useCallback(function (event) {
71
+ event.stopPropagation();
72
72
  onHide();
73
73
  }, [onHide]);
74
74
  useEffect(function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "colibri-ui",
3
- "version": "0.8.30",
3
+ "version": "0.8.31",
4
4
  "description": "React UI components library",
5
5
  "main": "index.js",
6
6
  "scripts": {},