From c2da1d8f4c0ed3f65760374d727ee20f10992443 Mon Sep 17 00:00:00 2001 From: IDONTSUDO Date: Sat, 18 Jan 2025 15:29:07 +0300 Subject: [PATCH] progress --- .../behavior_trees_presentation.ts | 8 ++++++++ .../domain/delete_behavior_tree_scenario.ts | 16 ++++++++++++++++ .../domain/get_active_project_id_scenario.ts | 9 ++++----- server/src/main.ts | 2 ++ .../model/form_builder_validation_model.tsx | 14 +++++++++++++- ui/src/core/ui/drawer/drawer.tsx | 3 +-- ui/src/core/ui/form_builder/form_builder.tsx | 4 ++-- .../core/ui/form_builder/form_view_model.ts | 5 +++-- .../presentation/select_process.tsx | 1 + ui/src/core/ui/form_builder/test.tsx | 3 ++- ui/src/core/ui/input/input.tsx | 10 ---------- ui/src/core/ui/input/input_v2.tsx | 9 +++++---- .../behavior_tree_builder_http_repository.ts | 1 - .../behavior_tree_builder_screen.tsx | 19 +++++++++++++------ .../behavior_tree_builder_store.tsx | 1 + .../forms/form_builder/form_builder_form.tsx | 2 +- .../behavior_tree_manager_repository.ts | 2 +- ui/src/features/skills/skills_screen.tsx | 2 +- ui/src/index.tsx | 3 ++- 19 files changed, 76 insertions(+), 38 deletions(-) create mode 100644 server/src/features/behavior_trees/domain/delete_behavior_tree_scenario.ts diff --git a/server/src/features/behavior_trees/behavior_trees_presentation.ts b/server/src/features/behavior_trees/behavior_trees_presentation.ts index 1ea112a..cff6a73 100644 --- a/server/src/features/behavior_trees/behavior_trees_presentation.ts +++ b/server/src/features/behavior_trees/behavior_trees_presentation.ts @@ -8,6 +8,9 @@ import { SaveBtScenario as FillBtScenario } from "./domain/save_bt_scenario"; import { GetCameraUseCase } from "./domain/get_cameras_usecase"; import { GetRobotsUseCase } from "./domain/get_robots_usecase"; import { GetTopicsUseCase } from "./domain/get_topics_usecase"; +import { DeleteBehaviorTreeScenario } from "./domain/delete_behavior_tree_scenario"; + + export class BehaviorTreesPresentation extends CrudController { constructor() { @@ -43,6 +46,11 @@ export class BehaviorTreesPresentation extends CrudController ( + await new SearchOneDataBaseModelUseCase(ProjectDBModel).call({ isActive: true }, "no active projects") + ).map(async (model) => (await (new DeleteRecursiveFolderUseCase().call(`${model.rootDir}/${StaticFilesProject.behaviorTrees}`))).map(async () => (await new DeleteDataBaseModelUseCase(BehaviorTreeDBModel).call(id)))); +} \ No newline at end of file diff --git a/server/src/features/projects/domain/get_active_project_id_scenario.ts b/server/src/features/projects/domain/get_active_project_id_scenario.ts index 0e06a58..74267b3 100644 --- a/server/src/features/projects/domain/get_active_project_id_scenario.ts +++ b/server/src/features/projects/domain/get_active_project_id_scenario.ts @@ -4,9 +4,8 @@ import { SearchOneDataBaseModelUseCase } from "../../../core/usecases/search_dat import { IProjectModel, ProjectDBModel } from "../models/project_model_database_model"; export class GetActiveProjectIdScenario extends CallbackStrategyWithEmpty { - async call(): Promise> { - return ( - await new SearchOneDataBaseModelUseCase(ProjectDBModel).call({ isActive: true }, "no active projects") - ).map((model) => Result.ok({ id: model._id })); - } + call = async (): Promise> => ( + await new SearchOneDataBaseModelUseCase(ProjectDBModel).call({ isActive: true }, "no active projects") + ).map((model) => Result.ok({ id: model._id })); } + diff --git a/server/src/main.ts b/server/src/main.ts index 1398356..a499964 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -4,9 +4,11 @@ import { SocketSubscriber } from "./core/controllers/socket_controller"; import { extensions } from "./core/extensions/extensions"; import { httpRoutes } from "./core/controllers/routes"; import { executorProgramService } from "./core/usecases/exec_process_usecase"; +import { main } from "./p"; extensions(); const socketSubscribers = [new SocketSubscriber(executorProgramService, "realtime")]; new App(httpRoutes, socketSubscribers).listen(); +// main() \ No newline at end of file diff --git a/ui/src/core/model/form_builder_validation_model.tsx b/ui/src/core/model/form_builder_validation_model.tsx index 7fa447e..3f06c9a 100644 --- a/ui/src/core/model/form_builder_validation_model.tsx +++ b/ui/src/core/model/form_builder_validation_model.tsx @@ -10,7 +10,6 @@ export class FormBuilderValidationModel extends ValidationModel implements Depen @IsNotEmpty() @IsString() public result: string; - @IsNotEmpty() @IsString() public context: string; public form: string[]; @@ -36,6 +35,19 @@ export class FormBuilderValidationModel extends ValidationModel implements Depen static emptyTest = () => new FormBuilderValidationModel(``, ``, [], defaultFormValue); static creteDataSetTest = () => new FormBuilderValidationModel(``, scene, [], ""); static emptySimple = () => new FormBuilderValidationModel("", simpleFormBuilder, [], ""); + static eee = () => + new FormBuilderValidationModel( + ``, + `{ + "robot_name": \${ROBOT_NAME:string:rbs_arm}, + "pose": { + "position": { "x": \${X:number:0.1}, "y": \${Y:number:0.1}, "z": \${Z:number:0.7} }, + "orientation": { "x": \${X:number:0.1}, "y": \${Y:number:0.1}, "z": \${Z:number:0.7} } + } + }`, + [], + "" + ); static vision = () => new FormBuilderValidationModel( ` diff --git a/ui/src/core/ui/drawer/drawer.tsx b/ui/src/core/ui/drawer/drawer.tsx index d825d59..cf5092a 100644 --- a/ui/src/core/ui/drawer/drawer.tsx +++ b/ui/src/core/ui/drawer/drawer.tsx @@ -16,11 +16,10 @@ export const DrawerV2: React.FC<{ right: isOpen ? 0 : -300, width: 300, height: "100%", - backgroundColor: themeStore.theme.darkSurface, + backgroundColor: "#880ef8", boxShadow: "-2px 0 5px rgba(0, 0, 0, 0.5)", transition: "right 0.3s ease", zIndex: 1000, - }} >
diff --git a/ui/src/core/ui/form_builder/form_builder.tsx b/ui/src/core/ui/form_builder/form_builder.tsx index 753a02a..22abe72 100644 --- a/ui/src/core/ui/form_builder/form_builder.tsx +++ b/ui/src/core/ui/form_builder/form_builder.tsx @@ -100,7 +100,7 @@ export const FormBuilder = observer( return (
store.changeTotalSubValue(element.id, subIndex, e, index)} validation={ @@ -131,7 +131,7 @@ export const FormBuilder = observer( return (
Number().isValid(el) : undefined} onChange={(e) => { store.changeTotalValue(element.id, e); diff --git a/ui/src/core/ui/form_builder/form_view_model.ts b/ui/src/core/ui/form_builder/form_view_model.ts index ec5e61b..a542e55 100644 --- a/ui/src/core/ui/form_builder/form_view_model.ts +++ b/ui/src/core/ui/form_builder/form_view_model.ts @@ -95,7 +95,7 @@ export class FormViewModel { .replace(/[^\x00-\x7F]/g, "") .replaceAll("\n", "") .replaceAll("\\", "") - // .replaceAll("/", "") + // .replaceAll("/", "") ); } catch (error) { console.log("ERROR: FormViewModel json() " + result); @@ -190,8 +190,9 @@ export class FormViewModel { }); return result as unknown as string; } - static fromString(result: string, context: string): Result { + static fromString(result: string = '', context: string = ''): Result { try { + if (result.isEmpty() && context.isEmpty()) { return Result.error(undefined); } diff --git a/ui/src/core/ui/form_builder/forms/select_dataset/presentation/select_process.tsx b/ui/src/core/ui/form_builder/forms/select_dataset/presentation/select_process.tsx index 3df5c18..e05ed8b 100644 --- a/ui/src/core/ui/form_builder/forms/select_dataset/presentation/select_process.tsx +++ b/ui/src/core/ui/form_builder/forms/select_dataset/presentation/select_process.tsx @@ -12,6 +12,7 @@ import { message } from "antd"; export const SelectProcess = observer((props: IFormBuilderComponentsProps) => { const [store] = useState(new SelectProcessStore()); useEffect(() => { + console.log(props.dependency) store.loadClassInstance(SelectProcessModel, props.dependency); store.init(); }, []); diff --git a/ui/src/core/ui/form_builder/test.tsx b/ui/src/core/ui/form_builder/test.tsx index 1839520..b9735d7 100644 --- a/ui/src/core/ui/form_builder/test.tsx +++ b/ui/src/core/ui/form_builder/test.tsx @@ -9,7 +9,7 @@ import { FormBuilder } from "./form_builder"; import makeAutoObservable from "mobx-store-inheritance"; class FormBuilderTextStore extends ModalStore { - viewModel = FormBuilderValidationModel.vision(); + viewModel = FormBuilderValidationModel.eee(); constructor() { super(); makeAutoObservable(this); @@ -39,6 +39,7 @@ export const FormBuildTest = observer(() => { { + console.log(e) // console.log(e.output); console.log(JSON.stringify(e.output)) }} diff --git a/ui/src/core/ui/input/input.tsx b/ui/src/core/ui/input/input.tsx index 1a78a4a..a2af4d9 100644 --- a/ui/src/core/ui/input/input.tsx +++ b/ui/src/core/ui/input/input.tsx @@ -16,7 +16,6 @@ interface IInputProps extends IStyle { type?: CoreInputType; trim?: boolean; styleContentEditable?: React.CSSProperties; - isFormBuilder?: boolean; } export const CoreInput = (props: IInputProps) => { @@ -29,15 +28,6 @@ export const CoreInput = (props: IInputProps) => { setAppendInnerText(false); } }, [ref, value, isAppendInnerText, setAppendInnerText, props]); - // React.useEffect(() => { - // if (props.isFormBuilder) { - // if (ref.current && props.value) { - // ref.current.innerText = value; - // setValue(props.value); - // console.log(props.value); - // } - // } - // }, [props.value]); const isSmall = props.type !== undefined && props.type.isEqual(CoreInputType.small); return ( diff --git a/ui/src/core/ui/input/input_v2.tsx b/ui/src/core/ui/input/input_v2.tsx index 30bfc20..72e04aa 100644 --- a/ui/src/core/ui/input/input_v2.tsx +++ b/ui/src/core/ui/input/input_v2.tsx @@ -2,15 +2,16 @@ import { themeStore } from "../../.."; import { Icon } from "../icons/icons"; import { CoreText, CoreTextType, FontType } from "../text/text"; -interface InputV2Props { +export const InputV2: React.FC<{ + style?: React.CSSProperties; label: string; value?: string; trim?: boolean; + validation?: (value: string) => boolean; + error?: string; height?: number; onChange?: (text: string) => void; - -} -export const InputV2: React.FC = ({ label, height, value, onChange, trim }) => { +}> = ({ label, height, value, onChange, trim }) => { return (
>; - deleteBt = (id: string) => this._jsonRequest(HttpMethod.DELETE, `${this.featureApi}?id=${id}`); editBt = async (model: BehaviorTreeModel) => { await this._jsonRequest(HttpMethod.POST, `${this.featureApi}/fill/tree`, model); model.__v = undefined diff --git a/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_screen.tsx b/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_screen.tsx index 5a890c6..4f401b2 100644 --- a/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_screen.tsx +++ b/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_screen.tsx @@ -148,7 +148,7 @@ export const BehaviorTreeBuilderScreen = observer(() => { width: "calc(100% - 300px)", }} > - + {/*
{ }} /> - -
-
- - + {store.panels.map((el) => ( + <> + +
BANE
+
+
+ + + ))} + */}
diff --git a/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx b/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx index 126d256..e1fdc7c 100644 --- a/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx +++ b/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx @@ -70,6 +70,7 @@ export class BehaviorTreeBuilderStore extends UiDrawerFormState - {}} /> + (console.log(form), props.onChange(form))} /> )} diff --git a/ui/src/features/behavior_tree_manager/behavior_tree_manager_repository.ts b/ui/src/features/behavior_tree_manager/behavior_tree_manager_repository.ts index b99cbf2..a64f732 100644 --- a/ui/src/features/behavior_tree_manager/behavior_tree_manager_repository.ts +++ b/ui/src/features/behavior_tree_manager/behavior_tree_manager_repository.ts @@ -4,7 +4,7 @@ import { BehaviorTreeViewModel } from "../behavior_tree_builder/model/behavior_t export class BehaviorTreeManagerHttpRepository extends CoreHttpRepository { featureApi = `/behavior/trees`; - deleteBt = (id: string) => this._jsonRequest(HttpMethod.DELETE, `${this.featureApi}?id=${id}`); + deleteBt = (id: string) => this._jsonRequest(HttpMethod.POST, `${this.featureApi}/delete/bt?id=${id}`); saveNewBt = async (model: BehaviorTreeViewModel) => this._jsonRequest(HttpMethod.POST, this.featureApi, model); getAllBtInstances = async () => this._jsonRequest(HttpMethod.GET, this.featureApi); } diff --git a/ui/src/features/skills/skills_screen.tsx b/ui/src/features/skills/skills_screen.tsx index 894fc56..216604e 100644 --- a/ui/src/features/skills/skills_screen.tsx +++ b/ui/src/features/skills/skills_screen.tsx @@ -12,7 +12,6 @@ import { useStore } from "../../core/helper/use_store"; import { FormBuilder } from "../../core/ui/form_builder/form_builder"; import { ButtonV2 } from "../../core/ui/button/button_v2"; import { Result } from "../../core/helper/result"; -import { plainToInstance } from "class-transformer"; export const isValidJson = (json: any): Result => { try { @@ -288,3 +287,4 @@ export const SkillsScreen = observer(() => { ); }); + \ No newline at end of file diff --git a/ui/src/index.tsx b/ui/src/index.tsx index f3f461a..a2b72f7 100644 --- a/ui/src/index.tsx +++ b/ui/src/index.tsx @@ -1,4 +1,3 @@ - import "reflect-metadata"; import "antd/dist/antd.min.css"; import ReactDOM from "react-dom/client"; @@ -8,6 +7,7 @@ import { RouterProvider } from "react-router-dom"; import { router } from "./core/routers/routers"; import { configure } from "mobx"; import { ThemeStore } from "./core/store/theme_store"; +import { FormBuildTest } from "./core/ui/form_builder/test"; configure({ enforceActions: "never", @@ -23,5 +23,6 @@ root.render( + {/* */} );