import * as React from 'react'; import { Link, useParams } from 'react-router-dom'; import { useMutation } from '@apollo/client'; import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Tooltip from '@mui/material/Tooltip'; import IconButton from '@mui/material/IconButton'; import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew'; import Snackbar from '@mui/material/Snackbar'; import { EditorProvider } from 'contexts/Editor'; import EditableTypography from 'components/EditableTypography'; import Container from 'components/Container'; import Editor from 'components/Editor'; import useFormatMessage from 'hooks/useFormatMessage'; import { UPDATE_FLOW_STATUS } from 'graphql/mutations/update-flow-status'; import { UPDATE_FLOW } from 'graphql/mutations/update-flow'; import * as URLS from 'config/urls'; import { TopBar } from './style'; import useFlow from 'hooks/useFlow'; import { useQueryClient } from '@tanstack/react-query'; export default function EditorLayout() { const { flowId } = useParams(); const formatMessage = useFormatMessage(); const [updateFlow] = useMutation(UPDATE_FLOW); const [updateFlowStatus] = useMutation(UPDATE_FLOW_STATUS); const { data, isLoading: isFlowLoading } = useFlow(flowId); const flow = data?.data; const queryClient = useQueryClient(); const onFlowNameUpdate = React.useCallback( async (name) => { await updateFlow({ variables: { input: { id: flowId, name, }, }, optimisticResponse: { updateFlow: { __typename: 'Flow', id: flowId, name, }, }, }); await queryClient.invalidateQueries({ queryKey: ['flows', flowId] }); }, [flowId, queryClient], ); const onFlowStatusUpdate = React.useCallback( async (active) => { await updateFlowStatus({ variables: { input: { id: flowId, active, }, }, optimisticResponse: { updateFlowStatus: { __typename: 'Flow', id: flowId, active, }, }, }); await queryClient.invalidateQueries({ queryKey: ['flows', flowId] }); }, [flowId, queryClient], ); return ( <> {!isFlowLoading && ( {flow?.name} )} {!flow && !isFlowLoading && 'not found'} {flow && } onFlowStatusUpdate(!flow.active)} data-test="unpublish-flow-from-snackbar" > {formatMessage('flowEditor.unpublish')} } /> ); }