Skip to content

Commit 18267c7

Browse files
authored
impr(keymap): optimize config event listener on full config load (@fehmer) (monkeytypegame#6856)
1 parent 100050f commit 18267c7

File tree

1 file changed

+47
-23
lines changed

1 file changed

+47
-23
lines changed

frontend/src/ts/elements/keymap.ts

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -385,9 +385,12 @@ function buildRow(options: {
385385
return rowHtml;
386386
}
387387

388-
export async function refresh(
389-
layoutName: string = Config.layout
390-
): Promise<void> {
388+
export async function refresh(): Promise<void> {
389+
const layoutName =
390+
Config.keymapLayout === "overrideSync"
391+
? Config.keymapLayout
392+
: Config.layout;
393+
391394
if (Config.keymapMode === "off") return;
392395
if (ActivePage.get() !== "test") return;
393396
if (!layoutName) return;
@@ -581,29 +584,19 @@ async function updateLegends(): Promise<void> {
581584
key.textContent = character ?? "";
582585
}
583586
}
587+
let ignoreConfigEvent = false;
584588

585-
ConfigEvent.subscribe((eventKey, newValue) => {
586-
if (eventKey === "layout" && Config.keymapLayout === "overrideSync") {
587-
void refresh(Config.keymapLayout);
588-
}
589-
if (
590-
eventKey === "keymapLayout" ||
591-
eventKey === "keymapStyle" ||
592-
eventKey === "keymapShowTopRow" ||
593-
eventKey === "keymapMode"
594-
) {
595-
void refresh();
596-
}
597-
if (eventKey === "keymapMode") {
589+
ConfigEvent.subscribe((eventKey) => {
590+
const handleMode = (): void => {
598591
$(".activeKey").removeClass("activeKey");
599592
$(".keymapKey").attr("style", "");
600-
newValue === "off" ? hide() : show();
601-
}
602-
if (eventKey === "keymapSize") {
603-
$("#keymap").css("zoom", newValue as string);
604-
}
605-
if (eventKey === "keymapLegendStyle") {
606-
let style = newValue as string;
593+
Config.keymapMode === "off" ? hide() : show();
594+
};
595+
const handleSize = (): void => {
596+
$("#keymap").css("zoom", Config.keymapSize);
597+
};
598+
const handleLegendStyle = (): void => {
599+
let style = Config.keymapLegendStyle;
607600

608601
// Remove existing styles
609602
const keymapLegendStyles = ["lowercase", "uppercase", "blank", "dynamic"];
@@ -628,6 +621,37 @@ ConfigEvent.subscribe((eventKey, newValue) => {
628621

629622
// Update and save to cookie for persistence
630623
$(".keymapLegendStyle").addClass(style);
624+
};
625+
626+
if (eventKey === "fullConfigChange") {
627+
ignoreConfigEvent = true;
628+
}
629+
if (eventKey === "fullConfigChangeFinished") {
630+
ignoreConfigEvent = false;
631+
void refresh();
632+
handleMode();
633+
handleSize();
634+
handleLegendStyle();
635+
}
636+
if (ignoreConfigEvent) return;
637+
638+
if (
639+
(eventKey === "layout" && Config.keymapLayout === "overrideSync") ||
640+
eventKey === "keymapLayout" ||
641+
eventKey === "keymapStyle" ||
642+
eventKey === "keymapShowTopRow" ||
643+
eventKey === "keymapMode"
644+
) {
645+
void refresh();
646+
}
647+
if (eventKey === "keymapMode") {
648+
handleMode();
649+
}
650+
if (eventKey === "keymapSize") {
651+
handleSize();
652+
}
653+
if (eventKey === "keymapLegendStyle") {
654+
handleLegendStyle();
631655
}
632656
});
633657

0 commit comments

Comments
 (0)