summaryrefslogtreecommitdiffhomepage
path: root/packages/api
diff options
context:
space:
mode:
Diffstat (limited to 'packages/api')
-rw-r--r--packages/api/src/routes/tabs.ts13
1 files changed, 13 insertions, 0 deletions
diff --git a/packages/api/src/routes/tabs.ts b/packages/api/src/routes/tabs.ts
index f52ee99..28a89f1 100644
--- a/packages/api/src/routes/tabs.ts
+++ b/packages/api/src/routes/tabs.ts
@@ -11,6 +11,7 @@ import {
listOpenTabs,
setSetting,
updateTabModel,
+ updateTabPositions,
updateTabStatus,
updateTabTitle,
} from "@dispatch/core";
@@ -63,6 +64,18 @@ tabsRoutes.put("/settings/title-model", async (c) => {
return c.json({ success: true });
});
+// Reorder open tabs. Body `{ ids }` is the new left-to-right order of tab ids;
+// each tab's `position` is rewritten to its index. Must be declared before the
+// `/:id` routes so "reorder" isn't captured as an id param.
+tabsRoutes.patch("/reorder", async (c) => {
+ const body = await c.req.json<{ ids?: string[] }>();
+ if (!Array.isArray(body.ids) || body.ids.some((id) => typeof id !== "string")) {
+ return c.json({ error: "ids must be an array of strings" }, 400);
+ }
+ updateTabPositions(body.ids);
+ return c.json({ success: true });
+});
+
tabsRoutes.get("/:id", (c) => {
const id = c.req.param("id");
const tab = getTab(id);