diff --git a/src/main/services/additional-content/local-models-manager.service.ts b/src/main/services/additional-content/local-models-manager.service.ts index 525088ad..14613f4f 100644 --- a/src/main/services/additional-content/local-models-manager.service.ts +++ b/src/main/services/additional-content/local-models-manager.service.ts @@ -220,18 +220,20 @@ export class LocalModelsManagerService { }); } - public deleteModels(models: BsmLocalModel[]): Observable{ - return new Observable(subscriber => { + public deleteModels(models: BsmLocalModel[]): Observable>{ + return new Observable>(subscriber => { (async () => { - const progression: Progression = { + + const progression: Progression = { total: models.length, current: 0, - data: null + data: [] }; for(const model of models){ await unlinkPath(model.path); - progression.current += 1; + progression.data.push(model); + progression.current = progression.data.length; subscriber.next(progression); } diff --git a/src/renderer/components/maps-mangement-components/link-button.component.tsx b/src/renderer/components/maps-mangement-components/link-button.component.tsx index 57148639..5415db8f 100644 --- a/src/renderer/components/maps-mangement-components/link-button.component.tsx +++ b/src/renderer/components/maps-mangement-components/link-button.component.tsx @@ -24,7 +24,7 @@ export const LinkButton = motion(forwardRef((props: Props, ref) => { })() return ( -
{e.preventDefault(); !props.disabled && props.onClick?.()}} style={{pointerEvents: props.disabled ? "none" : "auto"}}> +
{e.preventDefault(); e.stopPropagation(); !props.disabled && props.onClick?.()}} style={{pointerEvents: props.disabled ? "none" : "auto"}}>
diff --git a/src/renderer/components/models-management/models-grid.component.tsx b/src/renderer/components/models-management/models-grid.component.tsx index 771bea92..889cf386 100644 --- a/src/renderer/components/models-management/models-grid.component.tsx +++ b/src/renderer/components/models-management/models-grid.component.tsx @@ -58,13 +58,12 @@ export const ModelsGrid = forwardRef(({className, version, type, search, active, loadModels(); }, deleteSelectedModels: () => { - modelsManager.deleteModels(!modelsSelected?.length ? models : modelsSelected, version).then(deleted => { - if(!deleted){ return; } - const newModels = models.filter(m => !modelsSelected.some(d => d.hash === m.hash)); + modelsManager.deleteModels(!modelsSelected?.length ? models : modelsSelected, version).then(deletedModels => { + if(!deletedModels?.length){ return; } + const newModels = models.filter(m => !deletedModels.some(d => d.hash === m.hash)); setModels(() => newModels); modelsSelected$.next([]); }); - } }), [modelsSelected, models]); @@ -85,7 +84,7 @@ export const ModelsGrid = forwardRef(({className, version, type, search, active, useOnUpdate(() => { - if(!active){ return; } + if(!active && !models){ return; } const onLinkStateChangeCb = (action: VersionLinkerAction) => { if(!equal(version, action.version) || !action.relativeFolder.includes(MODEL_TYPE_FOLDERS[type])){ return; } @@ -155,7 +154,7 @@ export const ModelsGrid = forwardRef(({className, version, type, search, active, const handleDelete = (model: BsmLocalModel) => { modelsManager.deleteModels([model], version).then(deleted => { - if(!deleted){ return; } + if(!deleted?.length){ return; } setModels(prev => prev.filter(m => m.hash !== model.hash)); }); } diff --git a/src/renderer/services/models-management/models-manager.service.ts b/src/renderer/services/models-management/models-manager.service.ts index 50ef59aa..ac1d4b6e 100644 --- a/src/renderer/services/models-management/models-manager.service.ts +++ b/src/renderer/services/models-management/models-manager.service.ts @@ -128,9 +128,9 @@ export class ModelsManagerService { } - public async deleteModels(models: BsmLocalModel[], version?: BSVersion): Promise{ + public async deleteModels(models: BsmLocalModel[], version?: BSVersion): Promise{ - if(!models){ return Promise.resolve(false); } + if(!models){ return Promise.resolve([]); } const askModal = models.length > 1 || !this.config.get(ModelsManagerService.REMEMBER_CHOICE_DELETE_MODEL_KEY); @@ -148,20 +148,22 @@ export class ModelsManagerService { })(); const res = await this.modalService.openModal(DeleteModelsModal, { models, linked }); - if(res.exitCode !== ModalExitCode.COMPLETED){ return false; } + if(res.exitCode !== ModalExitCode.COMPLETED){ return Promise.resolve([]); } } const showProgressBar = this.progressBar.require(); - const progress$ = this.ipc.sendV2("delete-models", {args: models}).pipe(map(progress => (progress.current / progress.total) * 100)); + const obs$ = this.ipc.sendV2>("delete-models", {args: models}); + + const progress$ =obs$.pipe(map(progress => (progress.current / progress.total) * 100)); if(showProgressBar){ this.progressBar.show(progress$); } - return lastValueFrom(progress$) - .then(() => true) + return lastValueFrom(obs$) + .then(({data}) => data ?? []) .catch(() => { this.notifications.notifyError({title: "notifications.types.error", desc: "notifications.common.msg.error-occurred", duration: 3000}); - return false; + return []; }) .finally(() => this.progressBar.hide(true));