Skip to content

Commit 8e011ff

Browse files
authored
Adding endif row, optional draggable rows (#6)
* Added endif row * Optional draggable rows
1 parent a233d04 commit 8e011ff

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

Source/Yasba/Views/Sieve Script/Row Token/RowToken.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,11 @@ enum RowToken: Identifiable, Equatable {
2525
default: return true
2626
}
2727
}
28+
29+
var canDrag: Bool {
30+
switch self {
31+
case .elseMarker, .endIf: return false
32+
default: return true
33+
}
34+
}
2835
}

Source/Yasba/Views/Sieve Script/Row Token/RowTokenToViewMapper.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ enum RowTokenToViewMapper {
1111
case .elseMarker:
1212
TextRowView(icon: "arrow.triangle.branch", title: "Else")
1313
case .endIf:
14-
EmptyView()
14+
TextRowView(icon: "arrow.triangle.branch", title: "Endif")
1515
case .leaf(let command):
1616
registry.makeView(for: command)
1717
}

Source/Yasba/Views/Sieve Script/SieveScriptView.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ struct SieveScriptView: View {
112112
}
113113
if let range = draggedRange, range.contains(index) {
114114
EmptyView()
115-
} else if case .endIf = token {
116-
EmptyView()
117115
} else {
118116
tokenRow(index: index, token: token)
119117
}
@@ -158,11 +156,13 @@ struct SieveScriptView: View {
158156
.padding(.leading, CGFloat(indents[index]) * 24)
159157
.contentShape(Rectangle())
160158
.onHover { hovering in hoveredRow = hovering ? index : nil }
161-
.onDrag {
162-
let span = viewModel.dragSpan(at: index, in: tokens)
163-
draggedRange = span
164-
dropGapIndex = span.lowerBound
165-
return NSItemProvider(object: token.id.uuidString as NSString)
159+
.applyIf(token.canDrag) { view in
160+
view.onDrag {
161+
let span = viewModel.dragSpan(at: index, in: tokens)
162+
draggedRange = span
163+
dropGapIndex = span.lowerBound
164+
return NSItemProvider(object: token.id.uuidString as NSString)
165+
}
166166
}
167167
.onDrop(of: [UTType.utf8PlainText],
168168
delegate: UnifiedDropDelegate(target: .row(index),
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import SwiftUI
2+
3+
extension View {
4+
@ViewBuilder
5+
func applyIf<T: View>(_ condition: Bool, transform: (Self) -> T) -> some View {
6+
if condition { transform(self) } else { self }
7+
}
8+
}

0 commit comments

Comments
 (0)