Files
dc-recorder/src/routes/uiStateRoutes.ts

53 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-05-14 19:46:47 +07:00
import type { Router } from "express";
import express from "express";
import { createChildLogger } from "../logger";
const logger = createChildLogger("ui-state-routes");
export interface SharedUIState {
selectedVoiceGuild: string;
2026-05-14 19:46:47 +07:00
selectedVoiceChannel: string;
selectedTextGuild: string;
2026-05-14 19:46:47 +07:00
selectedTextChannel: string;
activeTab: "voice" | "text";
isListening: boolean;
isStreaming: boolean;
}
export type SharedUIStatePatch = Partial<SharedUIState> & {
selectedGuild?: string;
};
2026-05-14 19:46:47 +07:00
export interface UIStateRouteOptions {
getSharedUIState: () => SharedUIState;
patchSharedUIState: (patch: SharedUIStatePatch) => SharedUIState;
2026-05-14 19:46:47 +07:00
}
export function createUIStateRoutes(options: UIStateRouteOptions): Router {
const router = express.Router();
const { getSharedUIState, patchSharedUIState } = options;
// GET /api/ui-state - Get current UI state
router.get("/ui-state", (_req, res, next) => {
try {
const state = getSharedUIState();
res.json(state);
} catch (error) {
next(error);
}
});
// POST /api/ui-state - Update UI state
router.post("/ui-state", (req, res, next) => {
try {
const patch = req.body as SharedUIStatePatch;
2026-05-14 19:46:47 +07:00
const updated = patchSharedUIState(patch);
res.json(updated);
} catch (error) {
next(error);
}
});
return router;
}