import React, { useEffect } from "react"; import Paper from "@material-ui/core/Paper"; import Grid from "@material-ui/core/Grid"; import ButtonBase from "@material-ui/core/ButtonBase"; import Button from "@material-ui/core/Button"; import List from "@material-ui/core/List"; import ListItem from "@material-ui/core/ListItem"; import TextField from "@material-ui/core/TextField"; import Select from "@material-ui/core/Select"; import MenuItem from "@material-ui/core/MenuItem"; import Dialog from "@material-ui/core/Dialog"; import DialogTitle from "@material-ui/core/DialogTitle"; import DialogActions from "@material-ui/core/DialogActions"; import DialogContent from "@material-ui/core/DialogContent"; import WebhookImage from "../assets/img/webhook.png"; import KafkaImage from "../assets/img/kafka.png"; const Webhooks = (props) => { const { globalUrl, isLoaded } = props; const validtypes = ["webhook"]; //const [hooks, setSchedules] = React.useState(hookdata); const [hooks, setHooks] = React.useState([]); const [modalOpen, setModalOpen] = React.useState(false); const [newHookName, setNewHookName] = React.useState(""); const [newHookDescription, setNewHookDescription] = React.useState(""); const [newHookType, setNewHookType] = React.useState(""); const [firstrequest, setFirstrequest] = React.useState(true); const [, setModalError] = React.useState(""); useEffect(() => { if (firstrequest) { setFirstrequest(false); getAvailableHooks(); } }); const newHook = () => { if (newHookName.length === 0) { setModalError("Missing name in modal"); return; } if (!validtypes.includes(newHookType)) { setModalError( newHookType + " is not a valid type. Try this: " + validtypes ); } fetch(globalUrl + "/api/v1/hooks/new", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ name: newHookName, description: newHookDescription, type: newHookType, }), credentials: "include", }) .then((response) => response.json()) .then((responseJson) => { console.log(responseJson); setHooks([]); }) .catch((error) => { console.log(error); }); }; const getAvailableHooks = () => { fetch(globalUrl + "/api/v1/hooks", { method: "GET", headers: { "Content-Type": "application/json", Accept: "application/json", }, credentials: "include", }) .then((response) => response.json()) .then((responseJson) => { setHooks(responseJson); }) .catch((error) => { console.log(error); // window.location.pathname = "/" }); }; const deleteHook = (id) => { if (id === undefined) { return; } fetch(globalUrl + "/api/v1/hooks/" + id + "/delete", { method: "DELETE", headers: { "Content-Type": "application/json", Accept: "application/json", }, credentials: "include", }) .then((response) => response.json()) .then((responseJson) => { setHooks([]); }) .catch((error) => { console.log(error); }); }; const bodyDivStyle = { marginLeft: "20px", marginRight: "20px", width: "1350px", minWidth: "1350px", maxWidth: "1350px", }; const hookApp = (app) => { // Might be more options, but should be webhook or MQ const appPicture = app.type === "webhook" ? ( webhook ) : ( MQ ); return ( {appPicture} {splitter}

{app.info.name}

Desc: {app.info.description}
Status: {app.status}
{app.action}
); }; const splitter = (
); const hrefStyle = { color: "#385f71", textDecoration: "none", }; // FIXME - add Schedule modal const hookPaper = (hook) => { return (
{hookApp(hook)}
{splitter}
); }; const modalView = modalOpen ? ( { setModalOpen(false); }} > Hook configuration { setNewHookName(event.target.value); }} color="primary" placeholder="Name" margin="dense" fullWidth /> { setNewHookDescription(event.target.value); }} color="primary" placeholder="Description" margin="dense" fullWidth /> ) : null; const hookmap = hooks.length > 0 ? (
{hooks.map((data) => hookPaper(data))}
) : (
); const hookView = (
{hookmap}
); const loadedCheck = isLoaded ? (
{modalView} {hookView}
) : (
); // Maybe use gridview or something, idk return
{loadedCheck}
; }; export default Webhooks;