import React, {useState} from 'react'; import { toast } from 'react-toastify'; import theme from '../theme.jsx'; import {BrowserView, MobileView} from "react-device-detect"; import { useNavigate, Link } from "react-router-dom"; import ReactGA from 'react-ga4'; import { Paper, Typography, Badge, Tooltip, List, ListItem, Avatar, Menu, MenuItem, Select, Button, Grid, IconButton, Divider, LinearProgress, } from '@mui/material' import { MeetingRoom as MeetingRoomIcon, HelpOutline as HelpOutlineIcon, Settings as SettingsIcon, Notifications as NotificationsIcon, Home as HomeIcon, Apps as AppsIcon, Description as DescriptionIcon, EmojiObjects as EmojiObjectsIcon, Business as BusinessIcon, Polyline as PolylineIcon, } from '@mui/icons-material'; import { Analytics as AnalyticsIcon, Lightbulb as LightbulbIcon, } from "@mui/icons-material"; //import { useAlert import SearchField from '../components/Searchfield.jsx' const hoverColor = "#f85a3e" const hoverOutColor = "#e8eaf6" const Header = props => { const { globalUrl, setNotifications, notifications, isLoggedIn, removeCookie, homePage, userdata, serverside, } = props; //const theme = useTheme(); //const alert = useAlert() const [HomeHoverColor, setHomeHoverColor] = useState(hoverOutColor); const [SoarHoverColor, setSoarHoverColor] = useState(hoverOutColor); const [LoginHoverColor, setLoginHoverColor] = useState(hoverOutColor); const [DocsHoverColor, setDocsHoverColor] = useState(hoverOutColor); const [HelpHoverColor, setHelpHoverColor] = useState(hoverOutColor); const [anchorEl, setAnchorEl] = React.useState(null); const [anchorElAvatar, setAnchorElAvatar] = React.useState(null); const [subAnchorEl, setSubAnchorEl] = React.useState(null); let navigate = useNavigate(); const handleClick = (event) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); setAnchorElAvatar(null); }; const hrefStyle = { color: hoverOutColor, textDecoration: "none", } const isCloud = serverside === true || typeof window === 'undefined' ? true : window.location.host === "localhost:3002" || window.location.host === "shuffler.io"; const clearNotifications = () => { // Don't really care about the logout fetch(`${globalUrl}/api/v1/notifications/clear`, { credentials: "include", method: 'GET', headers: { 'Content-Type': 'application/json', }, }) .then(function(response) { if (response.status !== 200) { console.log("Error in response") } return response.json(); }).then(function(responseJson) { if (responseJson.success === true) { setNotifications([]) handleClose() } else { toast("Failed dismissing notifications. Please try again later.") } }) .catch(error => { console.log("error in notification dismissal: ", error) //removeCookie("session_token", {path: "/"}) }) } const dismissNotification = (alert_id) => { // Don't really care about the logout fetch(`${globalUrl}/api/v1/notifications/${alert_id}/markasread`, { credentials: "include", method: 'GET', headers: { 'Content-Type': 'application/json', }, }) .then(function(response) { if (response.status !== 200) { console.log("Error in response") } return response.json(); }).then(function(responseJson) { if (responseJson.success === true) { const newNotifications = notifications.filter(data => data.id !== alert_id) console.log("NEW NOTIFICATIONS: ", newNotifications) setNotifications(newNotifications) } else { toast("Failed dismissing notification. Please try again later.") } }) .catch(error => { console.log("error in notification dismissal: ", error) //removeCookie("session_token", {path: "/"}) }) } // DEBUG HERE const handleClickLogout = () => { console.log("SHOULD LOG OUT") // Don't really care about the logout fetch(globalUrl+"/api/v1/logout", { credentials: "include", method: 'POST', headers: { 'Content-Type': 'application/json', }, }) .then(() => { // Log out anyway removeCookie("session_token", {path: "/"}) removeCookie("session_token", {path: "/"}) removeCookie("session_token", {path: "/"}) removeCookie("session_token", {path: "/"}) window.location.pathname = "/" }) .catch(error => { console.log(error) }); } // Rofl this is weird const handleDocsHover = () => { setDocsHoverColor(hoverColor) } const handleDocsHoverOut = () => { setDocsHoverColor(hoverOutColor) } const handleHomeHover = () => { setHomeHoverColor(hoverColor) } const handleHelpHover = () => { setHelpHoverColor(hoverColor) } const handleHelpHoverOut = () => { setHelpHoverColor(hoverOutColor) } const handleSoarHover = () => { setSoarHoverColor(hoverColor) } const handleSoarHoverOut = () => { setSoarHoverColor(hoverOutColor) } const handleHomeHoverOut = () => { setHomeHoverColor(hoverOutColor) } const handleLoginHover = () => { setLoginHoverColor(hoverColor) } const handleLoginHoverOut = () => { setLoginHoverColor(hoverOutColor) } // Should be based on some path const logoCheck = !homePage ? null : null const notificationWidth = 300 const imagesize = 22; const boxColor = "#86c142"; const NotificationItem = (props) => { const {data} = props var image = ""; var orgName = ""; var orgId = ""; if (userdata.orgs !== undefined) { const foundOrg = userdata.orgs.find((org) => org.id === data["org_id"]); if (foundOrg !== undefined && foundOrg !== null) { //position: "absolute", bottom: 5, right: -5, const imageStyle = { width: imagesize, height: imagesize, pointerEvents: "none", marginLeft: data.creator_org !== undefined && data.creator_org.length > 0 ? 20 : 0, borderRadius: 10, border: foundOrg.id === userdata.active_org.id ? `3px solid ${boxColor}` : null, cursor: "pointer", marginRight: 10, }; image = foundOrg.image === "" ? ( {foundOrg.name} ) : ( {foundOrg.name} {}} /> ); orgName = foundOrg.name; orgId = foundOrg.id; } } return ( {/* {new Date(data.updated_at).toISOString()} */} {data.reference_url !== undefined && data.reference_url !== null && data.reference_url.length > 0 ? {data.title} : {data.title} } {data.image !== undefined && data.image !== null && data.image.length > 0 ? {data.title} : null } {data.description} {/*data.tags !== undefined && data.tags !== null && data.tags.length > 0 ? data.tags.map((tag, index) => { return ( { }} variant="outlined" color="primary" /> ) }) : null */}
{data.read === false ? : null}
{ }} > {image}
) } const notificationMenu = { setAnchorEl(event.currentTarget); }}> { handleClose() }} >
Your Notifications ({notifications.length}) {notifications.length > 1 ? : null}
Notifications are made by Shuffle to help you discover issues or improvements.
{notifications.map((data, index) => { return ( ) })}
const handleClickChangeOrg = (orgId) => { // Don't really care about the logout //name: org.name, //orgId = "asd" const data = { org_id: orgId, } localStorage.setItem("globalUrl", "") localStorage.setItem("getting_started_sidebar", "open"); fetch(`${globalUrl}/api/v1/orgs/${orgId}/change`, { mode: 'cors', credentials: 'include', crossDomain: true, method: 'POST', body: JSON.stringify(data), withCredentials: true, headers: { 'Content-Type': 'application/json; charset=utf-8', }, }) .then(function(response) { if (response.status !== 200) { console.log("Error in response") } return response.json(); }).then(function(responseJson) { if (responseJson.success === true) { if (responseJson.region_url !== undefined && responseJson.region_url !== null && responseJson.region_url.length > 0) { console.log("Region Change: ", responseJson.region_url) localStorage.setItem("globalUrl", responseJson.region_url) //globalUrl = responseJson.region_url } setTimeout(() => { window.location.reload() }, 2000) toast("Successfully changed active organization - refreshing!") } else { toast("Failed changing org: ", responseJson.reason) } }) .catch(error => { console.log("error changing: ", error) //removeCookie("session_token", {path: "/"}) }) } const supportMenu = {}}> Discord Community Join // Should be based on some path const parsedAvatar = userdata.avatar !== undefined && userdata.avatar !== null && userdata.avatar.length > 0 ? userdata.avatar : "" const avatarMenu = { setAnchorElAvatar(event.currentTarget); }}> { handleClose() }} > { handleClose(); }} > Admin { handleClose(); }} > About {/* { handleClose(); }} > Get Started */} { handleClose(); }} > Use Cases { handleClose() }}> Creator page { handleClose() }}> Settings { handleClickLogout() event.preventDefault() handleClose() }}>  Logout const listItemStyle = { textAlign: "center", marginTop: "auto", marginBottom: "auto", } // Handle top bar or something const defaultTop = isCloud ? 0 : 7 const loginTextBrowser = !isLoggedIn ?
{/* */} {isCloud ? : null} {isCloud ? : }
{isCloud ? : null} {/* {supportMenu} */} {/* */}
:
logo {/* */}
{/* */} Workflows
{/* */} Apps
{/*
Dashboard
*/}
{/* */} Docs
{/*
Pricing
*/} {/*
Configure
*/}
{avatarMenu} {notificationMenu} {/*supportMenu*/} {logoCheck} {/* */} {/* */} {/*userdata.app_execution_limit !== 5000 && userdata.app_execution_limit !== 10000 ? userdata === undefined || userdata.orgs === undefined || userdata.orgs === null || userdata.orgs.length > 1 ? null : : null*/} {userdata === undefined || userdata.orgs === undefined || userdata.orgs === null || userdata.orgs.length <= 1 ? null : } {/* Show on cloud, if not suborg and if not customer/pov/internal */} {isCloud && (userdata.org_status === undefined || userdata.org_status === null || userdata.org_status.length === 0) ? : null} {userdata === undefined || userdata.app_execution_limit === undefined || userdata.app_execution_usage === undefined || userdata.app_execution_usage < 1000 ? null :
= 0.9 ? "#f86a3e" : null, }} onClick={() => { console.log(userdata.appe_execution_usage/userdata.app_execution_limit) if (window.drift !== undefined) { window.drift.api.startInteraction({ interactionId: 326905 }) navigate("/pricing") } else { console.log("Couldn't find drift in window.drift and not .drift-open-chat with querySelector: ", window.drift) } }}> {(userdata.app_execution_usage/userdata.app_execution_limit*100).toFixed(0)}%
}
const loginTextMobile = !isLoggedIn ?
logo {/**/}
About
:
Logout
{logoCheck}
// const loadedCheck =
{loginTextBrowser} {loginTextMobile}
//
return (
{loadedCheck}
) } export default Header;