Add “See all linked records” navigation for junction (many-to-many) relations
Scope & Context
We use Twenty v2.40.2 (Docker) to manage organizations and assets. Organizations and assets are connected through a junction object: an organization can have multiple assets, and the same asset can be linked to multiple organizations.
This request is about adding the existing ↗ “See all linked records” action to junction relation widgets on record detail pages, providing the same access to the full record list as a regular Has Many relation.
The main reason for this request is to work with the related records using the standard list interface, including filtering, sorting, column selection and data export.
Current behavior
For a regular Has Many relation, the widget header shows an ↗ button next to the edit button. Clicking it opens the related object’s list, filtered to records linked to the current record.
For a junction relation, the widget displays the related target records, but the header only shows the edit button. The equivalent ↗ action is missing.
Regular Has Many relation — “Organisatierelaties”:
The ↗ button is available, with a tooltip indicating that it opens all records linked to the current record.
Junction relation — “Assets”:
The linked assets are displayed, but the equivalent ↗ button is missing.
From this junction widget, I cannot find an equivalent way to open the linked assets in a full list scoped to the current organization. This prevents me from using the standard list interface to further filter or export that specific set of related assets.
The issue is not whether assets can be viewed or exported elsewhere in Twenty; it is the missing navigation from the junction widget to a list containing the relevant linked records.
Expected behavior
Reuse the existing Has Many interaction and standard record list interface:
Show the ↗ action on junction relation widgets. Use the same placement and styling as Has Many, with a tooltip referring to the target object, such as “See all assets linked to this record.” Open the target object’s full record list, scoped to the current record. For an Organization → junction object → Asset relationship, the button should open the Assets list containing the assets linked to that organization—not the intermediate junction records.
Provide the standard list controls. Users should be able to apply additional filters, sort records, choose visible columns and export data. The initial relationship filter should be visible, and additional filters should work together with it.
Apply the relationship scope consistently to exports. When exporting all matching records, the export should include the complete matching set of linked assets, including records not yet loaded in the embedded widget. It should not include unrelated assets or export the junction records instead.
The existing Has Many button and standard record list can serve as the UI reference; a separate junction-specific list interface should not be necessary.
Technical inputs
The following behavior was identified in the source for tag twenty/v2.40.2.
Action visibility
In useFieldWidgetActionVisibility.ts, the “See all” action is explicitly disabled for junction relations:
const showSeeAll = isOneToManyRelation && !isNestedRelationWidget && !isJunctionRelation;
File: packages/twenty-front/src/modules/page-layout/widgets/field/hooks/useFieldWidgetActionVisibility.ts.
Action rendering
WidgetFieldActions.tsx uses that value to render the navigation action separately from the edit action:
{showSeeAll && }
File: packages/twenty-front/src/modules/page-layout/widgets/components/WidgetFieldActions.tsx.
Navigation and filtering
WidgetActionFieldSeeAll.tsx currently builds the list URL and filter using the directly related object and its relation field. It does not resolve the final target object through the junction. Therefore, simply removing the junction exclusion would not provide the requested behavior.
The implementation should resolve the target object through the junction and construct the appropriate relationship filter for its standard list page. It should not depend only on the target record IDs already loaded in the widget.
Please preserve the existing Has Many behavior and permission checks, and cover junction navigation, additional filtering, export scope and paginated related records with regression tests.
Source: twentyhq/twenty