diff --git a/assets/js/components/Helper/GenericModal.vue b/assets/js/components/Helper/GenericModal.vue index 381fc5319..413358a91 100644 --- a/assets/js/components/Helper/GenericModal.vue +++ b/assets/js/components/Helper/GenericModal.vue @@ -96,8 +96,12 @@ export default defineComponent({ this.$emit("opened"); if (this.autofocus) { this.$nextTick(() => { - const firstInput = - this.$refs["modalBody"]?.querySelector("input, select, button"); + const modalBody = this.$refs["modalBody"]; + // don't steal focus if user already interacts with the modal content + if (modalBody?.contains(document.activeElement)) { + return; + } + const firstInput = modalBody?.querySelector("input, select, button"); if (firstInput instanceof HTMLElement) { firstInput.focus(); } diff --git a/tests/simulator.ts b/tests/simulator.ts index bdc0078a0..73e1f36be 100644 --- a/tests/simulator.ts +++ b/tests/simulator.ts @@ -49,7 +49,8 @@ export function simulatorConfig() { const input = "./tests/simulator.evcc.yaml"; const content = fs.readFileSync(input, "utf8"); const result = content.replace(/localhost:7072/g, simulatorHost()); - const resultName = "simulator.evcc.generated.yaml"; + // per-worker file name, multiple workers write their own port concurrently + const resultName = `simulator-${workerPort()}.evcc.generated.yaml`; const resultPath = path.join(os.tmpdir(), resultName); fs.writeFileSync(resultPath, result); return resultPath;