Public Access
1
0
Files
leads4less/shared/types.ts
T
pguerrerox 1f7737e5cb feat: add workspace account page and mobile app shell
Normalize the UI with shared primitives, add a workspace-backed account surface, and improve authenticated mobile navigation, map behavior, and dashboard browsing.
2026-05-07 17:40:10 +00:00

151 lines
3.3 KiB
TypeScript

export type JobStatus = 'pending' | 'running' | 'completed' | 'failed' | 'stopped';
export interface AppUser {
id: string;
email: string;
displayName: string;
avatarUrl?: string | null;
createdAt: string;
updatedAt: string;
}
export interface SessionUser extends AppUser {
sessionId: string;
}
export type WorkspaceType = 'personal' | 'company';
export type WorkspaceRole = 'owner' | 'admin' | 'member';
export interface AccountWorkspace {
id: string;
name: string;
workspaceType: WorkspaceType;
role: WorkspaceRole;
memberCount: number;
}
export interface AccountSummary {
totalSearchJobs: number;
totalDeepResearchBatches: number;
totalBusinesses: number;
}
export interface AccountBillingPlaceholder {
status: 'not_configured';
planName: string | null;
message: string;
}
export interface AccountTeamPlaceholder {
canManageMembers: boolean;
message: string;
}
export interface AccountPageData {
profile: AppUser;
workspace: AccountWorkspace;
summary: AccountSummary;
billing: AccountBillingPlaceholder;
team: AccountTeamPlaceholder;
}
export interface UpdateAccountProfileRequest {
displayName?: string;
avatarUrl?: string | null;
workspaceName?: string;
}
export interface GeoJsonGeometry {
type: 'Polygon' | 'MultiPolygon';
coordinates: unknown;
}
export interface GeoJsonFeature<TProperties = Record<string, unknown>> {
type: 'Feature';
geometry: GeoJsonGeometry;
properties: TProperties;
}
export interface GeoJsonFeatureCollection<TProperties = Record<string, unknown>> {
type: 'FeatureCollection';
features: Array<GeoJsonFeature<TProperties>>;
}
export interface PostalAreaPreview {
id: string;
countryCode: string;
postalCode: string;
normalizedPostalCode: string;
displayName: string;
propagationRing: number;
centroidLat: number | null;
centroidLng: number | null;
}
export interface DeepResearchOverlayProperties {
postalAreaId: string;
countryCode: string;
postalCode: string;
displayName: string;
propagationRing: number;
}
export interface DeepResearchPreviewRequest {
lat: number;
lng: number;
propagation: number;
businessType: string;
keywords?: string;
}
export interface DeepResearchPreview {
baseArea: PostalAreaPreview;
areas: PostalAreaPreview[];
overlay: GeoJsonFeatureCollection<DeepResearchOverlayProperties>;
propagation: number;
countryCode: string;
totalAreas: number;
estimatedChildJobs: number;
businessType: string;
keywords?: string;
}
export interface DeepResearchChildJobSummary {
id: string;
name: string;
postalCode?: string;
status: JobStatus;
totalResults: number;
createdAt: string;
completedAt?: string;
}
export interface DeepResearchBatchSummary {
id: string;
userId: string;
pinLat: number;
pinLng: number;
basePostalCode?: string;
countryCode?: string;
propagation: number;
businessType: string;
keywords?: string;
status: JobStatus;
totalPostalAreas: number;
totalResults: number;
childJobCount: number;
completedJobCount: number;
failedJobCount: number;
startedAt?: string;
completedAt?: string;
createdAt: string;
updatedAt: string;
}
export interface DeepResearchBatchDetail extends DeepResearchBatchSummary {
childJobs: DeepResearchChildJobSummary[];
jobIds: string[];
}
export interface CreateDeepResearchBatchRequest extends DeepResearchPreviewRequest {}