65 lines
1.8 KiB
TypeScript
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]!
|
|
}
|