feat(proxies): CM-9 UI — ProxyCard on client, interest, and yacht detail pages
- shared ProxyCard (view/add/edit/remove point-of-contact) reading each entity's /[id]/proxy sub-resource; permission-gated on the entity's edit right - wired into the client overview, interest overview, and yacht overview tabs Completes CM-9. tsc clean, lint 0 errors, prod build green, 1638 vitest pass. Comms send-side wiring (route EOIs/emails through resolveEffectiveProxy) is a deliberate follow-up — the resolver + data are ready for it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import { TenancyCreateDialog } from '@/components/tenancies/tenancy-create-dialo
|
||||
import { InlineEditableField } from '@/components/shared/inline-editable-field';
|
||||
import { FieldHistoryProvider, FieldHistoryIcon } from '@/components/shared/field-history';
|
||||
import { InlineTagEditor } from '@/components/shared/inline-tag-editor';
|
||||
import { ProxyCard } from '@/components/shared/proxy-card';
|
||||
import { NotesList } from '@/components/shared/notes-list';
|
||||
import { EntityActivityFeed } from '@/components/shared/entity-activity-feed';
|
||||
import { TenancyList, type TenancyRow } from '@/components/tenancies/tenancy-list';
|
||||
@@ -176,6 +177,10 @@ function OverviewTab({
|
||||
return (
|
||||
<FieldHistoryProvider scope={{ type: 'yacht', id: yachtId }}>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
{/* CM-9: per-vessel point-of-contact (overrides interest + client). */}
|
||||
<div className="md:col-span-2">
|
||||
<ProxyCard entityType="yacht" entityId={yachtId} />
|
||||
</div>
|
||||
{/* Identity */}
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-medium mb-2">Identity</h3>
|
||||
|
||||
Reference in New Issue
Block a user