diff --git a/app/new.tsx b/app/new.tsx index 1789009..95acbb6 100644 --- a/app/new.tsx +++ b/app/new.tsx @@ -16,6 +16,7 @@ import { updateIncident, getIncidentById, getDistinctServices, + getMaxTitleNumber, } from "@/lib/db"; import { Colors } from "@/constants/theme"; import { useVoice } from "@/hooks/useVoice"; @@ -50,13 +51,6 @@ const LABEL_STYLE = { type VoiceField = "title" | "service" | "symptom" | "rootCause" | "fix"; -function incrementTemplate(template: string): string { - const match = template.match(/^([\s\S]*?)(\d+)$/); - if (!match) return template; - const [, prefix, numStr] = match; - const next = (parseInt(numStr, 10) + 1).toString().padStart(numStr.length, "0"); - return prefix + next; -} export default function NewIncidentScreen() { const { editId } = useLocalSearchParams<{ editId?: string }>(); @@ -180,7 +174,14 @@ export default function NewIncidentScreen() { await createIncident(form); const tpl = await SecureStore.getItemAsync("pref_title_template"); if (tpl) { - await SecureStore.setItemAsync("pref_title_template", incrementTemplate(tpl)); + const match = tpl.match(/^([\s\S]*?)(\d+)$/); + if (match) { + const [, prefix, numStr] = match; + const dbMax = await getMaxTitleNumber(prefix); + const tplNum = parseInt(numStr, 10); + const next = (Math.max(dbMax, tplNum) + 1).toString().padStart(numStr.length, "0"); + await SecureStore.setItemAsync("pref_title_template", prefix + next); + } } } router.back(); diff --git a/lib/db.ts b/lib/db.ts index 5261abe..4283abc 100644 --- a/lib/db.ts +++ b/lib/db.ts @@ -163,6 +163,20 @@ export async function deleteIncident(id: string): Promise { await db.runAsync("DELETE FROM incidents WHERE id = ?", [id]); } +export async function getMaxTitleNumber(prefix: string): Promise { + const db = await getDb(); + const rows = await db.getAllAsync<{ title: string }>( + "SELECT title FROM incidents WHERE title LIKE ?", + [`${prefix}%`] + ); + let max = 0; + for (const row of rows) { + const n = parseInt(row.title.slice(prefix.length), 10); + if (!isNaN(n) && n > max) max = n; + } + return max; +} + export async function getDistinctServices(): Promise { const db = await getDb(); const rows = await db.getAllAsync<{ service: string }>(