From 10035e1cf6369741e6a480fe2970e037ab2edab9 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 20 May 2020 19:40:50 +0200 Subject: [PATCH] add description field; implement submit action --- client/package.json | 1 + client/src/cash/MakeMoneyMove.js | 189 +++++++++++++++++++------------ client/yarn.lock | 5 + 3 files changed, 120 insertions(+), 75 deletions(-) diff --git a/client/package.json b/client/package.json index 3386786..3084258 100644 --- a/client/package.json +++ b/client/package.json @@ -5,6 +5,7 @@ "proxy": "http://localhost:3001", "dependencies": { "axios": "^0.19.0", + "materialize-css": "^1.0.0", "react": "^16.8.6", "react-dom": "^16.8.6", "react-materialize": "^3.3.1", diff --git a/client/src/cash/MakeMoneyMove.js b/client/src/cash/MakeMoneyMove.js index 2943a7c..66f4848 100644 --- a/client/src/cash/MakeMoneyMove.js +++ b/client/src/cash/MakeMoneyMove.js @@ -1,94 +1,133 @@ -import React, { useState, useEffect } from 'react'; -import {Icon, Select, TextInput, Button} from 'react-materialize'; +import React, {useState, useEffect} from 'react'; +import M from 'materialize-css'; +import {Icon, Select, TextInput, Button, Textarea} from 'react-materialize'; import './Cash.css'; import axios from 'axios'; const MakeMoneyMove = (props) => { - const [selectedFrom, setSelectedFrom] = useState(""); - const [selectedTo, setSelectedTo] = useState(""); - const [homiesCash, setHomiesCash] = useState([]); - const [amountToMove, setAmountToMove] = useState(null); + const [selectedFrom, setSelectedFrom] = useState(""); + const [selectedTo, setSelectedTo] = useState(""); + const [homiesCash, setHomiesCash] = useState([]); + const [amountToMove, setAmountToMove] = useState(null); + const [moveDescription, setMoveDescription] = useState(""); + const [submitInProgress, setSubmitInProgress] = useState(false); - useEffect( () => { - const getCashForHomies = async () => { - try { - const cash = await axios.get(`/homies/cash`); - setHomiesCash(cash.data); - } catch (e) { - console.log("Error fetching", e); - } + useEffect(() => { + const getCashForHomies = async () => { + try { + const cash = await axios.get(`/homies/cash`); + setHomiesCash(cash.data); + } catch (e) { + console.log("Error fetching", e); + } + }; + getCashForHomies(); + }, []); + + const handleAmountChange = (e) => { + setAmountToMove(parseFloat(e.target.value)) + } + + const homieToOptionMapper = (homieCash) => { + const homie = homieCash.homie; + return ( + + ); }; - getCashForHomies(); - }, []); - const handleAmountChange = (e) => { - setAmountToMove(parseFloat(e.target.value)) - } + const homieOptions = homiesCash.map(homieToOptionMapper); - const homieToOptionMapper = (homieCash) => { - const homie = homieCash.homie; - return ( - + const handleFromHomieChange = (e) => { + console.log("from homie", e.target.value); + setSelectedFrom(e.target.value); + }; + const filteredHomieCashes = homiesCash.filter((homieCash) => homieCash.homie.id !== parseInt(selectedFrom)); + const filteredHomieOptions = filteredHomieCashes.map(homieToOptionMapper); + + const handleToHomieChange = (e) => { + setSelectedTo(e.target.value); + } + + const handleDescriptionChange = (e) => { + setMoveDescription(e.target.value); + } + + const clearForm = () => { + setAmountToMove(null); + setSelectedFrom(""); + setSelectedTo(""); + setMoveDescription(""); + } + + const handleSubmit = async (e) => { + e.preventDefault(); + setSubmitInProgress(true); + const moneyMoveRequest = { + money_move: { + amount: amountToMove, + from_homie_id: selectedFrom, + to_homie_id: selectedTo, + description: moveDescription + } + } + + const submitResponse = await axios.post('/money_moves', moneyMoveRequest); + + if (submitResponse && submitResponse.status === 200 && submitResponse.data === true) { + M.toast({html: "Money lounde...moved"}); + clearForm(); + } else { + M.toast({html: "Yo! It ain't workin'"}); + } + setSubmitInProgress(false); + } + + const formComplete = () => ( + selectedFrom !== selectedTo && + selectedTo !== "" && + amountToMove > 0 ); - }; - const homieOptions = homiesCash.map(homieToOptionMapper); - - const handleFromHomieChange = (e) => { - console.log("from homie", e.target.value); - setSelectedFrom(e.target.value); - }; - const filteredHomieCashes = homiesCash.filter( (homieCash) => homieCash.homie.id !== parseInt(selectedFrom) ); - const filteredHomieOptions = filteredHomieCashes.map(homieToOptionMapper); + const disableSubmit = () => (!formComplete() || submitInProgress); - const handleToHomieChange = (e) => { - setSelectedTo(e.target.value); - } + return ( +
+
+

Make Money Move

+ + + - const handleSubmit = (e) => { - e.preventDefault(); - console.log("Submitting"); - } + + - const formComplete = () => ( - selectedFrom !== "" && - selectedFrom !== selectedTo && - selectedTo !== "" && - amountToMove > 0 - ); +
-return ( -
- -

Make Money Move

- - - +