134 lines
2.2 KiB
TypeScript

import {
BaseEntity,
AITextEntity,
RoleEntity,
TagEntity,
SceneEntity,
VideoSegmentEntity
} from './Entities';
/**
* 可编辑项类型枚举
*/
export enum ItemType {
/** 文本 */
TEXT,
/** 图片 */
IMAGE,
/** 视频 */
VIDEO,
}
/**
* 可编辑项抽象基类
*/
export abstract class EditItem<T extends BaseEntity> {
/** 被包装的实体 */
entity!: T;
/** 编辑元数据 */
metadata: Record<string, any>;
/**禁用编辑 */
disableEdit!: boolean;
/** 类型 */
abstract type: ItemType;
constructor(
entity: T,
metadata: Record<string, any> = {}
) {
this.metadata = metadata;
this.setEntity(entity);
}
/**
* 设置元数据
*/
setMetadata(metadata: Record<string, any>): void {
this.metadata = metadata;
}
/**
* 更新实体
*/
setEntity(entity: T): void {
this.entity = entity;
this.disableEdit = entity.disableEdit;
}
}
/**
* AI文本可编辑项
*/
export class TextItem extends EditItem<AITextEntity> {
type: ItemType.TEXT = ItemType.TEXT;
constructor(
entity: AITextEntity,
metadata: Record<string, any> = {}
) {
super(entity, metadata);
}
}
/**
* 角色可编辑项
*/
export class RoleItem extends EditItem<RoleEntity> {
type: ItemType.IMAGE = ItemType.IMAGE;
constructor(
entity: RoleEntity,
metadata: Record<string, any> = {}
) {
super(entity, metadata);
}
}
/**
* 标签可编辑项
*/
export class TagItem extends EditItem<TagEntity> {
type: ItemType.TEXT = ItemType.TEXT;
constructor(
entity: TagEntity,
metadata: Record<string, any> = {}
) {
super(entity, metadata);
}
}
/**
* 场景可编辑项
*/
export class SceneItem extends EditItem<SceneEntity> {
type: ItemType.IMAGE = ItemType.IMAGE;
constructor(
entity: SceneEntity,
metadata: Record<string, any> = {}
) {
super(entity, metadata);
}
}
/**
* 视频片段可编辑项
*/
export class VideoSegmentItem extends EditItem<VideoSegmentEntity> {
type: ItemType = ItemType.IMAGE;
constructor(
entity: VideoSegmentEntity,
metadata: Record<string, any> = {}
) {
super(entity, metadata);
}
/**
* 更新为视频状态
*/
updateToVideoStatus(): void {
this.type = ItemType.VIDEO;
}
}