@@ -117,7 +117,7 @@ Detail View:
117117 shift+tab / ← / h: Previous Tab
118118 c : Copy Public URL (Info Tab)
119119 enter : View Request Details (Request Log Tab)
120- esc / q : Back to List View
120+ esc : Back to List View
121121
122122Request Detail View:
123123 esc : Back to Request Log
@@ -243,6 +243,7 @@ func createRequestTable() table.Model {
243243 {Title : "Method" },
244244 {Title : "Status" },
245245 {Title : "URL" },
246+ {Title : "ID" }, // Hidden column for request ID
246247 }
247248
248249 t := table .New (
@@ -257,7 +258,6 @@ func createRequestTable() table.Model {
257258 t .SetStyles (s )
258259
259260 return t
260-
261261}
262262
263263func (m model ) Init () tea.Cmd {
@@ -440,6 +440,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
440440 {Title : "Method" , Width : 8 },
441441 {Title : "Status" , Width : 8 },
442442 {Title : "URL" , Width : urlWidth },
443+ {}, // Hidden column, no title or width needed
443444 }
444445 m .requestTable .SetColumns (requestColumns )
445446
@@ -717,32 +718,36 @@ func (m model) updateDetailView(msg tea.Msg) (tea.Model, tea.Cmd) {
717718 }
718719 return m , nil // Do nothing if not on info tab or error
719720
720- // Add enter key handling for request table
721721 case "enter" :
722722 if m .detailTabIndex == 1 {
723- selectedIndex := m .requestTable .Cursor ()
723+ selectedRow := m .requestTable .SelectedRow ()
724+ if len (selectedRow ) < 5 { // Ensure row and ID exist (index 4)
725+ return m , nil // Or handle error
726+ }
727+ selectedRequestID := selectedRow [4 ] // Get ID from the hidden column
728+
724729 funnel , err := m .funnelRegistry .GetFunnel (m .detailedFunnelID )
725730 if err == nil {
726- // IMPORTANT: This assumes the table rows are in the same order
727- // as the requests in the funnel's linked list. If sorting or filtering
728- // is added later, this logic needs to change.
731+ // Find the request by ID in the linked list
729732 node := funnel .Requests .Head
730- for i := 0 ; i < selectedIndex && node != nil ; i ++ {
733+ found := false
734+ for node != nil {
735+ if node .Request .ID == selectedRequestID {
736+ m .selectedRequest = & node .Request
737+ m .state = viewRequestDetail
738+ m .requestTable .Blur () // Unfocus table when leaving
739+ found = true
740+ break
741+ }
731742 node = node .Next
732743 }
733- if node != nil {
734- m .selectedRequest = & node .Request
735- m .state = viewRequestDetail
736- m .requestTable .Blur () // Unfocus table when leaving
744+
745+ if found {
737746 return m , nil
738747 }
739- // Handle case where index is out of bounds or node is nil
740748 }
741- // Handle funnel retrieval error
742749 }
743- // If not on request tab, or error occurred, do nothing for enter
744750 return m , nil
745-
746751 }
747752 }
748753
@@ -979,6 +984,7 @@ func (m *model) populateRequestTable() {
979984 node .Request .Method (),
980985 strconv .Itoa (node .Request .StatusCode ()),
981986 node .Request .Path (),
987+ node .Request .ID ,
982988 })
983989 node = node .Next
984990 }
@@ -1126,15 +1132,13 @@ func (m model) viewRequestDetailView(contentHeight int) string {
11261132 return m .renderContent (title , "Error: No request selected." , contentHeight , 1 )
11271133 }
11281134
1129- // Placeholder content - mimicking browser inspect style
11301135 requestInfo := fmt .Sprintf (
11311136 "URL: %s\n Method: %s\n Status: %d" ,
11321137 m .selectedRequest .Path (),
11331138 m .selectedRequest .Method (),
11341139 m .selectedRequest .StatusCode (),
11351140 )
11361141
1137- // Helper function to format headers
11381142 formatHeaders := func (headers map [string ]string ) string {
11391143 var builder strings.Builder
11401144 if len (headers ) == 0 {
@@ -1150,7 +1154,6 @@ func (m model) viewRequestDetailView(contentHeight int) string {
11501154 // Iterate over sorted keys
11511155 for _ , k := range keys {
11521156 v := headers [k ]
1153- // Simple formatting, adjust as needed
11541157 builder .WriteString (fmt .Sprintf (" %s: %s\n " , k , v ))
11551158 }
11561159 // Remove trailing newline
0 commit comments