import * as React from 'react'; import { Link, useSearchParams } from 'react-router-dom'; import type { LinkProps } from 'react-router-dom'; import { useQuery } from '@apollo/client'; import Box from '@mui/material/Box'; import Grid from '@mui/material/Grid'; import AddIcon from '@mui/icons-material/Add'; import Pagination from '@mui/material/Pagination'; import PaginationItem from '@mui/material/PaginationItem'; import type { IFlow } from '@automatisch/types'; import FlowRow from 'components/FlowRow'; import ConditionalIconButton from 'components/ConditionalIconButton'; import Container from 'components/Container'; import PageTitle from 'components/PageTitle'; import SearchInput from 'components/SearchInput'; import useFormatMessage from 'hooks/useFormatMessage' import { GET_FLOWS } from 'graphql/queries/get-flows'; import * as URLS from 'config/urls'; const FLOW_PER_PAGE = 10; const getLimitAndOffset = (page: number) => ({ limit: FLOW_PER_PAGE, offset: (page - 1) * FLOW_PER_PAGE, }); export default function Flows(): React.ReactElement { const formatMessage = useFormatMessage(); const [searchParams, setSearchParams] = useSearchParams(); const page = parseInt(searchParams.get('page') || '', 10) || 1; const [flowName, setFlowName] = React.useState(''); const { data } = useQuery(GET_FLOWS, { variables: getLimitAndOffset(page), fetchPolicy: 'cache-and-network', }); const getFlows = data?.getFlows || {}; const { pageInfo, edges } = getFlows; const flows: IFlow[] = edges ?.map(({ node }: { node: IFlow }) => node) .filter((flow: IFlow) => flow.name?.toLowerCase().includes(flowName.toLowerCase())); const onSearchChange = React.useCallback((event) => { setFlowName(event.target.value); }, []); const CreateFlowLink = React.useMemo( () => React.forwardRef>(function InlineLink( linkProps, ref, ) { return ; }), [], ); return ( {formatMessage('flows.title')} } > {formatMessage('flows.create')} {flows?.map((flow) => ())} {pageInfo && pageInfo.totalPages > 1 && setSearchParams({ page: page.toString() })} renderItem={(item) => ( )} />} ); };