diff --git a/src/App.jsx b/src/App.jsx index c516cb81a..9611bdde2 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,44 +1,47 @@ -import React from 'react'; +import React, { useState } from 'react'; import 'bulma/css/bulma.css'; import '@fortawesome/fontawesome-free/css/all.css'; import './App.scss'; +import { Tabs } from './components/Tabs/Tabs'; + export const tabs = [ { id: 'tab-1', title: 'Tab 1', content: 'Some text 1' }, { id: 'tab-2', title: 'Tab 2', content: 'Some text 2' }, { id: 'tab-3', title: 'Tab 3', content: 'Some text 3' }, ]; -export const App = () => ( -
-

Selected tab is Tab 1

- -
-
- -
- -
- Some text 1 -
+function getSelectedTabTitle(tabsList, tabId) { + const getTabTitle = tabsList.find(tab => tab.id === tabId); + + return getTabTitle.title; +} + +export const App = () => { + const [activeTabId, setActiveTabId] = useState(tabs[0].id); + const selectedTab = getSelectedTabTitle(tabs, activeTabId); + + function setNewActiveTab(tabId) { + const isInTabs = tabs.find(tab => tab.id === tabId); + + if (isInTabs === undefined) { + setActiveTabId(tabs[0].id); + + return; + } + + setActiveTabId(tabId); + } + + return ( +
+

Selected tab is {selectedTab}

+ + setNewActiveTab(tabId)} + />
-
-); + ); +}; diff --git a/src/components/Tab/Tab.jsx b/src/components/Tab/Tab.jsx new file mode 100644 index 000000000..c603195c5 --- /dev/null +++ b/src/components/Tab/Tab.jsx @@ -0,0 +1,22 @@ +import classNames from 'classnames'; + +export const Tab = ({ tab, activeTabId, onTabSelected }) => { + return ( +
  • + { + if (activeTabId !== tab.id) { + onTabSelected(tab.id); + } + }} + data-cy="TabLink" + > + {tab.title} + +
  • + ); +}; diff --git a/src/components/Tab/index.js b/src/components/Tab/index.js new file mode 100644 index 000000000..2e2986cb5 --- /dev/null +++ b/src/components/Tab/index.js @@ -0,0 +1 @@ +export * from './Tab'; diff --git a/src/components/Tabs/Tabs.jsx b/src/components/Tabs/Tabs.jsx index 4b321a091..9a3dce9ec 100644 --- a/src/components/Tabs/Tabs.jsx +++ b/src/components/Tabs/Tabs.jsx @@ -1 +1,46 @@ -export const Tabs = () => {}; +import { Tab } from '../Tab'; + +export const Tabs = ({ tabs, activeTabId, onTabSelected }) => { + const getSelectedTabContent = (tabsList, tabId) => { + const getTabContent = tabsList.find(tab => tab.id === tabId); + + return getTabContent.content; + }; + + function checkAvailableTabId(id) { + const isInTabs = tabs.find(tab => tab.id === id); + + if (isInTabs === undefined) { + return tabs[0].id; + } + + return id; + } + + const selectedTabContent = getSelectedTabContent( + tabs, + checkAvailableTabId(activeTabId), + ); + + return ( +
    +
    +
      + {tabs.map(tab => ( + + ))} +
    +
    + +
    + {selectedTabContent} +
    +
    + ); +};