Adds banks and categories components

This commit is contained in:
Luís Murta 2025-03-23 01:10:46 +00:00
parent 4160886cf5
commit 4743bed67f
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
5 changed files with 103 additions and 9 deletions

View File

@ -4,11 +4,25 @@ import { NavLink, Outlet } from "react-router";
export default function App() { export default function App() {
return ( return (
<> <>
<h1>Personal Finance</h1> <header>
<nav> <h1>Personal Finance</h1>
<NavLink to="/transactions">Transactions</NavLink> <nav>
</nav> <ul>
<Outlet /> <li>
<NavLink to="/transactions">Transactions</NavLink>
</li>
<li>
<NavLink to="/banks">Banks</NavLink>
</li>
<li>
<NavLink to="/categories">Categories</NavLink>
</li>
</ul>
</nav>
</header>
<main>
<Outlet />
</main>
</> </>
); );
} }

View File

@ -1,6 +1,10 @@
import { createBrowserRouter } from "react-router"; import { createBrowserRouter } from "react-router";
import Transactions, { loader } from "./routes/transactions";
import App from "./root"; import App from "./root";
import Banks, { loader as banksLoader } from "./routes/banks";
import Categories, { loader as categoriesLoader } from "./routes/categories";
import Transactions, {
loader as transactionsLoader,
} from "./routes/transactions";
export const router = createBrowserRouter([ export const router = createBrowserRouter([
{ {
@ -10,7 +14,17 @@ export const router = createBrowserRouter([
{ {
path: "transactions", path: "transactions",
Component: Transactions, Component: Transactions,
loader: loader, loader: transactionsLoader,
},
{
path: "banks",
Component: Banks,
loader: banksLoader,
},
{
path: "categories",
Component: Categories,
loader: categoriesLoader,
}, },
], ],
}, },

33
src/routes/banks.tsx Normal file
View File

@ -0,0 +1,33 @@
import { useLoaderData } from "react-router";
export async function loader() {
return await fetch(`http://localhost:9000/banks`).then((response) => {
return response.json();
});
}
export default function Banks() {
const data: {
id: string;
name: string;
}[] = useLoaderData<typeof loader>();
return (
<table>
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">name</th>
</tr>
</thead>
<tbody>
{data.map((t) => (
<tr>
<th>{t.id}</th>
<td>{t.name}</td>
</tr>
))}
</tbody>
</table>
);
}

33
src/routes/categories.tsx Normal file
View File

@ -0,0 +1,33 @@
import { useLoaderData } from "react-router";
export async function loader() {
return await fetch(`http://localhost:9000/categories`).then((response) => {
return response.json();
});
}
export default function Categories() {
const data: {
name: string;
group: { name: string } | undefined;
}[] = useLoaderData<typeof loader>();
return (
<table>
<thead>
<tr>
<th scope="col">name</th>
<th scope="col">group</th>
</tr>
</thead>
<tbody>
{data.map((t) => (
<tr>
<td>{t.name}</td>
<td>{t.group?.name}</td>
</tr>
))}
</tbody>
</table>
);
}

View File

@ -7,7 +7,7 @@ export async function loader() {
} }
export default function Transactions() { export default function Transactions() {
const transactions: { const data: {
id: number; id: number;
date: string; date: string;
description: string; description: string;
@ -24,7 +24,7 @@ export default function Transactions() {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{transactions.map((t) => ( {data.map((t) => (
<tr> <tr>
<th>{t.date}</th> <th>{t.date}</th>
<td>{t.description}</td> <td>{t.description}</td>