Fix duplicate category menu IDs for mobile/desktop

Mobile and desktop transaction category menus now use
variant-specific DOM IDs and the turbo stream response
updates both targets. This prevents duplicate IDs that
caused the menu not to close on first click on desktop.
This commit is contained in:
Pieter
2026-01-12 22:08:59 +01:00
parent 8b6392e1d1
commit 8f56aa2877
4 changed files with 24 additions and 11 deletions

View File

@@ -24,9 +24,14 @@ class TransactionCategoriesController < ApplicationController
format.turbo_stream do
render turbo_stream: [
turbo_stream.replace(
dom_id(transaction, :category_menu),
partial: "categories/menu",
locals: { transaction: transaction }
dom_id(transaction, "category_menu_mobile"),
partial: "transactions/transaction_category",
locals: { transaction: transaction, variant: "mobile" }
),
turbo_stream.replace(
dom_id(transaction, "category_menu_desktop"),
partial: "transactions/transaction_category",
locals: { transaction: transaction, variant: "desktop" }
),
turbo_stream.replace(
"category_name_mobile_#{transaction.id}",

View File

@@ -36,7 +36,7 @@
<% end %>
</div>
<div class="flex md:hidden items-center gap-1 col-span-2 relative">
<%= render "transactions/transaction_category", transaction: transaction %>
<%= render "transactions/transaction_category", transaction: transaction, variant: "mobile" %>
<% if transaction.merchant&.logo_url.present? %>
<%= image_tag transaction.merchant.logo_url,
class: "w-5 h-5 rounded-full absolute -bottom-1 -right-1 border border-secondary pointer-events-none",
@@ -137,7 +137,7 @@
</div>
<div class="hidden md:flex items-center gap-1 col-span-2">
<%= render "transactions/transaction_category", transaction: transaction %>
<%= render "transactions/transaction_category", transaction: transaction, variant: "desktop" %>
</div>
<div class="shrink-0 col-span-4 lg:col-span-2 ml-auto text-right">

View File

@@ -1,6 +1,6 @@
<%# locals: (transaction:) %>
<%# locals: (transaction:, variant:) %>
<div id="<%= dom_id(transaction, "category_menu") %>">
<div id="<%= dom_id(transaction, "category_menu_#{variant}") %>">
<% if transaction.transfer&.categorizable? || transaction.transfer.nil? %>
<%= render "categories/menu", transaction: transaction %>
<% else %>

View File

@@ -2,13 +2,21 @@
<%= turbo_stream.replace @transfer.inflow_transaction.entry %>
<%= turbo_stream.replace @transfer.outflow_transaction.entry %>
<%= turbo_stream.replace dom_id(@transfer.inflow_transaction, "category_menu"),
<%= turbo_stream.replace dom_id(@transfer.inflow_transaction, "category_menu_mobile"),
partial: "transactions/transaction_category",
locals: { transaction: @transfer.inflow_transaction } %>
locals: { transaction: @transfer.inflow_transaction, variant: "mobile" } %>
<%= turbo_stream.replace dom_id(@transfer.outflow_transaction, "category_menu"),
<%= turbo_stream.replace dom_id(@transfer.inflow_transaction, "category_menu_desktop"),
partial: "transactions/transaction_category",
locals: { transaction: @transfer.outflow_transaction } %>
locals: { transaction: @transfer.inflow_transaction, variant: "desktop" } %>
<%= turbo_stream.replace dom_id(@transfer.outflow_transaction, "category_menu_mobile"),
partial: "transactions/transaction_category",
locals: { transaction: @transfer.outflow_transaction, variant: "mobile" } %>
<%= turbo_stream.replace dom_id(@transfer.outflow_transaction, "category_menu_desktop"),
partial: "transactions/transaction_category",
locals: { transaction: @transfer.outflow_transaction, variant: "desktop" } %>
<%= turbo_stream.replace dom_id(@transfer.inflow_transaction, "transfer_match"),
partial: "transactions/transfer_match",