feat: git push status indicator + multi-select bulk push
Release APK / build (push) Has been cancelled
Release APK / build (push) Has been cancelled
- DB migration v2: git_pushed_at column on incidents - markIncidentPushed(id): stamps the push timestamp - loadGitConfig(): shared helper in lib/git.ts, removes duplication - Home screen: colored dot per incident (red=never pushed, orange=dirty/modified after push, green=up to date); dot visible only when git is configured - Home screen: long-press enters selection mode, tap toggles; action bar with Select unpushed / Select all shortcuts + bulk push with sequential progress counter - [id].tsx: marks incident pushed after successful push, updates local state without reload Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -45,6 +45,13 @@ async function migrate(db: SQLite.SQLiteDatabase): Promise<void> {
|
||||
INSERT INTO schema_version (version) VALUES (1);
|
||||
`);
|
||||
}
|
||||
|
||||
if (current < 2) {
|
||||
await db.execAsync(`
|
||||
ALTER TABLE incidents ADD COLUMN git_pushed_at TEXT;
|
||||
INSERT INTO schema_version (version) VALUES (2);
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
// --- row mapper ---
|
||||
@@ -60,6 +67,7 @@ interface IncidentRow {
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
tags: string;
|
||||
git_pushed_at: string | null;
|
||||
}
|
||||
|
||||
function rowToIncident(row: IncidentRow): Incident {
|
||||
@@ -74,6 +82,7 @@ function rowToIncident(row: IncidentRow): Incident {
|
||||
createdAt: row.created_at,
|
||||
updatedAt: row.updated_at,
|
||||
tags: JSON.parse(row.tags) as string[],
|
||||
gitPushedAt: row.git_pushed_at ?? null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -107,6 +116,7 @@ export async function createIncident(draft: IncidentDraft): Promise<Incident> {
|
||||
id,
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
gitPushedAt: null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -163,6 +173,14 @@ export async function deleteIncident(id: string): Promise<void> {
|
||||
await db.runAsync("DELETE FROM incidents WHERE id = ?", [id]);
|
||||
}
|
||||
|
||||
export async function markIncidentPushed(id: string): Promise<void> {
|
||||
const db = await getDb();
|
||||
await db.runAsync(
|
||||
"UPDATE incidents SET git_pushed_at = ? WHERE id = ?",
|
||||
[new Date().toISOString(), id]
|
||||
);
|
||||
}
|
||||
|
||||
export async function getMaxTitleNumber(prefix: string): Promise<number> {
|
||||
const db = await getDb();
|
||||
const rows = await db.getAllAsync<{ title: string }>(
|
||||
|
||||
Reference in New Issue
Block a user