webstudio/ui/src/features/dataset/dataset_store.ts

166 lines
5.4 KiB
TypeScript
Raw Normal View History

import makeAutoObservable from "mobx-store-inheritance";
2024-05-29 15:38:36 +03:00
import { DataSetHttpRepository } from "./dataset_http_repository";
2024-05-13 20:43:11 +03:00
import { Drawer, UiErrorState } from "../../core/store/base_store";
import { HttpError } from "../../core/repository/http_repository";
2024-06-20 21:45:57 +03:00
import { DataSetModel, IDatasetModel, ProcessStatus } from "./dataset_model";
import { message } from "antd";
import { UUID } from "../all_projects/data/project_repository";
2024-04-16 15:20:24 +03:00
import { SocketRepository, socketRepository } from "../../core/repository/socket_repository";
2024-06-20 21:45:57 +03:00
import { Parts } from "../details/details_http_repository";
2024-04-11 22:02:57 +03:00
export enum DrawersDataset {
NewDataset = "Новый датасет",
FormBuilderDrawer = "Редактировать датасет",
}
2024-05-13 20:43:11 +03:00
export class DataSetStore extends UiErrorState<HttpError> {
2024-05-29 15:38:36 +03:00
dataSetRepository: DataSetHttpRepository;
2024-06-20 21:45:57 +03:00
parts?: Parts[];
datasets?: IDatasetModel[];
activeProject: UUID;
dataSetModel = DataSetModel.empty();
2024-04-11 22:02:57 +03:00
drawers: Drawer[];
2024-04-16 15:20:24 +03:00
socketRepository: SocketRepository;
2024-04-18 20:44:26 +03:00
titleDrawer: string = DrawersDataset.NewDataset;
constructor() {
super();
2024-04-16 15:20:24 +03:00
this.socketRepository = socketRepository;
2024-05-29 15:38:36 +03:00
this.dataSetRepository = new DataSetHttpRepository();
2024-04-11 22:02:57 +03:00
this.drawers = Object.entries(DrawersDataset).map((k, v) => {
return {
name: k.at(1) ?? "",
status: false,
};
});
makeAutoObservable(this);
2024-04-16 15:20:24 +03:00
socketRepository.on((e) => {
if (e.event === "realtime") {
if (e.payload !== undefined && e.payload.value !== undefined && e.payload.value.id !== undefined) {
this.updateDatasetStatus(String(e.payload.value.id), ProcessStatus.END);
}
if (e.payload !== undefined && e.payload.error !== undefined && e.payload.error.id !== undefined) {
this.updateDatasetStatus(String(e.payload.error.id), ProcessStatus.ERROR);
}
}
});
}
updateDatasetStatus(id: string, status: ProcessStatus) {
this.datasets = this.datasets?.map((el) => {
if (el._id.isEqual(id)) {
el.processStatus = status;
}
return el;
});
}
2024-04-15 18:24:44 +03:00
openEmptyCard() {
this.dataSetModel = DataSetModel.empty();
2024-04-18 20:44:26 +03:00
this.titleDrawer = DrawersDataset.NewDataset;
2024-04-15 18:24:44 +03:00
this.editDrawer(DrawersDataset.NewDataset, true);
}
2024-04-16 15:20:24 +03:00
2024-04-11 22:02:57 +03:00
setNewDatasetName(e: string): void {
this.dataSetModel.name = e;
}
setSkillSelected(el: string): void {
this.dataSetModel.datasetType = el;
}
skillIsSelected(el: string): boolean {
return el === this.dataSetModel.datasetType;
}
assetStatus(name: string): boolean {
return this.dataSetModel.dataSetObjects.includes(name);
}
2024-06-20 21:45:57 +03:00
datasetCheckBox(part: Parts): void {
if (this.assetStatus(part.name)) {
this.dataSetModel.dataSetObjects = this.dataSetModel.dataSetObjects.filter((el) => !el.isEqual(part.name));
2024-04-11 22:02:57 +03:00
} else {
2024-06-20 21:45:57 +03:00
this.dataSetModel.dataSetObjects.push(part.name);
2024-04-11 22:02:57 +03:00
}
}
editDrawer(drawerName: DrawersDataset, status: boolean): void {
this.drawers = this.drawers.map((el) => {
if (el.name === drawerName) {
el.status = status;
}
return el;
});
}
2024-04-15 18:24:44 +03:00
editDataset(id: string) {
2024-04-18 20:44:26 +03:00
this.titleDrawer = DrawersDataset.FormBuilderDrawer;
2024-04-15 18:24:44 +03:00
this.dataSetModel = DataSetModel.fromIDatasetModel(this.datasets?.find((el) => el._id === id) as IDatasetModel);
this.editDrawer(DrawersDataset.NewDataset, true);
}
deleteDataset = async (id: string) => {
(await this.dataSetRepository.deleteDataset(id)).fold(
async () => {
message.success("датасет удален");
await this.getDatasets();
},
async (e) => message.error(e.message)
);
};
2024-04-11 22:02:57 +03:00
runProcess = async (id: string): Promise<void> => {
(await this.dataSetRepository.isRunningProcess()).fold(
async (s) => {
(await this.dataSetRepository.execDatasetProcess(id)).fold(
() => {
2024-04-18 20:44:26 +03:00
this.updateDatasetStatus(id, ProcessStatus.RUN);
2024-04-11 22:02:57 +03:00
message.success("Процесс запущен");
},
(e) => message.error(e.message)
);
},
async (e) => message.error(e.message)
);
};
errorHandingStrategy = (error: HttpError) => {
message.error(error.message);
};
saveDataset(): void {
this.dataSetModel.project = this.activeProject.id;
this.dataSetModel.isValid().fold(
async () => {
2024-04-15 18:24:44 +03:00
if (this.dataSetModel.isNew) {
(await this.dataSetRepository.saveDataSet(this.dataSetModel)).fold(
async () => {
message.success("Датасет сохранен");
await this.getDatasets();
2024-04-18 20:44:26 +03:00
this.editDrawer(DrawersDataset.NewDataset, false);
2024-04-15 18:24:44 +03:00
},
async (error) => message.error(error.message)
);
} else {
(await this.dataSetRepository.editDataset(this.dataSetModel)).fold(
async () => {
message.success("Настройки датасета измнены");
await this.getDatasets();
2024-04-18 20:44:26 +03:00
this.editDrawer(DrawersDataset.NewDataset, false);
2024-04-15 18:24:44 +03:00
},
async (error) => message.error(error.message)
);
}
},
async (error) => message.error(error)
);
}
init = async () => {
2024-06-20 21:45:57 +03:00
await this.mapOk("parts", this.dataSetRepository.getAssetsActiveProject());
2024-04-15 18:24:44 +03:00
await this.getDatasets();
await this.mapOk("activeProject", this.dataSetRepository.getActiveProjectId());
};
2024-04-15 18:24:44 +03:00
getDatasets = async () => {
await this.mapOk("datasets", this.dataSetRepository.getDatasetsActiveProject());
};
}