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.
@@ -0,0 +1,351 @@
1
+ import React, { useRef } from 'react';
2
+
3
+ const PeriodAndDetailDropdowns = ({
4
+ DDPeriod1,
5
+ setDDPeriod1,
6
+ DDDetailLevel1,
7
+ setDDDetailLevel1,
8
+ DDPeriod2,
9
+ setDDPeriod2,
10
+ DDDetailLevel2,
11
+ setDDDetailLevel2,
12
+ }) => {
13
+ const DDPeriod1Btn = useRef(null);
14
+ const DDPeriod1Dropwdown = useRef(null);
15
+ const DDDetailLevel1Btn = useRef(null);
16
+ const DDDetailLevel1Dropwdown = useRef(null);
17
+
18
+ const DDPeriod2Btn = useRef(null);
19
+ const DDPeriod2Dropwdown = useRef(null);
20
+ const DDDetailLevel2Btn = useRef(null);
21
+ const DDDetailLevel2Dropwdown = useRef(null);
22
+
23
+ const closeDropwdown = (DDRef, btnRef) => {
24
+ if (DDRef?.current?.className) {
25
+ DDRef.current.className = 'dropdown-menu dropdown-submenu shadow-2';
26
+ }
27
+ if (btnRef?.current?.className) {
28
+ btnRef.current.className = 'btn btn-input grey dropdown-toggle';
29
+ }
30
+ };
31
+
32
+ const updateDDPeriod1 = (value, dropdown) => {
33
+ setDDPeriod1(value);
34
+ closeDropwdown(dropdown, DDPeriod1Btn);
35
+ };
36
+
37
+ const updateDDDetailLevel1 = (value, dropdown) => {
38
+ setDDDetailLevel1(value);
39
+ closeDropwdown(dropdown, DDDetailLevel1Btn);
40
+ };
41
+
42
+ const updateDDPeriod2 = (value, dropdown) => {
43
+ setDDPeriod2(value);
44
+ closeDropwdown(dropdown, DDPeriod2Btn);
45
+ };
46
+
47
+ const updateDDDetailLevel2 = (value, dropdown) => {
48
+ setDDDetailLevel2(value);
49
+ closeDropwdown(dropdown, DDDetailLevel2Btn);
50
+ };
51
+
52
+ return (
53
+ <div className='tab-content' id='dateComparisonTabsContent'>
54
+ {/* DROPDOWNS FOR DATE 1 */}
55
+ <div
56
+ className='tab-pane fade show active'
57
+ id='date1ComparisonTabPane'
58
+ role='tabpanel'
59
+ aria-labelledby='date1ComparisonTab'
60
+ tabIndex={0}
61
+ >
62
+ <div className='d-flex gap-3 flex-column flex-md-row'>
63
+ <div className='dropdown dropdown-pills'>
64
+ <label className='dropdown-label' htmlFor='periodDate1'>
65
+ Period
66
+ </label>
67
+ <button
68
+ className='btn btn-input grey dropdown-toggle'
69
+ type='button'
70
+ data-bs-toggle='dropdown'
71
+ aria-expanded='false'
72
+ id='periodDate1'
73
+ ref={DDPeriod1Btn}
74
+ >
75
+ <span>{DDPeriod1}</span>
76
+ <i className='fa-solid fa-angle-down icon caret'></i>
77
+ </button>
78
+
79
+ <ul
80
+ className='dropdown-menu dropdown-submenu shadow-2'
81
+ ref={DDPeriod1Dropwdown}
82
+ >
83
+ <li>
84
+ <button
85
+ className='dropdown-item'
86
+ onClick={() =>
87
+ updateDDPeriod1('Custom range', DDPeriod1Dropwdown)
88
+ }
89
+ >
90
+ Custom range
91
+ </button>
92
+ </li>
93
+
94
+ <li>
95
+ <button
96
+ className='dropdown-item'
97
+ onClick={() => updateDDPeriod1('Today', DDPeriod1Dropwdown)}
98
+ >
99
+ Today
100
+ </button>
101
+ </li>
102
+
103
+ <li>
104
+ <button
105
+ className='dropdown-item'
106
+ onClick={() =>
107
+ updateDDPeriod1('Yesterday', DDPeriod1Dropwdown)
108
+ }
109
+ >
110
+ Yesterday
111
+ </button>
112
+ </li>
113
+
114
+ <li>
115
+ <button
116
+ className='dropdown-item'
117
+ onClick={() =>
118
+ updateDDPeriod1('Yesterday and today', DDPeriod1Dropwdown)
119
+ }
120
+ >
121
+ Yesterday and today
122
+ </button>
123
+ </li>
124
+
125
+ <li>
126
+ <button
127
+ className='dropdown-item'
128
+ onClick={() =>
129
+ updateDDPeriod1('This week', DDPeriod1Dropwdown)
130
+ }
131
+ >
132
+ This week
133
+ </button>
134
+ </li>
135
+ </ul>
136
+ </div>
137
+
138
+ <div className='dropdown dropdown-pills'>
139
+ <label className='dropdown-label' htmlFor='detailLevelDate1'>
140
+ Detail level
141
+ </label>
142
+ <button
143
+ className='btn btn-input grey dropdown-toggle'
144
+ type='button'
145
+ data-bs-toggle='dropdown'
146
+ aria-expanded='false'
147
+ id='detailLevelDate1'
148
+ ref={DDDetailLevel1Btn}
149
+ >
150
+ <span>{DDDetailLevel1}</span>
151
+ <i className='fa-solid fa-angle-down icon caret'></i>
152
+ </button>
153
+
154
+ <ul
155
+ className='dropdown-menu dropdown-submenu shadow-2'
156
+ ref={DDDetailLevel1Dropwdown}
157
+ >
158
+ <li>
159
+ <button
160
+ className='dropdown-item'
161
+ onClick={() =>
162
+ updateDDDetailLevel1('Hourly', DDDetailLevel1Dropwdown)
163
+ }
164
+ >
165
+ Hourly
166
+ </button>
167
+ </li>
168
+ <li>
169
+ <button
170
+ className='dropdown-item'
171
+ onClick={() =>
172
+ updateDDDetailLevel1('Daily', DDDetailLevel1Dropwdown)
173
+ }
174
+ >
175
+ Daily
176
+ </button>
177
+ </li>
178
+ <li>
179
+ <button
180
+ className='dropdown-item'
181
+ onClick={() =>
182
+ updateDDDetailLevel1('Monthly', DDDetailLevel1Dropwdown)
183
+ }
184
+ >
185
+ Monthly
186
+ </button>
187
+ </li>
188
+ <li>
189
+ <button
190
+ className='dropdown-item'
191
+ onClick={() =>
192
+ updateDDDetailLevel1('Total', DDDetailLevel1Dropwdown)
193
+ }
194
+ >
195
+ Total
196
+ </button>
197
+ </li>
198
+ </ul>
199
+ </div>
200
+ </div>
201
+ </div>
202
+
203
+ {/* DROPDOWNS FOR DATE 2 */}
204
+ <div
205
+ className='tab-pane fade show'
206
+ id='date2ComparisonTabPane'
207
+ role='tabpanel'
208
+ aria-labelledby='date2ComparisonTab'
209
+ tabIndex={0}
210
+ >
211
+ <div className='d-flex gap-3 flex-column flex-md-row'>
212
+ <div className='dropdown dropdown-pills'>
213
+ <label className='dropdown-label' htmlFor='periodDate2'>
214
+ Period
215
+ </label>
216
+ <button
217
+ className='btn btn-input grey dropdown-toggle'
218
+ type='button'
219
+ data-bs-toggle='dropdown'
220
+ aria-expanded='false'
221
+ id='periodDate2'
222
+ ref={DDPeriod2Btn}
223
+ >
224
+ <span>{DDPeriod2}</span>
225
+ <i className='fa-solid fa-angle-down icon caret'></i>
226
+ </button>
227
+
228
+ <ul
229
+ className='dropdown-menu dropdown-submenu shadow-2'
230
+ ref={DDPeriod2Dropwdown}
231
+ >
232
+ <li>
233
+ <button
234
+ className='dropdown-item'
235
+ onClick={() =>
236
+ updateDDPeriod2('Custom range', DDPeriod2Dropwdown)
237
+ }
238
+ >
239
+ Custom range
240
+ </button>
241
+ </li>
242
+ <li>
243
+ <button
244
+ className='dropdown-item'
245
+ onClick={() => updateDDPeriod2('Today', DDPeriod2Dropwdown)}
246
+ >
247
+ Today
248
+ </button>
249
+ </li>
250
+ <li>
251
+ <button
252
+ className='dropdown-item'
253
+ onClick={() =>
254
+ updateDDPeriod2('Yesterday', DDPeriod2Dropwdown)
255
+ }
256
+ >
257
+ Yesterday
258
+ </button>
259
+ </li>
260
+ <li>
261
+ <button
262
+ className='dropdown-item'
263
+ onClick={() =>
264
+ updateDDPeriod2('Yesterday and today', DDPeriod2Dropwdown)
265
+ }
266
+ >
267
+ Yesterday and today
268
+ </button>
269
+ </li>
270
+ <li>
271
+ <button
272
+ className='dropdown-item'
273
+ onClick={() =>
274
+ updateDDPeriod2('This week', DDPeriod2Dropwdown)
275
+ }
276
+ >
277
+ This week
278
+ </button>
279
+ </li>
280
+ </ul>
281
+ </div>
282
+
283
+ <div className='dropdown dropdown-pills'>
284
+ <label className='dropdown-label' htmlFor='detailLevelDate2'>
285
+ Detail level
286
+ </label>
287
+ <button
288
+ className='btn btn-input grey dropdown-toggle'
289
+ type='button'
290
+ data-bs-toggle='dropdown'
291
+ aria-expanded='false'
292
+ id='detailLevelDate2'
293
+ ref={DDDetailLevel2Btn}
294
+ >
295
+ <span>{DDDetailLevel2}</span>
296
+ <i className='fa-solid fa-angle-down icon caret'></i>
297
+ </button>
298
+
299
+ <ul
300
+ className='dropdown-menu dropdown-submenu shadow-2'
301
+ ref={DDDetailLevel2Dropwdown}
302
+ >
303
+ <li>
304
+ <button
305
+ className='dropdown-item'
306
+ onClick={() =>
307
+ updateDDDetailLevel2('Hourly', DDDetailLevel2Dropwdown)
308
+ }
309
+ >
310
+ Hourly
311
+ </button>
312
+ </li>
313
+ <li>
314
+ <button
315
+ className='dropdown-item'
316
+ onClick={() =>
317
+ updateDDDetailLevel2('Daily', DDDetailLevel2Dropwdown)
318
+ }
319
+ >
320
+ Daily
321
+ </button>
322
+ </li>
323
+ <li>
324
+ <button
325
+ className='dropdown-item'
326
+ onClick={() =>
327
+ updateDDDetailLevel2('Monthly', DDDetailLevel2Dropwdown)
328
+ }
329
+ >
330
+ Monthly
331
+ </button>
332
+ </li>
333
+ <li>
334
+ <button
335
+ className='dropdown-item'
336
+ onClick={() =>
337
+ updateDDDetailLevel2('Total', DDDetailLevel2Dropwdown)
338
+ }
339
+ >
340
+ Total
341
+ </button>
342
+ </li>
343
+ </ul>
344
+ </div>
345
+ </div>
346
+ </div>
347
+ </div>
348
+ );
349
+ };
350
+
351
+ export default PeriodAndDetailDropdowns;
@@ -0,0 +1,3 @@
1
+ import DropdownDatePicker from "./DropdownDatePicker";
2
+
3
+ export { DropdownDatePicker };
@@ -1,5 +1,6 @@
1
1
  import DropdownComponent from './DropdownComponent';
2
2
  import DropdownFilter from './DropdownFilter';
3
3
  import DropdownMultiSelect from './DropdownMultiSelect';
4
+ import { DropdownDatePicker } from './DropdownsDatePicker/index';
4
5
 
5
- export { DropdownComponent, DropdownFilter, DropdownMultiSelect }
6
+ export { DropdownComponent, DropdownFilter, DropdownMultiSelect, DropdownDatePicker }
@@ -8,42 +8,55 @@ import { Icon } from '../Labels';
8
8
  // HOOKS
9
9
  import useTextFormatter from '../../hooks/useTextFormatter';
10
10
 
11
- function Tabnav({ tabs = [], activeTab }) {
12
- const { toCamelCase } = useTextFormatter();
13
-
14
- const handleSelect = (k) => {
15
- const tabIndex = tabs.findIndex((tab) => toCamelCase(tab.tab) === k);
16
- console.log(tabs[tabIndex].url);
17
-
18
- window.location.href = tabs[tabIndex].url;
19
- };
20
-
21
- const formatTabsName = (tab) => {
22
- if (tab === 'api_keys') {
23
- return 'API Keys';
11
+ function Tabnav({ tabs = [], activeTab = 1, customFunction = false}) {
12
+ const { toCamelCase } = useTextFormatter();
13
+
14
+ const handleSelect = (k) => {
15
+ if (customFunction){
16
+ console.log('custom function');
17
+ }else{
18
+ const tabIndex = tabs.findIndex((tab) => toCamelCase(tab.tab) === k);
19
+ console.log(tabs[tabIndex].url);
20
+
21
+ window.location.href = tabs[tabIndex].url;
24
22
  }
25
- const tabReplace = tab.replace('_', ' ');
26
- return tabReplace.charAt(0).toUpperCase() + tabReplace.slice(1);
27
- };
28
- console.log(activeTab)
29
- return (
30
- <Nav variant='tabs' activeKey={activeTab} onSelect={handleSelect}>
31
- {tabs.map(({ tab, badgeNumber, warningIcon }, index) => (
32
- <Nav.Item key={index}>
33
- <Nav.Link eventKey={toCamelCase(tab)}>
34
- {warningIcon && <Icon iconName='triangle-exclamation' />}
35
- {formatTabsName(tab)}
36
- {badgeNumber && <span className='tab-badge'>{badgeNumber}</span>}
37
- </Nav.Link>
38
- </Nav.Item>
39
- ))}
40
- </Nav>
41
- );
23
+
24
+ };
25
+
26
+ const formatTabsName = (tab) => {
27
+ if (tab === 'api_keys') {
28
+ return 'API Keys';
29
+ }
30
+ const tabReplace = tab.replace('_', ' ');
31
+ return tabReplace.charAt(0).toUpperCase() + tabReplace.slice(1);
32
+ };
33
+
34
+ return (
35
+ <Nav
36
+ variant='tabs'
37
+ activeKey={toCamelCase(tabs[activeTab - 1].tab)}
38
+ onSelect={handleSelect}
39
+ >
40
+ {tabs.map(({ tab, badgeNumber, warningIcon }, index) => (
41
+ <Nav.Item key={index}>
42
+ <Nav.Link
43
+ eventKey={toCamelCase(tab)}
44
+ >
45
+ {/* Dia 1 => dia1 */}
46
+ {warningIcon && <Icon iconName='triangle-exclamation' />}
47
+ {formatTabsName(tab)}
48
+ {badgeNumber && <span className='tab-badge'>{badgeNumber}</span>}
49
+ </Nav.Link>
50
+ </Nav.Item>
51
+ ))}
52
+ </Nav>
53
+ );
42
54
  }
43
55
 
44
56
  Tabnav.propTypes = {
45
- tabs: PropTypes.array,
46
- activeTab: PropTypes.string,
57
+ tabs: PropTypes.array,
58
+ activeTab: PropTypes.number,
59
+ customFunction: PropTypes.bool
47
60
  };
48
61
 
49
62
  export default Tabnav;
@@ -16,6 +16,8 @@ const useTextFormatter = () => {
16
16
  return s;
17
17
  }, []);
18
18
 
19
+ const capitalice = (str) => (str ? `${str.charAt(0).toUpperCase()}${str.slice(1)}` : '');
20
+
19
21
  const highlightText = (text, query) => {
20
22
  if (!query) return text;
21
23
 
@@ -40,7 +42,7 @@ const useTextFormatter = () => {
40
42
 
41
43
  // Additional methods can be added here
42
44
 
43
- return { toCamelCase, highlightText };
45
+ return { toCamelCase, highlightText, capitalice };
44
46
  };
45
47
 
46
48
  export default useTextFormatter;
package/src/index.js CHANGED
@@ -5,6 +5,7 @@ import Button from "./components/Button/Button";
5
5
  import DropdownComponent from './components/Dropdowns/DropdownComponent';
6
6
  import DropdownFilter from './components/Dropdowns/DropdownFilter';
7
7
  import DropdownMultiSelect from './components/Dropdowns/DropdownMultiSelect';
8
+ import DropdownDatePicker from './components/Dropdowns/DropdownsDatePicker/DropdownDatePicker';
8
9
 
9
10
  // Inputs
10
11
  import Checkbox from './components/Inputs/Checkbox';
@@ -30,4 +31,32 @@ import Navbar from './components/Navigation/Navbar';
30
31
  import Stepper from './components/Navigation/Stepper';
31
32
  import Tabnav from './components/Navigation/Tabnav';
32
33
 
33
- export { Button, DropdownComponent, DropdownFilter, DropdownMultiSelect, Checkbox, Input, Radio, Switch, Textarea, Alert, Icon, LoginSource, PillComponent, Spinner, StatusIcon, ToastComponent, ToastProgress, Navbar, Stepper, Tabnav }
34
+ export {
35
+ // Buttons
36
+ Button,
37
+ // Dropdowns
38
+ DropdownComponent,
39
+ DropdownFilter,
40
+ DropdownMultiSelect,
41
+ DropdownDatePicker,
42
+ // Inputs
43
+ Checkbox,
44
+ Input,
45
+ Radio,
46
+ Switch,
47
+ Textarea,
48
+ // Labels
49
+ Alert,
50
+ Icon,
51
+ LoginSource,
52
+ PillComponent,
53
+ Spinner,
54
+ StatusIcon,
55
+ // Toasts
56
+ ToastComponent,
57
+ ToastProgress,
58
+ // Navigation
59
+ Navbar,
60
+ Stepper,
61
+ Tabnav
62
+ }
@@ -0,0 +1,67 @@
1
+ import React, { useState } from 'react';
2
+ import { DropdownDatePicker } from '../components/Dropdowns';
3
+
4
+ export default {
5
+ title: 'Dropdown/DropdownDatePicker',
6
+ component: DropdownDatePicker,
7
+ };
8
+
9
+ const Template = (args) => {
10
+ const [show, setShow] = useState(false);
11
+
12
+ const [fromDate1, setFromDate1] = useState('');
13
+ const [toDate1, setToDate1] = useState('');
14
+
15
+ const [fromDate2, setFromDate2] = useState('');
16
+ const [toDate2, setToDate2] = useState('');
17
+
18
+ const handleToggle = () => setShow((prevShow) => !prevShow);
19
+
20
+ // const [dateFrom, setDateFrom] = useState();
21
+ // const [dateTo, setDateTo] = useState();
22
+
23
+ // const [datePicker1StartDate, setDatePicker1StartDate] = useState();
24
+ // const [datePicker1EndDate, setDatePicker1EndDate] = useState();
25
+ // const [datePicker2StartDate, setDatePicker2StartDate] = useState();
26
+ // const [datePicker2EndDate, setDatePicker2EndDate] = useState();
27
+ // const [tableQueryObj, setTableQueryObj] = useState();
28
+
29
+ return (
30
+ <>
31
+ <button onClick={() => setShow(!show)}>Toggle</button>
32
+ <div>
33
+ <DropdownDatePicker
34
+ {...args}
35
+ show={show}
36
+ setShow={setShow}
37
+ onToggle={handleToggle}
38
+ fromDate1={fromDate1}
39
+ setFromDate1={setFromDate1}
40
+ toDate1={toDate1}
41
+ setToDate1={setToDate1}
42
+ fromDate2={fromDate2}
43
+ setFromDate2={setFromDate2}
44
+ toDate2={toDate2}
45
+ setToDate2={setToDate2}
46
+ // dateFrom={dateFrom}
47
+ // setDateFrom={setDateFrom}
48
+ // dateTo={dateTo}
49
+ // setDateTo={setDateTo}
50
+ // datePicker1StartDate={datePicker1StartDate}
51
+ // setDatePicker1StartDate={setDatePicker1StartDate}
52
+ // datePicker1EndDate={datePicker1EndDate}
53
+ // setDatePicker1EndDate={setDatePicker1EndDate}
54
+ // datePicker2StartDate={datePicker2StartDate}
55
+ // setDatePicker2StartDate={setDatePicker2StartDate}
56
+ // datePicker2EndDate={datePicker2EndDate}
57
+ // setDatePicker2EndDate={setDatePicker2EndDate}
58
+ // tableQueryObj={tableQueryObj}
59
+ // setTableQueryObj={setTableQueryObj}
60
+ // fetchData={() => {}}
61
+ />
62
+ </div>
63
+ </>
64
+ );
65
+ };
66
+
67
+ export const Default = Template.bind({});