Biiig changes for 2.0 :))
This commit is contained in:
@@ -43,6 +43,7 @@ import {
|
||||
Lock as LockIcon,
|
||||
LockOpen as LockOpenIcon,
|
||||
OpenInNew as OpenInNewIcon,
|
||||
Edit as EditIcon,
|
||||
} from '@mui/icons-material';
|
||||
|
||||
const hrefStyle = {
|
||||
@@ -50,20 +51,13 @@ const hrefStyle = {
|
||||
textDecoration: "none"
|
||||
}
|
||||
|
||||
const bodyDivStyle = {
|
||||
margin: "auto",
|
||||
width: isMobile? "100%":"500px",
|
||||
position: "relative",
|
||||
|
||||
paddingBottom: 250,
|
||||
}
|
||||
|
||||
|
||||
const RunWorkflow = (defaultprops) => {
|
||||
const { globalUrl, userdata, isLoaded, isLoggedIn, setIsLoggedIn, setCookie, register, serverside } = defaultprops;
|
||||
|
||||
let navigate = useNavigate();
|
||||
const [_, setUpdate] = useState(""); // Used to force rendring, don't remove
|
||||
const [explorerUi, setExplorerUi] = useState(false)
|
||||
const [message, setMessage] = useState("");
|
||||
const [workflow, setWorkflow] = React.useState({});
|
||||
const [executionRequest, setExecutionRequest] = React.useState({});
|
||||
@@ -80,6 +74,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
const [sharingOpen, setSharingOpen] = React.useState(false)
|
||||
const [realtimeMarkdown, setRealtimeMarkdown] = React.useState("")
|
||||
const [forms, setForms] = React.useState([])
|
||||
const [boxWidth, setBoxWidth] = React.useState(500)
|
||||
|
||||
const IframeWrapper = (props) => {
|
||||
var propsCopy = JSON.parse(JSON.stringify(props))
|
||||
@@ -94,11 +89,21 @@ const RunWorkflow = (defaultprops) => {
|
||||
if (propsCopy.width === undefined || propsCopy.width === null) {
|
||||
propsCopy.width = 400
|
||||
propsCopy.height = "auto"
|
||||
|
||||
propsCopy.margin = "auto"
|
||||
}
|
||||
|
||||
return Img(propsCopy)
|
||||
}
|
||||
|
||||
const bodyDivStyle = {
|
||||
margin: "auto",
|
||||
width: isMobile? "100%" : boxWidth,
|
||||
position: "relative",
|
||||
|
||||
paddingBottom: 250,
|
||||
}
|
||||
|
||||
const boxStyle = {
|
||||
color: "white",
|
||||
padding: "25px 50px 50px 50px",
|
||||
@@ -112,7 +117,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
props.match = {}
|
||||
props.match.params = params
|
||||
|
||||
const defaultTitle = workflow.name !== undefined ? workflow.name : "Run Workflow"
|
||||
const defaultTitle = workflow.name !== undefined ? "Shuffle - Form for " + workflow.name : "Shuffle - Form to Run Workflows"
|
||||
if (document != undefined && document.title != defaultTitle) {
|
||||
document.title = defaultTitle
|
||||
}
|
||||
@@ -446,18 +451,6 @@ const RunWorkflow = (defaultprops) => {
|
||||
})
|
||||
}
|
||||
|
||||
/*
|
||||
useEffect(() => {
|
||||
if (executionRequest === undefined || executionRequest === null || executionRequest.execution_id === undefined || executionRequest.execution_id === null || executionRequest.execution_id.length === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
if (executionRequest.start === true) {
|
||||
start()
|
||||
}
|
||||
}, [executionRequest])
|
||||
*/
|
||||
|
||||
const { start, stop } = useInterval({
|
||||
duration: 1500,
|
||||
startImmediate: true,
|
||||
@@ -520,8 +513,8 @@ const RunWorkflow = (defaultprops) => {
|
||||
if (realtimeMarkdown !== undefined && realtimeMarkdown !== null && realtimeMarkdown.length > 0) {
|
||||
const newmarkdown = realtimeMarkdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
setRealtimeMarkdown(newmarkdown)
|
||||
} else if (inputWorkflow.input_markdown !== undefined && inputWorkflow.input_markdown !== null && inputWorkflow.input_markdown.length > 0) {
|
||||
const newmarkdown = inputWorkflow.input_markdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
} else if (inputWorkflow.form_control.input_markdown !== undefined && inputWorkflow.form_control.input_markdown !== null && inputWorkflow.form_control.input_markdown.length > 0) {
|
||||
const newmarkdown = inputWorkflow.form_control.input_markdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
setRealtimeMarkdown(newmarkdown)
|
||||
}
|
||||
}
|
||||
@@ -531,10 +524,10 @@ const RunWorkflow = (defaultprops) => {
|
||||
console.log("Get workflow error: ", error.toString())
|
||||
|
||||
if (realtimeMarkdown !== undefined && realtimeMarkdown !== null && realtimeMarkdown.length > 0) {
|
||||
const newmarkdown = inputWorkflow.input_markdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
const newmarkdown = inputWorkflow.form_control.input_markdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
setRealtimeMarkdown(newmarkdown)
|
||||
} else if (inputWorkflow.input_markdown !== undefined && inputWorkflow.input_markdown !== null && inputWorkflow.input_markdown.length > 0) {
|
||||
const newmarkdown = inputWorkflow.input_markdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
} else if (inputWorkflow.form_control.input_markdown !== undefined && inputWorkflow.form_control.input_markdown !== null && inputWorkflow.form_control.input_markdown.length > 0) {
|
||||
const newmarkdown = inputWorkflow.form_control.input_markdown.replace(`{{ ${workflow_id} }}`, "", -1)
|
||||
setRealtimeMarkdown(newmarkdown)
|
||||
}
|
||||
})
|
||||
@@ -642,10 +635,10 @@ const RunWorkflow = (defaultprops) => {
|
||||
}
|
||||
}
|
||||
|
||||
if (responseJson.input_markdown !== undefined && responseJson.input_markdown !== null && responseJson.input_markdown.length > 0) {
|
||||
if (responseJson.form_control.input_markdown !== undefined && responseJson.form_control.input_markdown !== null && responseJson.form_control.input_markdown.length > 0) {
|
||||
// Look for {{ uuid }} format, and try to run that workflow with their account
|
||||
// This is a hack, but a fun one.
|
||||
var newmarkdown = responseJson.input_markdown.replace("", "")
|
||||
var newmarkdown = responseJson.form_control.input_markdown.replace("", "")
|
||||
|
||||
const uuidRegex = /{{\s[a-f0-9-]+\s}}/g
|
||||
const found = newmarkdown.match(uuidRegex)
|
||||
@@ -697,7 +690,21 @@ const RunWorkflow = (defaultprops) => {
|
||||
handleExecutionLoader()
|
||||
|
||||
handleGetOrg(responseJson.org_id)
|
||||
setWorkflow(responseJson);
|
||||
|
||||
if (responseJson.form_control === undefined || responseJson.form_control === null) {
|
||||
responseJson.form_control = {
|
||||
"input_markdown": "",
|
||||
"output_yields": [],
|
||||
"form_width": 500,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (responseJson.form_control.form_width !== undefined && responseJson.form_control.form_width !== null && responseJson.form_control.form_width > 300) {
|
||||
setBoxWidth(responseJson.form_control.form_width)
|
||||
}
|
||||
|
||||
setWorkflow(responseJson)
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log("Get workflow error: ", error.toString());
|
||||
@@ -723,7 +730,6 @@ const RunWorkflow = (defaultprops) => {
|
||||
if (responseJson.result.startsWith("[") && responseJson.result.endsWith("]")) {
|
||||
try {
|
||||
responseJson.result = JSON.parse(responseJson.result).length
|
||||
console.log("Set length to: ", responseJson.result)
|
||||
} catch (e) {
|
||||
console.log("Error parsing length: ", e)
|
||||
}
|
||||
@@ -875,8 +881,8 @@ const RunWorkflow = (defaultprops) => {
|
||||
const newmarkdown = realtimeMarkdown.replace(`{{ ${responseJson.workflow.id} }}`, responseJson.result, -1)
|
||||
setRealtimeMarkdown(newmarkdown)
|
||||
|
||||
} else if (workflow.input_markdown !== undefined && workflow.input_markdown !== null && workflow.input_markdown.length > 0) {
|
||||
const newmarkdown = workflow.input_markdown.replace(`{{ ${responseJson.workflow.id} }}`, responseJson.result, -1)
|
||||
} else if (workflow.form_control.input_markdown !== undefined && workflow.form_control.input_markdown !== null && workflow.form_control.input_markdown.length > 0) {
|
||||
const newmarkdown = workflow.form_control.input_markdown.replace(`{{ ${responseJson.workflow.id} }}`, responseJson.result, -1)
|
||||
setRealtimeMarkdown(newmarkdown)
|
||||
}
|
||||
|
||||
@@ -904,6 +910,17 @@ const RunWorkflow = (defaultprops) => {
|
||||
return
|
||||
}
|
||||
|
||||
if (props.match.params.key === undefined) {
|
||||
setExplorerUi(true)
|
||||
|
||||
if (isLoggedIn) {
|
||||
loadForms(userdata.active_org.id)
|
||||
handleGetOrg(userdata.active_org.id)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
getWorkflow(props.match.params.key, sourceNode)
|
||||
if (execution_id !== undefined && execution_id !== null && authorization !== undefined && authorization !== null) {
|
||||
console.log("Get execution: ", execution_id)
|
||||
@@ -915,7 +932,6 @@ const RunWorkflow = (defaultprops) => {
|
||||
}
|
||||
}, [isLoaded])
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (executionData === undefined || executionData === null || executionData === {}) {
|
||||
return
|
||||
@@ -995,20 +1011,69 @@ const RunWorkflow = (defaultprops) => {
|
||||
}
|
||||
}
|
||||
|
||||
const FormList = () => {
|
||||
return (
|
||||
<div>
|
||||
{forms.map((form, formIndex) => {
|
||||
if (form.id === undefined || form.id === null) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<div key={formIndex} style={{marginBottom: 10, }}>
|
||||
<RecentWorkflow
|
||||
workflow={form}
|
||||
onclickHandler={() => {
|
||||
navigate(`/forms/${form.id}`)
|
||||
getWorkflow(form.id, sourceNode)
|
||||
setExplorerUi(false)
|
||||
}}
|
||||
currentWorkflowId={workflow.id}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
const ExplorerUi = () => {
|
||||
return (
|
||||
<div style={{paddingTop: 50, marginTop: 50, width: 250, itemAlign: "center", textAlign: "center", margin: "auto", }}>
|
||||
|
||||
{forms !== undefined && forms !== null && forms.length > 0 ?
|
||||
<div>
|
||||
<Typography variant="h6" style={{marginBottom: 20, }}>
|
||||
Available forms
|
||||
</Typography>
|
||||
<FormList />
|
||||
</div>
|
||||
:
|
||||
<Typography variant="h6" style={{marginTop: 100, marginBottom: 20, }}>
|
||||
No Form Found
|
||||
</Typography>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
var validResults = 0
|
||||
const basedata =
|
||||
<div style={bodyDivStyle}>
|
||||
<Paper style={boxStyle}>
|
||||
{workflow.id === undefined || workflow.id === null ?
|
||||
{explorerUi === true ?
|
||||
<ExplorerUi />
|
||||
:
|
||||
workflow.id === undefined || workflow.id === null ?
|
||||
<div style={{paddingTop: 150, marginTop: 150, width: 250, itemAlign: "center", textAlign: "center", margin: "auto", }}>
|
||||
<CircularProgress />
|
||||
<Typography variant="body1" style={{marginTop: 20, }}>
|
||||
Loding Form Details...
|
||||
Loading Form Details...
|
||||
</Typography>
|
||||
</div>
|
||||
:
|
||||
<div>
|
||||
{workflow.input_markdown !== undefined && workflow.input_markdown !== null && workflow.input_markdown.length > 0 ?
|
||||
{workflow.form_control.input_markdown !== undefined && workflow.form_control.input_markdown !== null && workflow.form_control.input_markdown.length > 0 ?
|
||||
<div style={{marginBottom: 20, }}>
|
||||
<Markdown
|
||||
components={{
|
||||
@@ -1024,13 +1089,13 @@ const RunWorkflow = (defaultprops) => {
|
||||
}}
|
||||
rehypePlugins={[rehypeRaw]}
|
||||
>
|
||||
{realtimeMarkdown !== undefined && realtimeMarkdown !== null && realtimeMarkdown.length > 0 ? realtimeMarkdown : workflow.input_markdown}
|
||||
{realtimeMarkdown !== undefined && realtimeMarkdown !== null && realtimeMarkdown.length > 0 ? realtimeMarkdown : workflow.form_control.input_markdown}
|
||||
</Markdown>
|
||||
</div>
|
||||
: null}
|
||||
|
||||
<form onSubmit={(e) => {onSubmit(e)}} style={{margin: "25px 0px 15px 0px",}}>
|
||||
{workflow.input_markdown !== undefined && workflow.input_markdown !== null && workflow.input_markdown.length > 0 ? null :
|
||||
{workflow.form_control.input_markdown !== undefined && workflow.form_control.input_markdown !== null && workflow.form_control.input_markdown.length > 0 ? null :
|
||||
<div>
|
||||
<img
|
||||
alt={workflow.name}
|
||||
@@ -1066,7 +1131,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
<div style={{
|
||||
backgroundColor: theme.palette.inputColor,
|
||||
padding: 20,
|
||||
borderRadius: theme.palette.borderRadius,
|
||||
borderRadius: theme.palette?.borderRadius,
|
||||
marginBottom: 35,
|
||||
marginTop: 30,
|
||||
}}>
|
||||
@@ -1258,9 +1323,9 @@ const RunWorkflow = (defaultprops) => {
|
||||
}
|
||||
|
||||
|
||||
{workflow.output_yields !== undefined && workflow.output_yields !== null && workflow.output_yields.length > 0 ?
|
||||
{workflow.form_control.output_yields !== undefined && workflow.form_control.output_yields !== null && workflow.form_control.output_yields.length > 0 ?
|
||||
<div style={{marginTop: 20, }}>
|
||||
{workflow.output_yields.map((yieldItem, index) => {
|
||||
{workflow.form_control.output_yields.map((yieldItem, index) => {
|
||||
if (executionData.results === undefined || executionData.results === null || executionData.results.length === 0) {
|
||||
return null
|
||||
}
|
||||
@@ -1329,7 +1394,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
}
|
||||
</Paper>
|
||||
<Typography variant="body2" color="textSecondary" align="center" style={{marginTop: 10, }} >
|
||||
Forms are in Beta. Form submissions data includes your Organization's unique ID while logged in, or a unique identifier for your browser otherwise. Your input will be automatically sanitized.
|
||||
Forms are in Beta. Form submission data includes your Organization's unique ID while logged in, or a unique identifier for your browser otherwise. Your input will be automatically sanitized.
|
||||
</Typography>
|
||||
</div>
|
||||
|
||||
@@ -1350,6 +1415,8 @@ const RunWorkflow = (defaultprops) => {
|
||||
|
||||
expanded={true}
|
||||
setRealtimeMarkdown={setRealtimeMarkdown}
|
||||
boxWidth={boxWidth}
|
||||
setBoxWidth={setBoxWidth}
|
||||
scrollTo={"form_fill"}
|
||||
/>
|
||||
: null}
|
||||
@@ -1367,7 +1434,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
minHeight: 400,
|
||||
maxHeight: 400,
|
||||
padding: 25,
|
||||
borderRadius: theme.palette.borderRadius,
|
||||
borderRadius: theme.palette?.borderRadius,
|
||||
//minWidth: isMobile ? "90%" : newWorkflow === true ? 1000 : 550,
|
||||
//maxWidth: isMobile ? "90%" : newWorkflow === true ? 1000 : 550,
|
||||
},
|
||||
@@ -1462,7 +1529,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
setEditWorkflowModalOpen(true)
|
||||
}}
|
||||
>
|
||||
Edit Details
|
||||
<EditIcon style={{marginRight: 5, }} /> Edit Form
|
||||
</Button>
|
||||
</div>
|
||||
: null}
|
||||
@@ -1476,7 +1543,8 @@ const RunWorkflow = (defaultprops) => {
|
||||
|
||||
// Check width
|
||||
const overlap = window !== undefined && window.innerWidth !== undefined && window.innerWidth < 1300
|
||||
const formSidebar = !isLoaded || overlap || !(forms !== undefined && forms !== null && forms.length > 1) ? null :
|
||||
|
||||
const formSidebar = explorerUi === true || !isLoaded || overlap || !(forms !== undefined && forms !== null && forms.length > 1) ? null :
|
||||
<div style={{
|
||||
minWidth: 215,
|
||||
maxWidth: 215,
|
||||
@@ -1485,10 +1553,10 @@ const RunWorkflow = (defaultprops) => {
|
||||
minHeight: 500,
|
||||
maxHeight: 500,
|
||||
position: "absolute",
|
||||
left: 100,
|
||||
left: 150,
|
||||
top: 0,
|
||||
border: "1px solid rgba(255,255,255,0.3)",
|
||||
borderRadius: theme.palette.borderRadius,
|
||||
borderRadius: theme.palette?.borderRadius,
|
||||
|
||||
padding: 25,
|
||||
|
||||
@@ -1497,7 +1565,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
}}>
|
||||
{selectedOrganization !== undefined && selectedOrganization !== null ?
|
||||
<div style={{display: "flex", marginBottom: 20, }}>
|
||||
<img src={selectedOrganization.image} style={{width: 40, height: 40, borderRadius: theme.palette.borderRadius, }} />
|
||||
<img src={selectedOrganization.image} style={{width: 40, height: 40, borderRadius: theme.palette?.borderRadius, }} />
|
||||
<Typography variant="body1" style={{marginTop: 7, marginLeft: 10, }}>
|
||||
{selectedOrganization.name}
|
||||
</Typography>
|
||||
@@ -1506,41 +1574,7 @@ const RunWorkflow = (defaultprops) => {
|
||||
: null}
|
||||
|
||||
{forms !== undefined && forms !== null && forms.length > 0 ?
|
||||
<div>
|
||||
{forms.map((form, formIndex) => {
|
||||
if (form.id === undefined || form.id === null) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<div key={formIndex} style={{marginBottom: 10, }}>
|
||||
<RecentWorkflow
|
||||
workflow={form}
|
||||
onclickHandler={() => {
|
||||
navigate(`/forms/${form.id}`)
|
||||
getWorkflow(form.id, sourceNode)
|
||||
}}
|
||||
currentWorkflowId={workflow.id}
|
||||
/>
|
||||
|
||||
{/*
|
||||
<Button
|
||||
variant="outlined"
|
||||
color="primary"
|
||||
fullWidth
|
||||
style={{textTransform: "none", }}
|
||||
onClick={() => {
|
||||
navigate(`/forms/${form.id}`)
|
||||
getWorkflow(form.id, sourceNode)
|
||||
}}
|
||||
>
|
||||
{form.name}
|
||||
</Button>
|
||||
*/}
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
<FormList />
|
||||
:
|
||||
<div>
|
||||
No forms loaded
|
||||
@@ -1557,4 +1591,4 @@ const RunWorkflow = (defaultprops) => {
|
||||
)
|
||||
}
|
||||
|
||||
export default RunWorkflow;
|
||||
export default RunWorkflow
|
||||
|
||||
Reference in New Issue
Block a user