Seprating accounts and categories routes

This commit is contained in:
2025-01-26 00:24:07 +01:00
parent c8514a11f1
commit 5ac667f200
11 changed files with 227 additions and 50 deletions

View File

@@ -25,6 +25,7 @@ import { useFormContext } from "react-hook-form";
import { PostList, PostCreate, PostEdit } from "./pages/posts";
import { AccountList, AccountCreate, AccountEdit } from "./pages/accounts";
import { CategoryList, CategoryCreate, CategoryEdit } from "./pages/categories";
import { PayeeCreate, PayeeEdit, PayeeList } from "./pages/payees";
import { TransactionCreate, TransactionEdit, TransactionList } from "./pages/transactions";
@@ -81,6 +82,12 @@ const App: React.FC = () => {
edit: "/accounts/edit/:id",
create: "/accounts/create",
},
{
name: "categories",
list: "/categories",
edit: "/categories/edit/:id",
create: "/categories/create",
},
{
name: "payees",
list: "/payees",
@@ -129,6 +136,11 @@ const App: React.FC = () => {
<Route path="create" element={<AccountCreate />} />
<Route path="edit/:id" element={<AccountEdit />} />
</Route>
<Route path="/categories">
<Route index element={<CategoryList />} />
<Route path="create" element={<CategoryCreate />} />
<Route path="edit/:id" element={<CategoryEdit />} />
</Route>
<Route path="/payees">
<Route index element={<PayeeList />} />
<Route path="create" element={<PayeeCreate />} />

View File

@@ -0,0 +1,12 @@
import {CrudForm} from "../../common/crud/crud-form";
import {CategoryEdit} from "./edit";
export const CategoryCreate: React.FC = () => {
return (
<CrudForm
schemaName={"CategoryCreate"}
resource={"categories"}
/>
);
};

View File

@@ -0,0 +1,15 @@
import { CrudForm } from "../../common/crud/crud-form";
import { useParams } from "react-router"
export const CategoryEdit: React.FC = () => {
const { id } = useParams()
return (
<CrudForm
schemaName={"CategoryUpdate"}
resource={"categories"}
id={id}
/>
);
};

View File

@@ -0,0 +1,3 @@
export * from "./list";
export * from "./create";
export * from "./edit";

View File

@@ -0,0 +1,49 @@
import {DeleteButton, EditButton, List, useDataGrid} from "@refinedev/mui";
import React from "react";
import { DataGrid, type GridColDef } from "@mui/x-data-grid";
import type { IAccount } from "../../interfaces";
import { ButtonGroup } from "@mui/material";
export const CategoryList: React.FC = () => {
const { dataGridProps } = useDataGrid<IAccount>();
const columns = React.useMemo<GridColDef<IAccount>[]>(
() => [
{ field: "id", headerName: "ID" },
{ field: "name", headerName: "Name", flex: 1 },
{ field: "type", headerName: "Type", flex: 0.3 },
{
field: "actions",
headerName: "Actions",
display: "flex",
renderCell: function render({ row }) {
return (
<ButtonGroup>
<EditButton hideText recordItemId={row.id} />
<DeleteButton hideText recordItemId={row.id} />
</ButtonGroup>
);
},
align: "center",
headerAlign: "center",
},
],
[],
);
return (
<List>
<div
style={{
display: "flex",
flexDirection: "column",
maxHeight: "calc(100vh - 320px)",
}}
>
<DataGrid {...dataGridProps} columns={columns} />
</div>
</List>
);
};

View File

@@ -1,6 +1,5 @@
import type { DataProvider } from "@refinedev/core";
//const API_URL = "https://api.fake-rest.refine.dev";
const API_URL = "http://localhost:8000";
const fetcher = async (url: string, options?: RequestInit) => {

View File

@@ -31,8 +31,9 @@ function buildResource(rawSchemas: RJSFSchema, resourceName: string) {
if (is_reference(prop)) {
resolveReference(rawSchemas, resource, prop);
} else if (is_union(prop)) {
for (let i in prop.oneOf) {
resolveReference(rawSchemas, resource, prop.oneOf[i]);
const union = prop.hasOwnProperty("oneOf") ? prop.oneOf : prop.anyOf;
for (let i in union) {
resolveReference(rawSchemas, resource, union[i]);
}
} else if (is_enum(prop)) {
for (let i in prop.allOf) {
@@ -92,11 +93,11 @@ function is_array(prop: any) {
}
function is_union(prop: any) {
return prop.hasOwnProperty('oneOf');
return prop.hasOwnProperty('oneOf') || prop.hasOwnProperty('anyOf');
}
function is_enum(prop: any) {
return prop.hasOwnProperty('allOf');
return prop.hasOwnProperty('enum');
}
function get_reference_name(prop: any) {
@@ -112,7 +113,8 @@ function has_descendant(rawSchemas:RJSFSchema, resource: RJSFSchema, property_na
let subresourceName = get_reference_name(resource);
return has_descendant(rawSchemas, buildResource(rawSchemas, subresourceName), property_name);
} else if (is_union(resource)) {
for (const ref of resource.oneOf!) {
const union = resource.hasOwnProperty("oneOf") ? resource.oneOf : resource.anyOf;
for (const ref of union) {
return has_descendant(rawSchemas, ref, property_name)
}
} else if (is_enum(resource)) {
@@ -183,4 +185,3 @@ function get_property_by_path(rawSchemas: RJSFSchema, resource: RJSFSchema, path
path.substring(pointFirstPosition + 1)
);
}