diff --git a/server/src/core/scenarios/set_active_pipeline_to_realtime_service_scenario.ts b/server/src/core/scenarios/set_active_pipeline_to_realtime_service_scenario.ts index 38d9ad5..eb133bd 100644 --- a/server/src/core/scenarios/set_active_pipeline_to_realtime_service_scenario.ts +++ b/server/src/core/scenarios/set_active_pipeline_to_realtime_service_scenario.ts @@ -1,8 +1,6 @@ -import { - IProjectInstanceModel, - ProjectInstanceDbModel, -} from "../../features/projects/models/project_instance_database_model"; + import { pipelineRealTimeService } from "../../features/_realtime/realtime_presentation"; +import { IProjectModel, ProjectDBModel } from "../../features/projects/models/project_model_database_model"; import { App } from "../controllers/app"; import { CreateFolderUseCase } from "../usecases/create_folder_usecase"; import { SearchOneDataBaseModelUseCase } from "../usecases/search_database_model_usecase"; @@ -10,19 +8,15 @@ import { SearchOneDataBaseModelUseCase } from "../usecases/search_database_model export class SetLastActivePipelineToRealTimeServiceScenario { call = async (): Promise => { return ( - await new SearchOneDataBaseModelUseCase(ProjectInstanceDbModel).call({ + await new SearchOneDataBaseModelUseCase(ProjectDBModel).call({ isActive: true, }) ).fold( async (projectModel) => { - if (projectModel.project === null) { - return; - } - + const projectPath = App.staticFilesStoreDir() + projectModel.rootDir + "/"; await new CreateFolderUseCase().call(projectPath); pipelineRealTimeService.setPipelineDependency( - projectModel.project.pipelines, projectPath, projectModel._id, projectModel.rootDir diff --git a/server/src/core/services/pipeline_real_time_service.ts b/server/src/core/services/pipeline_real_time_service.ts index 3213df4..3a3affa 100644 --- a/server/src/core/services/pipeline_real_time_service.ts +++ b/server/src/core/services/pipeline_real_time_service.ts @@ -58,9 +58,8 @@ export class PipelineRealTimeService extends TypedEvent { this.status.pipelineIsRunning = false; } } - setPipelineDependency(pipelineModels: IPipeline[], path: string, projectId: string, rootDir: string) { - this.pipelineModels = pipelineModels; - this.status["projectId"] = projectId; + setPipelineDependency(path: string, projectId: string, rootDir: string) { + this.status["projectId"] = projectId; this.status["path"] = path; this.status["rootDir"] = rootDir; } diff --git a/server/src/features/_projects/models/project_validation_model.ts b/server/src/features/_projects/models/project_validation_model.ts deleted file mode 100644 index 6bd03d0..0000000 --- a/server/src/features/_projects/models/project_validation_model.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IsArray, IsString } from "class-validator"; - -export class ProjectValidationModel { - @IsArray() - public pipelines: [string]; - - @IsString() - public description: string; -} diff --git a/server/src/features/_projects/projects_presentation.ts b/server/src/features/_projects/projects_presentation.ts deleted file mode 100644 index 253bf2c..0000000 --- a/server/src/features/_projects/projects_presentation.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CrudController } from "../../core/controllers/crud_controller"; -import { ProjectDBModel } from "./models/project_database_model"; -import { ProjectValidationModel } from "./models/project_validation_model"; - -export class ProjectsPresentation extends CrudController { - constructor() { - super({ - url: "project", - validationModel: ProjectValidationModel, - databaseModel: ProjectDBModel, - }); - } -} diff --git a/server/src/features/_realtime/domain/run_instance_pipeline_usecase.ts b/server/src/features/_realtime/domain/run_instance_pipeline_usecase.ts index b47b873..065394b 100644 --- a/server/src/features/_realtime/domain/run_instance_pipeline_usecase.ts +++ b/server/src/features/_realtime/domain/run_instance_pipeline_usecase.ts @@ -1,50 +1,28 @@ import { App } from "../../../core/controllers/app"; import { CallbackStrategyWithEmpty } from "../../../core/controllers/http_controller"; import { Result } from "../../../core/helpers/result"; -import { IPipeline } from "../../../core/models/process_model"; import { ReadByIdDataBaseModelUseCase } from "../../../core/usecases/read_by_id_database_model_usecase"; -import { PipelineValidationModel } from "../../_pipelines/models/pipeline_validation_model"; -import { IProjectInstanceModel, ProjectInstanceDbModel } from "../../projects/models/project_instance_database_model"; +import { IProjectModel, ProjectDBModel } from "../../projects/models/project_model_database_model"; import { pipelineRealTimeService } from "../realtime_presentation"; import { PipelineStatusUseCase } from "./pipeline_status_usecase"; -const mongoPipelineModelMapper = (el: PipelineValidationModel): IPipeline => { - const mapObj: IPipeline = { - process: { - type: el.process.type, - command: el.process.command, - isGenerating: Boolean(el.process.isGenerating), - isLocaleCode: Boolean(el.process.isLocaleCode), - issueType: el.process.issueType, - }, - trigger: { - type: el.trigger.type, - value: el.trigger.value.map((el) => String(el)), - }, - env: null, - stackGenerateType: el.stackGenerateType, - }; - return mapObj; -}; - + export class RunInstancePipelineUseCase extends CallbackStrategyWithEmpty { async call(): Promise> { return (await new PipelineStatusUseCase().call()).map(async (activePipelineModel) => { if (activePipelineModel.pipelineIsRunning) { return Result.error("pipeline is running"); } - const readByIdDataBaseModelUseCase = await new ReadByIdDataBaseModelUseCase( - ProjectInstanceDbModel + const readByIdDataBaseModelUseCase = await new ReadByIdDataBaseModelUseCase( + ProjectDBModel ).call(activePipelineModel.projectId); if (readByIdDataBaseModelUseCase.isFailure()) { return readByIdDataBaseModelUseCase.forward(); } const projectModel = readByIdDataBaseModelUseCase.value; - const resultMapper = projectModel.project.pipelines.map((el) => mongoPipelineModelMapper(el)); - + pipelineRealTimeService.setPipelineDependency( - resultMapper, App.staticFilesStoreDir() + projectModel.rootDir + "/", projectModel._id, projectModel.rootDir diff --git a/server/src/features/behavior_trees/domain/get_behavior_tree_active_project_scenario.ts b/server/src/features/behavior_trees/domain/get_behavior_tree_active_project_scenario.ts index ecc7c6a..d42cfc7 100644 --- a/server/src/features/behavior_trees/domain/get_behavior_tree_active_project_scenario.ts +++ b/server/src/features/behavior_trees/domain/get_behavior_tree_active_project_scenario.ts @@ -1,7 +1,7 @@ import { CallbackStrategyWithEmpty, ResponseBase } from "../../../core/controllers/http_controller"; import { Result } from "../../../core/helpers/result"; import { SearchOneDataBaseModelUseCase } from "../../../core/usecases/search_database_model_usecase"; -import { IProjectModel, ProjectDBModel } from "../../_projects/models/project_database_model"; +import { IProjectModel, ProjectDBModel } from "../../projects/models/project_model_database_model"; import { BehaviorTreeDBModel } from "../models/behavior_tree_database_model"; export class GetBehaviorTreeActiveProjectScenario extends CallbackStrategyWithEmpty { diff --git a/server/src/features/behavior_trees/domain/save_bt_scenario.ts b/server/src/features/behavior_trees/domain/save_bt_scenario.ts index 05bca8c..c08d1b8 100644 --- a/server/src/features/behavior_trees/domain/save_bt_scenario.ts +++ b/server/src/features/behavior_trees/domain/save_bt_scenario.ts @@ -2,8 +2,8 @@ import { CallbackStrategyWithValidationModel, ResponseBase } from "../../../core import { CreateFileUseCase } from "../../../core/usecases/create_file_usecase"; import { CreateFolderUseCase } from "../../../core/usecases/create_folder_usecase"; import { SearchOneDataBaseModelUseCase } from "../../../core/usecases/search_database_model_usecase"; -import { IProjectModel, ProjectDBModel } from "../../_projects/models/project_database_model"; import { FolderStructure } from "../../projects/domain/upload_file_to_to_project_scenario"; +import { IProjectModel, ProjectDBModel } from "../../projects/models/project_model_database_model"; import { BehaviorTreeValidationModel } from "../models/behavior_tree_validation_model"; export class SaveBtScenario extends CallbackStrategyWithValidationModel { diff --git a/server/src/features/behavior_trees/models/behavior_tree_database_model.ts b/server/src/features/behavior_trees/models/behavior_tree_database_model.ts index 3d186d0..f44d0f8 100644 --- a/server/src/features/behavior_trees/models/behavior_tree_database_model.ts +++ b/server/src/features/behavior_trees/models/behavior_tree_database_model.ts @@ -1,5 +1,5 @@ import { Schema, model } from "mongoose"; -import { IProjectModel, projectSchema } from "../../_projects/models/project_database_model"; +import { IProjectModel, projectSchema } from "../../projects/models/project_model_database_model"; export interface IBehaviorTreeModel { name: string; diff --git a/server/src/features/datasets/domain/create_dataset_scenario.ts b/server/src/features/datasets/domain/create_dataset_scenario.ts index 330fda4..7257572 100644 --- a/server/src/features/datasets/domain/create_dataset_scenario.ts +++ b/server/src/features/datasets/domain/create_dataset_scenario.ts @@ -5,9 +5,9 @@ import { TypedEvent } from "../../../core/helpers/typed_event"; import { EXEC_EVENT, ExecError, SpawnError } from "../../../core/models/exec_error_model"; import { ExecutorResult } from "../../../core/models/executor_result"; import { SearchOneDataBaseModelUseCase } from "../../../core/usecases/search_database_model_usecase"; -import { IProjectModel, ProjectDBModel } from "../../_projects/models/project_database_model"; import { DatasetDBModel } from "../models/dataset_database_model"; import { DatasetValidationModel, ProcessStatus } from "../models/dataset_validation_model"; +import { IProjectModel, ProjectDBModel } from "../../projects/models/project_model_database_model"; export class ProcessWatcherAndDatabaseUpdateService extends TypedEvent< Result diff --git a/server/src/features/datasets/domain/get_dataset_active_project_scenario.ts b/server/src/features/datasets/domain/get_dataset_active_project_scenario.ts index f99adb2..8a65913 100644 --- a/server/src/features/datasets/domain/get_dataset_active_project_scenario.ts +++ b/server/src/features/datasets/domain/get_dataset_active_project_scenario.ts @@ -1,7 +1,7 @@ import { CallbackStrategyWithEmpty, ResponseBase } from "../../../core/controllers/http_controller"; import { Result } from "../../../core/helpers/result"; import { SearchOneDataBaseModelUseCase } from "../../../core/usecases/search_database_model_usecase"; -import { IProjectModel, ProjectDBModel } from "../../_projects/models/project_database_model"; +import { IProjectModel, ProjectDBModel } from "../../projects/models/project_model_database_model"; import { DatasetDBModel } from "../models/dataset_database_model"; export class GetDatasetActiveProjectScenario extends CallbackStrategyWithEmpty { diff --git a/server/src/features/datasets/models/dataset_database_model.ts b/server/src/features/datasets/models/dataset_database_model.ts index 3903591..9e18a05 100644 --- a/server/src/features/datasets/models/dataset_database_model.ts +++ b/server/src/features/datasets/models/dataset_database_model.ts @@ -1,7 +1,7 @@ import { Schema, model } from "mongoose"; import { IDatasetModel } from "./dataset_validation_model"; -import { projectSchema } from "../../_projects/models/project_database_model"; - +import { projectSchema } from "../../projects/models/project_model_database_model"; + export const DatasetSchema = new Schema({ name: { type: String, diff --git a/server/src/features/datasets/models/dataset_validation_model.ts b/server/src/features/datasets/models/dataset_validation_model.ts index e10a7a5..5486ace 100644 --- a/server/src/features/datasets/models/dataset_validation_model.ts +++ b/server/src/features/datasets/models/dataset_validation_model.ts @@ -1,6 +1,6 @@ import { Type } from "class-transformer"; import { IsArray, IsOptional, IsString, ValidateNested } from "class-validator"; -import { IProjectModel } from "../../_projects/models/project_database_model"; +import { IProjectModel } from "../../projects/models/project_model_database_model"; export class FormBuilderValidationModel { @IsString() diff --git a/server/src/features/projects/domain/create_new_project_scenario.ts b/server/src/features/projects/domain/create_new_project_scenario.ts index b2ee76c..8b2fb09 100644 --- a/server/src/features/projects/domain/create_new_project_scenario.ts +++ b/server/src/features/projects/domain/create_new_project_scenario.ts @@ -2,9 +2,8 @@ import { App } from "../../../core/controllers/app"; import { Result } from "../../../core/helpers/result"; import { v4 as uuidv4 } from "uuid"; import { IsString } from "class-validator"; -import { ProjectDBModel } from "../../_projects/models/project_database_model"; -import { CreateDataBaseModelUseCase } from "../../../core/usecases/create_database_model_usecase"; import { CreateFolderUseCase } from "../../../core/usecases/create_folder_usecase"; +import { ProjectDBModel } from "../models/project_model_database_model"; export class ProjectValidationModel { @IsString() diff --git a/server/src/features/projects/domain/get_active_project_scenario.ts b/server/src/features/projects/domain/get_active_project_scenario.ts index cd6aea0..4c4d14a 100644 --- a/server/src/features/projects/domain/get_active_project_scenario.ts +++ b/server/src/features/projects/domain/get_active_project_scenario.ts @@ -1,7 +1,7 @@ -import { CallbackStrategyWithEmpty, ResponseBase } from "../../../core/controllers/http_controller"; +import { CallbackStrategyWithEmpty } from "../../../core/controllers/http_controller"; import { Result } from "../../../core/helpers/result"; import { SearchOneDataBaseModelUseCase } from "../../../core/usecases/search_database_model_usecase"; -import { IProjectModel, ProjectDBModel } from "../../_projects/models/project_database_model"; +import { IProjectModel, ProjectDBModel } from "../models/project_model_database_model"; export class GetActiveProjectScenario extends CallbackStrategyWithEmpty { async call(): Promise> { diff --git a/server/src/features/projects/domain/robossembler_assets_network_mapper_scenario.ts b/server/src/features/projects/domain/robossembler_assets_network_mapper_scenario.ts index c788900..61f0a04 100644 --- a/server/src/features/projects/domain/robossembler_assets_network_mapper_scenario.ts +++ b/server/src/features/projects/domain/robossembler_assets_network_mapper_scenario.ts @@ -4,7 +4,7 @@ import { RobossemblerAssets } from "../../../core/models/robossembler_assets"; import { StaticFiles } from "../../../core/models/static_files"; import { ReadingJsonFileAndConvertingToInstanceClassScenario } from "../../../core/scenarios/read_file_and_json_to_plain_instance_class_scenario"; import { GetServerAddressUseCase } from "../../../core/usecases/get_server_address_usecase"; -import { ProjectDBModel } from "../../_projects/models/project_database_model"; +import { ProjectDBModel } from "../models/project_model_database_model"; export class RobossemblerAssetsNetworkMapperScenario extends CallbackStrategyWithEmpty { async call(): ResponseBase { diff --git a/server/src/features/projects/domain/set_active_project_use_scenario.ts b/server/src/features/projects/domain/set_active_project_use_scenario.ts index 5bc82d8..5cb5caa 100644 --- a/server/src/features/projects/domain/set_active_project_use_scenario.ts +++ b/server/src/features/projects/domain/set_active_project_use_scenario.ts @@ -6,37 +6,23 @@ import { CreateFolderUseCase } from "../../../core/usecases/create_folder_usecas import { ReadByIdDataBaseModelUseCase } from "../../../core/usecases/read_by_id_database_model_usecase"; import { UpdateDataBaseModelUseCase } from "../../../core/usecases/update_database_model_usecase"; import { MongoIdValidation } from "../../../core/validations/mongo_id_validation"; -import { IProjectInstanceModel, ProjectInstanceDbModel } from "../models/project_instance_database_model"; - +import { IProjectModel, ProjectDBModel } from "../models/project_model_database_model"; + export class SetActiveProjectScenario extends CallbackStrategyWithIdQuery { idValidationExpression = new MongoIdValidation(); - async call(id: string): ResponseBase { - try { - const result = await new ReadByIdDataBaseModelUseCase(ProjectInstanceDbModel).call(id); - // id - - if (result.isFailure()) { - return result.forward(); - } - const model = result.value; - - return await ( - await new CreateFolderUseCase().call(App.staticFilesStoreDir() + model.rootDir) - ).map(async () => { - model.isActive = true; - return (await new UpdateDataBaseModelUseCase(ProjectInstanceDbModel).call(model)).map(async (el) => { - // TODO(IDONTSUDO): move it to a separate UseCase - await ProjectInstanceDbModel.updateMany( - { _id: { $ne: el._id }, isActive: { $eq: true } }, - { isActive: false } - ); - await new SetLastActivePipelineToRealTimeServiceScenario().call(); - return Result.ok(`project ${id} is active`); - }); - }); - } catch (error) { - return Result.error("SetActiveProjectScenario error:" + String(error)); - } - } + call = async (id: string): ResponseBase => (await (await new ReadByIdDataBaseModelUseCase(ProjectDBModel).call(id)).map(async (model) => await ( + await new CreateFolderUseCase().call(model.rootDir) + ).map(async () => { + model.isActive = true; + return (await new UpdateDataBaseModelUseCase(ProjectDBModel).call(model)).map(async (el) => { + await ProjectDBModel.updateMany( + { _id: { $ne: el._id }, isActive: { $eq: true } }, + { isActive: false } + ); + await new SetLastActivePipelineToRealTimeServiceScenario().call(); + return Result.ok(`project ${id} is active`); + }); + }))) } + diff --git a/server/src/features/projects/domain/upload_file_to_to_project_scenario.ts b/server/src/features/projects/domain/upload_file_to_to_project_scenario.ts index aeca418..df77d24 100644 --- a/server/src/features/projects/domain/upload_file_to_to_project_scenario.ts +++ b/server/src/features/projects/domain/upload_file_to_to_project_scenario.ts @@ -2,12 +2,11 @@ import { CallbackStrategyWithFileUpload, ResponseBase } from "../../../core/cont import { IFile } from "../../../core/interfaces/file"; import { CreateFileUseCase } from "../../../core/usecases/create_file_usecase"; import { MongoIdValidation } from "../../../core/validations/mongo_id_validation"; -import { IProjectInstanceModel } from "../models/project_instance_database_model"; import { ReadByIdDataBaseModelUseCase } from "../../../core/usecases/read_by_id_database_model_usecase"; -import { ProjectDBModel } from "../../_projects/models/project_database_model"; import { ExecProcessUseCase } from "../../../core/usecases/exec_process_usecase"; import { Result } from "../../../core/helpers/result"; import { CreateManyFolderScenario } from "../../../core/scenarios/create_many_folder_scenario"; +import { IProjectModel, ProjectDBModel } from "../models/project_model_database_model"; export enum FolderStructure { assets = "assets", @@ -21,7 +20,7 @@ export class UploadCadFileToProjectScenario extends CallbackStrategyWithFileUplo idValidationExpression = new MongoIdValidation(); async call(file: IFile, id: string): ResponseBase { - return (await new ReadByIdDataBaseModelUseCase(ProjectDBModel).call(id)).map( + return (await new ReadByIdDataBaseModelUseCase(ProjectDBModel).call(id)).map( async (databaseModel) => (await new CreateFileUseCase().call(`${databaseModel.rootDir}/${file.name}`, file.data)).map(async () => ( diff --git a/server/src/features/projects/models/project_instance_database_model.ts b/server/src/features/projects/models/project_instance_database_model.ts deleted file mode 100644 index 604f8b9..0000000 --- a/server/src/features/projects/models/project_instance_database_model.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Schema, model } from "mongoose"; -import { IProjectModel, projectSchema } from "../../_projects/models/project_database_model"; - -export interface IProjectInstanceModel { - _id: string; - project: IProjectModel; - description: string; - rootDir: string; - isActive: boolean; -} - -export const ProjectInstanceSchema = new Schema({ - description: { - type: String, - }, - rootDir: { - type: String, - }, - isActive: { - type: Boolean, - default: false, - }, -}).plugin(require("mongoose-autopopulate")); - -export const schemaProjectInstance = "instance_project"; - -export const ProjectInstanceDbModel = model(schemaProjectInstance, ProjectInstanceSchema); diff --git a/server/src/features/_projects/models/project_database_model.ts b/server/src/features/projects/models/project_model_database_model.ts similarity index 79% rename from server/src/features/_projects/models/project_database_model.ts rename to server/src/features/projects/models/project_model_database_model.ts index e45b146..09d043b 100644 --- a/server/src/features/_projects/models/project_database_model.ts +++ b/server/src/features/projects/models/project_model_database_model.ts @@ -1,9 +1,7 @@ import { Schema, model } from "mongoose"; -import { PipelineValidationModel } from "../../_pipelines/models/pipeline_validation_model"; export interface IProjectModel { _id?: string; - pipelines: [PipelineValidationModel]; rootDir: string; description: string; isActive: boolean; diff --git a/server/src/features/projects/models/project_instance_validation_model.ts b/server/src/features/projects/models/project_validation_model.ts similarity index 72% rename from server/src/features/projects/models/project_instance_validation_model.ts rename to server/src/features/projects/models/project_validation_model.ts index ef7b6b0..52615cc 100644 --- a/server/src/features/projects/models/project_instance_validation_model.ts +++ b/server/src/features/projects/models/project_validation_model.ts @@ -1,4 +1,4 @@ -import { IsMongoId, IsOptional, IsString } from "class-validator"; +import { IsOptional, IsString } from "class-validator"; export class ProjectInstanceValidationModel { @IsString() diff --git a/server/src/features/projects/projects_presentation.ts b/server/src/features/projects/projects_presentation.ts index 1fa0714..bc45979 100644 --- a/server/src/features/projects/projects_presentation.ts +++ b/server/src/features/projects/projects_presentation.ts @@ -1,16 +1,15 @@ import { CrudController } from "../../core/controllers/crud_controller"; -import { ProjectDBModel } from "../_projects/models/project_database_model"; -import { CreateNewProjectInstanceScenario } from "./domain/create_new_project_scenario"; + import { CreateNewProjectInstanceScenario, ProjectValidationModel } from "./domain/create_new_project_scenario"; import { GetActiveProjectScenario } from "./domain/get_active_project_scenario"; import { RobossemblerAssetsNetworkMapperScenario } from "./domain/robossembler_assets_network_mapper_scenario"; import { SetActiveProjectScenario } from "./domain/set_active_project_use_scenario"; import { UploadCadFileToProjectScenario } from "./domain/upload_file_to_to_project_scenario"; -import { ProjectInstanceValidationModel as ProjectsValidationModel } from "./models/project_instance_validation_model"; - -export class ProjectsPresentation extends CrudController { +import { ProjectDBModel } from "./models/project_model_database_model"; + +export class ProjectsPresentation extends CrudController { constructor() { super({ - validationModel: ProjectsValidationModel, + validationModel: ProjectValidationModel, url: "projects", databaseModel: ProjectDBModel, }); diff --git a/server/src/features/weights/models/weights_validation_model.ts b/server/src/features/weights/models/weights_validation_model.ts index d400687..e2bbd35 100644 --- a/server/src/features/weights/models/weights_validation_model.ts +++ b/server/src/features/weights/models/weights_validation_model.ts @@ -1,7 +1,7 @@ import { Schema, model } from "mongoose"; -import { IProjectModel, projectSchema } from "../../_projects/models/project_database_model"; import { datasetSchema } from "../../datasets/models/dataset_database_model"; import { IDatasetModel } from "../../datasets/models/dataset_validation_model"; +import { IProjectModel, projectSchema } from "../../projects/models/project_model_database_model"; export interface IWeightModel { name: string; diff --git a/ui/src/features/all_projects/data/project_repository.ts b/ui/src/features/all_projects/data/project_repository.ts index 237d4f4..6d25a33 100644 --- a/ui/src/features/all_projects/data/project_repository.ts +++ b/ui/src/features/all_projects/data/project_repository.ts @@ -13,6 +13,6 @@ export class ProjectRepository extends HttpRepository { return this._jsonRequest(HttpMethod.GET, "/projects/get/active/project/id"); } async setActivePipeline(id: string) { - return this._jsonRequest(HttpMethod.POST, `/project_instance/set/active/project?id=${id}`); + return this._jsonRequest(HttpMethod.POST, `/projects/set/active/project?id=${id}`); } } diff --git a/ui/src/features/all_projects/presentation/all_projects_screen.tsx b/ui/src/features/all_projects/presentation/all_projects_screen.tsx index c29b9cb..ec6f4fc 100644 --- a/ui/src/features/all_projects/presentation/all_projects_screen.tsx +++ b/ui/src/features/all_projects/presentation/all_projects_screen.tsx @@ -30,7 +30,7 @@ export const AllProjectScreen: React.FunctionComponent = observer(() => {
{store.projectsModels?.map((el) => { return ( -
+
{el.isActive ? ( - ) : null} + ) : }
{el.description}
); diff --git a/ui/src/features/all_projects/presentation/all_projects_store.ts b/ui/src/features/all_projects/presentation/all_projects_store.ts index 7de3ca0..f746959 100644 --- a/ui/src/features/all_projects/presentation/all_projects_store.ts +++ b/ui/src/features/all_projects/presentation/all_projects_store.ts @@ -19,6 +19,7 @@ export class ProjectView { } } export class AllProjectStore extends SimpleErrorState { + projectsModels?: IProjectModel[]; activeProjectId?: UUID; repository: ProjectRepository; @@ -33,12 +34,15 @@ export class AllProjectStore extends SimpleErrorState { async getActiveProjectId(): Promise { await this.mapOk("activeProjectId", this.repository.getActivePipeline()); } + setActiveProject = async (id: string) => { + await this.messageHttp(this.repository.setActivePipeline(id), { successMessage: "проект активирован", errorMessage: 'ошибка активации' }) + await this.mapOk("activeProjectId", this.repository.getActivePipeline()); + await this.mapOk("projectsModels", this.repository.getAllProject()); + } async init() { await Promise.all([this.getProjects(), this.getActiveProjectId()]); this.projectsModels?.map((el) => (el._id === this.activeProjectId ? ((el.isActive = true), el) : el)); } - async setPipelineActive(id: string) { - await this.httpHelper(this.repository.setActivePipeline(id)); - } + }