Skip to content

Commit

Permalink
add task solution
Browse files Browse the repository at this point in the history
  • Loading branch information
DariaFesiun committed Nov 18, 2024
1 parent fe88a65 commit 400ad2a
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 42 deletions.
54 changes: 19 additions & 35 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,56 +1,40 @@
import 'bulma/css/bulma.css';
import '@fortawesome/fontawesome-free/css/all.css';
import './App.scss';
import { Outlet, NavLink } from 'react-router-dom';
import classNames from 'classnames';

// 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 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' },
];

const getLinkClass = ({ isActive }: { isActive: boolean }) =>
classNames('navbar-item', {
'is-active': isActive,
});

export const App = () => (
<>
{/* Also requires <html class="has-navbar-fixed-top"> */}
<html className="has-navbar-fixed-top">
<nav
className="navbar is-light is-fixed-top is-mobile has-shadow"
data-cy="Nav"
>
<div className="container">
<div className="navbar-brand">
<a href="/" className="navbar-item is-active">
<NavLink to="/" className={getLinkClass}>
Home
</a>
<a href="/tabs" className="navbar-item">
</NavLink>
<NavLink to="/tabs" className={getLinkClass}>
Tabs
</a>
</NavLink>
</div>
</div>
</nav>

<div className="section">
<div className="container">
<h1 className="title">Home page</h1>
<h1 className="title">Tabs page</h1>
<h1 className="title">Page not found</h1>

<div className="tabs is-boxed">
<ul>
<li data-cy="Tab" className="is-active">
<a href="#/">Tab 1</a>
</li>
<li data-cy="Tab">
<a href="#/">Tab 2</a>
</li>
<li data-cy="Tab">
<a href="#/">Tab 3</a>
</li>
</ul>
</div>

<div className="block" data-cy="TabContent">
Please select a tab
</div>
</div>
<Outlet />
</div>
</>
</html>
);
26 changes: 26 additions & 0 deletions src/Root.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { HashRouter, Navigate } from 'react-router-dom';
import { App } from './App';
import { Route, Routes } from 'react-router-dom';
import { HomePage } from './pages/HomePage';
import { TabsPage } from './pages/TabsPage';

export const Root = () => {
return (
<HashRouter>
<Routes>
<Route path="/" element={<App />}>

<Route index element={<HomePage />} />
<Route path="home" element={<Navigate to="/" />} />

<Route path="tabs">
<Route index element={<TabsPage />} />
<Route path=":tabId?" element={<TabsPage />} />
</Route>

<Route path="*" element={<h1 className="title">Page not found</h1>} />
</Route>
</Routes>
</HashRouter>
);
};
11 changes: 4 additions & 7 deletions src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { createRoot } from 'react-dom/client';
import { HashRouter } from 'react-router-dom';
import { App } from './App';
import { Root } from './Root';

createRoot(document.getElementById('root') as HTMLElement).render(
<HashRouter>
<App />
</HashRouter>,
);
const container = document.getElementById('root') as HTMLElement;

createRoot(container).render(<Root />);
5 changes: 5 additions & 0 deletions src/pages/HomePage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export const HomePage = () => (
<div className="container">
<h1 className="title">Home page</h1>
</div>
);
36 changes: 36 additions & 0 deletions src/pages/TabsPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { useParams, Link } from 'react-router-dom';
import { tabs } from '../App';

export const TabsPage = () => {
const { tabId } = useParams();
const selectedTab = tabs.find(tab => tab.id === tabId);

return (
<div className="container">
<h1 className="title">Tabs page</h1>
<div className="tabs is-boxed">
<ul>
{tabs.map(tab => (
<li
data-cy="Tab"
className={tabId === tab.id ? 'is-active' : ''}
key={tab.id}
>
<Link to={`/tabs/${tab.id}`}>{tab.title}</Link>
</li>
))}
</ul>
</div>

{selectedTab ? (
<div className="block" data-cy="TabContent">
{selectedTab.content}
</div>
) : (
<div className="block" data-cy="TabContent">
Please select a tab
</div>
)}
</div>
);
};

0 comments on commit 400ad2a

Please sign in to comment.