- DB: trucks table + incidents.truck_id FK + transport enum value - Validation: transport type requires truck_id - Create API: validates truck exists/active, persists truck_id - Report form: truck dropdown shown when type=transport (required) - Admin: TruckManager CRUD + /api/admin/trucks route - Detail: trucks join surfaced in incident-detail + detail page query - Inbox (HSE + supervisor): truck filter, transport in TYPE_OPTIONS, fixed stale enum values (dropped dangerous_occurrence/mhe_asset/occupational_disease) - List: transport label + truck number badge in rows - i18n: transport + truckLabel/truckPlaceholder in en/ms/zh Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { openDB, type IDBPDatabase } from 'idb'
|
|
|
|
export interface PendingReport {
|
|
id?: number
|
|
zone_token: string
|
|
incident_type: string
|
|
description: string
|
|
injury_involved: boolean
|
|
asset_involved: boolean
|
|
medical_status?: string
|
|
type_details?: Record<string, string | boolean>
|
|
truck_id?: string
|
|
created_at: string
|
|
}
|
|
|
|
let dbPromise: Promise<IDBPDatabase> | null = null
|
|
|
|
function getDb(): Promise<IDBPDatabase> {
|
|
if (!dbPromise) {
|
|
dbPromise = openDB('ims-offline', 1, {
|
|
upgrade(db) {
|
|
db.createObjectStore('pending_reports', { keyPath: 'id', autoIncrement: true })
|
|
},
|
|
})
|
|
}
|
|
return dbPromise
|
|
}
|
|
|
|
export async function addPendingReport(report: Omit<PendingReport, 'id'>): Promise<number> {
|
|
const db = await getDb()
|
|
return db.add('pending_reports', report) as Promise<number>
|
|
}
|
|
|
|
export async function getPendingReports(): Promise<PendingReport[]> {
|
|
const db = await getDb()
|
|
return db.getAll('pending_reports')
|
|
}
|
|
|
|
export async function removePendingReport(id: number): Promise<void> {
|
|
const db = await getDb()
|
|
return db.delete('pending_reports', id)
|
|
}
|
|
|
|
export async function getPendingCount(): Promise<number> {
|
|
const db = await getDb()
|
|
return db.count('pending_reports')
|
|
}
|