forstok-ui-lib 7.5.1 → 7.5.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forstok-ui-lib",
3
- "version": "7.5.1",
3
+ "version": "7.5.3",
4
4
  "description": "Forstok UI Components Library",
5
5
  "path": "dist",
6
6
  "main": "dist/index.js",
@@ -1,30 +1,31 @@
1
- import { useState, useRef, useEffect } from 'react'
2
- import moment, { Moment } from 'moment'
1
+ import { useState, useRef, useEffect } from 'react';
2
+ import moment, { Moment } from 'moment';
3
3
  import { RangePicker } from 'rc-picker';
4
4
  import { RangePickerRef } from 'rc-picker/lib/interface';
5
+
5
6
  import generateMoment from 'rc-picker/lib/generate/moment.js';
6
7
  import enUS from 'rc-picker/lib/locale/en_US.js';
7
8
 
8
- import IconComponent from '../icon'
9
+ import IconComponent from '../icon';
9
10
 
10
- import 'rc-picker/assets/index.css'
11
- import { RangeContainer } from './styles'
11
+ import 'rc-picker/assets/index.css';
12
+ import { RangeContainer } from './styles';
12
13
 
13
- import { TMoment, TState } from '../../typeds/base.typed'
14
- import { TModerateDateAntFunction } from './typed'
14
+ import { TMoment, TState } from '../../typeds/base.typed';
15
+ import { TModerateDateAntFunction } from './typed';
15
16
 
16
- import { configDateRangeAnt } from '../../maps/common'
17
+ import { configDateRangeAnt } from '../../maps/common';
17
18
 
18
19
  type TDateRange = {
19
- $mode?: 'white'
20
- startDate?: TMoment
21
- endDate?: TMoment
22
- minDate?: TMoment
23
- maxDate?: TMoment
24
- evModDate: TModerateDateAntFunction
25
- isForceUpdate?: boolean
26
- setForceUpdate?: TState<boolean | undefined>
27
- }
20
+ $mode?: 'white';
21
+ startDate?: TMoment;
22
+ endDate?: TMoment;
23
+ minDate?: TMoment;
24
+ maxDate?: TMoment;
25
+ evModDate: TModerateDateAntFunction;
26
+ isForceUpdate?: boolean;
27
+ setForceUpdate?: TState<boolean | undefined>;
28
+ };
28
29
 
29
30
  const DateRangeComponent = (props: TDateRange) => {
30
31
  const {
@@ -35,104 +36,83 @@ const DateRangeComponent = (props: TDateRange) => {
35
36
  maxDate,
36
37
  evModDate,
37
38
  isForceUpdate,
38
- setForceUpdate
39
- } = props
39
+ setForceUpdate,
40
+ } = props;
41
+
42
+ // Ensure ALWAYS Moment objects
43
+ const _minDate: Moment = moment(minDate ?? configDateRangeAnt.minDate);
44
+ let _startDate: Moment = moment(startDate ?? configDateRangeAnt.startDate);
45
+ let _endDate: Moment = moment(endDate ?? configDateRangeAnt.endDate);
40
46
 
41
- const _minDate: Moment = minDate || configDateRangeAnt.minDate
42
- let _startDate: Moment = startDate || configDateRangeAnt.startDate
43
- let _endDate: Moment = endDate || configDateRangeAnt.endDate
44
-
45
- _minDate > _startDate && (_startDate = _minDate);
46
- (maxDate && (maxDate < _endDate)) && (_endDate = maxDate);
47
+ if (_startDate < _minDate) _startDate = _minDate;
48
+ if (maxDate && moment(maxDate).isBefore(_endDate)) {
49
+ _endDate = moment(maxDate);
50
+ }
47
51
 
48
- const [value, setValue] = useState<[TMoment, TMoment]>([_startDate, _endDate])
52
+ const [value, setValue] = useState<[Moment, Moment]>([_startDate, _endDate]);
49
53
 
50
54
  useEffect(() => {
51
55
  if (isForceUpdate) {
52
- _startDate && _endDate && setValue([_startDate, _endDate]);
53
- setForceUpdate && setForceUpdate(false)
56
+ setValue([_startDate, _endDate]);
57
+ setForceUpdate && setForceUpdate(false);
54
58
  }
55
- },[isForceUpdate, setForceUpdate, _startDate, _endDate])
59
+ }, [isForceUpdate]);
56
60
 
57
- const onChange = (newValue: [TMoment, TMoment] | null, formatStrings?: string[]) => {
58
- // console.log('Change:', newValue, formatStrings)
59
- if (newValue) {
60
- setValue(newValue)
61
- evModDate(newValue[0], newValue[1])
62
- }
63
- }
61
+ const onChange = (
62
+ dates: [Moment | null, Moment | null] | null,
63
+ dateStrings: [string, string],
64
+ ) => {
65
+ if (!dates) return;
64
66
 
65
- // can detect start and end action
66
- // const onCalendarChange = (
67
- // newValue: [TMoment, TMoment] | null,
68
- // formatStrings?: string[],
69
- // ) => {
70
- // console.log('Calendar Change:', newValue, formatStrings)
71
- // }
72
-
73
- const rest = {
74
- generateConfig: generateMoment,
75
- value,
76
- onChange,
77
- // onCalendarChange,
78
- }
67
+ const [start, end] = dates;
68
+
69
+ if (!start || !end) return;
79
70
 
80
- const rangePickerRef = useRef<RangePickerRef>(null)
71
+ setValue([start, end]);
72
+ evModDate(start, end);
73
+ };
74
+
75
+ const rangePickerRef = useRef<RangePickerRef>(null);
81
76
 
82
77
  return (
83
- <RangeContainer className='_refRangeContainer' $mode={$mode}>
78
+ <RangeContainer className="_refRangeContainer" $mode={$mode}>
84
79
  <RangePicker
85
- onOpenChange={open => {
86
- const parentEl = rangePickerRef.current?.nativeElement?.closest('._refRangeContainer')
87
- if (parentEl) {
88
- if (open) {
89
- parentEl.classList.add('is-actived')
90
- } else {
91
- parentEl.classList.remove('is-actived')
92
- }
93
- }
94
- }}
80
+ ref={rangePickerRef}
81
+ generateConfig={generateMoment}
82
+ locale={enUS}
83
+ value={value} // controlled
84
+ onChange={onChange}
95
85
  allowEmpty
96
86
  allowClear={false}
97
- locale={enUS}
98
- ref={rangePickerRef}
99
- separator='-'
87
+ separator="-"
100
88
  format="MMM D, YYYY"
101
89
  placeholder={['Start Date', 'End Date']}
102
90
  minDate={_minDate}
103
- maxDate={maxDate || moment().clone()}
104
- defaultValue={value}
105
- suffixIcon={<IconComponent $width='14px' $name='calendar' />}
106
- prevIcon={<IconComponent $width='12px' $name='arrow-left' />}
107
- nextIcon={<IconComponent $width='12px' $name='arrow-right' />}
108
- superPrevIcon={<IconComponent $width='12px' $name='arrow-left-double' />}
109
- superNextIcon={<IconComponent $width='12px' $name='arrow-right-double' />}
91
+ maxDate={maxDate ? moment(maxDate) : moment()}
92
+ suffixIcon={<IconComponent $width="14px" $name="calendar" />}
93
+ prevIcon={<IconComponent $width="12px" $name="arrow-left" />}
94
+ nextIcon={<IconComponent $width="12px" $name="arrow-right" />}
95
+ superPrevIcon={<IconComponent $width="12px" $name="arrow-left-double" />}
96
+ superNextIcon={<IconComponent $width="12px" $name="arrow-right-double" />}
110
97
  presets={[
111
- {
112
- label: 'Today',
113
- value: [moment().clone(), moment()],
114
- },
115
- {
116
- label: 'Last 7 days',
117
- value: [moment().subtract(6, 'days'), moment()],
118
- },
119
- {
120
- label: 'Last 14 days',
121
- value: [moment().subtract(13, 'days'), moment()],
122
- },
123
- {
124
- label: 'Last 30 days',
125
- value: [moment().subtract(29, 'days'), moment()],
126
- },
127
- {
128
- label: 'Last 90 days',
129
- value: [moment().subtract(89, 'days'), moment()],
130
- },
98
+ { label: 'Today', value: [moment(), moment()] },
99
+ { label: 'Last 7 days', value: [moment().subtract(6, 'days'), moment()] },
100
+ { label: 'Last 14 days', value: [moment().subtract(13, 'days'), moment()] },
101
+ { label: 'Last 30 days', value: [moment().subtract(29, 'days'), moment()] },
102
+ { label: 'Last 90 days', value: [moment().subtract(89, 'days'), moment()] },
131
103
  ]}
132
- {...rest}
104
+ onOpenChange={(open) => {
105
+ const parentEl = rangePickerRef.current?.nativeElement?.closest(
106
+ '._refRangeContainer'
107
+ );
108
+ if (!parentEl) return;
109
+ open
110
+ ? parentEl.classList.add('is-actived')
111
+ : parentEl.classList.remove('is-actived');
112
+ }}
133
113
  />
134
114
  </RangeContainer>
135
- )
136
- }
115
+ );
116
+ };
137
117
 
138
- export default DateRangeComponent
118
+ export default DateRangeComponent;