[feature-136] Delete models and reload (missing modal)

This commit is contained in:
MathieuG-P
2023-05-09 15:39:51 +02:00
parent a366c07128
commit c056f84b66
5 changed files with 72 additions and 10 deletions
@@ -30,10 +30,17 @@ export const ModelsGrid = forwardRef(({className, version, type}: Props, forward
const hasModels = !isLoading && models?.extra.length;
useImperativeHandle(forwardRef, () => ({
getModels: () => {
console.log(type, models?.extra);
return models?.extra ?? [];
},
getSelectedModels: () => {
return Array.from(modelsSelected)
},
}), [modelsSelected]);
reloadModels: () => {
setModelsLoadObservable(() => modelsManager.$getModels(type, version));
}
}), [modelsSelected, models]);
useOnUpdate(() => {
if(!isVisible){ return; }
@@ -1,5 +1,5 @@
import { BSVersion } from "shared/bs-version.interface";
import { useRef, useState } from "react";
import { useRef, useState, MutableRefObject } from "react";
import { ModelsTabsNavbar } from "./models-tabs-navbar.component";
import { ModelsGrid } from "./models-grid.component";
import { MSModelType } from "shared/models/models/model-saber.model";
@@ -14,20 +14,40 @@ export function ModelsPanel({version}: {version?: BSVersion}) {
const [avatarsRef, sabersRef, platformsRef, bloqsRef] = [useRef(null), useRef(null), useRef(null), useRef(null)];
const [modelTypeTab, setModelTypeTab] = useState<ModelTabType>(ModelTabType.Avatars);
const getSelectedModels = () => [avatarsRef, sabersRef, platformsRef, bloqsRef].map(ref =>(ref.current?.getSelectedModels() as BsmLocalModel[])).flat()
console.log(modelTypeTab);
const getSelectedModels = (ref?: MutableRefObject<any>) => {
if(ref){ return (ref.current?.getSelectedModels() as BsmLocalModel[]); }
return [avatarsRef, sabersRef, platformsRef, bloqsRef].map(ref =>(ref.current?.getSelectedModels() as BsmLocalModel[])).flat()
};
const getAllModels = (ref?: MutableRefObject<any>) => {
if(ref){ return (ref.current?.getModels() as BsmLocalModel[]); }
return [avatarsRef, sabersRef, platformsRef, bloqsRef].map(ref =>(ref.current?.getModels() as BsmLocalModel[])).flat();
}
const reloadModels = (ref?: MutableRefObject<any>) => {
if(ref){ return (ref.current?.reloadModels()); }
return [avatarsRef, sabersRef, platformsRef, bloqsRef].forEach(ref => ref.current?.reloadModels())
};
const getActiveTabRef = (activeTab: ModelTabType) => [avatarsRef, sabersRef, platformsRef, bloqsRef][modelTypeTab];
const exportModels = () => {
modelsManager.exportModels(getSelectedModels(), version);
}
const deleteModels = () => {
modelsManager.deleteModels(getSelectedModels(), version);
const activeTab = getActiveTabRef(modelTypeTab);
const models = getSelectedModels(activeTab)?.length ? getSelectedModels(activeTab) : getAllModels(activeTab);
modelsManager.deleteModels(models, version).then(deleted => {
if(!deleted){ return; }
reloadModels(activeTab);
});
}
const threeDotsItems = useConstant<DropDownItem[]>(() => [
const threeDotsItems: DropDownItem[] = [
{text: "TODO TRANSLATE EXPORT", onClick: exportModels, icon: "export"},
{text: "TODO TRANSLATE DELETE", onClick: deleteModels, icon: "trash"},
]);
];
return (
<div className="w-full h-full flex flex-col items-center justify-center">
@@ -112,11 +112,11 @@ export class ModelsManagerService {
}
public async deleteModels(models: BsmLocalModel[], version?: BSVersion){
public async deleteModels(models: BsmLocalModel[], version?: BSVersion): Promise<boolean>{
const types = Array.from(new Set(models.map(m => m.type)));
const modelsLinked = await (async () => {
const modelsLinked = await (async () => { // USE AND COMPUTE ONLY IF NEEDED (askModal)
for(const type of types){
if(!(await this.isModelsLinked(version, type))){ continue; }
return true;
@@ -127,7 +127,18 @@ export class ModelsManagerService {
const askModal = models.length > 1 || !this.config.get<boolean>(ModelsManagerService.REMEMBER_CHOICE_DELETE_MODEL_KEY);
console.log(modelsLinked, askModal);
// ADD MODAL HERE
const showProgressBar = this.progressBar.require();
const progress$ = this.ipc.sendV2<Progression>("delete-models", {args: models}).pipe(map(progress => (progress.current / progress.total) * 100));
if(showProgressBar){ this.progressBar.show(progress$); }
return lastValueFrom(progress$)
.catch(() => false)
.then(() => true)
.finally(() => this.progressBar.hide(true));
}