All files / src/types index.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153                                                                                                                                                                                                                                                                                                                 
// API types (match backend DTOs)
 
export interface ShoppingList {
  id: string
  name: string
  emoji: string
  shareToken: string | null
  itemCount: number
  checkedCount: number
  participantCount: number
  createdAt: string
  updatedAt: string
}
 
export interface Label {
  id: string
  name: string
  color: string | null
}
 
export interface Favorite {
  id: string
  itemName: string
  emoji: string | null
}
 
export interface Item {
  id: string
  listId: string
  name: string
  checked: boolean
  position: number
  categoryId: string | null
  categoryName: string | null
  categoryColor: string | null
  quantity: number | null
  quantityUnit: string | null
  price: number | null
  imageUrl: string | null
  labels: Label[]
  createdAt: string
  updatedAt: string
  deletedAt: string | null
  createdByDeviceId: string | null
}
 
export interface BudgetSummary {
  total: number
  byCategory: Record<string, number>
}
 
export interface Category {
  id: string
  name: string
  color: string | null
  position: number
}
 
// API response types for sharing
 
export interface ShareTokenResponse {
  token: string
  listId: string
  listName: string
}
 
export interface SyncTokenResponse {
  token: string
  listCount: number
  expiresAt: string
}
 
export interface SyncPreviewResponse {
  lists: ShoppingList[]
  sourceDisplayName: string | null
  sourceProfilePicture: string | null
  theme: string
}
 
export interface SyncApplyResponse {
  lists: ShoppingList[]
  displayName: string | null
  profilePicture: string | null
  theme: string
  presetsImported: number
}
 
export interface ParticipantResponse {
  deviceId: string
  role: string
  joinedAt: string
  displayName: string | null
  profilePicture: string | null
}
 
// UI-only helpers
 
export type AccentColor = 'green' | 'teal' | 'sapphire'
 
export interface Participant {
  id: string
  initials: string
  online: boolean
}
 
// Request types
 
export interface CreateListRequest {
  name: string
  emoji?: string
  presetId?: string | null
}
 
export interface UpdateListRequest {
  name: string
  emoji?: string
}
 
export interface CreateItemRequest {
  name: string
  categoryId?: string
  labelIds?: string[]
  quantity?: number | null
  quantityUnit?: string | null
  price?: number | null
  imageUrl?: string | null
}
 
export interface UpdateItemRequest {
  name: string
  categoryId?: string
  labelIds?: string[]
  quantity?: number | null
  quantityUnit?: string | null
  price?: number | null
  imageUrl?: string | null
}
 
export interface CreateLabelRequest {
  name: string
  color?: string
}
 
export interface CreateFavoriteRequest {
  itemName: string
  emoji?: string
}
 
export interface CreateCategoryRequest {
  name: string
  color?: string
}