Your code seems perfectly fine here. The issue in in Navigator. The problem is that it only shows you contracts visible to the primary party of your user even if your user has readAs
claims for other parties, see Navigator user login does not reflect the correct access - #2 by cocreature for more details.
That limitation doesn’t apply if you read, e.g., via the JSON API. That’s what create-daml-app does.