Custom managed transaction with blocking span ends immediately

I am using React and version 5.16.0 of the @elastic/apm-rum client.

Goal
I would like to be able to create transactions around common user workflows in my tool, such as filling out a form that requires several network requests. The idea being that at the higher level workflow level I could detect issues with the form instead of looking at specific api failures, etc.

Attempted Solution
Based on the docs here Custom Transactions | APM Real User Monitoring JavaScript Agent Reference [5.x] | Elastic I assumed I could:

  1. Create a custom transaction that was managed.
  2. Immediately create a blocking span inside that transaction
  3. At some later point, end the blocking span and the transaction.
  4. View everything that happened during the time period such as network requests like I could for a built-in page-load transaction.

Here is some crude psueo-code to explain the intent:

const transaction = apm.startTransaction('form', 'workflow', { managed: true });
const blockingSpan = transaction.startSpan('blocking-span', 'workflow', { blocking: true });

/*
 * During this time the user is doing things with the form, triggering network requests, etc.
 * This could take a few minutes.
 */

/* Form was completed, end transaction. */
blockingSpan.end();
transaction.end();

Expectation vs Actual
I expected that the transaction would have a lifespan as long as it took to complete the form.

What actually happens is that because there isn't any immediate activity after the transaction and span are created, the transaction and span immediately close within 30ms of starting it (they do show up in the dashboard) with no useful info in them.

I assumed based on the documentation that says, If the user wants to control this behavior, they can create a blocking span that will hold the transaction until span.end is called. , that I could have just left that span open as long as I wanted.

Is there something wrong with my understanding/assumptions?

I did notice if I start the transaction and immediately trigger a network request I do get it tracked in the transaction (then it closes) but that is not helpful for my scenario. Or is my use case not something that aligns with what this tool is for?

Thanks!

Just to update this thread with my findings thus far as I've been playing around. I have it essentially working, the only issue I face now is that click instrumentation transactions close my custom manage transaction even if I have not ended the blocking span.

Of course if I disable the click instrumentation things work better for me, but I was hoping from inside my custom transactions I could capture those events for free.