Skip to content

Commit 19b4f86

Browse files
committed
fix: address PR feedback on delete-repo
- Settings page now redirects to "/" after delete instead of refreshing the now-404 route. Adds optional redirectTo prop on DeleteRepoButton. - FTS delete_many uses a single DELETE ... WHERE page_id IN (...) per chunk of 500 ids instead of one round-trip per page.
1 parent 02d3fbf commit 19b4f86

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

packages/core/src/repowise/core/persistence/search.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,16 @@ async def delete_many(self, page_ids: list[str]) -> None:
222222
if not page_ids:
223223
return
224224
if self._dialect == "sqlite":
225+
# Chunk to stay under SQLite's default 999-parameter limit per statement.
226+
chunk_size = 500
225227
async with self._engine.begin() as conn:
226-
for pid in page_ids:
228+
for start in range(0, len(page_ids), chunk_size):
229+
chunk = page_ids[start : start + chunk_size]
230+
placeholders = ", ".join(f":p{i}" for i in range(len(chunk)))
231+
params = {f"p{i}": pid for i, pid in enumerate(chunk)}
227232
await conn.execute(
228-
text("DELETE FROM page_fts WHERE page_id = :pid"),
229-
{"pid": pid},
233+
text(f"DELETE FROM page_fts WHERE page_id IN ({placeholders})"),
234+
params,
230235
)
231236
# PostgreSQL: rows deleted via CASCADE automatically remove from GIN index.
232237

packages/web/src/app/repos/[id]/settings/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export default async function RepoSettingsPage({ params }: Props) {
109109
</CardDescription>
110110
</CardHeader>
111111
<CardContent>
112-
<DeleteRepoButton repoId={id} repoName={repo.name} variant="button" />
112+
<DeleteRepoButton repoId={id} repoName={repo.name} variant="button" redirectTo="/" />
113113
</CardContent>
114114
</Card>
115115
</div>

packages/web/src/components/repos/delete-repo-button.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@ interface DeleteRepoButtonProps {
1818
repoId: string;
1919
repoName: string;
2020
variant?: "icon" | "button";
21+
redirectTo?: string;
2122
}
2223

23-
export function DeleteRepoButton({ repoId, repoName, variant = "icon" }: DeleteRepoButtonProps) {
24+
export function DeleteRepoButton({
25+
repoId,
26+
repoName,
27+
variant = "icon",
28+
redirectTo,
29+
}: DeleteRepoButtonProps) {
2430
const [open, setOpen] = useState(false);
2531
const [deleting, setDeleting] = useState(false);
2632
const router = useRouter();
@@ -31,7 +37,11 @@ export function DeleteRepoButton({ repoId, repoName, variant = "icon" }: DeleteR
3137
const result = await deleteRepo(repoId);
3238
toast.success(`Deleted ${repoName}${result.deleted_pages} pages removed`);
3339
setOpen(false);
34-
router.refresh();
40+
if (redirectTo) {
41+
router.push(redirectTo);
42+
} else {
43+
router.refresh();
44+
}
3545
} catch (err) {
3646
toast.error(`Failed to delete: ${err instanceof Error ? err.message : "Unknown error"}`);
3747
} finally {

0 commit comments

Comments
 (0)