Skip to content

Commit 863e1be

Browse files
author
Reed Es
committed
Add support for List onDelete, for iOS menu swipe #49
1 parent ee12fc9 commit 863e1be

12 files changed

+23
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,9 @@ List configuration is optional.
460460
`TablerListConfig<Element>.init` parameters:
461461

462462
- `canMove: CanMove<Element>` - with a default of `{ _ in true }`, allowing any row to move (if `onMove` defined)
463+
- `canDelete: CanDelete<Element>` - with a default of `{ _ in true }`, allowing any row to be deleted (if `onDelete` defined), currently only via swipe menu on iOS
463464
- `onMove: OnMove<Element>?` - with a default of `nil`, prohibiting any move
465+
- `onDelete: OnDelete<Element>?` - with a default of `nil`, prohibiting any delete, currently only via swipe menu on iOS
464466
- `filter: Filter?` - with a default of `nil`, indicating no filtering
465467
- `onHover: (Element.ID, Bool) -> Void` - defaults to `{ _,_ in }`
466468
- `tablePadding: EdgeInsets` - per Base defaults

Sources/List/Internal/ListRowMod.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ where Element: Identifiable
2929

3030
func body(content: Content) -> some View {
3131
content
32+
.deleteDisabled(!config.canDelete(element))
3233
.moveDisabled(!config.canMove(element))
3334

3435
#if os(macOS) || targetEnvironment(macCatalyst)

Sources/List/TablerList.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ where Element: Identifiable,
8484
.overlay(rowOverlay(element))
8585
}
8686
.onMove(perform: config.onMove)
87+
.onDelete(perform: config.onDelete)
8788
}
8889
}
8990
}

Sources/List/TablerList1.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public struct TablerList1<Element, Header, Footer, Row, RowBack, RowOver, Result
8989
.overlay(rowOverlay(element))
9090
}
9191
.onMove(perform: config.onMove)
92+
.onDelete(perform: config.onDelete)
9293
}
9394
}
9495
}

Sources/List/TablerList1B.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,13 @@ public struct TablerList1B<Element, Header, Footer, Row, RowBack, RowOver, Resul
9090
}
9191
}
9292
.onMove(perform: config.onMove)
93+
.onDelete(perform: config.onDelete)
9394
} else {
9495
ForEach($results) { $element in
9596
row($element)
9697
}
9798
.onMove(perform: config.onMove)
99+
.onDelete(perform: config.onDelete)
98100
}
99101
}
100102
}

Sources/List/TablerList1C.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public struct TablerList1C<Element, Header, Footer, Row, RowBack, RowOver, Resul
9292
}
9393
}
9494
.onMove(perform: config.onMove)
95+
.onDelete(perform: config.onDelete)
9596
}
9697
}
9798
}

Sources/List/TablerListB.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,13 @@ public struct TablerListB<Element, Header, Footer, Row, RowBack, RowOver, Result
8585
}
8686
}
8787
.onMove(perform: config.onMove)
88+
.onDelete(perform: config.onDelete)
8889
} else {
8990
ForEach($results) { $element in
9091
row($element)
9192
}
9293
.onMove(perform: config.onMove)
94+
.onDelete(perform: config.onDelete)
9395
}
9496
}
9597
}

Sources/List/TablerListC.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public struct TablerListC<Element, Header, Footer, Row, RowBack, RowOver, Result
8787
}
8888
}
8989
.onMove(perform: config.onMove)
90+
.onDelete(perform: config.onDelete)
9091
}
9192
}
9293
}

Sources/List/TablerListConfig.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,18 @@ public class TablerListConfig<Element>: TablerConfig<Element>
2323
{
2424
public typealias CanMove<Element> = (Element) -> Bool
2525
public typealias OnMove<Element> = (IndexSet, Int) -> Void
26+
public typealias CanDelete<Element> = (Element) -> Bool
27+
public typealias OnDelete<Element> = (IndexSet) -> Void
2628

2729
public let canMove: CanMove<Element>
2830
public let onMove: OnMove<Element>?
31+
public let canDelete: CanDelete<Element>
32+
public let onDelete: OnDelete<Element>?
2933

3034
public init(canMove: @escaping CanMove<Element> = { _ in true },
3135
onMove: OnMove<Element>? = nil,
36+
canDelete: @escaping CanDelete<Element> = { _ in true },
37+
onDelete: OnDelete<Element>? = nil,
3238
filter: Filter? = nil,
3339
onHover: @escaping OnHover = { _,_ in },
3440
tablePadding: EdgeInsets = TablerConfigDefaults.tablePadding,
@@ -38,6 +44,8 @@ public class TablerListConfig<Element>: TablerConfig<Element>
3844
{
3945
self.canMove = canMove
4046
self.onMove = onMove
47+
self.canDelete = canDelete
48+
self.onDelete = onDelete
4149

4250
super.init(filter: filter,
4351
onHover: onHover,

Sources/List/TablerListM.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public struct TablerListM<Element, Header, Footer, Row, RowBack, RowOver, Result
8989
.overlay(rowOverlay(element))
9090
}
9191
.onMove(perform: config.onMove)
92+
.onDelete(perform: config.onDelete)
9293
}
9394
}
9495
}

0 commit comments

Comments
 (0)