Update movement dialog is operational
This commit is contained in:
parent
b2f8a66c12
commit
0d30a8135c
@ -12,9 +12,9 @@ pub async fn create(auth: AuthExtractor, req: web::Json<UpdateMovementQuery>) ->
|
||||
return Ok(HttpResponse::BadRequest().json(err));
|
||||
}
|
||||
|
||||
movements_service::create(&req).await?;
|
||||
let movement = movements_service::create(&req).await?;
|
||||
|
||||
Ok(HttpResponse::Created().finish())
|
||||
Ok(HttpResponse::Created().json(movement))
|
||||
}
|
||||
|
||||
/// Get the balances of all the accounts of the user
|
||||
|
@ -39,12 +39,14 @@ export class MovementApi {
|
||||
/**
|
||||
* Create a new movement
|
||||
*/
|
||||
static async Create(q: MovementUpdate): Promise<void> {
|
||||
await APIClient.exec({
|
||||
uri: `/movement`,
|
||||
method: "POST",
|
||||
jsonData: q,
|
||||
});
|
||||
static async Create(q: MovementUpdate): Promise<Movement> {
|
||||
return (
|
||||
await APIClient.exec({
|
||||
uri: `/movement`,
|
||||
method: "POST",
|
||||
jsonData: q,
|
||||
})
|
||||
).data;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -97,7 +99,9 @@ export class MovementApi {
|
||||
/**
|
||||
* Update a movement information
|
||||
*/
|
||||
static async Update(movement: Movement): Promise<Movement> {
|
||||
static async Update(
|
||||
movement: MovementUpdate & { id: number }
|
||||
): Promise<Movement> {
|
||||
return (
|
||||
await APIClient.exec({
|
||||
uri: `/movement/${movement.id}`,
|
||||
|
@ -6,12 +6,16 @@ import {
|
||||
DialogTitle,
|
||||
} from "@mui/material";
|
||||
import React from "react";
|
||||
import { Movement, MovementUpdate } from "../api/MovementsApi";
|
||||
import { Movement, MovementApi, MovementUpdate } from "../api/MovementsApi";
|
||||
import { ServerApi } from "../api/ServerApi";
|
||||
import { useAccounts } from "../hooks/AccountsListProvider";
|
||||
import { useAlert } from "../hooks/context_providers/AlertDialogProvider";
|
||||
import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider";
|
||||
import { useSnackbar } from "../hooks/context_providers/SnackbarProvider";
|
||||
import { AccountInput } from "../widgets/forms/AccountInput";
|
||||
import { AmountInput } from "../widgets/forms/AmountInput";
|
||||
import { DateInput } from "../widgets/forms/DateInput";
|
||||
import { TextInput } from "../widgets/forms/TextInput";
|
||||
import { AccountInput } from "../widgets/forms/AccountInput";
|
||||
|
||||
export function UpdateMovementDialog(p: {
|
||||
open: boolean;
|
||||
@ -20,6 +24,11 @@ export function UpdateMovementDialog(p: {
|
||||
onClose: () => void;
|
||||
onFinished: (m: Movement) => void;
|
||||
}): React.ReactElement {
|
||||
const alert = useAlert();
|
||||
const snackbar = useSnackbar();
|
||||
const loadingMessage = useLoadingMessage();
|
||||
const accounts = useAccounts();
|
||||
|
||||
const [movement, setMovement] = React.useState(p.initial);
|
||||
|
||||
const style: React.CSSProperties = { width: "100%", marginBottom: "15px" };
|
||||
@ -30,7 +39,32 @@ export function UpdateMovementDialog(p: {
|
||||
movement.time !== 0 &&
|
||||
movement.label.length > 0;
|
||||
|
||||
const handleSubmit = async () => {};
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
loadingMessage.show(
|
||||
`${p.updateId ? "Updating" : "Creating"} the movement...`
|
||||
);
|
||||
|
||||
let res: Movement;
|
||||
|
||||
if (p.updateId) {
|
||||
res = await MovementApi.Update({ ...movement, id: p.updateId });
|
||||
} else {
|
||||
res = await MovementApi.Create(movement);
|
||||
}
|
||||
|
||||
accounts.reloadBalances();
|
||||
|
||||
snackbar("The movement was successfully saved!");
|
||||
|
||||
p.onFinished(res);
|
||||
} catch (e) {
|
||||
console.error("Failed to save movement!", e);
|
||||
alert(`Failed to ${p.updateId ? "update" : "create"} movement! ${e}`);
|
||||
} finally {
|
||||
loadingMessage.hide();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Dialog open={p.open} onClose={p.onClose}>
|
||||
|
Loading…
x
Reference in New Issue
Block a user