import '../RenameFunnel/RenameFunnel.styles.scss'; import { Input } from 'antd'; import { AxiosError } from 'axios'; import SignozModal from 'components/SignozModal/SignozModal'; import { REACT_QUERY_KEY } from 'constants/reactQueryKeys'; import ROUTES from 'constants/routes'; import { useCreateFunnel } from 'hooks/TracesFunnels/useFunnels'; import { useNotifications } from 'hooks/useNotifications'; import { useSafeNavigate } from 'hooks/useSafeNavigate'; import { Check, X } from 'lucide-react'; import { useState } from 'react'; import { useQueryClient } from 'react-query'; import { generatePath } from 'react-router-dom'; interface CreateFunnelProps { isOpen: boolean; onClose: (funnelId?: string) => void; redirectToDetails?: boolean; } function CreateFunnel({ isOpen, onClose, redirectToDetails, }: CreateFunnelProps): JSX.Element { const [funnelName, setFunnelName] = useState(''); const createFunnelMutation = useCreateFunnel(); const { notifications } = useNotifications(); const queryClient = useQueryClient(); const { safeNavigate } = useSafeNavigate(); const handleCreate = (): void => { createFunnelMutation.mutate( { funnel_name: funnelName, timestamp: new Date().getTime(), }, { onSuccess: (data) => { notifications.success({ message: 'Funnel created successfully', }); setFunnelName(''); queryClient.invalidateQueries([REACT_QUERY_KEY.GET_FUNNELS_LIST]); onClose(data?.payload?.funnel_id); if (data?.payload?.funnel_id && redirectToDetails) { safeNavigate( generatePath(ROUTES.TRACES_FUNNELS_DETAIL, { funnelId: data.payload.funnel_id, }), ); } }, onError: (error) => { notifications.error({ message: ((error as AxiosError)?.response?.data as string) || 'Failed to create funnel', }); }, }, ); }; const handleCancel = (): void => { setFunnelName(''); onClose(); }; return ( , loading: createFunnelMutation.isLoading, type: 'primary', className: 'funnel-modal__ok-btn', onClick: handleCreate, disabled: !funnelName.trim(), }} cancelButtonProps={{ icon: , type: 'text', className: 'funnel-modal__cancel-btn', onClick: handleCancel, }} getContainer={document.getElementById('root') || undefined} destroyOnClose >
Enter funnel name setFunnelName(e.target.value)} placeholder="Eg. checkout dropoff funnel" autoFocus />
); } CreateFunnel.defaultProps = { redirectToDetails: true, }; export default CreateFunnel;