Added admin2 page and new workflow design
This commit is contained in:
@@ -210,7 +210,7 @@ const App = (message, props) => {
|
|||||||
<div style={{ height: 60, }} />
|
<div style={{ height: 60, }} />
|
||||||
:
|
:
|
||||||
isLoggedIn ?
|
isLoggedIn ?
|
||||||
<div style={{ position: 'fixed', top: 32, left: 10, zIndex: 100000 }}>
|
<div style={{ position: 'fixed', top: 16, left: 10, zIndex: 100000 }}>
|
||||||
<LeftSideBar userdata={userdata} globalUrl={globalUrl} serverside={false} notifications={notifications} />
|
<LeftSideBar userdata={userdata} globalUrl={globalUrl} serverside={false} notifications={notifications} />
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
|
|||||||
@@ -205,6 +205,8 @@ const EditWorkflow = (props) => {
|
|||||||
paddingLeft: 50,
|
paddingLeft: 50,
|
||||||
//minWidth: isMobile ? "90%" : newWorkflow === true ? 1000 : 550,
|
//minWidth: isMobile ? "90%" : newWorkflow === true ? 1000 : 550,
|
||||||
//maxWidth: isMobile ? "90%" : newWorkflow === true ? 1000 : 550,
|
//maxWidth: isMobile ? "90%" : newWorkflow === true ? 1000 : 550,
|
||||||
|
borderRadius: theme.palette.borderRadius,
|
||||||
|
backgroundColor: "black",
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -280,22 +282,18 @@ const EditWorkflow = (props) => {
|
|||||||
</div>
|
</div>
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<div style={{ borderTop: "1px solid rgba(255,255,255,0.5)", width: 600, position: "fixed", right: 20, bottom: 0, zIndex: 1002, backgroundColor: "rgba(53,53,53,1)", height: 75, paddingTop: 20, paddingLeft: 75, }}>
|
<div style={{
|
||||||
{/*
|
borderTop: "1px solid rgba(255,255,255,0.5)",
|
||||||
<Button
|
width: 600,
|
||||||
style={{}}
|
position: "fixed",
|
||||||
onClick={() => {
|
right: 20,
|
||||||
if (setNewWorkflow !== undefined) {
|
bottom: 0,
|
||||||
setWorkflow({})
|
zIndex: 1002,
|
||||||
}
|
backgroundColor: theme.palette.backgroundColor,
|
||||||
|
height: 50,
|
||||||
setModalOpen(false)
|
paddingTop: 20,
|
||||||
}}
|
paddingLeft: 75,
|
||||||
color="primary"
|
}}>
|
||||||
>
|
|
||||||
Cancel
|
|
||||||
</Button>
|
|
||||||
*/}
|
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
style={{}}
|
style={{}}
|
||||||
|
|||||||
@@ -729,13 +729,14 @@ const LeftSideBar = ({ userdata, serverside, globalUrl, notifications, }) => {
|
|||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
width: expandLeftNav ? 260 : 80,
|
width: expandLeftNav ? 260 : 80,
|
||||||
height: "calc(100vh - 60px)",
|
|
||||||
borderRadius: 8,
|
borderRadius: 8,
|
||||||
backgroundColor: "#212121",
|
backgroundColor: theme.palette.backgroundColor,
|
||||||
position: "relative",
|
position: "relative",
|
||||||
transition: "width 0.3s ease",
|
transition: "width 0.3s ease",
|
||||||
boxShadow: "0px 4px 12px rgba(0, 0, 0, 0.2)" ,
|
boxShadow: "0px 4px 12px rgba(0, 0, 0, 0.2)" ,
|
||||||
resize: 'both',
|
resize: 'both',
|
||||||
|
|
||||||
|
height: "calc(100vh - 32px)",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{modalView}
|
{modalView}
|
||||||
|
|||||||
@@ -2378,8 +2378,17 @@ const ParsedAction = (props) => {
|
|||||||
return newname;
|
return newname;
|
||||||
}}
|
}}
|
||||||
fullWidth
|
fullWidth
|
||||||
|
sx={{
|
||||||
|
'& .MuiOutlinedInput-root': {
|
||||||
|
height: 40, // Adjust the input height
|
||||||
|
},
|
||||||
|
'& .MuiAutocomplete-input': {
|
||||||
|
padding: '8px', // Adjust the text padding
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
|
||||||
style={{
|
style={{
|
||||||
backgroundColor: theme.palette.inputColor,
|
backgroundColor: theme.palette.backgroundColor,
|
||||||
height: 35,
|
height: 35,
|
||||||
borderRadius: theme.palette?.borderRadius,
|
borderRadius: theme.palette?.borderRadius,
|
||||||
}}
|
}}
|
||||||
@@ -2522,7 +2531,7 @@ const ParsedAction = (props) => {
|
|||||||
id="checkbox-search"
|
id="checkbox-search"
|
||||||
variant="body1"
|
variant="body1"
|
||||||
style={{
|
style={{
|
||||||
backgroundColor: theme.palette.inputColor,
|
backgroundColor: theme.palette.platformColor,
|
||||||
borderRadius: theme.palette?.borderRadius,
|
borderRadius: theme.palette?.borderRadius,
|
||||||
}}
|
}}
|
||||||
label={isIntegration ? "Choose a category" : "Find Actions"}
|
label={isIntegration ? "Choose a category" : "Find Actions"}
|
||||||
|
|||||||
@@ -0,0 +1,243 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import AdminNavBar from '../components/AdminNavBar.jsx';
|
||||||
|
import { toast } from "react-toastify";
|
||||||
|
|
||||||
|
const Admin2 = (props) => {
|
||||||
|
// Destructure props if needed
|
||||||
|
const { userdata, globalUrl, isCloud, serverside, checkLogin, notifications, setNotifications, stripeKey } = props;
|
||||||
|
const [selectedTab, setSelectedTab] = useState('editdetails');
|
||||||
|
const [selectedStatus, setSelectedStatus] = React.useState([]);
|
||||||
|
const [selectedOrganization, setSelectedOrganization] = useState({});
|
||||||
|
const [organizationFeatures, setOrganizationFeatures] = useState({});
|
||||||
|
const [orgRequest, setOrgRequest] = React.useState(true);
|
||||||
|
|
||||||
|
const handleGetOrg = (orgId) => {
|
||||||
|
if (
|
||||||
|
serverside !== true &&
|
||||||
|
window.location.search !== undefined &&
|
||||||
|
window.location.search !== null
|
||||||
|
) {
|
||||||
|
const urlSearchParams = new URLSearchParams(window.location.search);
|
||||||
|
const params = Object.fromEntries(urlSearchParams.entries());
|
||||||
|
const foundorgid = params["org_id"];
|
||||||
|
if (foundorgid !== undefined && foundorgid !== null) {
|
||||||
|
orgId = foundorgid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("getting organization details for: ", orgId);
|
||||||
|
|
||||||
|
// if (orgId === undefined) {
|
||||||
|
// toast(
|
||||||
|
// "Organization ID not defined. Please contact us on https://shuffler.io if this persists logout.",
|
||||||
|
// );
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Just use this one?
|
||||||
|
|
||||||
|
fetch(`${globalUrl}/api/v1/orgs/${orgId}`, {
|
||||||
|
method: "GET",
|
||||||
|
credentials: "include",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status === 401) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then((responseJson) => {
|
||||||
|
if (responseJson["success"] === false) {
|
||||||
|
toast(
|
||||||
|
"Failed getting your org. If this persists, please contact support.",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
responseJson.sync_features === undefined ||
|
||||||
|
responseJson.sync_features === null
|
||||||
|
) {
|
||||||
|
responseJson.sync_features = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
responseJson.lead_info !== undefined &&
|
||||||
|
responseJson.lead_info !== null
|
||||||
|
) {
|
||||||
|
var leads = [];
|
||||||
|
if (responseJson.lead_info.contacted) {
|
||||||
|
leads.push("contacted");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.customer) {
|
||||||
|
leads.push("customer");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.old_customer) {
|
||||||
|
leads.push("old customer");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.old_lead) {
|
||||||
|
leads.push("old lead");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.tech_partner) {
|
||||||
|
leads.push("tech partner");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.creator) {
|
||||||
|
leads.push("creator");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.opensource) {
|
||||||
|
leads.push("open source");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.demo_done) {
|
||||||
|
leads.push("demo done");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.pov) {
|
||||||
|
leads.push("pov");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.lead) {
|
||||||
|
leads.push("lead");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.student) {
|
||||||
|
leads.push("student");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.internal) {
|
||||||
|
leads.push("internal");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseJson.lead_info.sub_org) {
|
||||||
|
leads.push("sub_org");
|
||||||
|
}
|
||||||
|
|
||||||
|
setSelectedStatus(leads);
|
||||||
|
}
|
||||||
|
|
||||||
|
setSelectedOrganization(responseJson);
|
||||||
|
var lists = {
|
||||||
|
active: {
|
||||||
|
triggers: [],
|
||||||
|
features: [],
|
||||||
|
sync: [],
|
||||||
|
},
|
||||||
|
inactive: {
|
||||||
|
triggers: [],
|
||||||
|
features: [],
|
||||||
|
sync: [],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// FIXME: Set up features
|
||||||
|
//Object.keys(responseJson.sync_features).map(function(key, index) {
|
||||||
|
// //console.log(responseJson.sync_features[key])
|
||||||
|
//})
|
||||||
|
|
||||||
|
//setOrgName(responseJson.name)
|
||||||
|
//setOrgDescription(responseJson.description)
|
||||||
|
setOrganizationFeatures(lists);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.log("Error getting org: ", error);
|
||||||
|
toast("Error getting current organization");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEditOrg = (
|
||||||
|
name,
|
||||||
|
description,
|
||||||
|
orgId,
|
||||||
|
image,
|
||||||
|
defaults,
|
||||||
|
sso_config,
|
||||||
|
lead_info,
|
||||||
|
) => {
|
||||||
|
const data = {
|
||||||
|
name: name,
|
||||||
|
description: description,
|
||||||
|
org_id: orgId,
|
||||||
|
image: image,
|
||||||
|
defaults: defaults,
|
||||||
|
sso_config: sso_config,
|
||||||
|
lead_info: lead_info,
|
||||||
|
};
|
||||||
|
|
||||||
|
const url = globalUrl + `/api/v1/orgs/${selectedOrganization.id}`;
|
||||||
|
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) {
|
||||||
|
toast("Failed updating org: ", responseJson.reason);
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
lead_info === undefined ||
|
||||||
|
lead_info === null ||
|
||||||
|
lead_info === []
|
||||||
|
) {
|
||||||
|
toast("Successfully edited org!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.catch((error) => {
|
||||||
|
toast("Err: " + error.toString());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// useEffect(() => {
|
||||||
|
// handleGetOrg();
|
||||||
|
// }, []);
|
||||||
|
|
||||||
|
const handleStatusChange = (event) => {
|
||||||
|
const { value } = event.target;
|
||||||
|
setSelectedStatus(value);
|
||||||
|
|
||||||
|
handleEditOrg(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
selectedOrganization.id,
|
||||||
|
"",
|
||||||
|
{},
|
||||||
|
{},
|
||||||
|
value.length === 0 ? ["none"] : value,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (
|
||||||
|
selectedOrganization.id === undefined &&
|
||||||
|
userdata !== undefined &&
|
||||||
|
userdata.active_org !== undefined &&
|
||||||
|
orgRequest
|
||||||
|
) {
|
||||||
|
const orgId = userdata.active_org.id
|
||||||
|
console.log("orgID", orgId)
|
||||||
|
setOrgRequest(false);
|
||||||
|
handleGetOrg(orgId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div style={{ display: 'flex', justifyContent: 'center', paddingTop: 30 }}>
|
||||||
|
<AdminNavBar userdata={userdata} selectedStatus={selectedStatus} setSelectedStatus={setSelectedStatus} selectedTab={selectedTab} orgId={selectedOrganization.id} handleStatusChange={handleStatusChange} handleEditOrg={handleEditOrg} handleGetOrg={handleGetOrg} setSelectedOrganization={setSelectedOrganization} selectedOrganization={selectedOrganization} setNotifications={setNotifications} stripeKey={stripeKey} notifications={notifications} checkLogin={checkLogin} globalUrl={globalUrl} isCloud={isCloud} serverside={serverside} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Admin2;
|
||||||
@@ -422,7 +422,7 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
const [subworkflow, setSubworkflow] = React.useState({});
|
const [subworkflow, setSubworkflow] = React.useState({});
|
||||||
const [subworkflowStartnode, setSubworkflowStartnode] = React.useState("");
|
const [subworkflowStartnode, setSubworkflowStartnode] = React.useState("");
|
||||||
const [leftViewOpen, setLeftViewOpen] = React.useState(isMobile ? false : true);
|
const [leftViewOpen, setLeftViewOpen] = React.useState(isMobile ? false : true);
|
||||||
const [leftBarSize, setLeftBarSize] = React.useState(isMobile ? 0 : 325)
|
const [leftBarSize, setLeftBarSize] = React.useState(isMobile ? 0 : 265)
|
||||||
const [creatorProfile, setCreatorProfile] = React.useState({});
|
const [creatorProfile, setCreatorProfile] = React.useState({});
|
||||||
const [usecases, setUsecases] = React.useState([]);
|
const [usecases, setUsecases] = React.useState([]);
|
||||||
const [files, setFiles] = React.useState({
|
const [files, setFiles] = React.useState({
|
||||||
@@ -808,10 +808,9 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("Loaded workflow: ", workflow)
|
|
||||||
if (workflow.actions?.length == 1) {
|
if (workflow.actions?.length == 1) {
|
||||||
if (workflow.actions[0].app_id == "3e320a20966d33c9b7e6790b2705f0bf") {
|
if (workflow.actions[0].app_id == "3e320a20966d33c9b7e6790b2705f0bf") {
|
||||||
setWorkflowAsCode(true);
|
setWorkflowAsCode(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [workflow]);
|
}, [workflow]);
|
||||||
@@ -9042,8 +9041,8 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
|
|
||||||
const paperAppStyle = {
|
const paperAppStyle = {
|
||||||
borderRadius: theme.palette?.borderRadius,
|
borderRadius: theme.palette?.borderRadius,
|
||||||
minHeight: isMobile ? 50 : 70,
|
minHeight: isMobile ? 50 : 55,
|
||||||
maxHeight: isMobile ? 50 : 70,
|
maxHeight: isMobile ? 50 : 55,
|
||||||
minWidth: isMobile ? 50 : "100%",
|
minWidth: isMobile ? 50 : "100%",
|
||||||
maxWidth: isMobile ? 50 : "100%",
|
maxWidth: isMobile ? 50 : "100%",
|
||||||
marginTop: "5px",
|
marginTop: "5px",
|
||||||
@@ -10012,8 +10011,25 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
var runDelay = false
|
var runDelay = false
|
||||||
|
|
||||||
const ParsedAppPaper = (props) => {
|
const ParsedAppPaper = (props) => {
|
||||||
const app = props.app;
|
const app = props.app
|
||||||
|
const small = props.small
|
||||||
|
const actionString = props.action
|
||||||
const [hover, setHover] = React.useState(false);
|
const [hover, setHover] = React.useState(false);
|
||||||
|
|
||||||
|
if (app === undefined || app === null) {
|
||||||
|
return (
|
||||||
|
<img
|
||||||
|
style={{
|
||||||
|
pointerEvents: "none",
|
||||||
|
userDrag: "none",
|
||||||
|
userSelect: "none",
|
||||||
|
borderRadius: theme.palette?.borderRadius,
|
||||||
|
height: isMobile ? 40 : 55,
|
||||||
|
width: isMobile ? 40 : 55,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if (app.type !== "TRIGGER" && (app.id === "" || app.name === "")) {
|
if (app.type !== "TRIGGER" && (app.id === "" || app.name === "")) {
|
||||||
return null
|
return null
|
||||||
@@ -10028,6 +10044,30 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
|
|
||||||
newAppname = newAppname.replaceAll("_", " ")
|
newAppname = newAppname.replaceAll("_", " ")
|
||||||
|
|
||||||
|
if (actionString !== undefined && actionString !== null && actionString.length > 0 && app.actions !== undefined && app.actions !== null && app.actions.length > 0) {
|
||||||
|
// Find the action and make it the FIRST one in the list if possible
|
||||||
|
const foundAction = app.actions.findIndex((action) => action.name === actionString)
|
||||||
|
if (foundAction !== undefined && foundAction !== null && foundAction >= 0) {
|
||||||
|
// Move the action to the front
|
||||||
|
var action = app.actions[foundAction]
|
||||||
|
|
||||||
|
// Change the Large Image
|
||||||
|
const iconInfo = GetIconInfo(action)
|
||||||
|
const svg_pin = `<svg width="${svgSize}" height="${svgSize}" viewBox="0 -4 ${svgSize} ${svgSize+8}" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="${iconInfo.icon}" fill="${iconInfo.iconColor}"></path></svg>`;
|
||||||
|
const svgpin_Url = encodeURI("data:image/svg+xml;utf-8," + svg_pin);
|
||||||
|
app.large_image = svgpin_Url
|
||||||
|
app.fillGradient = iconInfo.fillGradient
|
||||||
|
app.fillstyle = "linear-gradient"
|
||||||
|
action.fillstyle = "linear-gradient"
|
||||||
|
action.fillGradient = iconInfo.fillGradient
|
||||||
|
action.iconBackground = iconInfo.iconBackgroundColor
|
||||||
|
|
||||||
|
// newSelectedAction.iconBackground = iconInfo.iconBackgroundColor;
|
||||||
|
app.actions.splice(foundAction, 1)
|
||||||
|
app.actions.unshift(action)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (app.large_image === undefined || app.large_image === null || app.large_image === "") {
|
if (app.large_image === undefined || app.large_image === null || app.large_image === "") {
|
||||||
app.large_image = theme.palette.defaultImage
|
app.large_image = theme.palette.defaultImage
|
||||||
}
|
}
|
||||||
@@ -10051,21 +10091,29 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
newAppStyle.borderLeft = `${pixelSize} solid ${yellow}`;
|
newAppStyle.borderLeft = `${pixelSize} solid ${yellow}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (small === true) {
|
||||||
|
newAppStyle.width = 55
|
||||||
|
newAppStyle.minWidth = newAppStyle.width
|
||||||
|
newAppStyle.maxWidth = newAppStyle.width
|
||||||
|
|
||||||
|
// Transparent background on paper
|
||||||
|
newAppStyle.backgroundColor = "transparent"
|
||||||
|
newAppStyle.border = hover ? "1px solid " + theme?.palette.main : "1px solid transparent"
|
||||||
|
|
||||||
|
// If action is set, look for the icon of it with the normal setup
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Draggable
|
<Draggable
|
||||||
onDrag={(e) => {
|
onDrag={(e) => {
|
||||||
handleAppDrag(e, app);
|
handleAppDrag(e, app)
|
||||||
}}
|
}}
|
||||||
onStop={(e) => {
|
onStop={(e) => {
|
||||||
handleDragStop(e, app);
|
handleDragStop(e, app)
|
||||||
}}
|
}}
|
||||||
key={app.id}
|
key={app.id}
|
||||||
dragging={false}
|
|
||||||
position={{
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
|
<Tooltip title={(actionString?.replaceAll("_", " "))} placement="top" disabled={small !== true}>
|
||||||
<Paper
|
<Paper
|
||||||
square
|
square
|
||||||
style={newAppStyle}
|
style={newAppStyle}
|
||||||
@@ -10174,7 +10222,7 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
>
|
>
|
||||||
<Grid
|
<Grid
|
||||||
container
|
container
|
||||||
style={{ margin: "7px 10px 10px 10px", flex: "10" }}
|
style={{ display: "flex", margin: 5, flex: "10" }}
|
||||||
>
|
>
|
||||||
<Grid item>
|
<Grid item>
|
||||||
<img
|
<img
|
||||||
@@ -10196,12 +10244,14 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
userDrag: "none",
|
userDrag: "none",
|
||||||
userSelect: "none",
|
userSelect: "none",
|
||||||
borderRadius: theme.palette?.borderRadius,
|
borderRadius: theme.palette?.borderRadius,
|
||||||
height: isMobile ? 40 : 55,
|
height: isMobile ? 40 : 45,
|
||||||
width: isMobile ? 40 : 55,
|
width: isMobile ? 40 : 45,
|
||||||
|
|
||||||
|
background: `linear-gradient(to right, ${app.fillGradient})`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
{isMobile ? null :
|
{isMobile || small === true ? null :
|
||||||
<Grid
|
<Grid
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
@@ -10216,11 +10266,11 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
<Grid item style={{ flex: 1 }}>
|
<Grid item style={{ flex: 1 }}>
|
||||||
<Typography
|
<Typography
|
||||||
variant="body1"
|
variant="body1"
|
||||||
|
color="textSecondary"
|
||||||
style={{
|
style={{
|
||||||
marginBottom: 0,
|
marginBottom: 0,
|
||||||
marginLeft: 5,
|
marginLeft: 5,
|
||||||
marginTop: newAppname.length > 20 ? -1 : 12,
|
marginTop: newAppname.length > 20 ? -1 : 12,
|
||||||
fontSize: 19,
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{newAppname}
|
{newAppname}
|
||||||
@@ -10230,6 +10280,7 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
}
|
}
|
||||||
</Grid>
|
</Grid>
|
||||||
</Paper>
|
</Paper>
|
||||||
|
</Tooltip>
|
||||||
</Draggable>
|
</Draggable>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -10512,6 +10563,8 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
const CustomSearchBox = connectSearchBox(SearchBox)
|
const CustomSearchBox = connectSearchBox(SearchBox)
|
||||||
const CustomAppHits = connectHits(AppHits)
|
const CustomAppHits = connectHits(AppHits)
|
||||||
|
|
||||||
|
var shuffleToolsApp = apps.find((app) => app.name === "Shuffle Tools")
|
||||||
|
|
||||||
var viewedApps = []
|
var viewedApps = []
|
||||||
return (
|
return (
|
||||||
<div style={appViewStyle}>
|
<div style={appViewStyle}>
|
||||||
@@ -10522,12 +10575,14 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
borderRadius: theme.palette?.borderRadius,
|
borderRadius: theme.palette?.borderRadius,
|
||||||
marginTop: 5,
|
marginTop: 5,
|
||||||
marginRight: 10,
|
marginRight: 10,
|
||||||
|
height: 40,
|
||||||
}}
|
}}
|
||||||
InputProps={{
|
InputProps={{
|
||||||
style: {
|
style: {
|
||||||
|
height: 40,
|
||||||
},
|
},
|
||||||
endAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="end">
|
<InputAdornment position="start">
|
||||||
<Tooltip title="Run search" placement="top">
|
<Tooltip title="Run search" placement="top">
|
||||||
<SearchIcon style={{ cursor: "pointer" }} />
|
<SearchIcon style={{ cursor: "pointer" }} />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
@@ -10536,7 +10591,7 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
}}
|
}}
|
||||||
fullWidth
|
fullWidth
|
||||||
color="primary"
|
color="primary"
|
||||||
placeholder={"Search Active Apps"}
|
placeholder={"Search apps"}
|
||||||
id="appsearch"
|
id="appsearch"
|
||||||
onKeyPress={(event) => {
|
onKeyPress={(event) => {
|
||||||
if (event.key === "Enter") {
|
if (event.key === "Enter") {
|
||||||
@@ -10547,12 +10602,63 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
runSearch(event.target.value)
|
runSearch(event.target.value)
|
||||||
}}
|
}}
|
||||||
onBlur={(event) => {
|
onBlur={(event) => {
|
||||||
|
|
||||||
//navigate(`?q=${event.target.value}`)
|
//navigate(`?q=${event.target.value}`)
|
||||||
|
|
||||||
//runSearch(event.target.value)
|
//runSearch(event.target.value)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{shuffleToolsApp !== undefined && shuffleToolsApp !== null ?
|
||||||
|
<div style={{marginBottom: 25, }}>
|
||||||
|
<Typography variant="body1" color="textSecondary" style={{marginTop: 20, marginLeft: 5, }}>
|
||||||
|
Popular Actions
|
||||||
|
</Typography>
|
||||||
|
<div style={{
|
||||||
|
display: "flex",
|
||||||
|
}}>
|
||||||
|
<ParsedAppPaper small={true} action={"repeat_back_to_me"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
<div style={{marginLeft: 5, }}/>
|
||||||
|
<ParsedAppPaper small={true} action={"filter_list"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
<div style={{marginLeft: 5, }}/>
|
||||||
|
<ParsedAppPaper small={true} action={"execute_python"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
<div style={{marginLeft: 5, }}/>
|
||||||
|
<ParsedAppPaper small={true} action={"parse_ioc"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
</div>
|
||||||
|
<div style={{
|
||||||
|
display: "flex",
|
||||||
|
}}>
|
||||||
|
<ParsedAppPaper small={true} action={"set_cache_value"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
<div style={{marginLeft: 5, }}/>
|
||||||
|
<ParsedAppPaper small={true} action={"get_file_meta"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
<div style={{marginLeft: 5, }}/>
|
||||||
|
<ParsedAppPaper small={true} action={"merge_lists"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
<div style={{marginLeft: 5, }}/>
|
||||||
|
<ParsedAppPaper small={true} action={"send_sms_shuffle"} app={JSON.parse(JSON.stringify(shuffleToolsApp))} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
: null}
|
||||||
|
|
||||||
|
<div style={{marginBottom: 25, }}>
|
||||||
|
<Typography variant="body1" color="textSecondary" style={{marginTop: 20, marginLeft: 5, }}>
|
||||||
|
Triggers
|
||||||
|
</Typography>
|
||||||
|
<div style={{
|
||||||
|
display: "flex",
|
||||||
|
}}>
|
||||||
|
{triggers.map((trigger, index) => {
|
||||||
|
return(
|
||||||
|
<span>
|
||||||
|
<ParsedAppPaper small={true} action={"trigger"} app={JSON.parse(JSON.stringify(trigger))} />
|
||||||
|
{index !== triggers.length - 1 ? <div style={{marginLeft: 5, }}/> : null}
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Typography variant="body1" color="textSecondary" style={{marginTop: 20, marginLeft: 5, }}>
|
||||||
|
Your Apps
|
||||||
|
</Typography>
|
||||||
{visibleApps.length > extraApps.length ? (
|
{visibleApps.length > extraApps.length ? (
|
||||||
<div style={appScrollStyle}>
|
<div style={appScrollStyle}>
|
||||||
{visibleApps.map((app, index) => {
|
{visibleApps.map((app, index) => {
|
||||||
@@ -10806,11 +10912,7 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
newSelectedAction.large_image = svgpin_Url;
|
newSelectedAction.large_image = svgpin_Url;
|
||||||
newSelectedAction.fillGradient = iconInfo.fillGradient;
|
newSelectedAction.fillGradient = iconInfo.fillGradient;
|
||||||
newSelectedAction.fillstyle = "solid";
|
newSelectedAction.fillstyle = "solid";
|
||||||
if (
|
if (newSelectedAction.fillGradient !== undefined && newSelectedAction.fillGradient !== null && newSelectedAction.fillGradient.length > 0) {
|
||||||
newSelectedAction.fillGradient !== undefined &&
|
|
||||||
newSelectedAction.fillGradient !== null &&
|
|
||||||
newSelectedAction.fillGradient.length > 0
|
|
||||||
) {
|
|
||||||
newSelectedAction.fillstyle = "linear-gradient";
|
newSelectedAction.fillstyle = "linear-gradient";
|
||||||
} else {
|
} else {
|
||||||
newSelectedAction.iconBackground = iconInfo.iconBackgroundColor;
|
newSelectedAction.iconBackground = iconInfo.iconBackgroundColor;
|
||||||
@@ -16012,24 +16114,20 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
zIndex: 10,
|
zIndex: 10,
|
||||||
transform: isMobile
|
transform: isMobile
|
||||||
? `translateX(20px)`
|
? `translateX(20px)`
|
||||||
: `translateX(280px)`,
|
: `translateX(${leftBarSize}px)`,
|
||||||
top: isMobile ? appBarSize + 55 : undefined,
|
top: isMobile ? appBarSize + 55 : undefined,
|
||||||
bottom: isMobile ? undefined : 0,
|
bottom: isMobile ? undefined : 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
const topBarStyle = {
|
const topBarStyle = {
|
||||||
position: "fixed",
|
position: "absolute",
|
||||||
top: isMobile ? 30 : 35,
|
|
||||||
pointerEvents: "none",
|
|
||||||
transition: "transform 0.3s ease",
|
|
||||||
transform: isMobile
|
|
||||||
? `translateX(20px)`
|
|
||||||
: `translateX(${leftSideBarOpenByClick ? 340 : 330}px)`
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
top: isMobile ? 30 : 25,
|
||||||
|
left: isMobile ? 20 : leftSideBarOpenByClick ? leftBarSize + 275 : leftBarSize+100,
|
||||||
|
|
||||||
|
transition: "left 0.3s ease",
|
||||||
|
maxWidth: 500,
|
||||||
|
}
|
||||||
|
|
||||||
const TopCytoscapeBar = (props) => {
|
const TopCytoscapeBar = (props) => {
|
||||||
if (workflow.public === true) {
|
if (workflow.public === true) {
|
||||||
@@ -16046,37 +16144,13 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
<div style={topBarStyle}>
|
<div style={topBarStyle}>
|
||||||
<div style={{
|
<div style={{
|
||||||
margin: "0px 10px 0px 35px",
|
margin: "0px 10px 0px 35px",
|
||||||
pointerEvents: "none",
|
maxWidth: 500,
|
||||||
}}>
|
}}>
|
||||||
<Breadcrumbs
|
<Typography variant="h6" style={{
|
||||||
aria-label="breadcrumb"
|
margin: 0,
|
||||||
separator="›"
|
}}>
|
||||||
style={{
|
{workflow.name}
|
||||||
color: "white",
|
</Typography>
|
||||||
pointerEvents: "auto",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{/*
|
|
||||||
<Link
|
|
||||||
to="/workflows"
|
|
||||||
style={{ textDecoration: "none", color: "inherit" }}
|
|
||||||
>
|
|
||||||
<h2
|
|
||||||
style={{
|
|
||||||
color: "rgba(255,255,255,0.5)",
|
|
||||||
margin: "0px 0px 0px 0px",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<PolylineIcon style={{ marginRight: 10 }} />
|
|
||||||
Workflows
|
|
||||||
</h2>
|
|
||||||
</Link>
|
|
||||||
*/}
|
|
||||||
<h2 style={{
|
|
||||||
margin: 0,
|
|
||||||
pointerEvents: "none",
|
|
||||||
}}>{workflow.name}</h2>
|
|
||||||
</Breadcrumbs>
|
|
||||||
{workflowAsCode && (
|
{workflowAsCode && (
|
||||||
<Tooltip title="Switch to Code View">
|
<Tooltip title="Switch to Code View">
|
||||||
<Button
|
<Button
|
||||||
@@ -16776,7 +16850,8 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
border: "1px solid rgba(255,255,255,0.1)",
|
border: "1px solid rgba(255,255,255,0.1)",
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
bottom: 100,
|
bottom: 100,
|
||||||
left: leftSideBarOpenByClick ? 630 : 445,
|
left: leftSideBarOpenByClick ? leftBarSize+300 : leftBarSize+115,
|
||||||
|
|
||||||
color: "white",
|
color: "white",
|
||||||
padding: 10,
|
padding: 10,
|
||||||
borderRadius: theme.palette?.borderRadius,
|
borderRadius: theme.palette?.borderRadius,
|
||||||
@@ -17140,7 +17215,8 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
style={{
|
style={{
|
||||||
marginLeft: 0,
|
marginLeft: 0,
|
||||||
marginTop: isMobile ? 5 : 0,
|
marginTop: isMobile ? 5 : 0,
|
||||||
left: isMobile ? -10 : boxSize,
|
left: isMobile ? -10 : 0,
|
||||||
|
|
||||||
top: isMobile ? boxSize : undefined,
|
top: isMobile ? boxSize : undefined,
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
@@ -20394,7 +20470,7 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
const newView = (
|
const newView = (
|
||||||
<div style={{ color: "white", marginLeft: leftSideBarOpenByClick ? 280 : 100, transition: "margin-left 0.3s ease", }}>
|
<div style={{ color: "white", marginLeft: leftSideBarOpenByClick ? 280 : 100, transition: "margin-left 0.3s ease", }}>
|
||||||
<div
|
<div
|
||||||
style={{ display: "flex", borderTop: "1px solid rgba(91, 96, 100, 1)" }}
|
style={{ display: "flex", borderTop: "0px solid rgba(91, 96, 100, 1)" }}
|
||||||
>
|
>
|
||||||
{/*isMobile ? null : leftView*/}
|
{/*isMobile ? null : leftView*/}
|
||||||
{leftView}
|
{leftView}
|
||||||
@@ -20429,7 +20505,7 @@ const releaseToConnectLabel = "Release to Connect"
|
|||||||
wheelSensitivity={0.25}
|
wheelSensitivity={0.25}
|
||||||
style={{
|
style={{
|
||||||
width: cytoscapeWidth,
|
width: cytoscapeWidth,
|
||||||
height: bodyHeight - 20,
|
height: bodyHeight - 5,
|
||||||
backgroundColor: theme.palette.surfaceColor,
|
backgroundColor: theme.palette.surfaceColor,
|
||||||
}}
|
}}
|
||||||
stylesheet={cystyle}
|
stylesheet={cystyle}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ import {
|
|||||||
Edit as EditIcon,
|
Edit as EditIcon,
|
||||||
MoreVert as MoreVertIcon,
|
MoreVert as MoreVertIcon,
|
||||||
PlayArrow as PlayArrowIcon,
|
PlayArrow as PlayArrowIcon,
|
||||||
|
Code as CodeIcon,
|
||||||
Add as AddIcon,
|
Add as AddIcon,
|
||||||
Publish as PublishIcon,
|
Publish as PublishIcon,
|
||||||
CloudUpload as CloudUploadIcon,
|
CloudUpload as CloudUploadIcon,
|
||||||
@@ -175,6 +176,7 @@ export const GetIconInfo = (action) => {
|
|||||||
key: "repeat",
|
key: "repeat",
|
||||||
values: ["repeat", "retry", "pause", "skip", "copy", "replicat", "demo",],
|
values: ["repeat", "retry", "pause", "skip", "copy", "replicat", "demo",],
|
||||||
},
|
},
|
||||||
|
{ key: "code", values: ["code", "bash", "python", "react", "go"] },
|
||||||
{ key: "execute", values: ["execute", "run", "play", "raise"] },
|
{ key: "execute", values: ["execute", "run", "play", "raise"] },
|
||||||
{ key: "extract", values: ["extract", "unpack", "decompress", "open"] },
|
{ key: "extract", values: ["extract", "unpack", "decompress", "open"] },
|
||||||
{ key: "inflate", values: ["inflate", "pack", "compress"] },
|
{ key: "inflate", values: ["inflate", "pack", "compress"] },
|
||||||
@@ -320,6 +322,13 @@ export const GetIconInfo = (action) => {
|
|||||||
iconBackgroundColor: defaultColor,
|
iconBackgroundColor: defaultColor,
|
||||||
originalIcon: <TocIcon />,
|
originalIcon: <TocIcon />,
|
||||||
},
|
},
|
||||||
|
code: {
|
||||||
|
icon: "M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z",
|
||||||
|
iconColor: "white",
|
||||||
|
iconBackgroundColor: defaultColor,
|
||||||
|
originalIcon: <CodeIcon />,
|
||||||
|
fillGradient: ["#836ef5", "#3335eb"],
|
||||||
|
},
|
||||||
execute: {
|
execute: {
|
||||||
icon: "M8 5v14l11-7z",
|
icon: "M8 5v14l11-7z",
|
||||||
iconColor: "white",
|
iconColor: "white",
|
||||||
|
|||||||
Reference in New Issue
Block a user