groovinads-ui 1.2.38 → 1.2.39
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.es.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/components/Navigation/Tabnav.jsx +38 -25
- package/src/stories/Tabnav.stories.jsx +41 -6
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.39",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"css",
|
|
7
7
|
"sass",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { Nav } from 'react-bootstrap';
|
|
4
4
|
|
|
@@ -8,19 +8,27 @@ import { Icon } from '../Labels';
|
|
|
8
8
|
// HOOKS
|
|
9
9
|
import useTextFormatter from '../../hooks/useTextFormatter';
|
|
10
10
|
|
|
11
|
-
function Tabnav({
|
|
11
|
+
function Tabnav({
|
|
12
|
+
tabs = [],
|
|
13
|
+
activeTab = 1,
|
|
14
|
+
navigateTab= false,
|
|
15
|
+
setActiveTab,
|
|
16
|
+
}) {
|
|
12
17
|
const { toCamelCase } = useTextFormatter();
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
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;
|
|
22
|
-
}
|
|
19
|
+
// initial activeTab (in case it's not sent, it has a default value)
|
|
20
|
+
const [activeTabState, setActiveTabState] = useState(activeTab);
|
|
23
21
|
|
|
22
|
+
const handleSelect = (k) => {
|
|
23
|
+
if (navigateTab) {
|
|
24
|
+
const tab = tabs.find((tab) => toCamelCase(tab.tab) === k);
|
|
25
|
+
console.log(tab.url);
|
|
26
|
+
window.location.href = tab.url;
|
|
27
|
+
}else{
|
|
28
|
+
// console.log('Valor de k:', k);
|
|
29
|
+
const tabIndex = tabs.findIndex((tab) => toCamelCase(tab.tab) === k) + 1;
|
|
30
|
+
setActiveTab ? setActiveTab(tabIndex) : setActiveTabState(tabIndex);
|
|
31
|
+
}
|
|
24
32
|
};
|
|
25
33
|
|
|
26
34
|
const formatTabsName = (tab) => {
|
|
@@ -31,24 +39,27 @@ function Tabnav({ tabs = [], activeTab = 1, customFunction = false}) {
|
|
|
31
39
|
return tabReplace.charAt(0).toUpperCase() + tabReplace.slice(1);
|
|
32
40
|
};
|
|
33
41
|
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
setActiveTabState(activeTab);
|
|
44
|
+
}, [activeTab]);
|
|
45
|
+
|
|
34
46
|
return (
|
|
35
47
|
<Nav
|
|
36
48
|
variant='tabs'
|
|
37
|
-
activeKey={toCamelCase(tabs[
|
|
49
|
+
activeKey={toCamelCase(tabs[activeTabState - 1].tab)}
|
|
38
50
|
onSelect={handleSelect}
|
|
39
51
|
>
|
|
40
|
-
{tabs.map(({ tab, badgeNumber, warningIcon }, index) =>
|
|
41
|
-
|
|
42
|
-
<Nav.
|
|
43
|
-
eventKey={toCamelCase(tab)}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
))}
|
|
52
|
+
{tabs.map(({ tab, badgeNumber, warningIcon }, index) => {
|
|
53
|
+
return (
|
|
54
|
+
<Nav.Item key={`tabs.tab: ${index}`}>
|
|
55
|
+
<Nav.Link eventKey={toCamelCase(tab)}>
|
|
56
|
+
{warningIcon && <Icon iconName='triangle-exclamation' />}
|
|
57
|
+
{formatTabsName(tab)}
|
|
58
|
+
{badgeNumber && <span className='tab-badge'>{badgeNumber}</span>}
|
|
59
|
+
</Nav.Link>
|
|
60
|
+
</Nav.Item>
|
|
61
|
+
);
|
|
62
|
+
})}
|
|
52
63
|
</Nav>
|
|
53
64
|
);
|
|
54
65
|
}
|
|
@@ -56,7 +67,9 @@ function Tabnav({ tabs = [], activeTab = 1, customFunction = false}) {
|
|
|
56
67
|
Tabnav.propTypes = {
|
|
57
68
|
tabs: PropTypes.array,
|
|
58
69
|
activeTab: PropTypes.number,
|
|
59
|
-
|
|
70
|
+
customFunction: PropTypes.bool,
|
|
71
|
+
navigateTab: PropTypes.bool,
|
|
72
|
+
setExternalTab: PropTypes.func,
|
|
60
73
|
};
|
|
61
74
|
|
|
62
75
|
export default Tabnav;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
2
|
import Tabnav from '../components/Navigation/Tabnav';
|
|
3
|
+
import { Button } from 'react-bootstrap';
|
|
3
4
|
|
|
4
5
|
export default {
|
|
5
6
|
title: 'Navigation/Tabnav',
|
|
@@ -8,13 +9,47 @@ export default {
|
|
|
8
9
|
|
|
9
10
|
const Template = (args) => {
|
|
10
11
|
const tabs = [
|
|
11
|
-
{ tab: '
|
|
12
|
-
{ tab: '
|
|
13
|
-
{ tab: '
|
|
12
|
+
{ tab: 'Tab', badgeNumber: '', url: '/com', warningIcon: true },
|
|
13
|
+
{ tab: 'Tab 1', badgeNumber: '1', url: '/abc', warningIcon: false },
|
|
14
|
+
{ tab: 'Tab 2', badgeNumber: '2', url: '/www', warningIcon: false },
|
|
14
15
|
];
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
const [activeTab, setActiveTab] = useState(1);
|
|
16
18
|
|
|
17
|
-
return
|
|
19
|
+
return (
|
|
20
|
+
<>
|
|
21
|
+
{/* test: external Buttons to change */}
|
|
22
|
+
<Button onClick={() => setActiveTab(1)}>1</Button>
|
|
23
|
+
<Button onClick={() => setActiveTab(2)}>2</Button>
|
|
24
|
+
<Button onClick={() => setActiveTab(3)}>3</Button>
|
|
25
|
+
|
|
26
|
+
<Tabnav
|
|
27
|
+
{...args}
|
|
28
|
+
tabs={tabs}
|
|
29
|
+
activeTab={activeTab} // Send the external state
|
|
30
|
+
setActiveTab={setActiveTab} // Send the setter of the external state
|
|
31
|
+
/>
|
|
32
|
+
<Tabnav
|
|
33
|
+
{...args}
|
|
34
|
+
tabs={tabs}
|
|
35
|
+
activeTab={2} // Test with the activeTab prop
|
|
36
|
+
|
|
37
|
+
/>
|
|
38
|
+
|
|
39
|
+
<Tabnav
|
|
40
|
+
{...args}
|
|
41
|
+
tabs={tabs} // Test without the activeTab prop
|
|
42
|
+
/>
|
|
43
|
+
|
|
44
|
+
<Tabnav
|
|
45
|
+
{...args}
|
|
46
|
+
tabs={tabs}
|
|
47
|
+
activeTab={activeTab}
|
|
48
|
+
setActiveTab={setActiveTab}
|
|
49
|
+
navigateTab={true} // Test with navigateTab prop
|
|
50
|
+
/>
|
|
51
|
+
</>
|
|
52
|
+
);
|
|
18
53
|
};
|
|
19
54
|
|
|
20
55
|
export const Default = Template.bind({});
|