@@ -101,6 +101,34 @@ final class TableRowViewWithMenu: NSTableRowView {
101101 menu. addItem ( pasteItem)
102102 }
103103
104+ // FK actions (only for FK columns with non-empty values)
105+ if dataColumnIndex >= 0 , dataColumnIndex < coordinator. rowProvider. columns. count {
106+ let columnName = coordinator. rowProvider. columns [ dataColumnIndex]
107+ if let fkInfo = coordinator. rowProvider. columnForeignKeys [ columnName] ,
108+ let cellValue = coordinator. rowProvider. value ( atRow: rowIndex, column: dataColumnIndex) ,
109+ !cellValue. isEmpty {
110+ menu. addItem ( NSMenuItem . separator ( ) )
111+
112+ let previewItem = NSMenuItem (
113+ title: String ( localized: " Preview Referenced Row " ) ,
114+ action: #selector( previewForeignKey ( _: ) ) ,
115+ keyEquivalent: " "
116+ )
117+ previewItem. representedObject = dataColumnIndex
118+ previewItem. target = self
119+ menu. addItem ( previewItem)
120+
121+ let navItem = NSMenuItem (
122+ title: String ( format: String ( localized: " Open %@ " ) , fkInfo. referencedTable) ,
123+ action: #selector( navigateToForeignKey ( _: ) ) ,
124+ keyEquivalent: " "
125+ )
126+ navItem. representedObject = dataColumnIndex
127+ navItem. target = self
128+ menu. addItem ( navItem)
129+ }
130+ }
131+
104132 if coordinator. isEditable {
105133 menu. addItem ( NSMenuItem . separator ( ) )
106134 }
@@ -270,4 +298,21 @@ final class TableRowViewWithMenu: NSTableRowView {
270298 : [ rowIndex]
271299 coordinator. copyRowsAsJson ( at: indices)
272300 }
301+
302+ @objc private func previewForeignKey( _ sender: NSMenuItem ) {
303+ guard let columnIndex = sender. representedObject as? Int ,
304+ let coordinator, let tableView = coordinator. tableView else { return }
305+ coordinator. showForeignKeyPreview (
306+ tableView: tableView, row: rowIndex, column: columnIndex + 1 , columnIndex: columnIndex
307+ )
308+ }
309+
310+ @objc private func navigateToForeignKey( _ sender: NSMenuItem ) {
311+ guard let columnIndex = sender. representedObject as? Int ,
312+ let coordinator else { return }
313+ let columnName = coordinator. rowProvider. columns [ columnIndex]
314+ guard let fkInfo = coordinator. rowProvider. columnForeignKeys [ columnName] ,
315+ let value = coordinator. rowProvider. value ( atRow: rowIndex, column: columnIndex) else { return }
316+ coordinator. onNavigateFK ? ( value, fkInfo)
317+ }
273318}
0 commit comments