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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/date/range.tsx +76 -96
package/package.json
CHANGED
|
@@ -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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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<[
|
|
52
|
+
const [value, setValue] = useState<[Moment, Moment]>([_startDate, _endDate]);
|
|
49
53
|
|
|
50
54
|
useEffect(() => {
|
|
51
55
|
if (isForceUpdate) {
|
|
52
|
-
|
|
53
|
-
setForceUpdate && setForceUpdate(false)
|
|
56
|
+
setValue([_startDate, _endDate]);
|
|
57
|
+
setForceUpdate && setForceUpdate(false);
|
|
54
58
|
}
|
|
55
|
-
},[isForceUpdate
|
|
59
|
+
}, [isForceUpdate]);
|
|
56
60
|
|
|
57
|
-
const onChange = (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
}
|
|
61
|
+
const onChange = (
|
|
62
|
+
dates: [Moment | null, Moment | null] | null,
|
|
63
|
+
dateStrings: [string, string],
|
|
64
|
+
) => {
|
|
65
|
+
if (!dates) return;
|
|
64
66
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
71
|
+
setValue([start, end]);
|
|
72
|
+
evModDate(start, end);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const rangePickerRef = useRef<RangePickerRef>(null);
|
|
81
76
|
|
|
82
77
|
return (
|
|
83
|
-
<RangeContainer className=
|
|
78
|
+
<RangeContainer className="_refRangeContainer" $mode={$mode}>
|
|
84
79
|
<RangePicker
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
113
|
-
|
|
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
|
-
{
|
|
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;
|