Files
evening_detective_screen/electron/api-values.ts
T
2026-10-23 03:02:55 +07:00

65 lines
1.8 KiB
TypeScript

import type {
ScreenCommand,
ScreenMode,
SaveScreenPlanReq,
} from './api/generated/crabs/evening_detective_server/index.js'
import type { ScreenPlan } from '../src/types/screen.js'
const modes = [
'SCREEN_MODE_UNSPECIFIED',
'SCREEN_MODE_COVER',
'SCREEN_MODE_INTRO',
undefined,
'SCREEN_MODE_CONCLUSION',
undefined,
'SCREEN_MODE_RESULTS',
'SCREEN_MODE_TIMER',
'SCREEN_MODE_TEXT',
'SCREEN_MODE_QR',
'SCREEN_MODE_TEAMS',
] as const satisfies readonly (ScreenMode | undefined)[]
const commands = [
'SCREEN_COMMAND_UNSPECIFIED',
'SCREEN_COMMAND_PLAY',
'SCREEN_COMMAND_PAUSE',
'SCREEN_COMMAND_RESUME',
'SCREEN_COMMAND_STOP',
'SCREEN_COMMAND_REPLAY',
'SCREEN_COMMAND_SEEK',
'SCREEN_COMMAND_VOLUME',
'SCREEN_COMMAND_TIMER_START',
'SCREEN_COMMAND_TIMER_PAUSE',
'SCREEN_COMMAND_TIMER_RESUME',
'SCREEN_COMMAND_TIMER_RESET',
] as const satisfies readonly ScreenCommand[]
export function apiScreenMode(mode: number): ScreenMode {
const value = modes[mode]
if (!value) throw new Error('Некорректный режим экрана')
return value
}
export function apiScreenCommand(command: number): ScreenCommand {
const value = commands[command]
if (!value) throw new Error('Некорректная команда экрана')
return value
}
export function apiPlan(plan: ScreenPlan): Pick<SaveScreenPlanReq, 'steps' | 'currentStep'> {
return {
...plan,
steps: plan.steps.map((step) => ({
...step,
mode: apiScreenMode(step.mode),
qrUrl: step.qrUrl,
timerType: apiTimerType(step.timerType),
})),
}
}
export function apiTimerType(value = 0) {
return (
[
'SCREEN_TIMER_TYPE_BREAK',
'SCREEN_TIMER_TYPE_BEFORE_GAME',
'SCREEN_TIMER_TYPE_UNTIL_END',
] as const
)[value]!
}