OpenMAIC-React / src /lib /api /stage-api-defaults.ts
muthuk1's picture
Convert OpenMAIC from Next.js to React (Vite)
f56a29b verified
raw
history blame
2.68 kB
/**
* Stage API - Default Content & Utility Functions
*
* Shared utility functions for ID generation, scene validation,
* and default content creation.
*/
import { nanoid } from 'nanoid';
import type {
Scene,
SceneType,
SceneContent,
SlideContent,
QuizContent,
InteractiveContent,
PBLContent,
} from '@/lib/types/stage';
// ==================== Utility Functions ====================
/**
* Generate a unique ID
*/
export function generateId(prefix?: string): string {
return prefix ? `${prefix}_${nanoid(10)}` : nanoid(10);
}
/**
* Validate whether a Scene ID exists
*/
export function validateSceneId(scenes: Scene[], sceneId: string): boolean {
return scenes.some((s) => s.id === sceneId);
}
/**
* Get a Scene
*/
export function getScene(scenes: Scene[], sceneId: string): Scene | null {
return scenes.find((s) => s.id === sceneId) || null;
}
/**
* Create default SlideContent
*/
export function createDefaultSlideContent(): SlideContent {
return {
type: 'slide',
canvas: {
id: generateId('slide'),
viewportSize: 1000,
viewportRatio: 0.5625, // 16:9
theme: {
backgroundColor: '#ffffff',
themeColors: ['#5b9bd5', '#ed7d31', '#a5a5a5', '#ffc000', '#4472c4'],
fontColor: '#333333',
fontName: 'Microsoft YaHei',
outline: {
color: '#d14424',
width: 2,
style: 'solid',
},
shadow: {
h: 0,
v: 0,
blur: 10,
color: '#000000',
},
},
elements: [],
},
};
}
/**
* Create default QuizContent
*/
export function createDefaultQuizContent(): QuizContent {
return {
type: 'quiz',
questions: [],
};
}
/**
* Create default InteractiveContent
*/
export function createDefaultInteractiveContent(): InteractiveContent {
return {
type: 'interactive',
url: '',
};
}
/**
* Create default PBLContent
*/
export function createDefaultPBLContent(): PBLContent {
return {
type: 'pbl',
projectConfig: {
projectInfo: { title: '', description: '' },
agents: [],
issueboard: { agent_ids: [], issues: [], current_issue_id: null },
chat: { messages: [] },
},
};
}
/**
* Create default Content based on type
*/
export function createDefaultContent(type: SceneType): SceneContent {
switch (type) {
case 'slide':
return createDefaultSlideContent();
case 'quiz':
return createDefaultQuizContent();
case 'interactive':
return createDefaultInteractiveContent();
case 'pbl':
return createDefaultPBLContent();
default:
throw new Error(`Unknown scene type: ${type}`);
}
}