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