mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-23 02:11:12 -05:00
Refactor versioning utility functions
This commit is contained in:
@@ -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 && (
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user