161 lines
4.0 KiB
React
161 lines
4.0 KiB
React
import React, {useContext} from "react"
|
|
|
|
import { Link } from "react-router-dom";
|
|
import {
|
|
Avatar,
|
|
Box,
|
|
Button,
|
|
Typography,
|
|
Tooltip,
|
|
} from "@mui/material"
|
|
import { useNavigate } from "react-router";
|
|
import theme from "../theme.jsx";
|
|
import { getTheme } from "../theme.jsx";
|
|
import {
|
|
Lock as LockIcon,
|
|
} from '@mui/icons-material';
|
|
import { Context } from "../context/ContextApi.jsx";
|
|
|
|
// onclickHandler = function override from parent onclick
|
|
const RecentWorkflow = ({ workflow, onclickHandler, leftNavOpen, currentWorkflowId, }) => {
|
|
|
|
const { themeMode } = useContext(Context);
|
|
const theme = getTheme(themeMode);
|
|
|
|
|
|
|
|
const navigate = useNavigate();
|
|
|
|
const [hovered, setHovered] = React.useState(false)
|
|
if (workflow === undefined || workflow === null) {
|
|
console.log("No workflow")
|
|
return null
|
|
}
|
|
|
|
/*
|
|
* Note for @Lalit:
|
|
*
|
|
* When you want to make a list of something that is complex,
|
|
* make a component. This way, you can easily manage
|
|
* the logic, and we can actually reuse it. This component is used
|
|
* multiple places, so do make sure to not break it randomly.
|
|
*/
|
|
|
|
const expandLeftNav = leftNavOpen === true || leftNavOpen === undefined ? true : false
|
|
|
|
// Check if workflow.input_markdown has an image in it
|
|
// If it does, show it as the main thing
|
|
var relevantImageUrl = ""
|
|
if (workflow?.form_control?.input_markdown !== undefined && workflow?.form_control?.input_markdown !== null && workflow?.form_control?.input_markdown !== "") {
|
|
// Look for <img> tag or  markdown
|
|
// html > markdown
|
|
const imgTag = workflow?.form_control?.input_markdown.match(/<img[^>]+>/g)
|
|
|
|
if (imgTag !== null) {
|
|
const src = imgTag[0].match(/src="([^"]+)"/)
|
|
if (src !== null) {
|
|
relevantImageUrl = src[1]
|
|
}
|
|
} else {
|
|
const markdownTag = workflow?.form_control?.input_markdown.match(/!\[.*\]\(.*\)/g)
|
|
|
|
if (markdownTag !== null) {
|
|
const src = markdownTag[0].match(/\(([^)]+)\)/)
|
|
if (src !== null) {
|
|
relevantImageUrl = src[1]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div
|
|
onMouseEnter={() => setHovered(true)}
|
|
onMouseLeave={() => setHovered(false)}
|
|
>
|
|
<Link to={`/workflows/` + workflow?.id} style={{textDecoration: "none"}}>
|
|
<Button
|
|
onClick={(e) => {
|
|
if (onclickHandler !== undefined) {
|
|
e.preventDefault()
|
|
e.stopPropagation()
|
|
onclickHandler()
|
|
}
|
|
}}
|
|
style={{
|
|
display: "flex",
|
|
flexDirection: "column",
|
|
textTransform: "none",
|
|
width: "100%",
|
|
justifyContent: "flex-start",
|
|
textAlign: "left",
|
|
opacity: expandLeftNav ? 1 : 0,
|
|
transition: "opacity 0.1s",
|
|
|
|
borderRadius: theme.palette?.borderRadius,
|
|
backgroundColor: hovered || currentWorkflowId === workflow.id ? theme.palette.hoverColor : "transparent",
|
|
}}
|
|
disableRipple
|
|
>
|
|
<Box
|
|
style={{
|
|
display: "flex",
|
|
marginRight: "auto",
|
|
alignItems: "center",
|
|
}}
|
|
>
|
|
|
|
{relevantImageUrl !== undefined && relevantImageUrl !== null && relevantImageUrl !== "" ?
|
|
<Avatar
|
|
alt={workflow?.name}
|
|
src={relevantImageUrl}
|
|
style={{ width: 24, height: 24, marginRight: 5, }}
|
|
/>
|
|
:
|
|
workflow?.apps?.slice(0, 2).map((data, index) => (
|
|
<Box
|
|
key={index}
|
|
style={{
|
|
position: "relative",
|
|
marginLeft: index === 1 ? -8 : 0,
|
|
}}
|
|
>
|
|
<Avatar
|
|
alt={data.app_name}
|
|
src={
|
|
data.large_image
|
|
? data.large_image
|
|
: "/images/no_image.png"
|
|
}
|
|
style={{ width: 24, height: 24 }}
|
|
/>
|
|
</Box>
|
|
))}
|
|
<Typography
|
|
style={{
|
|
fontSize: 16,
|
|
marginLeft: 8,
|
|
maxWidth: 180,
|
|
overflow: "hidden",
|
|
textOverflow: "ellipsis",
|
|
whiteSpace: "nowrap",
|
|
}}
|
|
>
|
|
{workflow?.name}
|
|
</Typography>
|
|
|
|
{onclickHandler !== undefined && workflow.sharing !== "form" ?
|
|
<Tooltip title="Private Org Form" placement="right">
|
|
<LockIcon style={{height: 15, width: 15, color: "grey", position: "absolute", left: -17, }}/>
|
|
</Tooltip>
|
|
: null
|
|
}
|
|
</Box>
|
|
</Button>
|
|
</Link>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default RecentWorkflow
|