import { useEffect, useState } from 'react' import { useNavigate } from 'react-router-dom' import { useSelector } from 'react-redux' // material-ui import { Grid, Box, Stack } from '@mui/material' import { useTheme } from '@mui/material/styles' // project imports import MainCard from 'ui-component/cards/MainCard' import ItemCard from 'ui-component/cards/ItemCard' import { gridSpacing } from 'store/constant' import WorkflowEmptySVG from 'assets/images/workflow_empty.svg' import { StyledButton } from 'ui-component/button/StyledButton' import LoginDialog from 'ui-component/dialog/LoginDialog' // API import chatflowsApi from 'api/chatflows' // Hooks import useApi from 'hooks/useApi' // const import { baseURL } from 'store/constant' // icons import { IconPlus } from '@tabler/icons' // ==============================|| CHATFLOWS ||============================== // const Chatflows = () => { const navigate = useNavigate() const theme = useTheme() const customization = useSelector((state) => state.customization) const [isLoading, setLoading] = useState(true) const [images, setImages] = useState({}) const [loginDialogOpen, setLoginDialogOpen] = useState(false) const [loginDialogProps, setLoginDialogProps] = useState({}) const getAllChatflowsApi = useApi(chatflowsApi.getAllChatflows) const onLoginClick = (username, password) => { localStorage.setItem('username', username) localStorage.setItem('password', password) navigate(0) } const addNew = () => { navigate('/canvas') } const goToCanvas = (selectedChatflow) => { navigate(`/canvas/${selectedChatflow.id}`) } useEffect(() => { getAllChatflowsApi.request() // eslint-disable-next-line react-hooks/exhaustive-deps }, []) useEffect(() => { if (getAllChatflowsApi.error) { if (getAllChatflowsApi.error?.response?.status === 401) { setLoginDialogProps({ title: 'Login', confirmButtonName: 'Login' }) setLoginDialogOpen(true) } } }, [getAllChatflowsApi.error]) useEffect(() => { setLoading(getAllChatflowsApi.loading) }, [getAllChatflowsApi.loading]) useEffect(() => { if (getAllChatflowsApi.data) { try { const chatflows = getAllChatflowsApi.data const images = {} for (let i = 0; i < chatflows.length; i += 1) { const flowDataStr = chatflows[i].flowData const flowData = JSON.parse(flowDataStr) const nodes = flowData.nodes || [] images[chatflows[i].id] = [] for (let j = 0; j < nodes.length; j += 1) { const imageSrc = `${baseURL}/api/v1/node-icon/${nodes[j].data.name}` if (!images[chatflows[i].id].includes(imageSrc)) { images[chatflows[i].id].push(imageSrc) } } } setImages(images) } catch (e) { console.error(e) } } }, [getAllChatflowsApi.data]) return (

Chatflows

}> Add New
{!isLoading && getAllChatflowsApi.data && getAllChatflowsApi.data.map((data, index) => ( goToCanvas(data)} data={data} images={images[data.id]} /> ))} {!isLoading && (!getAllChatflowsApi.data || getAllChatflowsApi.data.length === 0) && ( WorkflowEmptySVG
No Chatflows Yet
)}
) } export default Chatflows