diff --git a/src/features/machines/components/MachineContainer.js b/src/features/machines/components/MachineContainer.js new file mode 100644 index 0000000..bb5e723 --- /dev/null +++ b/src/features/machines/components/MachineContainer.js @@ -0,0 +1,53 @@ +import React, { useState } from "react"; +import PropTypes from "prop-types"; +import MachineItem from "./MachineItem"; +import * as api from "../api"; +import { useToast } from "../../../hooks"; +import { PowerSettingsNew, LastPage } from "@material-ui/icons"; + +const MachineContainer = ({ machine }) => { + const { success, error } = useToast(); + + const wakeMachine = machine => async () => { + const result = await api.wakeMachine(machine.macAddress); + if (result.success) { + success(result.status); + } else { + error(result.status); + } + }; + + const pingMachine = machine => async () => { + const result = await api.pingMachine( + machine.iPv4Address || machine.machineName + ); + if (result.success) { + success(result.status); + } else { + error(result.status); + } + }; + + const actions = [ + { + code: "wake", + effect: wakeMachine, + icon: PowerSettingsNew, + tooltip: "Wake" + }, + { + code: "ping", + effect: pingMachine, + icon: LastPage, + tooltip: "Ping" + } + ]; + + return ; +}; + +MachineContainer.propTypes = { + machine: PropTypes.object.isRequired +}; + +export default MachineContainer; diff --git a/src/features/machines/components/MachinesContainer.js b/src/features/machines/components/MachinesContainer.js index 0954e9c..368b8de 100644 --- a/src/features/machines/components/MachinesContainer.js +++ b/src/features/machines/components/MachinesContainer.js @@ -5,69 +5,24 @@ import { } from "../../../state/ApplicationContexts"; import * as api from "../api"; import MachinesList from "./MachinesList"; -import { PowerSettingsNew, LastPage } from "@material-ui/icons"; -import { useToast } from "../../../hooks"; const MachinesContainer = () => { const state = useContext(ApplicationStateContext); const dispatchActions = useContext(ApplicationDispatchContext); - const { success, error } = useToast(); - const handleReadMachines = useCallback(async () => { const machines = await api.readMachines(); const data = Object.assign(machines, { loaded: true }); dispatchActions.onNetworkChange("machines", data); }, [dispatchActions]); - const wakeMachine = machine => async () => { - const result = await api.wakeMachine(machine.macAddress); - if (result.success) { - success(result.status); - } else { - error(result.status); - } - }; - - const pingMachine = machine => async () => { - const result = await api.pingMachine( - machine.iPv4Address || machine.machineName - ); - if (result.success) { - success(result.status); - } else { - error(result.status); - } - }; - - const actions = [ - { - code: "wake", - effect: wakeMachine, - icon: PowerSettingsNew, - tooltip: "Wake" - }, - { - code: "ping", - effect: pingMachine, - icon: LastPage, - tooltip: "Ping" - } - ]; - useEffect(() => { if (!state.network.machines.loaded) { handleReadMachines(); } }, [handleReadMachines, state.network.machines.loaded]); - return ( - - ); + return ; }; export default MachinesContainer; diff --git a/src/features/machines/components/MachinesList.js b/src/features/machines/components/MachinesList.js index 505ba53..20c6ebc 100644 --- a/src/features/machines/components/MachinesList.js +++ b/src/features/machines/components/MachinesList.js @@ -9,7 +9,7 @@ import { TableRow } from "@material-ui/core"; import Paper from "@material-ui/core/Paper"; -import MachineItem from "./MachineItem"; +import MachineContainer from "./MachineContainer"; const MachinesList = ({ dense, machines, actions }) => { return ( @@ -26,10 +26,9 @@ const MachinesList = ({ dense, machines, actions }) => { {machines.map(machine => ( - ))} @@ -40,8 +39,7 @@ const MachinesList = ({ dense, machines, actions }) => { MachinesList.propTypes = { dense: PropTypes.bool.isRequired, - machines: PropTypes.array.isRequired, - actions: PropTypes.array.isRequired + machines: PropTypes.array.isRequired }; export default MachinesList;