import { IsArray, IsString, ValidateNested } from "class-validator"; import { Type } from "class-transformer"; import { ISkillView } from "../../features/behavior_tree_builder/presentation/ui/skill_tree/skill_tree"; import { v4 } from "uuid"; export interface ISkillPoseEstimation { SkillPackage: ISkillPackage; Module: IModule; Launch: ILaunch; ROS2: IRos2; BTAction: IBTAction[]; Interface: IInterface; Settings: ISetting[]; xxx: IXxx; } export interface IBTAction { name: string; format: string; type: string; param: string[]; result: string[]; } export interface IInterface { Input: IPut[]; Output: IPut[]; } export interface IPut { name: string; type: string; } export interface ILaunch { executable: string; } export interface IModule { name: string; description: string; } export interface IRos2 { node_name: string; } export interface ISetting { name: string; value: number | string; } export interface ISkillPackage { name: string; version: string; format: string; } export interface IXxx { cameraLink: string; topicImage: string; topicCameraInfo: string; } export class SkillPackage implements ISkillPackage { @IsString() name: string; @IsString() version: string; @IsString() format: string; } export class Module implements IModule { @IsString() name: string; @IsString() description: string; } export class BTAction implements IBTAction { @IsString() name: string; @IsString() format: string; @IsString() type: string; @IsArray() param: string[]; @IsArray() result: string[]; } export class Launch implements ILaunch { @IsString() executable: string; } export class Ros2 implements IRos2 { @IsString() node_name: string; } export class Put implements IPut { @IsString() name: string; @IsString() type: string; } export class Interface implements IInterface { @ValidateNested() @Type(() => Put) Input: IPut[]; @ValidateNested() @Type(() => Put) Output: IPut[]; } export class Setting implements ISetting { name: string; value: string | number; } export class Xxx implements IXxx { cameraLink: string; topicImage: string; topicCameraInfo: string; } export class SkillModelPoseEstimation implements ISkillPoseEstimation { @ValidateNested() @Type(() => SkillPackage) SkillPackage: ISkillPackage; @ValidateNested() @Type(() => Module) Module: IModule; @ValidateNested() @Type(() => Launch) Launch: ILaunch; @ValidateNested() @Type(() => Ros2) ROS2: IRos2; @ValidateNested() @IsArray() @Type(() => BTAction) BTAction: IBTAction[]; @ValidateNested() @Type(() => Interface) Interface: IInterface; @ValidateNested() @IsArray() @Type(() => Setting) Settings: ISetting[]; @ValidateNested() @Type(() => Xxx) xxx: IXxx; } export class Skills { @IsArray() @Type(() => SkillModelPoseEstimation) skills: SkillModelPoseEstimation[]; toSkillView(): ISkillView[] { return this.skills.map((el) => { return { name: el.Module.name, children: el.BTAction.map((act) => { // return { name: `${el.Module.name} - ${act.name}` }; return { name: act.name, uuid: v4() }; }), }; }); } getSkillDo(name: string) { return this.skills.reduce((acc, el) => { if (el.BTAction.find((el) => el.name.isEqual(name))) { acc = el.Module.name; } return acc; }, "error"); } getSkillsNames() { return this.skills .map((el) => { return el.BTAction.map((act) => { return { name: act.name }; }); }) .flat(1); } }