import { Button } from './ui/button'; import { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip'; import { blockDefinitions, UIBlock } from './block'; import { Dispatch, memo, SetStateAction, useState } from 'react'; import { BlockActionContext } from './create-block'; import { cn } from '@/lib/utils'; import { toast } from 'sonner'; interface BlockActionsProps { block: UIBlock; handleVersionChange: (type: 'next' | 'prev' | 'toggle' | 'latest') => void; currentVersionIndex: number; isCurrentVersion: boolean; mode: 'edit' | 'diff'; metadata: any; setMetadata: Dispatch>; } function PureBlockActions({ block, handleVersionChange, currentVersionIndex, isCurrentVersion, mode, metadata, setMetadata, }: BlockActionsProps) { const [isLoading, setIsLoading] = useState(false); const blockDefinition = blockDefinitions.find( (definition) => definition.kind === block.kind, ); if (!blockDefinition) { throw new Error('Block definition not found!'); } const actionContext: BlockActionContext = { content: block.content, handleVersionChange, currentVersionIndex, isCurrentVersion, mode, metadata, setMetadata, }; return (
{blockDefinition.actions.map((action) => ( {action.description} ))}
); } export const BlockActions = memo(PureBlockActions, (prevProps, nextProps) => { if (prevProps.block.status !== nextProps.block.status) return false; if (prevProps.currentVersionIndex !== nextProps.currentVersionIndex) return false; if (prevProps.isCurrentVersion !== nextProps.isCurrentVersion) return false; if (prevProps.block.content !== nextProps.block.content) return false; return true; });