import SwiftUI enum DragAction: String { case addEntry = "addEntry" case addTask = "addTask" case addAttachment = "addAttachment" } struct MenuItem: Identifiable { var id = UUID() let name: String let iconName: String let dragAction: DragAction } struct PlusPopoverMenu: View { @Binding var isPresented: Bool let menuItems: [MenuItem] = [ MenuItem(name: "Add Entry", iconName: "pencil.and.outline", dragAction: .addEntry), MenuItem(name: "Add Task", iconName: "checkmark.square", dragAction: .addTask), MenuItem(name: "Add Attachment", iconName: "rectangle.and.paperclip", dragAction: .addAttachment), ] var body: some View { VStack(alignment: .leading) { ForEach(menuItems) { item in HStack { Text(item.name) Spacer() Image(systemName: item.iconName) } .padding(12.0) .background(Color(UIColor.systemBackground)) .onDrag { isPresented = false return NSItemProvider(object: item.dragAction.rawValue as NSString) } } } .listStyle(InsetGroupedListStyle()) .padding(16.0) .background(Color(UIColor.systemGroupedBackground)) /* THis is broken in beta 1 List(menuItems) { item in HStack { Text(item.name) Spacer() Image(systemName: item.iconName) } .onDrag { isPresented = false return NSItemProvider(object: item.dragAction.rawValue as NSString) } } .listStyle(InsetGroupedListStyle()) .padding(16.0) */ } }