forstok-ui-lib 5.2.30 → 5.2.37
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.css +1 -0
- package/dist/index.d.ts +30 -1
- package/dist/index.js +408 -226
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +426 -244
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -1
- package/src/assets/images/icons/arrow-left-double.svg +40 -0
- package/src/assets/images/icons/arrow-left.svg +39 -0
- package/src/assets/images/icons/arrow-right-double.svg +40 -0
- package/src/assets/images/icons/arrow-right.svg +39 -0
- package/src/assets/index.ts +2 -1
- package/src/assets/javascripts/helper.ts +11 -0
- package/src/components/date/daterange.tsx +283 -0
- package/src/components/date/styles.css +3 -0
- package/src/components/date/styles.ts +401 -0
- package/src/components/date/typed.ts +1 -0
- package/src/components/icon/styles.ts +32 -0
- package/src/components/index.ts +2 -0
- package/src/index.ts +2 -1
- package/src/maps/common.ts +10 -0
- package/src/maps/index.ts +1 -0
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forstok-ui-lib",
|
|
3
|
-
"version": "5.2.
|
|
3
|
+
"version": "5.2.37",
|
|
4
4
|
"description": "Forstok UI Components Library",
|
|
5
5
|
"path": "dist",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.mjs",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
9
|
"scripts": {
|
|
10
|
+
"preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions",
|
|
10
11
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
12
|
"build": "rollup -c --bundleConfigAsCjs"
|
|
12
13
|
},
|
|
@@ -36,10 +37,14 @@
|
|
|
36
37
|
"@svgr/rollup": "^8.1.0",
|
|
37
38
|
"@types/html-to-text": "^9.0.4",
|
|
38
39
|
"@types/react": "^19.0.2",
|
|
40
|
+
"@types/react-daterange-picker": "^2.0.8",
|
|
39
41
|
"@types/react-dom": "^19.0.2",
|
|
40
42
|
"html-to-text": "^9.0.5",
|
|
43
|
+
"moment-range": "^4.0.2",
|
|
44
|
+
"npm-force-resolutions": "^0.0.10",
|
|
41
45
|
"react": "^19.0.0",
|
|
42
46
|
"react-content-loader": "^7.0.2",
|
|
47
|
+
"react-daterange-picker": "^2.0.1",
|
|
43
48
|
"react-dom": "^19.0.0",
|
|
44
49
|
"react-router-dom": "^7.1.1",
|
|
45
50
|
"react-select": "^5.10.0",
|
|
@@ -52,5 +57,12 @@
|
|
|
52
57
|
"typescript": "^5.7.2",
|
|
53
58
|
"typescript-plugin-styled-components": "^3.0.0",
|
|
54
59
|
"use-state-with-callback": "^3.0.2"
|
|
60
|
+
},
|
|
61
|
+
"overrides": {
|
|
62
|
+
"react-daterange-picker": {
|
|
63
|
+
"moment-range": "^4.0.2",
|
|
64
|
+
"react": "^19.0.0",
|
|
65
|
+
"react-dom": "^19.0.0"
|
|
66
|
+
}
|
|
55
67
|
}
|
|
56
68
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg fill="#4e4e4e" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 220.682 220.682"
|
|
5
|
+
xml:space="preserve">
|
|
6
|
+
<g>
|
|
7
|
+
<polygon points="99.702,210.043 127.986,181.758 56.569,110.341 127.986,38.924 99.702,10.639 0,110.341 "/>
|
|
8
|
+
<polygon points="192.398,10.639 92.695,110.341 192.398,210.043 220.682,181.758 149.264,110.341 220.682,38.924 "/>
|
|
9
|
+
</g>
|
|
10
|
+
<g>
|
|
11
|
+
</g>
|
|
12
|
+
<g>
|
|
13
|
+
</g>
|
|
14
|
+
<g>
|
|
15
|
+
</g>
|
|
16
|
+
<g>
|
|
17
|
+
</g>
|
|
18
|
+
<g>
|
|
19
|
+
</g>
|
|
20
|
+
<g>
|
|
21
|
+
</g>
|
|
22
|
+
<g>
|
|
23
|
+
</g>
|
|
24
|
+
<g>
|
|
25
|
+
</g>
|
|
26
|
+
<g>
|
|
27
|
+
</g>
|
|
28
|
+
<g>
|
|
29
|
+
</g>
|
|
30
|
+
<g>
|
|
31
|
+
</g>
|
|
32
|
+
<g>
|
|
33
|
+
</g>
|
|
34
|
+
<g>
|
|
35
|
+
</g>
|
|
36
|
+
<g>
|
|
37
|
+
</g>
|
|
38
|
+
<g>
|
|
39
|
+
</g>
|
|
40
|
+
</svg>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg fill="#4e4e4e" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 199.404 199.404"
|
|
5
|
+
xml:space="preserve">
|
|
6
|
+
<g>
|
|
7
|
+
<polygon points="135.412,0 35.709,99.702 135.412,199.404 163.695,171.119 92.277,99.702 163.695,28.285 "/>
|
|
8
|
+
</g>
|
|
9
|
+
<g>
|
|
10
|
+
</g>
|
|
11
|
+
<g>
|
|
12
|
+
</g>
|
|
13
|
+
<g>
|
|
14
|
+
</g>
|
|
15
|
+
<g>
|
|
16
|
+
</g>
|
|
17
|
+
<g>
|
|
18
|
+
</g>
|
|
19
|
+
<g>
|
|
20
|
+
</g>
|
|
21
|
+
<g>
|
|
22
|
+
</g>
|
|
23
|
+
<g>
|
|
24
|
+
</g>
|
|
25
|
+
<g>
|
|
26
|
+
</g>
|
|
27
|
+
<g>
|
|
28
|
+
</g>
|
|
29
|
+
<g>
|
|
30
|
+
</g>
|
|
31
|
+
<g>
|
|
32
|
+
</g>
|
|
33
|
+
<g>
|
|
34
|
+
</g>
|
|
35
|
+
<g>
|
|
36
|
+
</g>
|
|
37
|
+
<g>
|
|
38
|
+
</g>
|
|
39
|
+
</svg>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg fill="#4e4e4e" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 220.682 220.682"
|
|
5
|
+
xml:space="preserve">
|
|
6
|
+
<g>
|
|
7
|
+
<polygon points="92.695,38.924 164.113,110.341 92.695,181.758 120.979,210.043 220.682,110.341 120.979,10.639 "/>
|
|
8
|
+
<polygon points="28.284,210.043 127.986,110.341 28.284,10.639 0,38.924 71.417,110.341 0,181.758 "/>
|
|
9
|
+
</g>
|
|
10
|
+
<g>
|
|
11
|
+
</g>
|
|
12
|
+
<g>
|
|
13
|
+
</g>
|
|
14
|
+
<g>
|
|
15
|
+
</g>
|
|
16
|
+
<g>
|
|
17
|
+
</g>
|
|
18
|
+
<g>
|
|
19
|
+
</g>
|
|
20
|
+
<g>
|
|
21
|
+
</g>
|
|
22
|
+
<g>
|
|
23
|
+
</g>
|
|
24
|
+
<g>
|
|
25
|
+
</g>
|
|
26
|
+
<g>
|
|
27
|
+
</g>
|
|
28
|
+
<g>
|
|
29
|
+
</g>
|
|
30
|
+
<g>
|
|
31
|
+
</g>
|
|
32
|
+
<g>
|
|
33
|
+
</g>
|
|
34
|
+
<g>
|
|
35
|
+
</g>
|
|
36
|
+
<g>
|
|
37
|
+
</g>
|
|
38
|
+
<g>
|
|
39
|
+
</g>
|
|
40
|
+
</svg>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg fill="#4e4e4e" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 199.404 199.404"
|
|
5
|
+
xml:space="preserve">
|
|
6
|
+
<g>
|
|
7
|
+
<polygon points="63.993,199.404 163.695,99.702 63.993,0 35.709,28.285 107.127,99.702 35.709,171.119 "/>
|
|
8
|
+
</g>
|
|
9
|
+
<g>
|
|
10
|
+
</g>
|
|
11
|
+
<g>
|
|
12
|
+
</g>
|
|
13
|
+
<g>
|
|
14
|
+
</g>
|
|
15
|
+
<g>
|
|
16
|
+
</g>
|
|
17
|
+
<g>
|
|
18
|
+
</g>
|
|
19
|
+
<g>
|
|
20
|
+
</g>
|
|
21
|
+
<g>
|
|
22
|
+
</g>
|
|
23
|
+
<g>
|
|
24
|
+
</g>
|
|
25
|
+
<g>
|
|
26
|
+
</g>
|
|
27
|
+
<g>
|
|
28
|
+
</g>
|
|
29
|
+
<g>
|
|
30
|
+
</g>
|
|
31
|
+
<g>
|
|
32
|
+
</g>
|
|
33
|
+
<g>
|
|
34
|
+
</g>
|
|
35
|
+
<g>
|
|
36
|
+
</g>
|
|
37
|
+
<g>
|
|
38
|
+
</g>
|
|
39
|
+
</svg>
|
package/src/assets/index.ts
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TObject } from '../../typeds';
|
|
2
|
+
|
|
3
|
+
export const dateRangeStatus = (value: string) => {
|
|
4
|
+
const statusObj: TObject = { 'today': 'Today', 'lastweek': 'Last 7 days', 'lastsecondweek': 'Last 14 days', 'lastmonth': 'Last 30 days', 'lastquart': 'Last 90 days', 'custom': 'Date' }
|
|
5
|
+
return statusObj[value]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const dateRangeDays = (value: string) => {
|
|
9
|
+
const dayObj: TObject = { 'today': 0, 'lastweek': 6, 'lastsecondweek': 13 ,'lastmonth': 29, 'lastquart': 89, 'custom': 0 }
|
|
10
|
+
return dayObj[value]
|
|
11
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { useEffect, useState, useRef } from 'react';
|
|
2
|
+
import DateRangePicker from 'react-daterange-picker';
|
|
3
|
+
import * as moment from 'moment';
|
|
4
|
+
import { extendMoment } from 'moment-range';
|
|
5
|
+
import { configDateRange } from '../../maps/common';
|
|
6
|
+
import IconComponent from '../icon';
|
|
7
|
+
import ButtonComponent from '../button';
|
|
8
|
+
import CheckboxComponent from '../checkbox';
|
|
9
|
+
import ReactPortalComponent from '../portal';
|
|
10
|
+
import TextComponent from '../text';
|
|
11
|
+
import { dateRangeDays, dateRangeStatus } from '../../assets/javascripts/helper';
|
|
12
|
+
import 'react-daterange-picker/dist/css/react-calendar.css';
|
|
13
|
+
import './styles.css';
|
|
14
|
+
import { DateRangeContainer, DateRangeControl, DateRangeLabelContainer, DateRangeLabel, DateRangeIndicatorsContainer, DateRangeIndicatorsArrowIconSvg, DateRangeMenuContainer, DateRangeMenu, DateRangeSelection, SelectionDate, DateRangeAside, DateRangePortalContainer, DateRangeIconContainer } from './styles';
|
|
15
|
+
import type { TMouseEvent } from '../../typeds';
|
|
16
|
+
import type { TModerateDateFunction } from './typed';
|
|
17
|
+
|
|
18
|
+
type TDateRange = {
|
|
19
|
+
mode: string
|
|
20
|
+
placeholder?: string
|
|
21
|
+
startDate?: string | null
|
|
22
|
+
endDate?: string | null
|
|
23
|
+
rangeDate?: string
|
|
24
|
+
minDate?: string
|
|
25
|
+
evModDate: TModerateDateFunction
|
|
26
|
+
portalId?: string
|
|
27
|
+
isForceUpdate?: boolean
|
|
28
|
+
setForceUpdate?: React.Dispatch<React.SetStateAction<boolean>>
|
|
29
|
+
isCheckType?: boolean
|
|
30
|
+
size?: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const DateRangeComponent = ({ mode='default', placeholder, startDate, endDate, rangeDate, minDate, evModDate, portalId, isForceUpdate, setForceUpdate, isCheckType, size }: TDateRange) => {
|
|
34
|
+
const _placeholder = placeholder || configDateRange.placeholder;
|
|
35
|
+
const _rangeDate = rangeDate || configDateRange.rangeDate;
|
|
36
|
+
const _startDate = startDate || configDateRange.startDate;
|
|
37
|
+
const _endDate = endDate || configDateRange.endDate;
|
|
38
|
+
const _minDate = minDate || configDateRange.minDate;
|
|
39
|
+
|
|
40
|
+
const [isOpen, setOpen] = useState<boolean>(false) ;
|
|
41
|
+
const [offsetLeft, setOffsetLeft] = useState<number>(0);
|
|
42
|
+
const [isLoadOffsetLeft, setLoadOffsetLeft] = useState<boolean>(false);
|
|
43
|
+
const [startDateSelected, setStartDateSelected] = useState<string>(_startDate);
|
|
44
|
+
const [endDateSelected, setEndDateSelected] = useState<string>(_endDate);
|
|
45
|
+
const [rangeDateSelected, setRangeDateSelected] = useState<string>(_rangeDate);
|
|
46
|
+
|
|
47
|
+
const daterangeContainerRef = useRef<HTMLElement | null>(null);
|
|
48
|
+
const buttonRef = useRef<HTMLDivElement | null>(null);
|
|
49
|
+
const newMoment = extendMoment(moment);
|
|
50
|
+
|
|
51
|
+
const callback = () => {
|
|
52
|
+
setOpen(false);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (offsetLeft && mode === 'filter' && isLoadOffsetLeft) {
|
|
57
|
+
const _offsetLeft = daterangeContainerRef.current && daterangeContainerRef.current ? daterangeContainerRef.current.getBoundingClientRect().x : 0;
|
|
58
|
+
setOffsetLeft(_offsetLeft);
|
|
59
|
+
setLoadOffsetLeft(true);
|
|
60
|
+
}
|
|
61
|
+
if (isForceUpdate) {
|
|
62
|
+
_startDate && setStartDateSelected(_startDate);
|
|
63
|
+
_endDate && setEndDateSelected(_endDate);
|
|
64
|
+
_rangeDate && setRangeDateSelected(_rangeDate);
|
|
65
|
+
setForceUpdate && setForceUpdate(false);
|
|
66
|
+
}
|
|
67
|
+
},[offsetLeft, isLoadOffsetLeft, mode, isForceUpdate, setForceUpdate, _startDate, _endDate, _rangeDate])
|
|
68
|
+
|
|
69
|
+
const evResetFilter = () => {
|
|
70
|
+
setStartDateSelected(_startDate || '');
|
|
71
|
+
setEndDateSelected(_endDate || '');
|
|
72
|
+
setRangeDateSelected(_rangeDate || '');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const evToogleDateRangePicker: TMouseEvent = e => {
|
|
76
|
+
const refEl = (buttonRef && buttonRef.current) ? buttonRef.current : null;
|
|
77
|
+
const buttonEl = refEl && (e.target as HTMLDivElement).closest(`.${refEl.classList[0]}`) as HTMLDivElement;
|
|
78
|
+
if (!buttonEl) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const containerEl = buttonEl.closest('._refContainer') as HTMLElement;
|
|
82
|
+
const isCurOpen = containerEl.classList.contains('is-shown');
|
|
83
|
+
const offsetPos = containerEl.getBoundingClientRect();
|
|
84
|
+
if (!isCurOpen) {
|
|
85
|
+
const containerRef = document.getElementsByClassName('_refContainer is-shown') as HTMLCollectionOf<HTMLElement>;
|
|
86
|
+
if (containerRef.length) {
|
|
87
|
+
for (var i = 0; i < containerRef.length; i++) {
|
|
88
|
+
containerRef[i].classList.remove('is-shown');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
if (portalId) {
|
|
93
|
+
const portalContainerRef = document.getElementsByClassName('._refDateRangePickerPortal is-shown') as HTMLCollectionOf<HTMLElement>;
|
|
94
|
+
if (portalContainerRef.length) {
|
|
95
|
+
for (var i = 0; i < portalContainerRef.length; i++) {
|
|
96
|
+
portalContainerRef[i].classList.remove('is-shown');
|
|
97
|
+
portalContainerRef[i].style.left = '0';
|
|
98
|
+
portalContainerRef[i].style.top = '0';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},10)
|
|
103
|
+
}
|
|
104
|
+
setOpen(!isCurOpen);
|
|
105
|
+
if (!isCurOpen) {
|
|
106
|
+
evResetFilter();
|
|
107
|
+
containerEl && containerEl.classList.add('is-shown');
|
|
108
|
+
setTimeout(() => {
|
|
109
|
+
if (portalId) {
|
|
110
|
+
const portalContainerRef = document.querySelector('._refDateRangePickerPortal') as HTMLDivElement;
|
|
111
|
+
if (portalContainerRef) {
|
|
112
|
+
if (offsetPos) {
|
|
113
|
+
portalContainerRef.style.left = offsetPos.left + 'px';
|
|
114
|
+
portalContainerRef.style.top = (offsetPos.top + offsetPos.height) + 'px';
|
|
115
|
+
}
|
|
116
|
+
portalContainerRef.classList.add('is-shown');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}, 10)
|
|
120
|
+
} else {
|
|
121
|
+
containerEl && containerEl.classList.remove('is-shown');
|
|
122
|
+
setTimeout(() => {
|
|
123
|
+
if (portalId) {
|
|
124
|
+
const portalContainerRef = document.querySelector('._refDateRangePickerPortal') as HTMLDivElement;
|
|
125
|
+
if (portalContainerRef) {
|
|
126
|
+
portalContainerRef.classList.remove('is-shown');
|
|
127
|
+
portalContainerRef.style.left = '0';
|
|
128
|
+
portalContainerRef.style.top = '0';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}, 10)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const handleSelect = (value: any) => {
|
|
136
|
+
const startDate: string = value.start.format('YYYY-MM-DD');
|
|
137
|
+
const endDate: string = value.end.format('YYYY-MM-DD');
|
|
138
|
+
setStartDateSelected(startDate);
|
|
139
|
+
setEndDateSelected(endDate);
|
|
140
|
+
setRangeDateSelected('custom');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const evApplyDateRange = () => {
|
|
144
|
+
let _start_date = '';
|
|
145
|
+
let _end_date = '';
|
|
146
|
+
if (startDateSelected && endDateSelected) {
|
|
147
|
+
_start_date = startDateSelected;
|
|
148
|
+
_end_date = endDateSelected;
|
|
149
|
+
} else if (_rangeDate) {
|
|
150
|
+
_start_date = newMoment().clone().subtract(dateRangeDays(_rangeDate), 'days').format('YYYY-MM-DD');
|
|
151
|
+
_end_date = newMoment().clone().format('YYYY-MM-DD');
|
|
152
|
+
} else if (_startDate && _endDate ) {
|
|
153
|
+
_start_date = _startDate;
|
|
154
|
+
_end_date = _endDate;
|
|
155
|
+
}
|
|
156
|
+
evModDate(_start_date, _end_date, 'custom', callback);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const evCancelDateRange = () => {
|
|
160
|
+
setOpen(false);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const setRange: TMouseEvent = e => {
|
|
164
|
+
const type = (e.target as HTMLDivElement).dataset.type || '';
|
|
165
|
+
let startDate: string = '';
|
|
166
|
+
let endDate: string = newMoment().clone().format('YYYY-MM-DD');
|
|
167
|
+
switch (type) {
|
|
168
|
+
case 'today':
|
|
169
|
+
startDate= newMoment().clone().format('YYYY-MM-DD');
|
|
170
|
+
break;
|
|
171
|
+
case 'lastweek':
|
|
172
|
+
startDate= newMoment().clone().subtract(6, 'days').format('YYYY-MM-DD');
|
|
173
|
+
break;
|
|
174
|
+
case 'lastsecondweek':
|
|
175
|
+
startDate= newMoment().clone().subtract(13, 'days').format('YYYY-MM-DD');
|
|
176
|
+
break;
|
|
177
|
+
case 'lastmonth':
|
|
178
|
+
startDate= newMoment().clone().subtract(29, 'days').format('YYYY-MM-DD');
|
|
179
|
+
break;
|
|
180
|
+
case 'lastquart':
|
|
181
|
+
startDate= newMoment().clone().subtract(89, 'days').format('YYYY-MM-DD');
|
|
182
|
+
break;
|
|
183
|
+
case 'custom':
|
|
184
|
+
startDate = '';
|
|
185
|
+
endDate= '';
|
|
186
|
+
break
|
|
187
|
+
default:
|
|
188
|
+
startDate = '';
|
|
189
|
+
endDate= '';
|
|
190
|
+
break
|
|
191
|
+
}
|
|
192
|
+
setStartDateSelected(startDate);
|
|
193
|
+
setEndDateSelected(endDate);
|
|
194
|
+
setRangeDateSelected(type);
|
|
195
|
+
evModDate(startDate, endDate, type, callback);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const startDateMoment: moment.Moment = newMoment(_startDate, 'YYYY-MM-DD');
|
|
199
|
+
const endDateMoment: moment.Moment = newMoment(_endDate, 'YYYY-MM-DD');
|
|
200
|
+
const _minDateMoment: string = newMoment(_minDate, 'YYYY-MM-DD').format('YYYY-MM-DD');
|
|
201
|
+
const startDateSelectedMoment: moment.Moment = newMoment(startDateSelected, 'YYYY-MM-DD').startOf('day');
|
|
202
|
+
const endDateSelectedMoment: moment.Moment = newMoment(endDateSelected, 'YYYY-MM-DD').endOf('day');
|
|
203
|
+
const minDateMoment: Date | null = _minDate ? new Date(_minDateMoment) : null;
|
|
204
|
+
const openClass = isOpen ? 'is-shown' : ''
|
|
205
|
+
|
|
206
|
+
let value;
|
|
207
|
+
if (startDateSelected && endDateSelected) {
|
|
208
|
+
value = newMoment.range(startDateSelectedMoment, endDateSelectedMoment);
|
|
209
|
+
} else if (_startDate && _endDate) {
|
|
210
|
+
value = newMoment.range(newMoment(_startDate, 'YYYY-MM-DD').startOf('day'), newMoment(_endDate, 'YYYY-MM-DD').endOf('day'));
|
|
211
|
+
} else if (_rangeDate) {
|
|
212
|
+
value = newMoment.range(newMoment().clone().subtract(dateRangeDays(_rangeDate), 'days').startOf('day'), newMoment().clone().endOf('day'));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const dateRangeEl = (
|
|
216
|
+
<DateRangeMenuContainer $mode={mode} style={{ 'left': '-'+offsetLeft+'px' }}>
|
|
217
|
+
<DateRangeMenu>
|
|
218
|
+
<DateRangeSelection>
|
|
219
|
+
<SelectionDate data-type='today' $activated={rangeDateSelected === 'today'} onClick={setRange} data-qa-id='daterange-picker-today'>Today</SelectionDate>
|
|
220
|
+
<SelectionDate data-type='lastweek' $activated={rangeDateSelected === 'lastweek'} onClick={setRange} data-qa-id='daterange-picker-7d'>Last 7 days</SelectionDate>
|
|
221
|
+
<SelectionDate data-type='lastsecondweek' $activated={rangeDateSelected === 'lastsecondweek'} onClick={setRange} data-qa-id='daterange-picker-14d'>Last 14 days</SelectionDate>
|
|
222
|
+
<SelectionDate data-type='lastmonth' $activated={rangeDateSelected === 'lastmonth'} onClick={setRange} data-qa-id='daterange-picker-30d'>Last 30 days</SelectionDate>
|
|
223
|
+
<SelectionDate data-type='lastquart' $activated={rangeDateSelected === 'lastquart'} onClick={setRange} data-qa-id='daterange-picker-90d'>Last 90 days</SelectionDate>
|
|
224
|
+
<SelectionDate data-type='custom' $activated={rangeDateSelected === 'custom'} data-qa-id='daterange-picker-custom'>Custom Range</SelectionDate>
|
|
225
|
+
</DateRangeSelection>
|
|
226
|
+
<DateRangePicker
|
|
227
|
+
numberOfCalendars={2}
|
|
228
|
+
onSelect={handleSelect}
|
|
229
|
+
selectionType='range'
|
|
230
|
+
maximumDate={new Date()}
|
|
231
|
+
value={value}
|
|
232
|
+
initialMonth={newMoment().add(-1, 'month').month()}
|
|
233
|
+
initialYear={newMoment().add(0, 'year').year()}
|
|
234
|
+
singleDateRange={true}
|
|
235
|
+
{...minDateMoment && { minimumDate: minDateMoment }}
|
|
236
|
+
/>
|
|
237
|
+
</DateRangeMenu>
|
|
238
|
+
<DateRangeAside>
|
|
239
|
+
<TextComponent>{startDateSelected && endDateSelected ? startDateSelectedMoment.format('LL') +' - '+ endDateSelectedMoment.format('LL') : ' '}</TextComponent>
|
|
240
|
+
<div>
|
|
241
|
+
<ButtonComponent $mode='white' $size='small' onClick={evCancelDateRange} data-qa-id='daterange-picker-cancel'>Cancel</ButtonComponent>
|
|
242
|
+
<ButtonComponent $mode='red' $size='small' onClick={evApplyDateRange} data-qa-id='daterange-picker-apply'>Apply</ButtonComponent>
|
|
243
|
+
</div>
|
|
244
|
+
</DateRangeAside>
|
|
245
|
+
</DateRangeMenuContainer>
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
return (
|
|
249
|
+
<DateRangeContainer className={'_refContainer '+ openClass} $mode={mode} ref={daterangeContainerRef} data-qa-id='daterange-picker'>
|
|
250
|
+
<DateRangeControl ref={buttonRef} onClick={evToogleDateRangePicker} $mode={mode} $size={size}>
|
|
251
|
+
{
|
|
252
|
+
mode === 'filterorder' || mode === 'filterordertofulfill' || mode === 'filterdashboard' ? (
|
|
253
|
+
<ButtonComponent $iconLeft='calendar' $mode='nude' $isIndicatorArrow={true} isIndicatorArrowColor='#494949'>{ (_startDate && _endDate && _rangeDate === 'custom') ? (startDateMoment.format('MMM D, YYYY') + ' - ' +endDateMoment.format('MMM D, YYYY')) : (_rangeDate ? dateRangeStatus(_rangeDate) : _placeholder) }</ButtonComponent>
|
|
254
|
+
) : (
|
|
255
|
+
<>
|
|
256
|
+
{ mode === 'filter' ? <CheckboxComponent name='checkbox-date' id='checkbox-date' className='_refCheckboxContainer' defaultChecked={isCheckType} disabled={true} /> : null }
|
|
257
|
+
{
|
|
258
|
+
mode === 'popuppayment' ? (
|
|
259
|
+
<DateRangeIconContainer>
|
|
260
|
+
<IconComponent $name='calendar' $width='14px' />
|
|
261
|
+
</DateRangeIconContainer>
|
|
262
|
+
) : null
|
|
263
|
+
}
|
|
264
|
+
<DateRangeLabelContainer>
|
|
265
|
+
<DateRangeLabel $size={size}>
|
|
266
|
+
{ (_startDate && _endDate && _rangeDate === 'custom') ? (startDateMoment.format('LL') + ' - ' +endDateMoment.format('LL')) : (_rangeDate ? dateRangeStatus(_rangeDate) : _placeholder) }
|
|
267
|
+
</DateRangeLabel>
|
|
268
|
+
</DateRangeLabelContainer>
|
|
269
|
+
<DateRangeIndicatorsContainer>
|
|
270
|
+
<DateRangeIndicatorsArrowIconSvg height='20' width='20' viewBox='0 0 20 20' aria-hidden='true' focusable='false'>
|
|
271
|
+
<path d='M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z'></path>
|
|
272
|
+
</DateRangeIndicatorsArrowIconSvg>
|
|
273
|
+
</DateRangeIndicatorsContainer>
|
|
274
|
+
</>
|
|
275
|
+
)
|
|
276
|
+
}
|
|
277
|
+
</DateRangeControl>
|
|
278
|
+
{ isOpen && ( portalId ? <ReactPortalComponent><DateRangePortalContainer className='_refDateRangePickerPortal'>{dateRangeEl}</DateRangePortalContainer></ReactPortalComponent> : dateRangeEl ) }
|
|
279
|
+
</DateRangeContainer>
|
|
280
|
+
)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export default DateRangeComponent
|