create labels view specific for share ext

This commit is contained in:
Satindar Dhillon
2022-07-19 21:28:15 -07:00
parent 6aa9e07f35
commit 6a3e7d9d4e
2 changed files with 60 additions and 3 deletions

View File

@ -154,8 +154,7 @@ public struct ShareExtensionView: View {
Spacer()
if let item = viewModel.linkedItem {
// TODO: modify view to work for share ext only
ApplyLabelsView(mode: .item(item), onSave: nil)
ApplyLabelsListView(linkedItem: item)
}
HStack {
@ -190,3 +189,61 @@ public struct ShareExtensionView: View {
.environmentObject(viewModel.services.dataService)
}
}
struct ApplyLabelsListView: View {
@EnvironmentObject var dataService: DataService
@StateObject var viewModel = LabelsViewModel()
let linkedItem: LinkedItem
func isSelected(_ label: LinkedItemLabel) -> Bool {
viewModel.selectedLabels.contains(where: { $0.id == label.id })
}
var body: some View {
List {
// Section {
// Button(
// action: { viewModel.showCreateLabelModal = true },
// label: {
// HStack {
// Image(systemName: "plus.circle.fill").foregroundColor(.green)
// Text("Create a new Label").foregroundColor(.appGrayTextContrast)
// Spacer()
// }
// }
// )
// .disabled(viewModel.isLoading)
// }
Section {
ForEach(viewModel.labels.applySearchFilter(viewModel.labelSearchFilter), id: \.self) { label in
Button(
action: {
if isSelected(label) {
viewModel.selectedLabels.removeAll(where: { $0.id == label.id })
} else {
viewModel.selectedLabels.append(label)
}
viewModel.saveItemLabelChanges(itemID: linkedItem.unwrappedID, dataService: dataService)
},
label: {
HStack {
TextChip(feedItemLabel: label)
Spacer()
if isSelected(label) {
Image(systemName: "checkmark")
}
}
}
)
#if os(macOS)
.buttonStyle(PlainButtonStyle())
#endif
}
}
}
.task {
await viewModel.loadLabels(dataService: dataService, item: linkedItem)
}
}
}

View File

@ -155,7 +155,7 @@ struct ApplyLabelsView: View {
}
}
private extension Sequence where Element == LinkedItemLabel {
extension Sequence where Element == LinkedItemLabel {
func applySearchFilter(_ searchFilter: String) -> [LinkedItemLabel] {
if searchFilter.isEmpty {
return map { $0 } // return the identity of the sequence