diff --git a/ui/src/components/door_map/PreviewDoor.vue b/ui/src/components/door_map/PreviewDoor.vue
index 55bf668..fa03c23 100644
--- a/ui/src/components/door_map/PreviewDoor.vue
+++ b/ui/src/components/door_map/PreviewDoor.vue
@@ -9,22 +9,21 @@
>
-
-
-
- {{ door.day }}
-
+
+
+ {{ door.day }}
@@ -57,6 +56,10 @@ export default class extends Vue {
private editing = false;
private refreshKey = 0;
+ declare $refs: {
+ day_input: HTMLInputElement | null | undefined;
+ };
+
private refresh() {
window.setTimeout(() => {
// don't loop endlessly
@@ -86,32 +89,45 @@ export default class extends Vue {
return result;
}
+ private get day_num(): number {
+ const result = Number(this.day_str);
+ return isNaN(result) ? -1 : result;
+ }
+
private toggle_editing() {
this.day_str = String(this.door.day);
this.editing = this.editable && !this.editing;
}
private on_click(event: MouseEvent) {
- if (event.target === null) {
+ if (event.target === null || !(event.target instanceof HTMLDivElement)) {
return;
}
- if (this.editing) {
- this.door.day = Number(this.day_str);
+ if (!this.editing) {
+ const day_input_focus = () => {
+ if (this.$refs.day_input instanceof HTMLInputElement) {
+ this.$refs.day_input.focus();
+ return;
+ }
+
+ this.$nextTick(day_input_focus);
+ };
+ day_input_focus();
+ } else {
+ this.door.day = this.day_num;
}
- if (event.target instanceof HTMLDivElement) {
- this.toggle_editing();
- }
+ this.toggle_editing();
}
- private on_keyup(event: KeyboardEvent) {
+ private on_keydown(event: KeyboardEvent) {
if (!this.editing) {
return;
}
if (event.key === "Enter") {
- this.door.day = Number(this.day_str);
+ this.door.day = this.day_num;
this.toggle_editing();
} else if (event.key === "Delete") {
this.door.day = -1;