[Esc] to Close
diff --git a/src/main.tsx b/src/main.tsx
index f45317e0..67c73c60 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -2496,10 +2496,14 @@ class LoadingSpinner extends React.Component<{}, {}> {
@mobxReact.observer
class AlertModal extends React.Component<{}, {}> {
+ @boundMethod
closeModal() : void {
- mobx.action(() => {
- GlobalModel.alertMessage.set(null);
- })();
+ GlobalModel.cancelAlert();
+ }
+
+ @boundMethod
+ handleOK() : void {
+ GlobalModel.confirmAlert();
}
render() {
@@ -2508,22 +2512,29 @@ class AlertModal extends React.Component<{}, {}> {
return null;
}
let title = message.title ?? "Alert";
+ let isConfirm = message.confirm;
return (
-
+
-
- {title}
-
+
-
+
);
}
diff --git a/src/model.ts b/src/model.ts
index 653f7fe7..3013872c 100644
--- a/src/model.ts
+++ b/src/model.ts
@@ -1847,7 +1847,19 @@ class HistoryViewModel {
setTimeout(this.clearActiveDelete, 2000);
return;
}
- GlobalModel.showAlert({message: "DELETE!"});
+ let prtn = GlobalModel.showAlert({message: "Deleting these lines from history will also delete their content from your sessions as well.", confirm: true});
+ prtn.then((result) => {
+ if (!result) {
+ return;
+ }
+ if (result) {
+ this._deleteSelected();
+ }
+ });
+ }
+
+ _deleteSelected() : void {
+ GlobalCommandRunner.historyView({offset: offset, searchText: this.activeSearchText});
}
@boundMethod
@@ -2141,6 +2153,7 @@ class Model {
activeMainView : OV<"session" | "history" | "bookmarks"> = mobx.observable.box("session", {name: "activeMainView"});
termFontSize : CV
;
alertMessage : OV = mobx.observable.box(null, {name: "alertMessage"});
+ alertPromiseResolver : (result : boolean) => void;
inputModel : InputModel;
bookmarksModel : BookmarksModel;
@@ -2188,10 +2201,34 @@ class Model {
setTimeout(() => this.getClientData(), 10);
}
- showAlert(alertMessage : AlertMessageType) : void {
+ showAlert(alertMessage : AlertMessageType) : Promise {
mobx.action(() => {
this.alertMessage.set(alertMessage);
})();
+ let prtn = new Promise((resolve, reject) => {
+ this.alertPromiseResolver = resolve;
+ });
+ return prtn;
+ }
+
+ cancelAlert() : void {
+ mobx.action(() => {
+ this.alertMessage.set(null);
+ })();
+ if (this.alertPromiseResolver != null) {
+ this.alertPromiseResolver(false);
+ this.alertPromiseResolver = null;
+ }
+ }
+
+ confirmAlert() : void {
+ mobx.action(() => {
+ this.alertMessage.set(null);
+ })();
+ if (this.alertPromiseResolver != null) {
+ this.alertPromiseResolver(true);
+ this.alertPromiseResolver = null;
+ }
}
getBaseHostPort() : string {
@@ -2234,6 +2271,19 @@ class Model {
if (isModKeyPress(e)) {
return;
}
+ if (this.alertMessage.get() != null) {
+ if (e.code == "Escape") {
+ e.preventDefault();
+ this.cancelAlert();
+ return;
+ }
+ if (e.code == "Enter") {
+ e.preventDefault();
+ this.confirmAlert();
+ return;
+ }
+ return;
+ }
if (this.activeMainView.get() == "bookmarks") {
this.bookmarksModel.handleDocKeyDown(e);
return;
diff --git a/src/sh2.less b/src/sh2.less
index 63a9ec5a..829d01d0 100644
--- a/src/sh2.less
+++ b/src/sh2.less
@@ -239,6 +239,10 @@ body::-webkit-scrollbar {
margin-left: 10px;
align-items: center;
+ .is-hidden {
+ display: none;
+ }
+
.control-checkbox {
cursor: pointer;
color: #777;
@@ -299,6 +303,17 @@ body::-webkit-scrollbar {
width: 10px;
}
}
+
+ .no-items {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ .mono-font(14px);
+ padding: 30px 0 30px 0;
+ border: 1px solid white;
+ border-radius: 3px;
+ margin: 20px 50px 20px 20px;
+ }
.history-table {
margin: 0px 10px 10px 10px;
@@ -2363,3 +2378,30 @@ input[type=checkbox] {
white-space: pre;
}
}
+
+.modal.alert-modal {
+
+ .modal-card {
+ min-width: 350px;
+ max-width: 640px;
+ width: auto;
+
+ header {
+ padding: 10px;
+ font-size: 1.5rem;
+ }
+
+ footer {
+ padding: 10px;
+ justify-content: center;
+ }
+
+ .modal-card-body {
+ padding: 10px;
+
+ p {
+ text-align: center;
+ }
+ }
+ }
+}
diff --git a/src/types.ts b/src/types.ts
index 33338def..9d466bf7 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -423,6 +423,7 @@ type PlaybookEntryType = {
type AlertMessageType = {
title : string,
message : string,
+ confirm? : boolean,
};
type RenderModeType = "normal" | "collapsed";