mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-28 12:19:54 +00:00
test
This commit is contained in:
parent
1d8bc5e622
commit
553be124d5
2 changed files with 14 additions and 14 deletions
|
@ -273,17 +273,17 @@ class ActiveChatState {
|
|||
}
|
||||
}
|
||||
|
||||
struct BoxedValue2<T: Hashable>: /*Identifiable, */Hashable {
|
||||
class BoxedValue2<T: Hashable>: /*Identifiable, */Hashable {
|
||||
// var id: Int64 { (boxedValue as! MergedItem).id }
|
||||
|
||||
static func == (lhs: BoxedValue2<T>, rhs: BoxedValue2<T>) -> Bool {
|
||||
lhs.boxedValue == rhs.boxedValue
|
||||
}
|
||||
|
||||
var hashValue: Int { (boxedValue as! MergedItem).newest().hashValue }
|
||||
var hashValue: Int { (boxedValue as! MergedItem).newest().item.hashValue }
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine("\((boxedValue as! MergedItem).newest())")
|
||||
hasher.combine("\((boxedValue as! MergedItem).newest().item)")
|
||||
}
|
||||
|
||||
var boxedValue : T
|
||||
|
|
|
@ -48,7 +48,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
|||
itemsUpdaterTask?.cancel()
|
||||
// when tableView is dragging and new items are added, scroll position cannot be set correctly
|
||||
// so it's better to just wait until dragging ends
|
||||
if controller.tableView.isDragging {
|
||||
if false && controller.tableView.isDragging {
|
||||
DispatchQueue.main.async {
|
||||
itemsUpdaterTask = Task {
|
||||
while controller.tableView.isDragging {
|
||||
|
@ -78,7 +78,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
|||
// Putting MergedItem here directly prevents UITableViewDiffableDataSource to make partial updates
|
||||
// which looks like UITableView scrolls to bottom on insert values to bottom instead of
|
||||
// remains in the same scroll position
|
||||
private var dataSource: UITableViewDiffableDataSource<Section, Int>!
|
||||
private var dataSource: UITableViewDiffableDataSource<Section, BoxedValue2<MergedItem>>!
|
||||
var itemCount: Int {
|
||||
get {
|
||||
representer.mergedItems.items.count
|
||||
|
@ -114,7 +114,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
|||
}
|
||||
|
||||
// 3. Configure data source
|
||||
self.dataSource = UITableViewDiffableDataSource<Section, Int>(
|
||||
self.dataSource = UITableViewDiffableDataSource<Section, BoxedValue2<MergedItem>>(
|
||||
tableView: tableView
|
||||
) { (tableView, indexPath, item) -> UITableViewCell? in
|
||||
if indexPath.item > self.itemCount - 8 {
|
||||
|
@ -124,12 +124,12 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
|||
}
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseId, for: indexPath)
|
||||
if #available(iOS 16.0, *) {
|
||||
cell.contentConfiguration = UIHostingConfiguration { self.representer.content(indexPath.item, self.itemsInPrevSnapshot[item]!) }
|
||||
cell.contentConfiguration = UIHostingConfiguration { self.representer.content(indexPath.item, item.boxedValue) }
|
||||
.margins(.all, 0)
|
||||
.minSize(height: 1) // Passing zero will result in system default of 44 points being used
|
||||
} else {
|
||||
if let cell = cell as? HostingCell<Content> {
|
||||
cell.set(content: self.representer.content(indexPath.item, self.itemsInPrevSnapshot[item]!), parent: self)
|
||||
cell.set(content: self.representer.content(indexPath.item, item.boxedValue), parent: self)
|
||||
} else {
|
||||
fatalError("Unexpected Cell Type for: \(item)")
|
||||
}
|
||||
|
@ -256,21 +256,21 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
|||
let insertedOneNewestItem = wasCount != 0 && representer.mergedItems.items.count - wasCount == 1 && prevSnapshot.itemIdentifiers.first!.hashValue == self.representer.mergedItems.items[1].hashValue
|
||||
logger.debug("LALAL WAS \(wasCount) will be \(self.representer.mergedItems.items.count)")
|
||||
//self.representer.mergedItems = MergedItems.create(items, representer.unreadCount, representer.revealedItems, ItemsModel.shared.chatState)
|
||||
let snapshot: NSDiffableDataSourceSnapshot<Section, Int>
|
||||
let snapshot: NSDiffableDataSourceSnapshot<Section, BoxedValue2<MergedItem>>
|
||||
let itemsInCurrentSnapshot: Dictionary<Int, MergedItem>
|
||||
if insertedOneNewestItem {
|
||||
prevSnapshot.insertItems([representer.mergedItems.items.first!.hashValue], beforeItem: prevSnapshot.itemIdentifiers.first!)
|
||||
prevSnapshot.insertItems([BoxedValue2(representer.mergedItems.items.first!)], beforeItem: prevSnapshot.itemIdentifiers.first!)
|
||||
var new = itemsInPrevSnapshot
|
||||
new[representer.mergedItems.items.first!.hashValue] = representer.mergedItems.items.first!
|
||||
//new[representer.mergedItems.items.first!.hashValue] = representer.mergedItems.items.first!
|
||||
itemsInCurrentSnapshot = new
|
||||
snapshot = prevSnapshot
|
||||
} else {
|
||||
var new: Dictionary<Int, MergedItem> = [:]
|
||||
var snap = NSDiffableDataSourceSnapshot<Section, Int>()
|
||||
var snap = NSDiffableDataSourceSnapshot<Section, BoxedValue2<MergedItem>>()
|
||||
snap.appendSections([.main])
|
||||
snap.appendItems(representer.mergedItems.items.map({ merged in
|
||||
new[merged.hashValue] = merged
|
||||
return merged.hashValue
|
||||
return BoxedValue2(merged)//.hashValue
|
||||
}))
|
||||
itemsInCurrentSnapshot = new
|
||||
|
||||
|
@ -295,7 +295,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
|||
snapshot,
|
||||
animatingDifferences: insertedOneNewestItem
|
||||
)
|
||||
if let firstUnreadItem = snapshot.itemIdentifiers.lastIndex(where: { hash in itemsInPrevSnapshot[hash]!.hasUnread() }) {
|
||||
if let firstUnreadItem = snapshot.itemIdentifiers.lastIndex(where: { item in item.boxedValue.hasUnread() }) {
|
||||
scrollToRowWhenKnowSize(firstUnreadItem)
|
||||
} else {
|
||||
tableView.setContentOffset(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue