import Box from '@mui/material/Box';
import CircularProgress from '@mui/material/CircularProgress';
import Divider from '@mui/material/Divider';
import Grid from '@mui/material/Grid';
import Pagination from '@mui/material/Pagination';
import PaginationItem from '@mui/material/PaginationItem';
import * as React from 'react';
import {
Link,
Route,
Routes,
useNavigate,
useSearchParams,
} from 'react-router-dom';
import Container from 'components/Container';
import FlowFilters from 'components/FlowFilters';
import FlowRow from 'components/FlowRow';
import FlowsButtons from 'components/FlowsButtons';
import Folders from 'components/Folders';
import ImportFlowDialog from 'components/ImportFlowDialog';
import NoResultFound from 'components/NoResultFound';
import PageTitle from 'components/PageTitle';
import SearchInput from 'components/SearchInput';
import TemplatesDialog from 'components/TemplatesDialog/index.ee';
import * as URLS from 'config/urls';
import objectifyUrlSearchParams from 'helpers/objectifyUrlSearchParams';
import useCurrentUserAbility from 'hooks/useCurrentUserAbility';
import useFlows from 'hooks/useFlows';
import useFormatMessage from 'hooks/useFormatMessage';
export default function Flows() {
const formatMessage = useFormatMessage();
const navigate = useNavigate();
const [searchParams, setSearchParams] = useSearchParams();
const page = parseInt(searchParams.get('page') || '', 10) || 1;
const flowName = searchParams.get('flowName') || '';
const folderId = searchParams.get('folderId');
const status = searchParams.get('status');
const onlyOwnedFlows = searchParams.get('onlyOwnedFlows');
const currentUserAbility = useCurrentUserAbility();
const [searchValue, setSearchValue] = React.useState(flowName);
const { data, isSuccess, isLoading } = useFlows({
flowName,
page,
folderId,
status,
onlyOwnedFlows,
});
const flows = data?.data || [];
const pageInfo = data?.meta;
const hasFlows = flows?.length;
const navigateToLastPage = isSuccess && !hasFlows && page > 1;
const onSearchChange = React.useCallback(
(event) => {
const value = event.target.value;
setSearchValue(value);
setSearchParams({
flowName: value,
...(folderId && { folderId }),
...(onlyOwnedFlows && { onlyOwnedFlows }),
...(status && { status }),
});
},
[folderId, setSearchParams, onlyOwnedFlows, status],
);
const getPathWithSearchParams = (page) => {
const searchParamsObject = objectifyUrlSearchParams(searchParams);
const newSearchParams = new window.URLSearchParams({
...searchParamsObject,
page,
});
return { search: newSearchParams.toString() };
};
const onDuplicateFlow = () => {
if (pageInfo?.currentPage > 1) {
navigate(getPathWithSearchParams(1));
}
};
React.useEffect(
function resetSearchValue() {
if (!searchParams.has('flowName')) {
setSearchValue('');
}
},
[searchParams],
);
React.useEffect(
function redirectToLastPage() {
if (navigateToLastPage) {
navigate(getPathWithSearchParams(pageInfo.totalPages));
}
},
[navigateToLastPage],
);
return (
<>
{formatMessage('flows.title')}
{(isLoading || navigateToLastPage) && (
)}
{!isLoading &&
flows?.map((flow) => (
))}
{!isLoading && !navigateToLastPage && !hasFlows && (
)}
{!isLoading &&
!navigateToLastPage &&
pageInfo &&
pageInfo.totalPages > 1 && (
(
)}
/>
)}
} />
} />
>
);
}