mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-26 08:11:08 -05:00
Compare commits
7 Commits
edit/edt-9
...
edit/edt-5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6087b54213 | ||
|
|
68384156ab | ||
|
|
5cc5d3eab6 | ||
|
|
706e36c847 | ||
|
|
a1beba6996 | ||
|
|
d7158756ef | ||
|
|
3330a8fac9 |
@@ -10,6 +10,7 @@ interface DetailedViewCollapsibleProps {
|
|||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
fieldCount?: number;
|
fieldCount?: number;
|
||||||
className?: string;
|
className?: string;
|
||||||
|
staggerIndex?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,8 +22,11 @@ export function DetailedViewCollapsible({
|
|||||||
onToggle,
|
onToggle,
|
||||||
children,
|
children,
|
||||||
fieldCount,
|
fieldCount,
|
||||||
className
|
className,
|
||||||
|
staggerIndex = 0
|
||||||
}: DetailedViewCollapsibleProps) {
|
}: DetailedViewCollapsibleProps) {
|
||||||
|
// Calculate stagger delay: 50ms per item, max 300ms
|
||||||
|
const staggerDelay = Math.min(staggerIndex * 50, 300);
|
||||||
return (
|
return (
|
||||||
<Collapsible open={!isCollapsed} onOpenChange={() => onToggle()}>
|
<Collapsible open={!isCollapsed} onOpenChange={() => onToggle()}>
|
||||||
<div className={cn("mt-6 pt-6 border-t", className)}>
|
<div className={cn("mt-6 pt-6 border-t", className)}>
|
||||||
@@ -59,7 +63,13 @@ export function DetailedViewCollapsible({
|
|||||||
</Button>
|
</Button>
|
||||||
</CollapsibleTrigger>
|
</CollapsibleTrigger>
|
||||||
|
|
||||||
<CollapsibleContent className="mt-3">
|
<CollapsibleContent
|
||||||
|
className="mt-3"
|
||||||
|
style={{
|
||||||
|
animationDelay: `${staggerDelay}ms`,
|
||||||
|
transitionDelay: `${staggerDelay}ms`
|
||||||
|
}}
|
||||||
|
>
|
||||||
{children}
|
{children}
|
||||||
</CollapsibleContent>
|
</CollapsibleContent>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Render item with appropriate display component
|
// Render item with appropriate display component
|
||||||
const renderItem = (item: SubmissionItemData) => {
|
const renderItem = (item: SubmissionItemData, index: number = 0) => {
|
||||||
// SubmissionItemData from submissions.ts has item_data property
|
// SubmissionItemData from submissions.ts has item_data property
|
||||||
const entityData = item.item_data;
|
const entityData = item.item_data;
|
||||||
const actionType = item.action_type || 'create';
|
const actionType = item.action_type || 'create';
|
||||||
@@ -201,6 +201,7 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
isCollapsed={isCollapsed}
|
isCollapsed={isCollapsed}
|
||||||
onToggle={toggle}
|
onToggle={toggle}
|
||||||
fieldCount={countFields(entityData)}
|
fieldCount={countFields(entityData)}
|
||||||
|
staggerIndex={index}
|
||||||
>
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
@@ -225,6 +226,7 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
isCollapsed={isCollapsed}
|
isCollapsed={isCollapsed}
|
||||||
onToggle={toggle}
|
onToggle={toggle}
|
||||||
fieldCount={countFields(entityData)}
|
fieldCount={countFields(entityData)}
|
||||||
|
staggerIndex={index}
|
||||||
>
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
@@ -249,6 +251,7 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
isCollapsed={isCollapsed}
|
isCollapsed={isCollapsed}
|
||||||
onToggle={toggle}
|
onToggle={toggle}
|
||||||
fieldCount={countFields(entityData)}
|
fieldCount={countFields(entityData)}
|
||||||
|
staggerIndex={index}
|
||||||
>
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
@@ -273,6 +276,7 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
isCollapsed={isCollapsed}
|
isCollapsed={isCollapsed}
|
||||||
onToggle={toggle}
|
onToggle={toggle}
|
||||||
fieldCount={countFields(entityData)}
|
fieldCount={countFields(entityData)}
|
||||||
|
staggerIndex={index}
|
||||||
>
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
@@ -297,6 +301,7 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
isCollapsed={isCollapsed}
|
isCollapsed={isCollapsed}
|
||||||
onToggle={toggle}
|
onToggle={toggle}
|
||||||
fieldCount={countFields(entityData)}
|
fieldCount={countFields(entityData)}
|
||||||
|
staggerIndex={index}
|
||||||
>
|
>
|
||||||
<SubmissionChangesDisplay
|
<SubmissionChangesDisplay
|
||||||
item={item}
|
item={item}
|
||||||
@@ -334,9 +339,9 @@ export const SubmissionItemsList = memo(function SubmissionItemsList({
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Show regular submission items */}
|
{/* Show regular submission items */}
|
||||||
{items.map((item) => (
|
{items.map((item, index) => (
|
||||||
<div key={item.id} className={view === 'summary' ? 'border-l-2 border-primary/20 pl-3' : ''}>
|
<div key={item.id} className={view === 'summary' ? 'border-l-2 border-primary/20 pl-3' : ''}>
|
||||||
{renderItem(item)}
|
{renderItem(item, index)}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
|
|||||||
@@ -50,8 +50,10 @@ export function useDetailedViewState(): UseDetailedViewStateReturn {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data?.moderation_preferences) {
|
// Type assertion needed until Supabase regenerates types after migration
|
||||||
const prefs = data.moderation_preferences as ModerationPreferences;
|
const preferences = (data as any)?.moderation_preferences;
|
||||||
|
if (preferences) {
|
||||||
|
const prefs = preferences as ModerationPreferences;
|
||||||
setIsCollapsed(prefs.detailed_view_collapsed ?? true);
|
setIsCollapsed(prefs.detailed_view_collapsed ?? true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { twMerge } from "tailwind-merge";
|
|||||||
*
|
*
|
||||||
* @param inputs - Class values to combine (strings, objects, arrays)
|
* @param inputs - Class values to combine (strings, objects, arrays)
|
||||||
* @returns Merged class string with Tailwind conflicts resolved
|
* @returns Merged class string with Tailwind conflicts resolved
|
||||||
|
* @example cn('px-2 py-1', 'px-4') // Returns 'py-1 px-4'
|
||||||
*/
|
*/
|
||||||
export function cn(...inputs: ClassValue[]) {
|
export function cn(...inputs: ClassValue[]) {
|
||||||
return twMerge(clsx(inputs));
|
return twMerge(clsx(inputs));
|
||||||
|
|||||||
@@ -207,8 +207,8 @@ const handler = async (req: Request, context: { supabase: any; user: any; span:
|
|||||||
p_moderator_id: user.id,
|
p_moderator_id: user.id,
|
||||||
p_submitter_id: submission.user_id,
|
p_submitter_id: submission.user_id,
|
||||||
p_request_id: requestId,
|
p_request_id: requestId,
|
||||||
p_trace_id: rootSpan.traceId,
|
p_approval_mode: 'selective',
|
||||||
p_parent_span_id: rpcSpan.spanId
|
p_idempotency_key: idempotencyKey
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user