Added message asking if you want to save pending changes before exiting

This commit is contained in:
jacobHancock0402 2023-04-19 22:55:06 +01:00
parent e508956a08
commit 71a3c494ae
2 changed files with 34 additions and 1 deletions

View File

@ -1,7 +1,7 @@
import * as path from "path";
import * as url from "url";
import { app, BrowserWindow, screen } from "electron";
import { app, BrowserWindow, screen, ipcMain } from "electron";
import { LogService } from "@bitwarden/common/abstractions/log.service";
import { StateService } from "@bitwarden/common/abstractions/state.service";
@ -98,6 +98,9 @@ export class WindowMain {
// throw e;
reject(e);
}
ipcMain.on("request-app-quit", () => {
app.quit();
});
});
}

View File

@ -1,6 +1,7 @@
import {
ChangeDetectorRef,
Component,
HostListener,
NgZone,
OnDestroy,
OnInit,
@ -8,6 +9,7 @@ import {
ViewContainerRef,
} from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
import { ipcRenderer } from "electron";
import { first } from "rxjs/operators";
import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref";
@ -83,6 +85,7 @@ export class VaultComponent implements OnInit, OnDestroy {
activeFilter: VaultFilter = new VaultFilter();
private modal: ModalRef = null;
private triedQuit = false;
constructor(
private route: ActivatedRoute,
@ -630,6 +633,7 @@ export class VaultComponent implements OnInit, OnDestroy {
this.addEditComponent.cipher.login.username = value;
}
}
this.addEditComponent.submit();
});
// eslint-disable-next-line rxjs-angular/prefer-takeuntil
@ -772,6 +776,32 @@ export class VaultComponent implements OnInit, OnDestroy {
return true;
}
private async saveChangesOrCancel() {
const result = await ipcRenderer.invoke("showMessageBox", {
type: "warning",
title: "Unsaved Changes",
message: "Do you want to save your pending changes?",
buttons: ["Yes", "No", "Cancel"],
});
return result;
}
@HostListener("window:beforeunload", ["$event"])
private async onBeforeUnload(event: BeforeUnloadEvent) {
if (!this.triedQuit && this.dirtyInput() && this.action == "edit") {
event.returnValue = false;
let response = await this.saveChangesOrCancel();
response = response.response;
if (response === 0 || response === 1) {
if (response === 0) {
await this.addEditComponent.submit();
}
this.triedQuit = true;
ipcRenderer.send("request-app-quit");
}
}
}
private async passwordReprompt(cipher: CipherView) {
return (
cipher.reprompt === CipherRepromptType.None ||