fix(documents-ui): a11y, mobile, realtime lift, type-safety, UI polish
- A2: lift useRealtimeInvalidation to DocumentsHub (covers all 3 render modes) - B1-B4: aria-label, aria-pressed, aria-expanded, Lock SVG aria-hidden - C1-C7: Sheet wrap for mobile sidebar, border axis fix, 44x44 tap targets - Mobile Important: useMobileChrome title, FolderActionsMenu icon size, breadcrumb tap targets, signer email truncate - Type-safety: ENTITY_TYPES guard, AggregatedSection discriminated union - UI/UX: em-dash to colon in SigningDetailsDialog, Loading state normalize, StatusPill on HubRootView, view signing details as Button Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,14 +4,15 @@ import { useState } from 'react';
|
||||
import Link from 'next/link';
|
||||
import { ClipboardSignature, FileText, Eye } from 'lucide-react';
|
||||
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { AggregatedSection } from './aggregated-section';
|
||||
import { SigningDetailsDialog } from './signing-details-dialog';
|
||||
import { useAggregatedFiles, useAggregatedWorkflows } from '@/hooks/use-aggregated-listing';
|
||||
import { StatusPill, type StatusPillStatus } from '@/components/ui/status-pill';
|
||||
import type {
|
||||
AggregatedWorkflow,
|
||||
AggregatedFile,
|
||||
AggregatedGroup,
|
||||
AggregatedWorkflow,
|
||||
} from '@/hooks/use-aggregated-listing';
|
||||
|
||||
interface Props {
|
||||
@@ -47,7 +48,7 @@ export function EntityFolderView({ portSlug, entityType, entityId }: Props) {
|
||||
|
||||
return (
|
||||
<div className="space-y-4">
|
||||
<AggregatedSection
|
||||
<AggregatedSection<'workflows'>
|
||||
title="Signing in progress"
|
||||
icon={<ClipboardSignature className="h-4 w-4 text-muted-foreground" />}
|
||||
groups={workflowGroups}
|
||||
@@ -65,7 +66,7 @@ export function EntityFolderView({ portSlug, entityType, entityId }: Props) {
|
||||
)}
|
||||
/>
|
||||
|
||||
<AggregatedSection
|
||||
<AggregatedSection<'files'>
|
||||
title="Files"
|
||||
icon={<FileText className="h-4 w-4 text-muted-foreground" />}
|
||||
groups={fileGroups}
|
||||
@@ -79,14 +80,15 @@ export function EntityFolderView({ portSlug, entityType, entityId }: Props) {
|
||||
<div className="flex items-center gap-2 text-xs text-muted-foreground tabular-nums">
|
||||
<span>{new Date(f.createdAt).toLocaleDateString('en-GB')}</span>
|
||||
{signedFromDocumentId ? (
|
||||
<button
|
||||
type="button"
|
||||
className="flex items-center gap-1 text-brand hover:underline"
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="min-h-[44px] gap-1 px-2 text-xs text-brand"
|
||||
onClick={() => setDetailsId(signedFromDocumentId)}
|
||||
>
|
||||
<Eye className="h-3 w-3" />
|
||||
view signing details
|
||||
</button>
|
||||
View signing details
|
||||
</Button>
|
||||
) : null}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user