webstudio/ui/src/features/dataset/dataset_store.ts
2024-04-15 18:24:44 +03:00

142 lines
4.2 KiB
TypeScript

import makeAutoObservable from "mobx-store-inheritance";
import { DataSetRepository } from "./dataset_repository";
import { UiErrorState } from "../../core/store/base_store";
import { HttpError } from "../../core/repository/http_repository";
import { Asset, Assets, DataSetModel, IDatasetModel } from "./dataset_model";
import { message } from "antd";
import { UUID } from "../all_projects/data/project_repository";
export enum DrawersDataset {
NewDataset = "Новый датасет",
FormBuilderDrawer = "Редактировать датасет",
}
export interface Drawer {
name: string;
status: boolean;
}
export class DataSetStore extends UiErrorState<HttpError> {
dataSetRepository: DataSetRepository;
assets?: Assets;
datasets?: IDatasetModel[];
activeProject: UUID;
dataSetModel = DataSetModel.empty();
drawers: Drawer[];
constructor() {
super();
this.dataSetRepository = new DataSetRepository();
this.drawers = Object.entries(DrawersDataset).map((k, v) => {
return {
name: k.at(1) ?? "",
status: false,
};
});
makeAutoObservable(this);
}
openEmptyCard() {
this.dataSetModel = DataSetModel.empty();
this.editDrawer(DrawersDataset.NewDataset, true);
}
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);
}
datasetCheckBox(asset: Asset): void {
if (this.assetStatus(asset.name)) {
this.dataSetModel.dataSetObjects = this.dataSetModel.dataSetObjects.filter((el) => !el.isEqual(asset.name));
} else {
this.dataSetModel.dataSetObjects.push(asset.name);
}
}
editDrawer(drawerName: DrawersDataset, status: boolean): void {
this.drawers = this.drawers.map((el) => {
if (el.name === drawerName) {
el.status = status;
}
return el;
});
}
editDataset(id: string) {
this.dataSetModel = DataSetModel.fromIDatasetModel(this.datasets?.find((el) => el._id === id) as IDatasetModel);
console.log(this.dataSetModel.name);
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)
);
};
runProcess = async (id: string): Promise<void> => {
(await this.dataSetRepository.isRunningProcess()).fold(
async (s) => {
(await this.dataSetRepository.execDatasetProcess(id)).fold(
() => {
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 () => {
if (this.dataSetModel.isNew) {
(await this.dataSetRepository.saveDataSet(this.dataSetModel)).fold(
async () => {
message.success("Датасет сохранен");
await this.getDatasets();
},
async (error) => message.error(error.message)
);
} else {
(await this.dataSetRepository.editDataset(this.dataSetModel)).fold(
async () => {
message.success("Настройки датасета измнены");
await this.getDatasets();
},
async (error) => message.error(error.message)
);
}
},
async (error) => message.error(error)
);
}
init = async () => {
await this.mapOk("assets", this.dataSetRepository.getAssetsActiveProject());
await this.getDatasets();
await this.mapOk("activeProject", this.dataSetRepository.getActiveProjectId());
};
getDatasets = async () => {
await this.mapOk("datasets", this.dataSetRepository.getDatasetsActiveProject());
};
}