import React, { useState, useEffect } from "react"; import Stepper from "@material-ui/core/Stepper"; import Step from "@material-ui/core/Step"; import StepLabel from "@material-ui/core/StepLabel"; import Button from "@material-ui/core/Button"; import Checkbox from '@mui/material/Checkbox'; import SearchIcon from '@mui/icons-material/Search'; import EmailIcon from '@mui/icons-material/Email'; import NewReleasesIcon from '@mui/icons-material/NewReleases'; import ExtensionIcon from '@mui/icons-material/Extension'; import theme from '../theme'; import { FormGroup, FormControl, InputLabel, FormLabel, FormControlLabel, Select, MenuItem, Grid, Paper, Typography, TextField, Zoom, } from "@material-ui/core"; import { useNavigate, Link } from "react-router-dom"; import WorkflowSearch from '../components/Workflowsearch.jsx'; import WorkflowPaper from "../components/WorkflowPaper.jsx" const WelcomeForm = (props) => { const { userdata, globalUrl, discoveryWrapper, setDiscoveryWrapper } = props const [activeStep, setActiveStep] = React.useState(0); const [skipped, setSkipped] = React.useState(new Set()); const [discoveryData, setDiscoveryData] = React.useState({}) const [name, setName] = React.useState("") const [orgName, setOrgName] = React.useState("") const [role, setRole] = React.useState("") const [orgType, setOrgType] = React.useState("") const [finishedApps, setFinishedApps] = React.useState([]) let navigate = useNavigate(); const onNodeSelect = (label) => { if (setDiscoveryWrapper !== undefined) { setDiscoveryWrapper( {"id": label} ) } setSelectionOpen(true) setDefaultSearch(label) } useEffect(() => { if (userdata.id === undefined) { return } if (userdata.name !== undefined && userdata.name !== null && userdata.name.length > 0) { setName(userdata.name) } if (userdata.active_org !== undefined && userdata.active_org.name !== undefined && userdata.active_org.name !== null && userdata.active_org.name.length > 0) { setOrgName(userdata.active_org.name) } }, [userdata]) useEffect(() => { if (discoveryWrapper === undefined || discoveryWrapper.id === undefined) { setDefaultSearch("") var newfinishedApps = finishedApps newfinishedApps.push(defaultSearch) setFinishedApps(finishedApps) } }, [discoveryWrapper]) useEffect(() => { if ( window.location.search !== undefined && window.location.search !== null ) { const urlSearchParams = new URLSearchParams(window.location.search); const params = Object.fromEntries(urlSearchParams.entries()); const foundTab = params["tab"]; if (foundTab !== null && foundTab !== undefined && !isNaN(foundTab)) { setActiveStep(foundTab-1) } else { navigate(`/welcome?tab=1`) } } }, []) const steps = getSteps(); const isStepOptional = step => { return step === 1 } const isStepSkipped = step => { return skipped.has(step) } const sendUserUpdate = (name, role, userId) => { const data = { "tutorial": "welcome", "firstname": name, "company_role": role, "user_id": userId, } const url = `${globalUrl}/api/v1/users/updateuser` fetch(url, { mode: "cors", method: "PUT", body: JSON.stringify(data), credentials: "include", crossDomain: true, withCredentials: true, headers: { "Content-Type": "application/json; charset=utf-8", }, }) .then((response) => response.json().then((responseJson) => { if (responseJson["success"] === false) { console.log("Update user success") //alert.error("Failed updating org: ", responseJson.reason); } else { console.log("Update success!") //alert.success("Successfully edited org!"); } }) ) .catch((error) => { console.log("Update err: ", error.toString()) //alert.error("Err: " + error.toString()); }); } const sendOrgUpdate = (orgname, company_type, orgId, priority) => { var data = { org_id: orgId, }; if (orgname.length > 0) { data.name = orgname } if (company_type.length > 0) { data.company_type = company_type } if (priority.length > 0) { data.priority = priority } const url = globalUrl + `/api/v1/orgs/${orgId}`; fetch(url, { mode: "cors", method: "POST", body: JSON.stringify(data), credentials: "include", crossDomain: true, withCredentials: true, headers: { "Content-Type": "application/json; charset=utf-8", }, }) .then((response) => response.json().then((responseJson) => { if (responseJson["success"] === false) { console.log("Update of org failed") //alert.error("Failed updating org: ", responseJson.reason); } else { console.log("Update success!") //alert.success("Successfully edited org!"); } }) ) .catch((error) => { console.log("Update err: ", error.toString()) //alert.error("Err: " + error.toString()); }); } var workflowDelay = -50 const NewHits = ({ hits }) => { const [mouseHoverIndex, setMouseHoverIndex] = useState(-1) var counted = 0 const paperAppContainer = { display: "flex", flexWrap: "wrap", alignContent: "space-between", marginTop: 5, } return ( {hits.map((data, index) => { workflowDelay += 50 if (index > 3) { return null } return ( ) })} ) } const handleNext = () => { setDefaultSearch("") if (activeStep === 0) { console.log("Should send basic information about org (fetch)") navigate(`/welcome?tab=2`) if (userdata.active_org !== undefined && userdata.active_org.id !== undefined && userdata.active_org.id !== null && userdata.active_org.id.length > 0) { sendOrgUpdate(orgName, orgType, userdata.active_org.id, "") } if (userdata.id !== undefined && userdata.id !== null && userdata.id.length > 0) { sendUserUpdate(name, role, userdata.id) } } else if (activeStep === 1) { console.log("Should send secondary info about apps and other things") setDiscoveryWrapper({}) navigate(`/welcome?tab=3`) } else if (activeStep === 2) { console.log("Should send third page with workflows activated and the like") } let newSkipped = skipped; if (isStepSkipped(activeStep)) { newSkipped = new Set(newSkipped.values()); newSkipped.delete(activeStep); } setActiveStep(prevActiveStep => prevActiveStep + 1); setSkipped(newSkipped); }; const handleBack = () => { setActiveStep(prevActiveStep => prevActiveStep - 1); }; const handleSkip = () => { if (!isStepOptional(activeStep)) { throw new Error("You can't skip a step that isn't optional."); } setActiveStep(prevActiveStep => prevActiveStep + 1); setSkipped(prevSkipped => { const newSkipped = new Set(prevSkipped.values()); newSkipped.add(activeStep); return newSkipped; }); }; const handleReset = () => { setActiveStep(0); }; const isCloud = window.location.host === "localhost:3002" || window.location.host === "shuffler.io"; const [selectionOpen, setSelectionOpen] = React.useState(false) const [newSelectedApp, setNewSelectedApp] = React.useState({}) const [defaultSearch, setDefaultSearch] = React.useState("") useEffect(() => { console.log("Selected app changed (effect)") }, [newSelectedApp]) function getSteps() { return [ "Help us get to know you", "Discover integrations", "Personalize Usecases", ] } //const buttonWidth = 145 const buttonWidth = 450 const buttonMargin = 10 const sizing = 435 const buttonStyle = { flex: 1, width: "100%", padding: 25, margin: buttonMargin, fontSize: 18, } const newButtonStyle = { padding: 22, flex: 1, margin: buttonMargin, minWidth: buttonWidth, maxWidth: buttonWidth, } const getStepContent = (step) => { switch (step) { case 0: return ( {/*isCloud ? null : This data will be used within the product and NOT be shared unless cloud synchronization is configured. */} Welcome to Shuffle! We need some more information in order to understand how we best can help you find relevant Usecases in Shuffle. { setName(e.target.value) }} /> { setOrgName(e.target.value) }} /> Your Role Company Type ) case 1: return (
Find your apps, then we'll help you find relevant workflows. Can't find what you're looking for? Contact support: support@shuffler.io {/*The app framework helps us access and authenticate the most important APIs for you. */} {/* What is your development experience? */} {/*Find your integrations!*/}
{/* What do you want to automate first ? { onNodeSelect("Email") }} />} label="Email" labelPlacement="Email" /> { onNodeSelect("SIEM") }} />} label="SIEM" labelPlacement="SIEM" /> { onNodeSelect("EDR") }} />} label="EDR" labelPlacement="EDR" /> */}
{/* What tools do you use? */}
) case 2: return (
What usecases are you interested in? This will help us suggest relevant Workflows. {/* */}
{selectionOpen === true ? : null}
) default: return "unknown step" } } return (
{steps.map((label, index) => { const stepProps = {} const labelProps = {} //if (isStepOptional(index)) { // labelProps.optional = "optional" //} if (isStepSkipped(index)) { stepProps.completed = false; } return ( {label} ) })} {/*selectionOpen ? : null*/}
{activeStep === steps.length ? (
You Will be Redirected to getting Start Page Wait for 5-sec.
) : (
{getStepContent(activeStep)}
{/*isStepOptional(activeStep) && ( )*/}
)}
); } export default WelcomeForm