Real quick, one solution could be to wrap the button in a turbo_frame that gets replaced upon success with basically the same button plus a flash message wrapped in a turbo_stream.replace
.
See the solution over in this other thread. Does that work?
But what you’re trying to do looks a lot like what Matt Swanson did in this Twitter thread.