45 lines
1.4 KiB
TypeScript
45 lines
1.4 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',
|
|
'SCREEN_MODE_INTRO_DONE',
|
|
'SCREEN_MODE_CONCLUSION',
|
|
'SCREEN_MODE_CONCLUSION_DONE',
|
|
'SCREEN_MODE_RESULTS',
|
|
'SCREEN_MODE_TIMER',
|
|
'SCREEN_MODE_TEXT',
|
|
] as const satisfies readonly ScreenMode[]
|
|
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) })) }
|
|
}
|