@synerise/ds-time-picker 0.6.57 → 0.7.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.7.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-time-picker@0.6.58...@synerise/ds-time-picker@0.7.0) (2023-03-20)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **data-format:** import types fix ([c3d20f2](https://github.com/Synerise/synerise-design/commit/c3d20f2bff43ce4605224c96b824a6f91662d961))
12
+
13
+
14
+ ### Features
15
+
16
+ * **data-format:** data format tools in pickers plus new tools ([c4adbfe](https://github.com/Synerise/synerise-design/commit/c4adbfe563af93f9daffc7e0b327098432c5e31e))
17
+
18
+
19
+
20
+
21
+
22
+ ## [0.6.58](https://github.com/Synerise/synerise-design/compare/@synerise/ds-time-picker@0.6.57...@synerise/ds-time-picker@0.6.58) (2023-03-08)
23
+
24
+ **Note:** Version bump only for package @synerise/ds-time-picker
25
+
26
+
27
+
28
+
29
+
6
30
  ## [0.6.57](https://github.com/Synerise/synerise-design/compare/@synerise/ds-time-picker@0.6.56...@synerise/ds-time-picker@0.6.57) (2023-03-06)
7
31
 
8
32
  **Note:** Version bump only for package @synerise/ds-time-picker
@@ -1,10 +1,6 @@
1
1
  import * as React from 'react';
2
- import { TimePickerProps } from './TimePicker.types';
3
- export declare const CLOCK_MODES: {
4
- AM: string;
5
- PM: string;
6
- };
7
- declare const _default: React.ForwardRefExoticComponent<Pick<TimePickerProps, "className" | "onChange" | "placeholder" | "disabled" | "value" | "trigger" | "placement" | "overlayClassName" | "units" | "defaultOpen" | "defaultAM" | "containerStyle" | "timeFormat" | "use12HourClock" | "alwaysOpen" | "dropdownProps" | "inputProps" | "disabledHours" | "disabledMinutes" | "disabledSeconds" | "clearTooltip" | "raw" | "onClockModeChange"> & {
2
+ import { TimePickerProps } from './types/TimePicker.types';
3
+ declare const _default: React.ForwardRefExoticComponent<Pick<TimePickerProps, "className" | "onChange" | "placeholder" | "disabled" | "value" | "trigger" | "placement" | "overlayClassName" | "use12HourClock" | "units" | "defaultOpen" | "containerStyle" | "timeFormat" | "alwaysOpen" | "dropdownProps" | "inputProps" | "disabledHours" | "disabledMinutes" | "disabledSeconds" | "clearTooltip" | "raw" | "onClockModeChange"> & {
8
4
  forwardedRef?: ((instance: any) => void) | React.RefObject<any> | null | undefined;
9
5
  } & React.RefAttributes<any>> & {
10
6
  WrappedComponent: React.ComponentType<TimePickerProps>;
@@ -1,19 +1,19 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import * as React from 'react';
4
- import dayjs from 'dayjs';
4
+ import { FormattedMessage, injectIntl } from 'react-intl';
5
5
  import { range } from 'lodash';
6
+ import dayjs from 'dayjs';
7
+ import customParseFormatPlugin from 'dayjs/plugin/customParseFormat';
6
8
  import Icon, { ClockM, Close3S } from '@synerise/ds-icon';
7
9
  import Dropdown from '@synerise/ds-dropdown';
8
10
  import Tooltip from '@synerise/ds-tooltip/dist/Tooltip';
9
- import { FormattedMessage, injectIntl } from 'react-intl';
10
11
  import Unit from './Unit';
11
12
  import * as S from './TimePicker.styles';
12
- var defaultUnits = ['hour', 'minute', 'second'];
13
- export var CLOCK_MODES = {
14
- AM: 'AM',
15
- PM: 'PM'
16
- };
13
+ import { handleTimeChange } from './utils/timePicker.utils';
14
+ import { AM, CLOCK_MODES, HOUR, HOUR_12, MINUTE, PM, SECOND } from './constants/timePicker.constants';
15
+ dayjs.extend(customParseFormatPlugin);
16
+ var defaultUnits = [HOUR, MINUTE, SECOND];
17
17
 
18
18
  var TimePicker = function TimePicker(_ref) {
19
19
  var placement = _ref.placement,
@@ -22,7 +22,6 @@ var TimePicker = function TimePicker(_ref) {
22
22
  value = _ref.value,
23
23
  units = _ref.units,
24
24
  defaultOpen = _ref.defaultOpen,
25
- defaultAM = _ref.defaultAM,
26
25
  onChange = _ref.onChange,
27
26
  _ref$containerStyle = _ref.containerStyle,
28
27
  containerStyle = _ref$containerStyle === void 0 ? {} : _ref$containerStyle,
@@ -52,28 +51,33 @@ var TimePicker = function TimePicker(_ref) {
52
51
  open = _React$useState[0],
53
52
  setOpen = _React$useState[1];
54
53
 
55
- var _React$useState2 = React.useState(defaultAM ? CLOCK_MODES.AM : CLOCK_MODES.PM),
54
+ var _React$useState2 = React.useState(function () {
55
+ var initialDate = dayjs(value);
56
+ var initialHour = initialDate.get(HOUR);
57
+ return initialHour >= HOUR_12 ? PM : AM;
58
+ }),
56
59
  clockMode = _React$useState2[0],
57
60
  setClockMode = _React$useState2[1];
58
61
 
59
- var getTimeString = function getTimeString(date) {
60
- return dayjs(date).format(timeFormat);
61
- }; // eslint-disable-next-line
62
- // @ts-ignore
63
-
64
-
62
+ var timeFormatByClockMode = React.useMemo(function () {
63
+ return timeFormat != null ? timeFormat : use12HourClock ? 'hh:mm:ss A' : 'HH:mm:ss';
64
+ }, [timeFormat, use12HourClock]);
65
+ var getTimeString = React.useCallback(function (date) {
66
+ return dayjs(date).format(timeFormatByClockMode);
67
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
68
+ [timeFormat, timeFormatByClockMode]);
65
69
  var unitConfig = [{
66
- unit: 'hour',
67
- options: use12HourClock ? range(12) : range(24),
70
+ unit: HOUR,
71
+ options: use12HourClock ? range(1, 13) : range(24),
68
72
  disabled: disabledHours,
69
73
  insertSeperator: true
70
74
  }, {
71
- unit: 'minute',
75
+ unit: MINUTE,
72
76
  options: range(60),
73
77
  disabled: disabledMinutes,
74
78
  insertSeperator: true
75
79
  }, {
76
- unit: 'second',
80
+ unit: SECOND,
77
81
  options: range(60),
78
82
  disabled: disabledSeconds,
79
83
  insertSeperator: !!use12HourClock
@@ -90,24 +94,19 @@ var TimePicker = function TimePicker(_ref) {
90
94
  !visible && onChange && onChange(value, getTimeString(value));
91
95
  };
92
96
 
93
- var handleChange = function handleChange(unit, newValue) {
94
- var wasUndefined = value === undefined;
95
- var dateBuilder = dayjs(value);
96
- dateBuilder = dateBuilder[unit](newValue);
97
-
98
- if (wasUndefined) {
99
- // set remaining time fields to 0, HH:00:00, 00:mm:00, 00:00:ss
100
- unitConfig.filter(function (u) {
101
- return u.unit !== unit;
102
- }).forEach(function (unitDef) {
103
- return dateBuilder = dateBuilder[unitDef.unit](0);
104
- });
97
+ var handleChange = function handleChange(unit, newValue, clockModeChanged) {
98
+ if (clockModeChanged === void 0) {
99
+ clockModeChanged = false;
105
100
  }
106
101
 
107
- var newDate = dateBuilder.toDate();
102
+ var newDate = handleTimeChange(value, unit, newValue, clockModeChanged, use12HourClock, clockMode, unitConfig);
108
103
  onChange && onChange(newDate, getTimeString(newDate));
109
104
  };
110
105
 
106
+ React.useEffect(function () {
107
+ handleChange(undefined, undefined, true); // eslint-disable-next-line react-hooks/exhaustive-deps
108
+ }, [clockMode]);
109
+
111
110
  var renderClockSwitch = function renderClockSwitch() {
112
111
  return /*#__PURE__*/React.createElement(S.Unit, null, Object.values(CLOCK_MODES).map(function (mode) {
113
112
  return /*#__PURE__*/React.createElement(S.Cell, {
@@ -131,7 +130,8 @@ var TimePicker = function TimePicker(_ref) {
131
130
  value: value,
132
131
  onSelect: function onSelect(newValue) {
133
132
  return handleChange(u.unit, newValue);
134
- }
133
+ },
134
+ use12HourClock: use12HourClock
135
135
  })), (index !== unitsToRender.length - 1 || !!use12HourClock) && /*#__PURE__*/React.createElement(S.UnitSeperator, null));
136
136
  }), use12HourClock && renderClockSwitch());
137
137
  var localValue = value;
@@ -156,13 +156,13 @@ var TimePicker = function TimePicker(_ref) {
156
156
  }, [open, dateString, clear, clearTooltip, alwaysOpen, disabled]);
157
157
  var placeholderValue = React.useMemo(function () {
158
158
  if (value) {
159
- return dayjs(value).format('HH:mm:ss');
159
+ return dayjs(value).format(timeFormatByClockMode);
160
160
  }
161
161
 
162
162
  return placeholder || intl.formatMessage({
163
163
  id: 'DS.TIME-PICKER.PLACEHOLDER'
164
164
  });
165
- }, [placeholder, intl, value]);
165
+ }, [placeholder, intl, value, timeFormatByClockMode]);
166
166
 
167
167
  if (raw) {
168
168
  return overlay;
@@ -183,7 +183,7 @@ var TimePicker = function TimePicker(_ref) {
183
183
  disabled: disabled,
184
184
  className: "" + (alwaysOpen || open ? 'active' : ''),
185
185
  "data-testid": "tp-input",
186
- value: use12HourClock && !!dateString ? dateString + " " + clockMode : dateString,
186
+ value: dateString,
187
187
  placeholder: placeholderValue,
188
188
  readOnly: true,
189
189
  icon1: timePickerIcon
@@ -192,7 +192,6 @@ var TimePicker = function TimePicker(_ref) {
192
192
 
193
193
  TimePicker.defaultProps = {
194
194
  placement: 'bottomLeft',
195
- timeFormat: 'HH:mm:ss',
196
195
  trigger: ['click'],
197
196
  units: defaultUnits
198
197
  };
package/dist/Unit.d.ts CHANGED
@@ -5,6 +5,7 @@ export declare type UnitConfig = {
5
5
  options: number[];
6
6
  disabled?: number[];
7
7
  insertSeperator?: boolean;
8
+ use12HourClock?: boolean;
8
9
  };
9
10
  export declare type UnitProps = UnitConfig & {
10
11
  value?: Date;
package/dist/Unit.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import dayjs from 'dayjs';
3
2
  import { debounce } from 'debounce';
4
3
  import Scrollbar from '@synerise/ds-scrollbar';
5
4
  import * as S from './TimePicker.styles';
5
+ import { getUnitSelectedNumber } from './utils/unit.utils';
6
6
  var CELL_HEIGHT = 32;
7
7
  var DEBOUNCE_DELAY = 150;
8
8
 
@@ -11,8 +11,11 @@ var Unit = function Unit(_ref) {
11
11
  disabled = _ref.disabled,
12
12
  value = _ref.value,
13
13
  unit = _ref.unit,
14
- onSelect = _ref.onSelect;
15
- var selected = value && dayjs(value).get(unit);
14
+ onSelect = _ref.onSelect,
15
+ use12HourClock = _ref.use12HourClock;
16
+ var selected = React.useMemo(function () {
17
+ return getUnitSelectedNumber(value, unit, use12HourClock);
18
+ }, [unit, use12HourClock, value]);
16
19
 
17
20
  var _React$useState = React.useState(false),
18
21
  forceUpdate = _React$useState[0],
@@ -0,0 +1,90 @@
1
+ import dayjs from 'dayjs';
2
+ import { ClockModes } from '../types/TimePicker.types';
3
+ export declare const HOUR: dayjs.UnitType;
4
+ export declare const MINUTE: dayjs.UnitType;
5
+ export declare const SECOND: dayjs.UnitType;
6
+ export declare const CLOCK_MODES: readonly ["AM", "PM"];
7
+ export declare const PM: ClockModes;
8
+ export declare const AM: ClockModes;
9
+ export declare const HOUR_12 = 12;
10
+ export declare const MAP_12_AM_TO_24_HOUR: {
11
+ 0: number;
12
+ 1: number;
13
+ 2: number;
14
+ 3: number;
15
+ 4: number;
16
+ 5: number;
17
+ 6: number;
18
+ 7: number;
19
+ 8: number;
20
+ 9: number;
21
+ 10: number;
22
+ 11: number;
23
+ 12: number;
24
+ 13: number;
25
+ 14: number;
26
+ 15: number;
27
+ 16: number;
28
+ 17: number;
29
+ 18: number;
30
+ 19: number;
31
+ 20: number;
32
+ 21: number;
33
+ 22: number;
34
+ 23: number;
35
+ 24: number;
36
+ };
37
+ export declare const MAP_12_PM_TO_24_HOUR: {
38
+ 0: number;
39
+ 1: number;
40
+ 2: number;
41
+ 3: number;
42
+ 4: number;
43
+ 5: number;
44
+ 6: number;
45
+ 7: number;
46
+ 8: number;
47
+ 9: number;
48
+ 10: number;
49
+ 11: number;
50
+ 12: number;
51
+ 13: number;
52
+ 14: number;
53
+ 15: number;
54
+ 16: number;
55
+ 17: number;
56
+ 18: number;
57
+ 19: number;
58
+ 20: number;
59
+ 21: number;
60
+ 22: number;
61
+ 23: number;
62
+ 24: number;
63
+ };
64
+ export declare const MAP_24_HOUR_TO_12: {
65
+ 0: number;
66
+ 1: number;
67
+ 2: number;
68
+ 3: number;
69
+ 4: number;
70
+ 5: number;
71
+ 6: number;
72
+ 7: number;
73
+ 8: number;
74
+ 9: number;
75
+ 10: number;
76
+ 11: number;
77
+ 12: number;
78
+ 13: number;
79
+ 14: number;
80
+ 15: number;
81
+ 16: number;
82
+ 17: number;
83
+ 18: number;
84
+ 19: number;
85
+ 20: number;
86
+ 21: number;
87
+ 22: number;
88
+ 23: number;
89
+ 24: number;
90
+ };
@@ -0,0 +1,88 @@
1
+ export var HOUR = 'hour';
2
+ export var MINUTE = 'minute';
3
+ export var SECOND = 'second';
4
+ export var CLOCK_MODES = ['AM', 'PM'];
5
+ export var PM = 'PM';
6
+ export var AM = 'AM';
7
+ export var HOUR_12 = 12;
8
+ export var MAP_12_AM_TO_24_HOUR = {
9
+ 0: 12,
10
+ 1: 1,
11
+ 2: 2,
12
+ 3: 3,
13
+ 4: 4,
14
+ 5: 5,
15
+ 6: 6,
16
+ 7: 7,
17
+ 8: 8,
18
+ 9: 9,
19
+ 10: 10,
20
+ 11: 11,
21
+ 12: 0,
22
+ 13: 1,
23
+ 14: 2,
24
+ 15: 3,
25
+ 16: 4,
26
+ 17: 5,
27
+ 18: 6,
28
+ 19: 7,
29
+ 20: 8,
30
+ 21: 9,
31
+ 22: 10,
32
+ 23: 11,
33
+ 24: 0
34
+ };
35
+ export var MAP_12_PM_TO_24_HOUR = {
36
+ 0: 12,
37
+ 1: 13,
38
+ 2: 14,
39
+ 3: 15,
40
+ 4: 16,
41
+ 5: 17,
42
+ 6: 18,
43
+ 7: 19,
44
+ 8: 20,
45
+ 9: 21,
46
+ 10: 22,
47
+ 11: 23,
48
+ 12: 12,
49
+ 13: 13,
50
+ 14: 14,
51
+ 15: 15,
52
+ 16: 16,
53
+ 17: 17,
54
+ 18: 18,
55
+ 19: 19,
56
+ 20: 20,
57
+ 21: 21,
58
+ 22: 22,
59
+ 23: 23,
60
+ 24: 24
61
+ };
62
+ export var MAP_24_HOUR_TO_12 = {
63
+ 0: 12,
64
+ 1: 1,
65
+ 2: 2,
66
+ 3: 3,
67
+ 4: 4,
68
+ 5: 5,
69
+ 6: 6,
70
+ 7: 7,
71
+ 8: 8,
72
+ 9: 9,
73
+ 10: 10,
74
+ 11: 11,
75
+ 12: 12,
76
+ 13: 1,
77
+ 14: 2,
78
+ 15: 3,
79
+ 16: 4,
80
+ 17: 5,
81
+ 18: 6,
82
+ 19: 7,
83
+ 20: 8,
84
+ 21: 9,
85
+ 22: 10,
86
+ 23: 11,
87
+ 24: 12
88
+ };
package/dist/index.d.ts CHANGED
@@ -1 +1,3 @@
1
1
  export { default } from './TimePicker';
2
+ export { AM, PM, HOUR_12, HOUR, CLOCK_MODES, MAP_12_AM_TO_24_HOUR, MAP_12_PM_TO_24_HOUR, MAP_24_HOUR_TO_12, } from './constants/timePicker.constants';
3
+ export type { ClockModes, TimePickerProps } from './types/TimePicker.types';
package/dist/index.js CHANGED
@@ -1 +1,2 @@
1
- export { default } from './TimePicker';
1
+ export { default } from './TimePicker';
2
+ export { AM, PM, HOUR_12, HOUR, CLOCK_MODES, MAP_12_AM_TO_24_HOUR, MAP_12_PM_TO_24_HOUR, MAP_24_HOUR_TO_12 } from './constants/timePicker.constants';
@@ -1,8 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import dayjs from 'dayjs';
3
3
  import { IntlShape } from 'react-intl';
4
- import { DropdownProps } from '@synerise/ds-dropdown/dist/Dropdown';
5
4
  import { InputProps } from 'antd/es/input/Input';
5
+ import { DropdownProps } from '@synerise/ds-dropdown/dist/Dropdown';
6
+ import { CLOCK_MODES } from '../constants/timePicker.constants';
7
+ export declare type ClockModes = typeof CLOCK_MODES[number];
6
8
  export declare type TimePickerDisabledUnits = {
7
9
  disabledSeconds?: number[];
8
10
  disabledMinutes?: number[];
@@ -13,7 +15,6 @@ export declare type TimePickerProps = TimePickerDisabledUnits & {
13
15
  className?: string;
14
16
  clearTooltip?: string | React.ReactNode;
15
17
  containerStyle?: React.CSSProperties;
16
- defaultAM?: boolean;
17
18
  defaultOpen?: boolean;
18
19
  disabled?: boolean;
19
20
  dropdownProps?: Partial<DropdownProps>;
@@ -0,0 +1,3 @@
1
+ import dayjs from 'dayjs';
2
+ import { UnitConfig } from '../Unit';
3
+ export declare const handleTimeChange: (value: Date | undefined, unit: dayjs.UnitType | undefined, newValue: number | undefined, clockModeChanged: boolean | undefined, use12HourClock: boolean | undefined, clockMode: string, unitConfig: UnitConfig[]) => Date;
@@ -0,0 +1,48 @@
1
+ import dayjs from 'dayjs';
2
+ import { AM, HOUR, HOUR_12, MAP_12_AM_TO_24_HOUR, MAP_12_PM_TO_24_HOUR, MINUTE, PM, SECOND } from '../constants/timePicker.constants';
3
+ export var handleTimeChange = function handleTimeChange(value, unit, newValue, clockModeChanged, use12HourClock, clockMode, unitConfig) {
4
+ if (clockModeChanged === void 0) {
5
+ clockModeChanged = false;
6
+ }
7
+
8
+ var wasUndefined = value === undefined;
9
+ var dateBuilder = dayjs(value);
10
+
11
+ if (unit) {
12
+ dateBuilder = dateBuilder[unit](newValue);
13
+ }
14
+
15
+ var hourToMap = dateBuilder.get(HOUR);
16
+
17
+ if (use12HourClock) {
18
+ hourToMap = clockMode === AM ? MAP_12_AM_TO_24_HOUR[hourToMap] : MAP_12_PM_TO_24_HOUR[hourToMap];
19
+
20
+ if (unit === HOUR || clockModeChanged) {
21
+ dateBuilder = dateBuilder.set(HOUR, hourToMap);
22
+ }
23
+
24
+ if (clockMode === PM && hourToMap === HOUR_12) {
25
+ dateBuilder = dateBuilder.set(MINUTE, 0);
26
+ dateBuilder = dateBuilder.set(SECOND, 0);
27
+ }
28
+
29
+ if (clockMode === AM && hourToMap === HOUR_12) {
30
+ dateBuilder = dateBuilder.set(HOUR, hourToMap);
31
+ }
32
+ }
33
+
34
+ if (wasUndefined) {
35
+ // set remaining time fields to 0, HH:00:00, 00:mm:00, 00:00:ss
36
+ unitConfig.filter(function (unitDefinition) {
37
+ return unitDefinition.unit !== unit;
38
+ }).forEach(function (unitDefinition) {
39
+ return dateBuilder = dateBuilder[unitDefinition.unit](0);
40
+ });
41
+
42
+ if (use12HourClock && clockMode === PM) {
43
+ dateBuilder = dateBuilder.set(HOUR, HOUR_12);
44
+ }
45
+ }
46
+
47
+ return dateBuilder.toDate();
48
+ };
@@ -0,0 +1,2 @@
1
+ import dayjs from 'dayjs';
2
+ export declare const getUnitSelectedNumber: (value: Date | undefined, unit: dayjs.UnitType, use12HourClock: boolean | undefined) => number | undefined;
@@ -0,0 +1,16 @@
1
+ import dayjs from 'dayjs';
2
+ import { HOUR, HOUR_12, MAP_24_HOUR_TO_12 } from '../constants/timePicker.constants';
3
+ export var getUnitSelectedNumber = function getUnitSelectedNumber(value, unit, use12HourClock) {
4
+ if (value === undefined) return undefined;
5
+ var result = value && dayjs(value).get(unit);
6
+
7
+ if (unit === HOUR && use12HourClock) {
8
+ if (!result) {
9
+ result = HOUR_12;
10
+ }
11
+
12
+ result = MAP_24_HOUR_TO_12[result];
13
+ }
14
+
15
+ return result;
16
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-time-picker",
3
- "version": "0.6.57",
3
+ "version": "0.7.0",
4
4
  "description": "TimePicker UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -32,7 +32,7 @@
32
32
  ],
33
33
  "types": "dist/index.d.ts",
34
34
  "dependencies": {
35
- "@synerise/ds-dropdown": "^0.17.55",
35
+ "@synerise/ds-dropdown": "^0.17.57",
36
36
  "@synerise/ds-icon": "^0.54.0",
37
37
  "@synerise/ds-input": "^0.18.36",
38
38
  "@synerise/ds-search-bar": "^0.6.26",
@@ -47,5 +47,5 @@
47
47
  "devDependencies": {
48
48
  "@types/debounce": "^1.2.0"
49
49
  },
50
- "gitHead": "a9c9628df732abd42421880fd1aa61b7f7c580ee"
50
+ "gitHead": "41419f123b90134def2fecde455da13946fc2c0e"
51
51
  }