diff --git a/moneymgr_backend/src/controllers/movement_controller.rs b/moneymgr_backend/src/controllers/movement_controller.rs index e463b90..63f2cd8 100644 --- a/moneymgr_backend/src/controllers/movement_controller.rs +++ b/moneymgr_backend/src/controllers/movement_controller.rs @@ -48,7 +48,7 @@ pub async fn update( movements_service::update(movement.movement().id(), &req).await?; - Ok(HttpResponse::Accepted().finish()) + Ok(HttpResponse::Ok().json(movements_service::get_by_id(movement.movement().id()).await?)) } /// Delete a movement diff --git a/moneymgr_web/src/api/MovementsApi.ts b/moneymgr_web/src/api/MovementsApi.ts index 0ab0387..341a031 100644 --- a/moneymgr_web/src/api/MovementsApi.ts +++ b/moneymgr_web/src/api/MovementsApi.ts @@ -60,4 +60,17 @@ export class MovementApi { }) ).data; } + + /** + * Update a movement information + */ + static async Update(movement: Movement): Promise { + return ( + await APIClient.exec({ + uri: `/movement/${movement.id}`, + method: "PUT", + jsonData: movement, + }) + ).data; + } } diff --git a/moneymgr_web/src/routes/AccountRoute.tsx b/moneymgr_web/src/routes/AccountRoute.tsx index 3c4f108..86f92a0 100644 --- a/moneymgr_web/src/routes/AccountRoute.tsx +++ b/moneymgr_web/src/routes/AccountRoute.tsx @@ -11,6 +11,7 @@ import React from "react"; import { AsyncWidget } from "../widgets/AsyncWidget"; import { DataGrid, GridColDef } from "@mui/x-data-grid"; import { DateWidget } from "../widgets/DateWidget"; +import { useAlert } from "../hooks/context_providers/AlertDialogProvider"; export function AccountRoute(): React.ReactElement { const { accountId } = useParams(); @@ -66,7 +67,12 @@ export function AccountRoute(): React.ReactElement { ); } -function MovementsTable(p: { movements: Movement[] }): React.ReactElement { +function MovementsTable(p: { + movements: Movement[]; + needReload: () => {}; +}): React.ReactElement { + const alert = useAlert(); + const columns: GridColDef<(typeof p.movements)[number]>[] = [ { field: "checked", @@ -118,7 +124,7 @@ function MovementsTable(p: { movements: Movement[] }): React.ReactElement { }, ]; return ( - columns={columns} rows={p.movements} autoPageSize @@ -133,6 +139,15 @@ function MovementsTable(p: { movements: Movement[] }): React.ReactElement { }, }, }} + processRowUpdate={async (n) => { + try { + return await MovementApi.Update(n); + } catch (e) { + console.error("Failed to update movement information!", e); + alert(`Failed to update row! ${e}`); + throw e; + } + }} /> ); }