From 2953bb9f04437010cc2dfb582a3ddc0e5e0b4c88 Mon Sep 17 00:00:00 2001 From: Paul R Kartchner Date: Sat, 17 Jan 2026 00:22:50 -0700 Subject: [PATCH] fix: ensure tag input maintains focus after adding tags [dev] - Add focus restoration after recipe state update - Add focus in finally block to ensure it happens even on error - Keeps cursor in tag input field for rapid tag entry Co-Authored-By: Claude Sonnet 4.5 --- packages/web/src/pages/RecipeDetail.tsx | 4 ++++ traefik-local/dynamic-dev.yml | 14 ++++++++++++++ traefik-local/traefik.yml | 20 ++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 traefik-local/dynamic-dev.yml create mode 100644 traefik-local/traefik.yml diff --git a/packages/web/src/pages/RecipeDetail.tsx b/packages/web/src/pages/RecipeDetail.tsx index 34e3eb8..38d0b4a 100644 --- a/packages/web/src/pages/RecipeDetail.tsx +++ b/packages/web/src/pages/RecipeDetail.tsx @@ -164,6 +164,8 @@ function RecipeDetail() { const response = await recipesApi.getById(id); if (response.data) { setRecipe(response.data); + // Restore focus after state update + setTimeout(() => tagInputRef.current?.focus(), 0); } } catch (err) { console.error('Failed to add tag:', err); @@ -172,6 +174,8 @@ function RecipeDetail() { await loadRecipe(id); } finally { setSavingTags(false); + // Ensure focus is maintained + setTimeout(() => tagInputRef.current?.focus(), 0); } }; diff --git a/traefik-local/dynamic-dev.yml b/traefik-local/dynamic-dev.yml new file mode 100644 index 0000000..b2c2a83 --- /dev/null +++ b/traefik-local/dynamic-dev.yml @@ -0,0 +1,14 @@ +http: + routers: + basil-dev: + rule: "Host(`localhost`) || Host(`127.0.0.1`)" + entryPoints: + - http + service: basil-dev-service + priority: 1000 # Higher priority than Docker labels (default is 0) + + services: + basil-dev-service: + loadBalancer: + servers: + - url: "http://basil-web:80" diff --git a/traefik-local/traefik.yml b/traefik-local/traefik.yml new file mode 100644 index 0000000..2bc85a9 --- /dev/null +++ b/traefik-local/traefik.yml @@ -0,0 +1,20 @@ +# Static Traefik configuration for local development +entryPoints: + http: + address: ":80" + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + network: traefik + file: + filename: /dynamic-dev.yml + watch: true + +api: + insecure: true + dashboard: true + +log: + level: INFO