From 42692377c97b501d6a6e984ddd23052748d5bcae Mon Sep 17 00:00:00 2001 From: Adam Borbas Date: Tue, 26 Aug 2025 19:56:18 +0200 Subject: [PATCH 1/2] Added endif row --- .../Views/Sieve Script/Row Token/RowTokenToViewMapper.swift | 2 +- Source/Yasba/Views/Sieve Script/SieveScriptView.swift | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/Yasba/Views/Sieve Script/Row Token/RowTokenToViewMapper.swift b/Source/Yasba/Views/Sieve Script/Row Token/RowTokenToViewMapper.swift index 702d4aa..5c41de6 100644 --- a/Source/Yasba/Views/Sieve Script/Row Token/RowTokenToViewMapper.swift +++ b/Source/Yasba/Views/Sieve Script/Row Token/RowTokenToViewMapper.swift @@ -11,7 +11,7 @@ enum RowTokenToViewMapper { case .elseMarker: TextRowView(icon: "arrow.triangle.branch", title: "Else") case .endIf: - EmptyView() + TextRowView(icon: "arrow.triangle.branch", title: "Endif") case .leaf(let command): registry.makeView(for: command) } diff --git a/Source/Yasba/Views/Sieve Script/SieveScriptView.swift b/Source/Yasba/Views/Sieve Script/SieveScriptView.swift index e33e60b..b3a70ec 100644 --- a/Source/Yasba/Views/Sieve Script/SieveScriptView.swift +++ b/Source/Yasba/Views/Sieve Script/SieveScriptView.swift @@ -112,8 +112,6 @@ struct SieveScriptView: View { } if let range = draggedRange, range.contains(index) { EmptyView() - } else if case .endIf = token { - EmptyView() } else { tokenRow(index: index, token: token) } From 41130960e8d2d39050dda26d8ab49ca95d76ea7e Mon Sep 17 00:00:00 2001 From: Adam Borbas Date: Tue, 26 Aug 2025 20:00:26 +0200 Subject: [PATCH 2/2] Optional draggable rows --- .../Views/Sieve Script/Row Token/RowToken.swift | 7 +++++++ .../Yasba/Views/Sieve Script/SieveScriptView.swift | 12 +++++++----- Source/Yasba/Views/View+applyIf.swift | 8 ++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 Source/Yasba/Views/View+applyIf.swift diff --git a/Source/Yasba/Views/Sieve Script/Row Token/RowToken.swift b/Source/Yasba/Views/Sieve Script/Row Token/RowToken.swift index d96bba4..495871e 100644 --- a/Source/Yasba/Views/Sieve Script/Row Token/RowToken.swift +++ b/Source/Yasba/Views/Sieve Script/Row Token/RowToken.swift @@ -25,4 +25,11 @@ enum RowToken: Identifiable, Equatable { default: return true } } + + var canDrag: Bool { + switch self { + case .elseMarker, .endIf: return false + default: return true + } + } } diff --git a/Source/Yasba/Views/Sieve Script/SieveScriptView.swift b/Source/Yasba/Views/Sieve Script/SieveScriptView.swift index b3a70ec..7869044 100644 --- a/Source/Yasba/Views/Sieve Script/SieveScriptView.swift +++ b/Source/Yasba/Views/Sieve Script/SieveScriptView.swift @@ -156,11 +156,13 @@ struct SieveScriptView: View { .padding(.leading, CGFloat(indents[index]) * 24) .contentShape(Rectangle()) .onHover { hovering in hoveredRow = hovering ? index : nil } - .onDrag { - let span = viewModel.dragSpan(at: index, in: tokens) - draggedRange = span - dropGapIndex = span.lowerBound - return NSItemProvider(object: token.id.uuidString as NSString) + .applyIf(token.canDrag) { view in + view.onDrag { + let span = viewModel.dragSpan(at: index, in: tokens) + draggedRange = span + dropGapIndex = span.lowerBound + return NSItemProvider(object: token.id.uuidString as NSString) + } } .onDrop(of: [UTType.utf8PlainText], delegate: UnifiedDropDelegate(target: .row(index), diff --git a/Source/Yasba/Views/View+applyIf.swift b/Source/Yasba/Views/View+applyIf.swift new file mode 100644 index 0000000..ab9df51 --- /dev/null +++ b/Source/Yasba/Views/View+applyIf.swift @@ -0,0 +1,8 @@ +import SwiftUI + +extension View { + @ViewBuilder + func applyIf(_ condition: Bool, transform: (Self) -> T) -> some View { + if condition { transform(self) } else { self } + } +}