groovinads-ui 1.2.20 → 1.2.21

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,7 +1,7 @@
1
1
  {
2
2
  "name": "groovinads-ui",
3
3
  "description": "Groovinads UI is a React component library designed exclusively for Groovinads applications. It provides ready-to-use UI elements styled according to Groovinads design guidelines to facilitate rapid development.",
4
- "version": "1.2.20",
4
+ "version": "1.2.21",
5
5
  "keywords": [
6
6
  "css",
7
7
  "sass",
@@ -72,5 +72,8 @@
72
72
  "sb": "storybook dev -p 6006",
73
73
  "build-storybook": "storybook build",
74
74
  "build-lib": "rollup -c"
75
+ },
76
+ "dependencies": {
77
+ "react-datepicker": "^7.3.0"
75
78
  }
76
79
  }
@@ -16,10 +16,9 @@ const DropdownComponent = ({
16
16
  align = 'start',
17
17
  show,
18
18
  }) => {
19
-
20
19
  const [Toggle, Menu] = children;
21
20
 
22
- const modifiedToggle = {...Toggle, align}; // Al toggle le agrega el align
21
+ const modifiedToggle = { ...Toggle, align }; // Al toggle le agrega el align
23
22
 
24
23
  const modifiedMenu = React.cloneElement(Menu, {
25
24
  as: 'ul',
@@ -27,12 +26,16 @@ const DropdownComponent = ({
27
26
  className: fullWidth ? 'w-100' : '',
28
27
  popperConfig: overflow
29
28
  ? {
30
- strategy: 'fixed',
31
- onFirstUpdate: () => window.dispatchEvent(new CustomEvent('scroll'))
32
- }
29
+ strategy: 'fixed',
30
+ onFirstUpdate: () => window.dispatchEvent(new CustomEvent('scroll')),
31
+ }
33
32
  : undefined,
34
- children: Menu.props.children.map((child) => React.cloneElement(child, {as: 'li'}))}
35
- );
33
+ children: Menu.props.children.length
34
+ ? Menu.props.children.map((child) =>
35
+ React.cloneElement(child, { as: 'li' }),
36
+ )
37
+ : React.cloneElement(Menu.props.children, { as: 'li' }),
38
+ });
36
39
 
37
40
  return (
38
41
  <Dropdown
@@ -86,7 +86,7 @@ const DropdownFilter = ({
86
86
  />
87
87
  </div>
88
88
  <div className='filter-values'>
89
- { valuesSelected.length == values.length ? 'All selected' : valuesSelected.length ? valuesSelected.join('; ') : 'None'}
89
+ { valuesSelected.length === values.length ? 'All selected' : valuesSelected.length ? valuesSelected.join('; ') : 'None'}
90
90
  </div>
91
91
  </Dropdown.Toggle>
92
92
  {!locked && (
@@ -0,0 +1,306 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import DatePicker from 'react-datepicker'; // https://reactdatepicker.com
3
+ import PropTypes from 'prop-types';
4
+
5
+ // COMPONENTS
6
+ import { Icon } from '../../Labels';
7
+ import DropdownComponent from '../DropdownComponent'
8
+ import PeriodAndDetailDropdowns from './PeriodAndDetailDropdowns';
9
+
10
+ const DropdownDatePicker = ({
11
+ datePicker1StartDate,
12
+ setDatePicker1StartDate,
13
+ datePicker1EndDate,
14
+ setDatePicker1EndDate,
15
+ datePicker2StartDate,
16
+ setDatePicker2StartDate,
17
+ datePicker2EndDate,
18
+ setDatePicker2EndDate,
19
+ tableQueryObj,
20
+ setTableQueryObj,
21
+ fetchData,
22
+ variant = 'input',
23
+ locked = false,
24
+ }) => {
25
+ // eslint-disable-next-line no-unused-vars
26
+ const [compareDates, setCompareDates] = useState(false);
27
+ const [activeTab, setActiveTab] = useState(1);
28
+
29
+ /* We have a 'local' state for datepickers inside the dropdown, so the user can cancel the dropdown and go back to previous values. */
30
+ /* When user confirms selected values, the 'local' state replaces the values previously stored in the DateFilters component. */
31
+ /* ========== STATE FOR DATEPCIKER 1 ========== */
32
+ const [DDStartDate1, setDDStartDate1] = useState(datePicker1StartDate);
33
+ const [DDEndDate1, setDDEndDate1] = useState(datePicker1EndDate);
34
+ const [DDStartDate2, setDDStartDate2] = useState(datePicker2StartDate);
35
+ const [DDEndDate2, setDDEndDate2] = useState(datePicker2EndDate);
36
+
37
+ const onChangeDDDate1 = (dates) => {
38
+ const [start, end] = dates;
39
+ setDDStartDate1(start);
40
+ setDDEndDate1(end);
41
+ };
42
+
43
+ /* State for dropdowns only visible when selecting 'compare dates' option */
44
+ const [DDPeriod1, setDDPeriod1] = useState('Custom range');
45
+ const [DDDetailLevel1, setDDDetailLevel1] = useState('Daily');
46
+
47
+ /* ========== STATE FOR DATEPICKER 2 ========== - DatePicker 2 is only visible when selecting 'compare dates' option */
48
+ const [DDStartDate2, setDDStartDate2] = useState(datePicker2StartDate);
49
+ const [DDEndDate2, setDDEndDate2] = useState(datePicker2EndDate);
50
+
51
+ const onChangeDDDate2 = (dates) => {
52
+ const [start, end] = dates;
53
+ setDDStartDate2(start);
54
+ setDDEndDate2(end);
55
+ };
56
+
57
+ /* State for dropdowns only visible when selecting 'compare dates' option */
58
+ const [DDPeriod2, setDDPeriod2] = useState('Custom range');
59
+ const [DDDetailLevel2, setDDDetailLevel2] = useState('Daily');
60
+
61
+ const dropdown = useRef(null);
62
+
63
+ const closeDropwdown = () => {
64
+ if (dropdown?.current?.className)
65
+ dropdown.current.className = 'dropdown-menu p-3 shadow-2';
66
+ };
67
+
68
+ const formatDate = (date) => {
69
+ if (!date) return undefined;
70
+ return date.toLocaleString('en-US', {
71
+ month: 'short',
72
+ day: '2-digit',
73
+ year: 'numeric',
74
+ });
75
+ };
76
+
77
+ const formatDateForQueryObj = (date) => {
78
+ if (!date) return undefined;
79
+
80
+ const year = date?.getFullYear();
81
+ const month = (1 + date?.getMonth())?.toString()?.padStart(2, '0');
82
+ const day = date?.getDate()?.toString()?.padStart(2, '0');
83
+
84
+ return `${year}-${month}-${day} 00:00:00`;
85
+ };
86
+
87
+ const updateDateFilters = () => {
88
+ const newQueryObj = { ...tableQueryObj };
89
+
90
+ // Update state stored in the DateFilters component
91
+ setDatePicker1StartDate(DDStartDate1);
92
+ if (DDEndDate1 === null) {
93
+ setDatePicker1EndDate(DDStartDate1);
94
+ newQueryObj.report_request.date_to = formatDateForQueryObj(DDStartDate1);
95
+ } else {
96
+ setDatePicker1EndDate(DDEndDate1);
97
+ newQueryObj.report_request.date_to = formatDateForQueryObj(DDEndDate1);
98
+ }
99
+ setDatePicker2StartDate(DDStartDate2);
100
+ setDatePicker2EndDate(DDEndDate2);
101
+
102
+ // Update tableDateFilterQuery object
103
+ if (DDStartDate1)
104
+ newQueryObj.report_request.date_from =
105
+ formatDateForQueryObj(DDStartDate1);
106
+
107
+ newQueryObj.report_request.id_period = 0;
108
+
109
+ setTableQueryObj(newQueryObj);
110
+
111
+ fetchData(newQueryObj);
112
+
113
+ closeDropwdown();
114
+ };
115
+
116
+ const isMobile = window?.innerWidth < 500;
117
+
118
+ // ========== HACK ========== - Remove unnecesary div generated by the library
119
+ const removeBugDiv = () =>
120
+ document?.querySelector('.react-datepicker__aria-live')?.remove();
121
+
122
+ useEffect(() => removeBugDiv(), []);
123
+
124
+ return (
125
+ <div className='dropdown dropdown-pills'>
126
+ {/* INPUT */}
127
+ <label className='dropdown-label' htmlFor='reportDatePicker'>
128
+ Period
129
+ </label>
130
+
131
+ {variant === 'input' ? (
132
+ <button
133
+ className='btn btn-input dropdown-toggle'
134
+ id='reportDatePicker'
135
+ type='button'
136
+ data-bs-toggle='dropdown'
137
+ aria-expanded='false'
138
+ >
139
+ {/* Start date */}
140
+ <span className='fw-bold highlighted'>
141
+ {formatDate(datePicker1StartDate)}
142
+ </span>
143
+ <span>to</span>
144
+ {/* End date */}
145
+ <span className='fw-bold highlighted'>
146
+ {formatDate(datePicker1EndDate)}
147
+ </span>
148
+ <i className='fa-solid fa-calendar-day'></i>
149
+ </button>
150
+ ) : (
151
+ <DropdownComponent>
152
+ <div className='filter-heading'>
153
+ <div className='filter-title'>
154
+ <span>Date</span>
155
+ {locked && (
156
+ <Icon style={'solid'} iconName={'lock-keyhole'} scale={0.7} />
157
+ )}
158
+ </div>
159
+ <Icon
160
+ style={'solid'}
161
+ iconName={'angle-down'}
162
+ scale={1}
163
+ className='caret'
164
+ />
165
+ </div>
166
+ <div className='filter-values'>
167
+ <span className='fw-bold highlighted'>
168
+ {formatDate(datePicker1StartDate)}
169
+ </span>
170
+ <span>to</span>
171
+ {/* End date */}
172
+ <span className='fw-bold highlighted'>
173
+ {formatDate(datePicker1EndDate)}
174
+ </span>
175
+ </div>
176
+ </DropdownComponent>
177
+ )}
178
+
179
+ {/* DROPDOWN */}
180
+ <div
181
+ className='dropdown-menu p-3 shadow-2'
182
+ onClick={(e) => e.stopPropagation()} // Prevent Dropdown from closing when clicking inside of it
183
+ ref={dropdown}
184
+ >
185
+ {compareDates && (
186
+ <>
187
+ {/* DATE TABS */}
188
+ <ul className='nav nav-tabs' id='dateComparisonTabs' role='tablist'>
189
+ <li
190
+ className='nav-item'
191
+ role='presentation'
192
+ onClick={() => setActiveTab(1)}
193
+ >
194
+ <button
195
+ className='nav-link active'
196
+ id='date1ComparisonTab'
197
+ data-bs-toggle='tab'
198
+ data-bs-target='#date1ComparisonTabPane'
199
+ type='button'
200
+ role='tab'
201
+ aria-controls='date1ComparisonTabPane'
202
+ aria-selected='true'
203
+ >
204
+ Date 1
205
+ </button>
206
+ </li>
207
+
208
+ <li
209
+ className='nav-item'
210
+ role='presentation'
211
+ onClick={() => setActiveTab(2)}
212
+ >
213
+ <button
214
+ className='nav-link'
215
+ id='date2ComparisonTab'
216
+ data-bs-toggle='tab'
217
+ data-bs-target='#date2ComparisonTabPane'
218
+ type='button'
219
+ role='tab'
220
+ aria-controls='date2ComparisonTabPane'
221
+ aria-selected='false'
222
+ >
223
+ Date 2
224
+ </button>
225
+ </li>
226
+ </ul>
227
+
228
+ {/* PERIOD AND DETAIL LEVEL DROPDOWNS */}
229
+ <PeriodAndDetailDropdowns
230
+ DDPeriod1={DDPeriod1}
231
+ setDDPeriod1={setDDPeriod1}
232
+ DDDetailLevel1={DDDetailLevel1}
233
+ setDDDetailLevel1={setDDDetailLevel1}
234
+ DDPeriod2={DDPeriod2}
235
+ setDDPeriod2={setDDPeriod2}
236
+ DDDetailLevel2={DDDetailLevel2}
237
+ setDDDetailLevel2={setDDDetailLevel2}
238
+ />
239
+ </>
240
+ )}
241
+
242
+ {/* DATE PICKERS */}
243
+ {activeTab === 1 ? (
244
+ <DatePicker
245
+ className='form-control form-search'
246
+ selected={DDStartDate1}
247
+ onChange={onChangeDDDate1}
248
+ startDate={DDStartDate1}
249
+ endDate={DDEndDate1}
250
+ monthsShown={isMobile ? 1 : 2}
251
+ selectsRange
252
+ inline
253
+ />
254
+ ) : (
255
+ <DatePicker
256
+ className='form-control form-search'
257
+ selected={DDStartDate2}
258
+ onChange={onChangeDDDate2}
259
+ startDate={DDStartDate2}
260
+ endDate={DDEndDate2}
261
+ monthsShown={isMobile ? 1 : 2}
262
+ selectsRange
263
+ inline
264
+ />
265
+ )}
266
+
267
+ <div className='d-flex flex-nowrap flex-column flex-md-row'>
268
+ <div className='d-flex justify-content-end gap-3 flex-column-reverse flex-md-row w-100'>
269
+ <button
270
+ className='btn btn-small btn-terciary'
271
+ onClick={() => closeDropwdown()}
272
+ >
273
+ Cancel
274
+ </button>
275
+
276
+ <button
277
+ className='btn btn-small'
278
+ // disabled={!DDStartDate1 || !DDEndDate1} // Start and end dates must be selected
279
+ onClick={() => updateDateFilters()}
280
+ >
281
+ Set date
282
+ </button>
283
+ </div>
284
+ </div>
285
+ </div>
286
+ </div>
287
+ );
288
+ };
289
+
290
+ DropdownDatePicker.propTypes = {
291
+ datePicker1StartDate: PropTypes.instanceOf(Date),
292
+ setDatePicker1StartDate: PropTypes.func,
293
+ datePicker1EndDate: PropTypes.instanceOf(Date),
294
+ setDatePicker1EndDate: PropTypes.func,
295
+ datePicker2StartDate: PropTypes.instanceOf(Date),
296
+ setDatePicker2StartDate: PropTypes.func,
297
+ datePicker2EndDate: PropTypes.instanceOf(Date),
298
+ setDatePicker2EndDate: PropTypes.func,
299
+ tableQueryObj: PropTypes.object,
300
+ setTableQueryObj: PropTypes.func,
301
+ fetchData: PropTypes.func,
302
+ variant: PropTypes.oneOf(['input', 'filter']),
303
+ locked: PropTypes.bool,
304
+ };
305
+
306
+ export default DropdownDatePicker;
@@ -0,0 +1,320 @@
1
+ import React, { Children, useEffect, useRef, useState } from 'react';
2
+ import DatePicker from 'react-datepicker'; // https://reactdatepicker.com
3
+ import PropTypes from 'prop-types';
4
+ import Dropdown from 'react-bootstrap/Dropdown';
5
+
6
+ // COMPONENTS
7
+ import { Icon } from '../../Labels';
8
+ import { Button } from '../../Button';
9
+ // import { Switch } from '../../Inputs';
10
+ // import { Tabnav } from '../../Navigation';
11
+ // import PeriodAndDetailDropdowns from './PeriodAndDetailDropdowns';
12
+
13
+ // HOOKS
14
+ import { useTextFormatter } from '../../../hooks';
15
+
16
+ const DropdownDatePicker = ({
17
+ className = '',
18
+ variant = 'input',
19
+ show,
20
+ setShow,
21
+ onToggle,
22
+ inputLabel = 'period',
23
+ dateFrom,
24
+ setDateFrom,
25
+ dateTo,
26
+ setDateTo,
27
+ locked = false,
28
+ overflow = false,
29
+ onRemoveFilter,
30
+ fromDate1,
31
+ setFromDate1,
32
+ toDate1,
33
+ setToDate1,
34
+ fromDate2,
35
+ setFromDate2,
36
+ toDate2,
37
+ setToDate2,
38
+ }) => {
39
+ const [activeTab, setActiveTab] = useState(1);
40
+
41
+ const [compareDates, setCompareDates] = useState(true);
42
+
43
+ /* State for dropdowns only visible when selecting 'compare dates' option */
44
+ const [period1, setPeriod1] = useState('Custom range');
45
+ const [detailLevel1, setDetailLevel1] = useState('Daily');
46
+
47
+ const [period2, setPeriod2] = useState('Custom range');
48
+ const [detailLevel2, setDetailLevel2] = useState('Daily');
49
+
50
+ /* We have a 'local' state for datepickers inside the dropdown, so the user can cancel the dropdown and go back to previous values. */
51
+ /* When user confirms selected values, the 'local' state replaces the values previously stored in the DateFilters component. */
52
+ /* ========== STATE FOR DATEPCIKER 1 ========== */
53
+ const [editingFromDate1, setEditingFromDate1] = useState(fromDate1);
54
+ const [editingToDate1, setEditingToDate1] = useState(toDate1);
55
+
56
+ const [editingFromDate2, setEditingFromDate2] = useState(fromDate2);
57
+ const [editingToDate2, setEditingToDate2] = useState(toDate2);
58
+
59
+ const [internalShow, setInternalShow] = useState(!!show);
60
+
61
+ const { capitalice } = useTextFormatter();
62
+
63
+ const dropdown = useRef(null);
64
+
65
+ const isMobile = window?.innerWidth < 500;
66
+
67
+ const onChangeDDDate1 = (dates) => {
68
+ const [start, end] = dates;
69
+ setEditingFromDate1(start);
70
+ setEditingToDate1(end);
71
+ };
72
+
73
+ const onChangeDDDate2 = (dates) => {
74
+ const [start, end] = dates;
75
+ setEditingFromDate2(start);
76
+ setEditingToDate2(end);
77
+ };
78
+
79
+ const internalToggle = () => {
80
+ setInternalShow((prevShow) => !prevShow);
81
+ try {
82
+ onToggle();
83
+ } catch (error) {}
84
+ };
85
+
86
+ const closeDropdown = () => {
87
+ setInternalShow(false);
88
+ try {
89
+ setShow(false);
90
+ } catch (error) {}
91
+ };
92
+
93
+ const updateDateFilters = () => {
94
+ setFromDate1(editingFromDate1);
95
+
96
+ if (editingToDate1 === null) {
97
+ setToDate1(editingFromDate1);
98
+ } else {
99
+ setToDate1(editingToDate1);
100
+ }
101
+ setFromDate2(fromDate2);
102
+ setToDate2(toDate2);
103
+
104
+ closeDropdown();
105
+ };
106
+
107
+ useEffect(() => {
108
+ setInternalShow(!!show);
109
+ }, [show]);
110
+
111
+ useEffect(() => {
112
+ console.log('internalShow', internalShow);
113
+ }, []);
114
+
115
+ return (
116
+ <Dropdown
117
+ show={internalShow}
118
+ className={`${variant === 'filter' ? 'dropdown-filter' : ''}`}
119
+ >
120
+ <Dropdown.Toggle
121
+ variant='toggle-filter'
122
+ onClick={internalToggle}
123
+ className={`${variant === 'input' ? 'btn btn-input' : ''}`}
124
+ >
125
+ {variant === 'input' ? (
126
+ <>
127
+ {(dateFrom || dateTo) && (
128
+ <span className={'wrapper'}>
129
+ <strong>{dateFrom}</strong> to <strong>{dateTo}</strong>
130
+ </span>
131
+ )}
132
+ <span className='label'>{capitalice(inputLabel)}</span>
133
+ <Icon iconName='calendar-day' />
134
+ </>
135
+ ) : (
136
+ <>
137
+ <div className='filter-heading'>
138
+ <div className='filter-title'>
139
+ <span>{capitalice(inputLabel)}</span>
140
+ {locked && (
141
+ <Icon style={'solid'} iconName={'lock-keyhole'} scale={0.7} />
142
+ )}
143
+ </div>
144
+ <Icon
145
+ style={'solid'}
146
+ iconName={'angle-down'}
147
+ scale={1}
148
+ className='caret'
149
+ />
150
+ </div>
151
+ <div className='filter-values'>
152
+ {dateFrom || dateTo ? (
153
+ <>
154
+ <strong>{dateFrom}</strong> to <strong>{dateTo}</strong>
155
+ </>
156
+ ) : (
157
+ <>None</>
158
+ )}
159
+ </div>
160
+ </>
161
+ )}
162
+ </Dropdown.Toggle>
163
+ {variant === 'filter' && !locked && (
164
+ <Button
165
+ variant='terciary'
166
+ icon='xmark-circle'
167
+ size='md'
168
+ className='remove-filter'
169
+ onClick={onRemoveFilter}
170
+ />
171
+ )}
172
+
173
+ <Dropdown.Menu
174
+ popperConfig={
175
+ overflow
176
+ ? {
177
+ strategy: 'fixed',
178
+ onFirstUpdate: () =>
179
+ window.dispatchEvent(new CustomEvent('scroll')),
180
+ }
181
+ : undefined
182
+ }
183
+ >
184
+ <Dropdown.Item as={'div'}>
185
+ {compareDates && (
186
+ <>
187
+ {/* DATE TABS */}
188
+ {/* <ul
189
+ className='nav nav-tabs'
190
+ id='dateComparisonTabs'
191
+ role='tablist'
192
+ >
193
+ <li
194
+ className='nav-item'
195
+ role='presentation'
196
+ onClick={() => setActiveTab(1)}
197
+ >
198
+
199
+ <button
200
+ className='nav-link active'
201
+ id='date1ComparisonTab'
202
+ data-bs-toggle='tab'
203
+ data-bs-target='#date1ComparisonTabPane'
204
+ type='button'
205
+ role='tab'
206
+ aria-controls='date1ComparisonTabPane'
207
+ aria-selected='true'
208
+ >
209
+ Date 1
210
+ </button>
211
+ </li>
212
+
213
+ <li
214
+ className='nav-item'
215
+ role='presentation'
216
+ onClick={() => setActiveTab(2)}
217
+ >
218
+ <button
219
+ id='date2ComparisonTab'
220
+ data-bs-toggle='tab'
221
+ data-bs-target='#date2ComparisonTabPane'
222
+ type='button'
223
+ role='tab'
224
+ aria-controls='date2ComparisonTabPane'
225
+ aria-selected='false'
226
+ >
227
+
228
+ </button>
229
+ </li>
230
+ </ul> */}
231
+
232
+ {/* <Tabnav
233
+ tabs={[{ tab: 'Date 1' }, { tab: 'Date 2' }]}
234
+ activeTab={1}
235
+ customFunction={true}
236
+ /> */}
237
+ {/* TO DO: permitir que TabNav maneje interna y externamente el estado de AtiveTab */}
238
+
239
+ {/* PERIOD AND DETAIL LEVEL DROPDOWNS */}
240
+ {/* <PeriodAndDetailDropdowns
241
+ DDPeriod1={DDPeriod1}
242
+ setDDPeriod1={setDDPeriod1}
243
+ DDDetailLevel1={DDDetailLevel1}
244
+ setDDDetailLevel1={setDDDetailLevel1}
245
+ DDPeriod2={DDPeriod2}
246
+ setDDPeriod2={setDDPeriod2}
247
+ DDDetailLevel2={DDDetailLevel2}
248
+ setDDDetailLevel2={setDDDetailLevel2}
249
+ /> */}
250
+ </>
251
+ )}
252
+
253
+ <DatePicker
254
+ className='form-control form-search'
255
+ selected={editingFromDate1}
256
+ onChange={onChangeDDDate1}
257
+ startDate={editingFromDate1}
258
+ endDate={editingToDate1}
259
+ monthsShown={isMobile ? 1 : 2}
260
+ selectsRange
261
+ inline
262
+ />
263
+
264
+ <div className='datepicker-footer'>
265
+ {/* <Switch
266
+ status={compareDates}
267
+ setStatus={() => {
268
+ setCompareDates(!compareDates);
269
+ }}
270
+ >
271
+ Compare dates
272
+ </Switch> */}
273
+ <div className='datepicker-buttons-wrapper'>
274
+ <Button
275
+ onClick={() => closeDropdown()}
276
+ size='xs'
277
+ variant='terciary'
278
+ >
279
+ Cancel
280
+ </Button>
281
+
282
+ <Button
283
+ size='xs'
284
+ // disabled={!DDStartDate1 || !DDEndDate1} // Start and end dates must be selected
285
+ onClick={() => updateDateFilters()}
286
+ >
287
+ Set date
288
+ </Button>
289
+ </div>
290
+ </div>
291
+ </Dropdown.Item>
292
+ </Dropdown.Menu>
293
+ </Dropdown>
294
+ );
295
+ };
296
+
297
+ DropdownDatePicker.propTypes = {
298
+ className: PropTypes.string,
299
+ variant: PropTypes.oneOf(['input', 'filter']),
300
+ show: PropTypes.bool,
301
+ setShow: PropTypes.func,
302
+ onToggle: PropTypes.func,
303
+ dateFrom: PropTypes.string,
304
+ setDateFrom: PropTypes.func,
305
+ dateTo: PropTypes.string,
306
+ setDateTo: PropTypes.func,
307
+ locked: PropTypes.bool,
308
+ overflow: PropTypes.bool,
309
+ onRemoveFilter: PropTypes.func,
310
+ editingFromDate1: PropTypes.string,
311
+ setEditingFromDate1: PropTypes.string,
312
+ editingToDate1: PropTypes.string,
313
+ setEditingToDate1: PropTypes.string,
314
+ EditingFromDate2: PropTypes.string,
315
+ setEditingFromDate2: PropTypes.string,
316
+ EditingFoDate2: PropTypes.string,
317
+ setEditingToDate2: PropTypes.string,
318
+ };
319
+
320
+ export default DropdownDatePicker;