'How to iterate over multiple data sets in a SwiftUI List

I'm showing a list of tickets based on their status (i.e OPEN). I'm trying to show a specific data point in the list but that specific data point, "computerNumber", is not available in the data set based on status; however, both data sets share a "ticketId". The only way I've been able to show "computerNumber" in any form is to use .onAppear and call the data set with the shared "ticketId", but that shows the same "computerNumber" on all list items based on the most recent list item that has appeared on the screen. What would be the best way to iterate over the secondary data set and show each list item's unique computerNumber?

enter image description here

import SwiftUI
import UIKit

struct ShowSelectedStatus: View {
    @ObservedObject var ticketStatusAction = TicketStatusAction()
    @Binding var userApi: String
    @Binding var tickets: [TicksByStatus]
    @State private var isShowing = false
    @State var ticket: [TicketDetails] = []
    var ticketStatus: String
    var color: Color

    var body: some View {
        NavigationView{
            if #available(iOS 15.0, *) {
                List(tickets) { tick in
                    VStack(alignment: .leading, spacing: 10) {
                        
                        Text(tick.displayClient)
                            .padding(10)
                            .background(self.color)
                            .cornerRadius(5)
                        
                        Text(clearMarkdown(on:tick.shortDetail))
                            .font(.system(size: 11))
                            .foregroundColor(Color.gray)
                        
                        Text(ticket.first?.ticketCustomFields.first(where: {$0.definitionId == 11})?.restValue ?? "NOT PROVIDED")
                        
                        NavigationLink(destination: DetailsView(
                            id: tick.id,
                            displayClient: tick.displayClient,
                            userApi: self.$userApi
                        )) {
                            Text("See Details")
                                .foregroundColor(Color.blue)
                            
                                .contextMenu(ContextMenu(menuItems: {
                                    Button(
                                        action: {
                                            self.ticketStatusAction.TicketAction(ticketId: tick.id, userApi: self.userApi, desiredStatus: 1);
                                            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                                                FetchTick().getTicket(id: tick.id, userApi: self.userApi) { (ticketDetails) in self.ticket = [ticketDetails] }
                                            }
                                        }
                                    )
                                    {Text("Set Status to Open")}
                                    
                                    Button(
                                        action: {
                                            self.ticketStatusAction.TicketAction(ticketId: tick.id, userApi: self.userApi, desiredStatus: 2);
                                            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                                                FetchTick().getTicket(id: tick.id, userApi: self.userApi) { (ticketDetails) in self.ticket = [ticketDetails] }
                                            }
                                        }
                                    )
                                    {Text("Set Status to Pending")}
                                    
                                    Button(
                                        action: {
                                            self.ticketStatusAction.TicketAction(ticketId: tick.id, userApi: self.userApi, desiredStatus: 6);
                                            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                                                FetchTick().getTicket(id: tick.id, userApi: self.userApi) { (ticketDetails) in self.ticket = [ticketDetails] }
                                            }
                                        }
                                    )
                                    {Text("Set Status to Depot")}
                                    
                                    Button(
                                        action: {
                                            self.ticketStatusAction.TicketAction(ticketId: tick.id, userApi: self.userApi, desiredStatus: 3);
                                            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                                                FetchTick().getTicket(id: tick.id, userApi: self.userApi) { (ticketDetails) in self.ticket = [ticketDetails] }
                                            }
                                        }
                                    )
                                    {Text("Close Ticket")}
                                })
                            )
                        }
                    }
                    .onAppear {
                        FetchTick().getTicket(id: tick.id, userApi: self.userApi) { (ticketDetails) in
                            self.ticket = [ticketDetails]
                        }
                    }
                }
                .refreshable {
                    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                        self.isShowing = false
                    }
                    FetchTicksByStatus().getTicksByStatus(
                        ticketStatus: self.ticketStatus,
                        userApi: self.userApi
                    ) {
                        (ticks) in self.tickets = ticks
                    }
                }
                .onChange(of: self.isShowing) { value in
                }
                .navigationBarTitle(
                    Text("\(ticketStatus) (\(tickets.count))"),
                    displayMode: .inline
                )
            } else {
                // Fallback on earlier versions
            }
        }
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source