groovinads-ui 1.2.46 → 1.2.48
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/README.md +64 -28
- package/dist/index.es.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/src/components/Dropdowns/DropdownSimpleDatePicker.jsx +136 -0
- package/src/components/Dropdowns/index.js +2 -1
- package/src/components/Inputs/Input.jsx +8 -0
- package/src/components/Inputs/Radio.jsx +4 -2
- package/src/components/Navigation/Dropdowns/DeckDropdown.jsx +2 -2
- package/src/components/Navigation/Dropdowns/DropdownClient.jsx +0 -1
- package/src/stories/DropdownDatePicker.stories.jsx +2 -2
- package/src/stories/DropdownSimpleDatePicker.stories.jsx +32 -0
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.
|
|
4
|
+
"version": "1.2.48",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"css",
|
|
7
7
|
"sass",
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React, { useEffect, useState } from 'react'
|
|
3
|
+
|
|
4
|
+
// HOOKS
|
|
5
|
+
import { useTextFormatter } from '../../hooks';
|
|
6
|
+
|
|
7
|
+
// COMPONENTS
|
|
8
|
+
import { Dropdown } from 'react-bootstrap'
|
|
9
|
+
import { Icon } from '../Labels';
|
|
10
|
+
import { Button } from '../Button';
|
|
11
|
+
import DatePicker from 'react-datepicker';
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
export default function DropdownSimpleDatePicker({
|
|
15
|
+
className = '',
|
|
16
|
+
show,
|
|
17
|
+
setShow,
|
|
18
|
+
onToggle,
|
|
19
|
+
inputLabel = 'period',
|
|
20
|
+
overflow = false,
|
|
21
|
+
date,
|
|
22
|
+
setDate
|
|
23
|
+
}) {
|
|
24
|
+
|
|
25
|
+
const [editingDate, setEditingDate] = useState(date);
|
|
26
|
+
|
|
27
|
+
const [internalShow, setInternalShow] = useState(!!show);
|
|
28
|
+
|
|
29
|
+
const { capitalice } = useTextFormatter();
|
|
30
|
+
|
|
31
|
+
const isMobile = window?.innerWidth < 500;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const internalToggle = () => {
|
|
35
|
+
setInternalShow((prevShow) => !prevShow);
|
|
36
|
+
try {
|
|
37
|
+
onToggle();
|
|
38
|
+
} catch (error) { }
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const closeDropdown = () => {
|
|
42
|
+
setInternalShow(false);
|
|
43
|
+
try {
|
|
44
|
+
setShow(false);
|
|
45
|
+
} catch (error) { }
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const updateDateFilters = (date) => {
|
|
49
|
+
setEditingDate(date);
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
setDate(editingDate?.toString());
|
|
52
|
+
closeDropdown();
|
|
53
|
+
}, 100);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const clearDate = () => {
|
|
57
|
+
setEditingDate(null);
|
|
58
|
+
setDate(null);
|
|
59
|
+
closeDropdown();
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
setInternalShow(!!show);
|
|
65
|
+
}, [show]);
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<Dropdown
|
|
69
|
+
show={internalShow}
|
|
70
|
+
className={className}
|
|
71
|
+
>
|
|
72
|
+
<Dropdown.Toggle
|
|
73
|
+
variant='toggle-filter'
|
|
74
|
+
onClick={internalToggle}
|
|
75
|
+
className={`btn-input w-100`}
|
|
76
|
+
>
|
|
77
|
+
<span className='dropdown-label'>{capitalice(inputLabel)}</span>
|
|
78
|
+
{editingDate ?
|
|
79
|
+
<span>
|
|
80
|
+
{editingDate.toString().split('00')[0]}
|
|
81
|
+
</span> :
|
|
82
|
+
<span></span>
|
|
83
|
+
}
|
|
84
|
+
<Icon iconName='angle-down' />
|
|
85
|
+
|
|
86
|
+
</Dropdown.Toggle>
|
|
87
|
+
|
|
88
|
+
<Dropdown.Menu
|
|
89
|
+
popperConfig={
|
|
90
|
+
overflow
|
|
91
|
+
? {
|
|
92
|
+
strategy: 'fixed',
|
|
93
|
+
onFirstUpdate: () =>
|
|
94
|
+
window.dispatchEvent(new CustomEvent('scroll')),
|
|
95
|
+
}
|
|
96
|
+
: undefined
|
|
97
|
+
}
|
|
98
|
+
>
|
|
99
|
+
<Dropdown.Item as={'div'}>
|
|
100
|
+
|
|
101
|
+
<DatePicker
|
|
102
|
+
className='form-control form-search'
|
|
103
|
+
selected={editingDate}
|
|
104
|
+
onChange={updateDateFilters}
|
|
105
|
+
startDate={editingDate}
|
|
106
|
+
monthsShown={1}
|
|
107
|
+
inline
|
|
108
|
+
/>
|
|
109
|
+
|
|
110
|
+
<div className='px-2 w-100'>
|
|
111
|
+
<Button
|
|
112
|
+
onClick={clearDate}
|
|
113
|
+
icon='calendar-circle-minus'
|
|
114
|
+
size='xs'
|
|
115
|
+
variant='terciary'
|
|
116
|
+
className='w-100'
|
|
117
|
+
>
|
|
118
|
+
Clear
|
|
119
|
+
</Button>
|
|
120
|
+
</div>
|
|
121
|
+
</Dropdown.Item>
|
|
122
|
+
</Dropdown.Menu>
|
|
123
|
+
</Dropdown>
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
DropdownSimpleDatePicker.propTypes = {
|
|
128
|
+
className: PropTypes.string,
|
|
129
|
+
show: PropTypes.bool,
|
|
130
|
+
setShow: PropTypes.func,
|
|
131
|
+
onToggle: PropTypes.func,
|
|
132
|
+
inputLabel: PropTypes.string,
|
|
133
|
+
overflow: PropTypes.bool,
|
|
134
|
+
date: PropTypes.string,
|
|
135
|
+
setDate: PropTypes.func,
|
|
136
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import DropdownComponent from './DropdownComponent';
|
|
2
2
|
import DropdownFilter from './DropdownFilter';
|
|
3
3
|
import DropdownMultiSelect from './DropdownMultiSelect';
|
|
4
|
+
import DropdownSimpleDatePicker from './DropdownSimpleDatePicker';
|
|
4
5
|
import { DropdownDatePicker } from './DropdownsDatePicker/index';
|
|
5
6
|
|
|
6
|
-
export { DropdownComponent, DropdownFilter, DropdownMultiSelect, DropdownDatePicker }
|
|
7
|
+
export { DropdownComponent, DropdownFilter, DropdownMultiSelect, DropdownDatePicker, DropdownSimpleDatePicker }
|
|
@@ -26,6 +26,8 @@ const Input = ({
|
|
|
26
26
|
suffix,
|
|
27
27
|
type = 'text',
|
|
28
28
|
value,
|
|
29
|
+
min,
|
|
30
|
+
max,
|
|
29
31
|
}) => {
|
|
30
32
|
const { toCamelCase } = useTextFormatter();
|
|
31
33
|
const inputRef = useRef(null);
|
|
@@ -75,6 +77,8 @@ const Input = ({
|
|
|
75
77
|
required={!!requiredText}
|
|
76
78
|
autoFocus={autoFocus}
|
|
77
79
|
ref={inputRef}
|
|
80
|
+
min={min}
|
|
81
|
+
max={max}
|
|
78
82
|
/>
|
|
79
83
|
<label htmlFor={id}>{label}</label>
|
|
80
84
|
</div>
|
|
@@ -97,6 +101,8 @@ const Input = ({
|
|
|
97
101
|
disabled={disabled}
|
|
98
102
|
autoFocus={autoFocus}
|
|
99
103
|
ref={inputRef}
|
|
104
|
+
min={min}
|
|
105
|
+
max={max}
|
|
100
106
|
/>
|
|
101
107
|
<label htmlFor={id}>{label}</label>
|
|
102
108
|
</div>
|
|
@@ -139,6 +145,8 @@ Input.propTypes = {
|
|
|
139
145
|
]),
|
|
140
146
|
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
141
147
|
autoFocus: PropTypes.bool,
|
|
148
|
+
min: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
149
|
+
max: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
142
150
|
};
|
|
143
151
|
|
|
144
152
|
export default Input;
|
|
@@ -9,9 +9,10 @@ const Radio = ({
|
|
|
9
9
|
children,
|
|
10
10
|
className = '',
|
|
11
11
|
id,
|
|
12
|
+
fullWidth = false,
|
|
12
13
|
name,
|
|
13
14
|
setStatus,
|
|
14
|
-
status = false
|
|
15
|
+
status = false,
|
|
15
16
|
}) => {
|
|
16
17
|
const { toCamelCase } = useTextFormatter();
|
|
17
18
|
|
|
@@ -26,7 +27,7 @@ const Radio = ({
|
|
|
26
27
|
|
|
27
28
|
return (
|
|
28
29
|
<div className={`form-group form-check ${className}`}>
|
|
29
|
-
<label className=
|
|
30
|
+
<label className={`radio ${fullWidth ? 'w-100' : ''}`}>
|
|
30
31
|
<input
|
|
31
32
|
type='radio'
|
|
32
33
|
checked={status}
|
|
@@ -47,6 +48,7 @@ const Radio = ({
|
|
|
47
48
|
Radio.propTypes = {
|
|
48
49
|
className: PropTypes.string,
|
|
49
50
|
id: PropTypes.string,
|
|
51
|
+
fullWidth: PropTypes.bool,
|
|
50
52
|
name: PropTypes.string,
|
|
51
53
|
setStatus: PropTypes.func,
|
|
52
54
|
status: PropTypes.bool,
|
|
@@ -53,9 +53,9 @@ const DeckDropdown = () => {
|
|
|
53
53
|
const favApp = async (identification) => {
|
|
54
54
|
try {
|
|
55
55
|
const resp = await ComponentsService.favApplication(identification);
|
|
56
|
-
console.log('if ---->');
|
|
56
|
+
//console.log('if ---->');
|
|
57
57
|
setApplications((prev) => {
|
|
58
|
-
console.log('setApplications ---->');
|
|
58
|
+
//console.log('setApplications ---->');
|
|
59
59
|
const index = prev.findIndex(
|
|
60
60
|
(element) => element?.id_application === identification,
|
|
61
61
|
);
|
|
@@ -29,7 +29,6 @@ const DropdownClients = ({ profileSelectedClient }) => {
|
|
|
29
29
|
try {
|
|
30
30
|
setshowDropdownSkeleton(true);
|
|
31
31
|
const clientsList = await ComponentsService.getClientsList();
|
|
32
|
-
console.log('clientsList', clientsList);
|
|
33
32
|
|
|
34
33
|
setClientsList(clientsList);
|
|
35
34
|
setshowDropdownSkeleton(false);
|
|
@@ -20,7 +20,7 @@ const Template = (args) => {
|
|
|
20
20
|
useEffect(() => {
|
|
21
21
|
console.log('dates From:', dateFrom);
|
|
22
22
|
}, [dateFrom]);
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
useEffect(() => {
|
|
25
25
|
console.log('dates To:', dateTo);
|
|
26
26
|
}, [ dateTo ]);
|
|
@@ -34,7 +34,7 @@ const Template = (args) => {
|
|
|
34
34
|
// show={show}
|
|
35
35
|
// setShow={setShow}
|
|
36
36
|
// onToggle={handleToggle}
|
|
37
|
-
variant='filter'
|
|
37
|
+
//variant='filter'
|
|
38
38
|
dateFrom={dateFrom}
|
|
39
39
|
setDateFrom={setDateFrom}
|
|
40
40
|
dateTo={dateTo}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import DropdownSimpleDatePicker from '../components/Dropdowns/DropdownSimpleDatePicker';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Dropdown/DropdownSimpleDatePicker',
|
|
6
|
+
component: DropdownSimpleDatePicker,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const Template = (args) => {
|
|
10
|
+
const [show, setShow] = useState(false);
|
|
11
|
+
|
|
12
|
+
const [dateFrom, setDateFrom] = useState('');
|
|
13
|
+
const [dateTo, setDateTo] = useState('');
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<>
|
|
18
|
+
<button onClick={() => setShow(!show)}>Toggle</button>
|
|
19
|
+
<div className='col-2'>
|
|
20
|
+
<DropdownSimpleDatePicker
|
|
21
|
+
{...args}
|
|
22
|
+
dateFrom={dateFrom}
|
|
23
|
+
setDateFrom={setDateFrom}
|
|
24
|
+
date={dateTo}
|
|
25
|
+
setDate={setDateTo}
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const Default = Template.bind({});
|