import { zodResolver } from '@hookform/resolvers/zod' import { PermissionAction } from '@supabase/shared-types/out/constants' import { Database, EditIcon, MoreHorizontal, TrashIcon } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { z } from 'zod' import { FormMessage } from '@ui/components/shadcn/ui/form' import { useParams } from 'common' import { useDeleteCollectionMutation } from 'data/analytics/warehouse-collections-delete-mutation' import { useUpdateCollection } from 'data/analytics/warehouse-collections-update-mutation' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, FormControl_Shadcn_, FormField_Shadcn_, Form_Shadcn_, Input_Shadcn_, Modal, TooltipContent_Shadcn_, TooltipTrigger_Shadcn_, Tooltip_Shadcn_, cn, } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { LogsSidebarItem } from '../Settings/Logs/SidebarV2/SidebarItem' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' type Props = { item: { id: number token: string name: string } } export const WarehouseMenuItem = ({ item }: Props) => { const router = useRouter() const { ref, collectionToken } = useParams() const projectRef = ref || 'default' const [showUpdateDialog, setShowUpdateDialog] = useState(false) const [showDeleteDialog, setDeleteDialog] = useState(false) const canUpdateCollection = useCheckPermissions(PermissionAction.ANALYTICS_WRITE, 'logflare') const updateCollection = useUpdateCollection({ onSuccess: () => { toast.success('Collection updated successfully') setShowUpdateDialog(false) }, }) const deleteCollection = useDeleteCollectionMutation({ onSuccess: () => { // If the current collection is deleted, redirect to default logs view if (item.token === collectionToken) { router.push(`/project/${projectRef}/logs/explorer`) } setDeleteDialog(false) toast.success('Collection deleted successfully') }, }) const isLoading = updateCollection.isLoading || deleteCollection.isLoading const UpdateFormSchema = z.object({ name: z.string().min(1, { message: 'Collection name is required', }), }) const updateForm = useForm>({ resolver: zodResolver(UpdateFormSchema), }) return ( <> } href={`/project/${projectRef}/logs/collections/${item.token}`} dropdownItems={ <> { e.preventDefault() setShowUpdateDialog(true) }} >
Rename collection
{!canUpdateCollection && ( You need additional permissions to rename collections )}
{ e.preventDefault() setDeleteDialog(true) }} >
Delete collection
{!canUpdateCollection && ( You need additional permissions to delete collections )}
} >
setShowUpdateDialog(false)} hideFooter header={`Update collection "${item.name}"`} >
updateCollection.mutate({ projectRef, collectionToken: item.token, name: data.name, }) )} > ( )} />
setDeleteDialog(false)} confirmLabel="Delete collection" title={`Delete collection "${item.name}"`} size="small" onConfirm={() => { deleteCollection.mutate({ projectRef, collectionToken: item.token }) }} >

All data in this collection will be deleted.

This action cannot be undone.

) }