diff --git a/app/controllers/gangs_controller.rb b/app/controllers/gangs_controller.rb index dd70326..01fc1b5 100644 --- a/app/controllers/gangs_controller.rb +++ b/app/controllers/gangs_controller.rb @@ -18,12 +18,15 @@ class GangsController < ApplicationController end def update - if gang_params[:chip_scale].to_i.positive? - Gang.update(gang_params) + if params[:id] + gang = Gang.find(params[:id]) + gang.update!(gang_params) json_response onboarded: true else error_response :bad_request end + rescue StandardError + error_response :bad_request end private diff --git a/client/src/App.js b/client/src/App.js index 88b0ceb..fd60d65 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -13,13 +13,15 @@ import { HOMIE_FLOW, HOMIES, HOMIE_MOVE_MONEY, - HOMIE_PUT_IN_WORK + HOMIE_PUT_IN_WORK, + GANG_DETAILS } from './RouteNames'; import PutInWork from "./cash/PutInWork"; import GangOnboarding from "./gangOnboarding/GangOnboarding"; import Gangs from './gangs/Gangs'; import {errorToast} from "./common/errorHelpers"; import MoveMoney from "./homies/MoveMoney"; +import GangDetails from "./gangs/GangDetails"; const App = (props) => { @@ -27,23 +29,23 @@ const App = (props) => { const [gangs, setGangs] = useState([]); const [selectedGang, setSelectedGang] = useState({}); - useEffect(() => { - (async() => { - try { - setLoading(true); - const response = await axios.get(`/api/gangs`); - if (response.status === 200 && response.data){ - setGangs(response.data); - setSelectedGang(response.data[0]); - }else{ - errorToast(); - } - } catch (e) { + const updateGangsEffect = async () => { + try { + setLoading(true); + const response = await axios.get(`/api/gangs`); + if (response.status === 200 && response.data){ + setGangs(response.data); + setSelectedGang(response.data[0]); + }else{ errorToast(); } - setLoading(false); - })(); - }, []); + } catch (e) { + errorToast(); + } + setLoading(false); + } + + useEffect(updateGangsEffect, []); const routes = ([ } />, @@ -51,7 +53,16 @@ const App = (props) => { } />, } />, } />, - } /> + } />, + { + const gang_id = props.match.params['gang_id']; + const gang = gangs.find(gang => gang.id === parseInt(gang_id)); + if (gang){ + return + }else{ + return null; + } + }} /> ] ); diff --git a/client/src/RouteNames.js b/client/src/RouteNames.js index c14e14e..ed3502a 100644 --- a/client/src/RouteNames.js +++ b/client/src/RouteNames.js @@ -4,3 +4,4 @@ export const HOMIE_MOVE_MONEY = '/homie/:homie_id/move-money'; export const HOMIE_PUT_IN_WORK = '/homie/:homie_id/put-in-work'; export const HOMIE_FLOW = '/homie/:homie_id/flow'; export const GANGS = '/gangs'; +export const GANG_DETAILS = '/gangs/:gang_id'; diff --git a/client/src/gangs/GangDetails.js b/client/src/gangs/GangDetails.js new file mode 100644 index 0000000..e72b275 --- /dev/null +++ b/client/src/gangs/GangDetails.js @@ -0,0 +1,54 @@ +import React, {useState} from 'react'; +import {Button} from "react-materialize"; +import axios from 'axios'; +import {errorToast} from "../common/errorHelpers"; +import {withRouter} from 'react-router-dom'; +import {GANGS} from "../RouteNames"; +import M from 'materialize-css'; + +const GangDetails = (props) => { + const gang = props.gang; + + const [gangName, setGangName] = useState(gang.name); + + const disableSubmit = () => gangName.length === 0; + + const updateGang = async () => { + const updatedGang = { + name: gangName + } + + try{ + const response = await axios.put(`/api/gangs/${gang.id}`, { 'gang': updatedGang }); + if (response.status === 200 && response.data) { + props.updateGangs(); + props.history.push(GANGS); + M.toast({html: 'Done!'}); + }else{ + errorToast(); + } + }catch (e) { + errorToast(); + } + } + + return ( +
+
+ +
+ setGangName(e.target.value)} /> + + +
+ +
+ +
+
+ ) +} + +export default withRouter(GangDetails); \ No newline at end of file diff --git a/client/src/gangs/Gangs.js b/client/src/gangs/Gangs.js index 4a6898d..f04f6c1 100644 --- a/client/src/gangs/Gangs.js +++ b/client/src/gangs/Gangs.js @@ -5,6 +5,7 @@ import {errorToast} from "../common/errorHelpers"; import YesNoModal from "../common/YesNoModal"; import {Button} from "react-materialize"; import M from "materialize-css"; +import {withRouter} from 'react-router-dom'; const Gangs = (props) => { const gangs = props.gangs; @@ -35,6 +36,8 @@ const Gangs = (props) => {
{ `${gang.about || '[no about]'} • ${gang.chip_name} (${gang.chip_code})`}
+