TorbatYar/frontend/docs/crm-component-map.md
Mortezakoohjani e140908034 Ship enterprise CRM frontend with real API wiring and thin app routes.
Connect all CRM pages to the BFF and CRM service, add module docs, and mark CRM available in the SuperApp catalog.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 20:58:17 +03:30

69 lines
2.9 KiB
Markdown

# CRM Component Map
**Date:** 2026-07-26
## Module components (`modules/crm/`)
| Component | Path | Purpose |
|-----------|------|---------|
| `CrmPortalShell` | `components/CrmPortalShell.tsx` | Sidebar nav, mobile drawer, theme toggle |
| `createPortalLayout` | `components/createPortalLayout.tsx` | AuthGuard + tenant gate + shell |
| `CrmBreadcrumbs` | `components/CrmBreadcrumbs.tsx` | CRM-root breadcrumbs |
| `CrmScopeNotice` | `components/CrmScopeNotice.tsx` | Out-of-scope feature messaging |
| `CrmListCrudPage` / `createCrmListPage` | `components/CrmListCrudPage.tsx` | Generic list CRUD factory |
| `CrmTablePage` | `design-system/CrmTablePage.tsx` | Search, sort, pagination, bulk bar |
| `CrmStatGrid` | `design-system/CrmTablePage.tsx` | Dashboard stat cards |
| `CrmStatusChip` | `design-system/CrmStatusChip.tsx` | Domain status badges |
## Shared platform (`@/components/ds`)
Used across all CRM pages:
- `PageHeader`, `DataTable`, `EmptyState`, `LoadingState`, `ErrorState`
- `Button`, `Input`, `Textarea`, `Select`, `FormField`, `Checkbox`
- `Dialog`, `Drawer`, `ConfirmDialog`
- `Card`, `Badge`, `Pagination`, `Skeleton`, `Breadcrumbs`
## Feature pages (`modules/crm/features/sales/`)
| File | Default export / named | Entities |
|------|------------------------|----------|
| `dashboards.tsx` | 6 dashboard exports | Aggregates |
| `leads.tsx` | default | Lead CRUD |
| `contacts.tsx` | default | Contact CRUD |
| `companies.tsx` | default | Organization CRUD |
| `customers.tsx` | default | Combined view |
| `deals.tsx` | default | Opportunity CRUD + win/lose |
| `kanban.tsx` | default | Pipeline board |
| `pipelines.tsx` | default | Pipeline CRUD |
| `quotes.tsx` | default | Quote CRUD |
| `activities.tsx` | default | SalesActivity CRUD |
| `tasks.tsx` | default | Task create + complete |
| `meetings.tsx` | default | Meeting create |
| `calls.tsx` | default | CallLog create |
| `emails.tsx` | default | Email metadata create |
| `notes.tsx` | default | Note per entity |
| `timeline.tsx` | default | Timeline list |
| `documents.tsx` | default | Attachment refs |
| `tags.tsx` | default | Tag CRUD |
| `custom-fields.tsx` | default | CustomField CRUD |
| `export.tsx` | default | CSV export |
| `reports.tsx` | default | Client reports |
| `analytics.tsx` | default | Analytics dashboard |
| `scoped.tsx` | Campaigns, Segments, Import, Automation, Integrations, ApiKeys | Scope notices |
| `admin.tsx` | Notifications, Roles, Permissions, Audit, Settings, Health, Capabilities | Admin |
## Services & hooks
| Symbol | Path |
|--------|------|
| `crmApi` | `services/crm-api.ts` |
| `useCrmKeyboardShortcuts` | `hooks/useCrmKeyboardShortcuts.ts` |
| `useCrmHealth`, `useCrmCounts` | `pages/shared.tsx` |
## Query key namespace
Prefix: `["crm", tenantId, ...]`
Examples: `leads`, `opportunities`, `mentions-unread`, `counts`