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/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.38",
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({ tabs = [], activeTab = 1, customFunction = false}) {
11
+ function Tabnav({
12
+ tabs = [],
13
+ activeTab = 1,
14
+ navigateTab= false,
15
+ setActiveTab,
16
+ }) {
12
17
  const { toCamelCase } = useTextFormatter();
13
18
 
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;
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[activeTab - 1].tab)}
49
+ activeKey={toCamelCase(tabs[activeTabState - 1].tab)}
38
50
  onSelect={handleSelect}
39
51
  >
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
+ {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
- customFunction: PropTypes.bool
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, { act, useState } from '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: 'hola', badgeNumber: '', url: '/com', warningIcon: true },
12
- { tab: 'tab 2', badgeNumber: '2', url: '/abc', warningIcon: false },
13
- { tab: 'tab 3', badgeNumber: '1', url: '/www', warningIcon: false },
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
- const activeTab = tabs[0].tab;
16
+
17
+ const [activeTab, setActiveTab] = useState(1);
16
18
 
17
- return <Tabnav {...args} tabs={tabs} activeTab={activeTab} />;
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({});