mirror of https://github.com/zulip/zulip.git
74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
import {z} from "zod";
|
|
|
|
import * as blueslip from "./blueslip";
|
|
import * as dialog_widget from "./dialog_widget";
|
|
import {$t_html} from "./i18n";
|
|
import {localstorage} from "./localstorage";
|
|
|
|
export function get_hotkey_deprecation_notice(
|
|
originalHotkey: string,
|
|
replacementHotkey: string,
|
|
): string {
|
|
return $t_html(
|
|
{
|
|
defaultMessage:
|
|
'We\'ve replaced the "{originalHotkey}" hotkey with "{replacementHotkey}" to make this common shortcut easier to trigger.',
|
|
},
|
|
{originalHotkey, replacementHotkey},
|
|
);
|
|
}
|
|
|
|
let shown_deprecation_notices: string[] = [];
|
|
|
|
export function maybe_show_deprecation_notice(key: string): void {
|
|
let message;
|
|
switch (key) {
|
|
case "Shift + C":
|
|
message = get_hotkey_deprecation_notice("Shift + C", "X");
|
|
break;
|
|
case "Shift + S":
|
|
message = get_hotkey_deprecation_notice("Shift + S", "S");
|
|
break;
|
|
default:
|
|
blueslip.error("Unexpected deprecation notice for hotkey:", {key});
|
|
return;
|
|
}
|
|
|
|
// Here we handle the tracking for showing deprecation notices,
|
|
// whether or not local storage is available.
|
|
if (localstorage.supported()) {
|
|
const notices_from_storage = localStorage.getItem("shown_deprecation_notices");
|
|
if (notices_from_storage !== null) {
|
|
const parsed_notices_from_storage = z
|
|
.array(z.string())
|
|
.parse(JSON.parse(notices_from_storage));
|
|
|
|
shown_deprecation_notices = parsed_notices_from_storage;
|
|
} else {
|
|
shown_deprecation_notices = [];
|
|
}
|
|
}
|
|
|
|
if (!shown_deprecation_notices.includes(key)) {
|
|
dialog_widget.launch({
|
|
html_heading: $t_html({defaultMessage: "Deprecation notice"}),
|
|
html_body: message,
|
|
html_submit_button: $t_html({defaultMessage: "Got it"}),
|
|
on_click() {
|
|
return;
|
|
},
|
|
close_on_submit: true,
|
|
focus_submit_on_open: true,
|
|
single_footer_button: true,
|
|
});
|
|
|
|
shown_deprecation_notices.push(key);
|
|
if (localstorage.supported()) {
|
|
localStorage.setItem(
|
|
"shown_deprecation_notices",
|
|
JSON.stringify(shown_deprecation_notices),
|
|
);
|
|
}
|
|
}
|
|
}
|