From 82e54ad018ae5fa5cdf90c0d763e09e99bc0e933 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 22 Mar 2026 20:42:53 -0500 Subject: feat: swipe actions on tickets, pastes, builds, and home dashboard --- Hutch/Views/Pastes/PasteListViewModel.swift | 41 +++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'Hutch/Views/Pastes/PasteListViewModel.swift') diff --git a/Hutch/Views/Pastes/PasteListViewModel.swift b/Hutch/Views/Pastes/PasteListViewModel.swift index d41cf96..b521e18 100644 --- a/Hutch/Views/Pastes/PasteListViewModel.swift +++ b/Hutch/Views/Pastes/PasteListViewModel.swift @@ -107,6 +107,47 @@ final class PasteListViewModel { } } + func deletePaste(_ paste: Paste) async { + do { + _ = try await service.deletePaste(id: paste.id) + removePaste(id: paste.id) + } catch { + self.error = error.userFacingMessage + } + } + + func cycleVisibility(for paste: Paste) async { + let next: Visibility + switch paste.visibility { + case .public: + next = .unlisted + case .unlisted: + next = .private + case .private: + next = .public + } + + let original = pastes + if let index = pastes.firstIndex(where: { $0.id == paste.id }) { + pastes[index] = Paste( + id: paste.id, + created: paste.created, + visibility: next, + files: paste.files, + user: paste.user + ) + } + + do { + if let updated = try await service.updateVisibility(id: paste.id, visibility: next) { + upsertPaste(updated) + } + } catch { + pastes = original + self.error = error.userFacingMessage + } + } + func upsertPaste(_ paste: Paste) { if let index = pastes.firstIndex(where: { $0.id == paste.id }) { pastes[index] = paste -- cgit v1.2.3