mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 08:11:13 -05:00
testing changes with virtual file cleanup
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
import { ChevronDown, ChevronUp } from 'lucide-react';
|
import { ChevronDown, ChevronUp } from 'lucide-react';
|
||||||
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@/components/ui/collapsible';
|
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@/components/ui/collapsible';
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from '@/components/ui/button';
|
||||||
|
import { Badge } from '@/components/ui/badge';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
interface DetailedViewCollapsibleProps {
|
interface DetailedViewCollapsibleProps {
|
||||||
isCollapsed: boolean;
|
isCollapsed: boolean;
|
||||||
onToggle: () => void;
|
onToggle: () => void;
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
fieldCount?: number;
|
||||||
className?: string;
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18,6 +20,7 @@ export function DetailedViewCollapsible({
|
|||||||
isCollapsed,
|
isCollapsed,
|
||||||
onToggle,
|
onToggle,
|
||||||
children,
|
children,
|
||||||
|
fieldCount,
|
||||||
className
|
className
|
||||||
}: DetailedViewCollapsibleProps) {
|
}: DetailedViewCollapsibleProps) {
|
||||||
return (
|
return (
|
||||||
@@ -27,25 +30,35 @@ export function DetailedViewCollapsible({
|
|||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-full flex items-center justify-between hover:bg-muted/50 p-2 h-auto"
|
className="w-full flex items-center justify-between hover:bg-muted/50 p-2 h-auto transition-colors"
|
||||||
>
|
>
|
||||||
<div className="text-xs font-semibold text-muted-foreground uppercase tracking-wide">
|
<div className="flex items-center gap-2">
|
||||||
|
<span className="text-xs font-semibold text-muted-foreground uppercase tracking-wide">
|
||||||
All Fields (Detailed View)
|
All Fields (Detailed View)
|
||||||
|
</span>
|
||||||
|
{fieldCount !== undefined && fieldCount > 0 && (
|
||||||
|
<Badge
|
||||||
|
variant="secondary"
|
||||||
|
className="h-5 px-1.5 text-xs font-normal transition-transform duration-200 hover:scale-105"
|
||||||
|
>
|
||||||
|
{fieldCount}
|
||||||
|
</Badge>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<span className="text-xs text-muted-foreground normal-case font-normal">
|
<span className="text-xs text-muted-foreground normal-case font-normal">
|
||||||
{isCollapsed ? 'Show' : 'Hide'}
|
{isCollapsed ? 'Show' : 'Hide'}
|
||||||
</span>
|
</span>
|
||||||
{isCollapsed ? (
|
{isCollapsed ? (
|
||||||
<ChevronDown className="h-4 w-4 text-muted-foreground" />
|
<ChevronDown className="h-4 w-4 text-muted-foreground transition-transform duration-200" />
|
||||||
) : (
|
) : (
|
||||||
<ChevronUp className="h-4 w-4 text-muted-foreground" />
|
<ChevronUp className="h-4 w-4 text-muted-foreground transition-transform duration-200" />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
</CollapsibleTrigger>
|
</CollapsibleTrigger>
|
||||||
|
|
||||||
<CollapsibleContent className="mt-3">
|
<CollapsibleContent className="mt-3 data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down">
|
||||||
{children}
|
{children}
|
||||||
</CollapsibleContent>
|
</CollapsibleContent>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -42,6 +42,12 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
fetchSubmissionItems();
|
fetchSubmissionItems();
|
||||||
}, [submissionId]);
|
}, [submissionId]);
|
||||||
|
|
||||||
|
// Helper function to count non-null fields in entity data
|
||||||
|
const countFields = (data: any): number => {
|
||||||
|
if (!data || typeof data !== 'object') return 0;
|
||||||
|
return Object.values(data).filter(value => value !== null && value !== undefined).length;
|
||||||
|
};
|
||||||
|
|
||||||
const fetchSubmissionItems = async () => {
|
const fetchSubmissionItems = async () => {
|
||||||
try {
|
try {
|
||||||
// Only show skeleton on initial load, show refreshing indicator on refresh
|
// Only show skeleton on initial load, show refreshing indicator on refresh
|
||||||
@@ -191,7 +197,11 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
data={entityData as unknown as ParkSubmissionData}
|
data={entityData as unknown as ParkSubmissionData}
|
||||||
actionType={actionType}
|
actionType={actionType}
|
||||||
/>
|
/>
|
||||||
<DetailedViewCollapsible isCollapsed={isCollapsed} onToggle={toggle}>
|
<DetailedViewCollapsible
|
||||||
|
isCollapsed={isCollapsed}
|
||||||
|
onToggle={toggle}
|
||||||
|
fieldCount={countFields(entityData)}
|
||||||
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
view="detailed"
|
view="detailed"
|
||||||
@@ -211,7 +221,11 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
data={entityData as unknown as RideSubmissionData}
|
data={entityData as unknown as RideSubmissionData}
|
||||||
actionType={actionType}
|
actionType={actionType}
|
||||||
/>
|
/>
|
||||||
<DetailedViewCollapsible isCollapsed={isCollapsed} onToggle={toggle}>
|
<DetailedViewCollapsible
|
||||||
|
isCollapsed={isCollapsed}
|
||||||
|
onToggle={toggle}
|
||||||
|
fieldCount={countFields(entityData)}
|
||||||
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
view="detailed"
|
view="detailed"
|
||||||
@@ -231,7 +245,11 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
data={entityData as unknown as CompanySubmissionData}
|
data={entityData as unknown as CompanySubmissionData}
|
||||||
actionType={actionType}
|
actionType={actionType}
|
||||||
/>
|
/>
|
||||||
<DetailedViewCollapsible isCollapsed={isCollapsed} onToggle={toggle}>
|
<DetailedViewCollapsible
|
||||||
|
isCollapsed={isCollapsed}
|
||||||
|
onToggle={toggle}
|
||||||
|
fieldCount={countFields(entityData)}
|
||||||
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
view="detailed"
|
view="detailed"
|
||||||
@@ -251,7 +269,11 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
data={entityData as unknown as RideModelSubmissionData}
|
data={entityData as unknown as RideModelSubmissionData}
|
||||||
actionType={actionType}
|
actionType={actionType}
|
||||||
/>
|
/>
|
||||||
<DetailedViewCollapsible isCollapsed={isCollapsed} onToggle={toggle}>
|
<DetailedViewCollapsible
|
||||||
|
isCollapsed={isCollapsed}
|
||||||
|
onToggle={toggle}
|
||||||
|
fieldCount={countFields(entityData)}
|
||||||
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
view="detailed"
|
view="detailed"
|
||||||
@@ -271,7 +293,11 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
data={entityData as unknown as TimelineSubmissionData}
|
data={entityData as unknown as TimelineSubmissionData}
|
||||||
actionType={actionType}
|
actionType={actionType}
|
||||||
/>
|
/>
|
||||||
<DetailedViewCollapsible isCollapsed={isCollapsed} onToggle={toggle}>
|
<DetailedViewCollapsible
|
||||||
|
isCollapsed={isCollapsed}
|
||||||
|
onToggle={toggle}
|
||||||
|
fieldCount={countFields(entityData)}
|
||||||
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
view="detailed"
|
view="detailed"
|
||||||
|
|||||||
Reference in New Issue
Block a user