Refactor versioning utility functions

This commit is contained in:
gpt-engineer-app[bot]
2025-10-15 17:47:14 +00:00
parent 4e7d528c64
commit 96a5d235e9
11 changed files with 1251 additions and 140 deletions

View File

@@ -10,9 +10,10 @@ import { ScrollArea } from '@/components/ui/scroll-area';
import { VersionComparisonDialog } from './VersionComparisonDialog';
import { RollbackDialog } from './RollbackDialog';
import { useEntityVersions } from '@/hooks/useEntityVersions';
import type { EntityType } from '@/types/versioning';
interface EntityVersionHistoryProps {
entityType: string;
entityType: EntityType;
entityId: string;
entityName: string;
}
@@ -97,13 +98,13 @@ export function EntityVersionHistory({ entityType, entityId, entityName }: Entit
{versions.map((version, index) => (
<Card
key={version.id}
key={version.version_id}
className={`relative pl-16 pr-4 py-4 cursor-pointer transition-colors ${
selectedVersions.includes(version.id)
selectedVersions.includes(version.version_id)
? 'border-primary bg-accent'
: 'hover:border-primary/50'
} ${version.is_current ? 'border-primary shadow-md' : ''}`}
onClick={() => handleVersionSelect(version.id)}
onClick={() => handleVersionSelect(version.version_id)}
>
{/* Timeline dot */}
<div
@@ -133,7 +134,7 @@ export function EntityVersionHistory({ entityType, entityId, entityName }: Entit
variant="ghost"
onClick={(e) => {
e.stopPropagation();
handleRollback(version.id);
handleRollback(version.version_id);
}}
>
<RotateCcw className="h-4 w-4 mr-1" />
@@ -146,17 +147,17 @@ export function EntityVersionHistory({ entityType, entityId, entityName }: Entit
<div className="flex items-center gap-4 text-sm text-muted-foreground">
<div className="flex items-center gap-2">
<Avatar className="h-6 w-6">
<AvatarImage src={version.changer_profile?.avatar_url || undefined} />
<AvatarImage src={version.profiles?.avatar_url || undefined} />
<AvatarFallback>
<User className="h-3 w-3" />
</AvatarFallback>
</Avatar>
<span>{version.changer_profile?.username || 'Unknown'}</span>
<span>{version.profiles?.display_name || version.profiles?.username || 'Unknown'}</span>
</div>
<div className="flex items-center gap-1">
<Clock className="h-4 w-4" />
<span>{formatDistanceToNow(new Date(version.changed_at), { addSuffix: true })}</span>
<span>{formatDistanceToNow(new Date(version.created_at), { addSuffix: true })}</span>
</div>
{version.submission_id && (

View File

@@ -5,11 +5,12 @@ import { ScrollArea } from '@/components/ui/scroll-area';
import { Separator } from '@/components/ui/separator';
import { ArrowRight, Plus, Minus, Edit } from 'lucide-react';
import { useEntityVersions } from '@/hooks/useEntityVersions';
import type { EntityType } from '@/types/versioning';
interface VersionComparisonDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
entityType: string;
entityType: EntityType;
entityId: string;
fromVersionId: string;
toVersionId: string;
@@ -27,8 +28,8 @@ export function VersionComparisonDialog({
const [diff, setDiff] = useState<any>(null);
const [loading, setLoading] = useState(true);
const fromVersion = versions.find(v => v.id === fromVersionId);
const toVersion = versions.find(v => v.id === toVersionId);
const fromVersion = versions.find(v => v.version_id === fromVersionId);
const toVersion = versions.find(v => v.version_id === toVersionId);
useEffect(() => {
const loadDiff = async () => {
@@ -65,12 +66,12 @@ export function VersionComparisonDialog({
<div className="flex items-center gap-4 text-sm text-muted-foreground mt-2">
<div className="flex items-center gap-2">
<Badge variant="outline">Version {fromVersion?.version_number}</Badge>
<span>{new Date(fromVersion?.changed_at || '').toLocaleString()}</span>
<span>{new Date(fromVersion?.created_at || '').toLocaleString()}</span>
</div>
<ArrowRight className="h-4 w-4" />
<div className="flex items-center gap-2">
<Badge variant="outline">Version {toVersion?.version_number}</Badge>
<span>{new Date(toVersion?.changed_at || '').toLocaleString()}</span>
<span>{new Date(toVersion?.created_at || '').toLocaleString()}</span>
</div>
</div>
</DialogHeader>

View File

@@ -6,9 +6,10 @@ import { History, Clock } from 'lucide-react';
import { formatDistanceToNow } from 'date-fns';
import { EntityVersionHistory } from './EntityVersionHistory';
import { useEntityVersions } from '@/hooks/useEntityVersions';
import type { EntityType } from '@/types/versioning';
interface VersionIndicatorProps {
entityType: string;
entityType: EntityType;
entityId: string;
entityName: string;
compact?: boolean;
@@ -27,8 +28,8 @@ export function VersionIndicator({
return null;
}
const timeAgo = currentVersion.changed_at
? formatDistanceToNow(new Date(currentVersion.changed_at), { addSuffix: true })
const timeAgo = currentVersion.created_at
? formatDistanceToNow(new Date(currentVersion.created_at), { addSuffix: true })
: 'Unknown';
if (compact) {