Add snippet package selection
This commit is contained in:
1 parent
b1a4d9cc69
commit
d748ae2688
3 files changed
+30
-1
No files matched your search
@@ -333,7 +333,7 @@ struct HostsPageView: ManagedCardPage {
|
||||
|
||||
private func setHostSelection(_ ids: Set<Host.ID>) {
|
||||
let valid = ids.intersection(Set(app.hostLibrary.hosts.map(\.id)))
|
||||
if !valid.isEmpty { state.selectedGroupID = nil }
|
||||
state.selectedGroupID = nil
|
||||
let ordered = visibleHosts.filter { valid.contains($0.id) }.map { ContextPanelDetailID.host($0.id) }
|
||||
window.setDetailSelection(ordered, for: .hosts)
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ final class SnippetsPageState {
|
||||
}
|
||||
|
||||
var query = ""
|
||||
var selectedPackageID: SnippetPackage.ID?
|
||||
var confirmation: ConfirmationRoute?
|
||||
}
|
||||
|
||||
@@ -167,6 +168,8 @@ struct SnippetsPageView: ManagedCardPage {
|
||||
)
|
||||
},
|
||||
isCollapsed: !package.isExpanded,
|
||||
select: { selectPackage(package.id) },
|
||||
isSelected: state.selectedPackageID == package.id,
|
||||
isDropTarget: isDropTarget
|
||||
)
|
||||
.contextMenu {
|
||||
@@ -284,11 +287,17 @@ struct SnippetsPageView: ManagedCardPage {
|
||||
|
||||
private func setSelection(_ ids: Set<Snippet.ID>) {
|
||||
let valid = ids.intersection(Set(app.snippets.snippets.map(\.id)))
|
||||
state.selectedPackageID = nil
|
||||
let ordered = visibleSnippets.filter { valid.contains($0.id) }
|
||||
.map { ContextPanelDetailID.snippet($0.id) }
|
||||
window.setDetailSelection(ordered, for: .snippets)
|
||||
}
|
||||
|
||||
private func selectPackage(_ id: SnippetPackage.ID) {
|
||||
window.clearDetailSelection(for: .snippets)
|
||||
state.selectedPackageID = id
|
||||
}
|
||||
|
||||
private func saveSnippet(_ snippet: Snippet) {
|
||||
app.snippets.upsert(snippet)
|
||||
window.selectDetail(.snippet(snippet.id), on: .snippets)
|
||||
@@ -307,8 +316,16 @@ struct SnippetsPageView: ManagedCardPage {
|
||||
}
|
||||
|
||||
private func deletePackage(_ package: SnippetPackage, keepSnippets: Bool) {
|
||||
let deletedPackageIDs = Set(
|
||||
[package.id] + app.snippets.descendantSnippetPackages(of: package.id).map(\.id)
|
||||
)
|
||||
app.snippets.delete(snippetPackageID: package.id, keepSnippets: keepSnippets)
|
||||
state.confirmation = nil
|
||||
if let selectedPackageID = state.selectedPackageID,
|
||||
deletedPackageIDs.contains(selectedPackageID)
|
||||
{
|
||||
state.selectedPackageID = nil
|
||||
}
|
||||
window.pruneDetailSelections(in: app.snippets)
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,18 @@ struct ContextPanelSelectionTests {
|
||||
#expect(second.selectedGroupID == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
func snippetFeatureStateOwnsPackageSelection() {
|
||||
let first = SnippetsPageState()
|
||||
let second = SnippetsPageState()
|
||||
let package = UUID()
|
||||
|
||||
first.selectedPackageID = package
|
||||
|
||||
#expect(first.selectedPackageID == package)
|
||||
#expect(second.selectedPackageID == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
func hostAttachedContentOverridesRememberedManagerSelection() {
|
||||
let pageHostID = UUID()
|
||||
|
||||
Reference in new issue
Block a user