Optimised history list displaying

This commit is contained in:
Selim Mustafaev 2022-04-11 19:33:44 +03:00
parent d613203d13
commit d53e14a965
3 changed files with 55 additions and 5 deletions

View File

@ -1080,7 +1080,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 90;
CURRENT_PROJECT_VERSION = 91;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@ -1105,7 +1105,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 90;
CURRENT_PROJECT_VERSION = 91;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;

View File

@ -100,5 +100,21 @@
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "2B5BCCAE-FCA2-43D1-9835-08DB7E24B91C"
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "AutoCat/Utils/RxRealmDataSource.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "35"
endingLineNumber = "35"
landmarkName = "init(table:data:cellIdentifier:onSizeChanged:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

View File

@ -38,6 +38,10 @@ class RealmSectionedDataSource<Item,Cell>: NSObject, UITableViewDataSource
self.insertFirst()
} else if deletions.isEmpty && insertions.isEmpty && modifications.count == 1 && modifications.first == 0 {
self.reloadFirst()
} else if modifications.isEmpty && deletions.count == 1 && insertions.count == 1 && insertions.first == 0 {
// Probably moving an item to the first position
// For example - updating number info
self.moveToFirst(deleteIndex: deletions.first!)
} else {
self.reload(animated: false)
}
@ -95,16 +99,23 @@ class RealmSectionedDataSource<Item,Cell>: NSObject, UITableViewDataSource
}
func insertFirst() {
guard !sections.isEmpty, let item = data.first?.clone() else {
guard let item = data.first?.clone() else {
reload(animated: false)
return
}
sections[0].insert(item, at: 0)
tv.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
if sections.isEmpty {
sections = [item].groupedByDate()
tv.insertSections(IndexSet(integer: 0), with: .fade)
} else {
sections[0].insert(item, at: 0)
tv.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
}
}
func reloadFirst() {
guard !sections.isEmpty, let item = data.first?.clone() else {
reload(animated: false)
return
}
@ -112,6 +123,29 @@ class RealmSectionedDataSource<Item,Cell>: NSObject, UITableViewDataSource
tv.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)
}
func moveToFirst(deleteIndex: Int) {
var itemIndex = deleteIndex
for index in 0..<sections.count {
if sections[index].elements.count <= itemIndex {
itemIndex -= sections[index].elements.count
continue
}
sections[index].remove(at: itemIndex)
sections[0].insert(data[0].clone(), at: 0)
let fromIndexPath = IndexPath(row: itemIndex, section: index)
let toIndexPath = IndexPath(row: 0, section: 0)
tv.moveRow(at: fromIndexPath, to: toIndexPath)
return
}
reload(animated: false)
}
func getSectionIndex(by numberIndex: Int) -> Int? {
return nil
}
func setFilterPredicate(_ predicate: FilterPredicate<Item>?) {
self.filterPredicate = predicate
self.reload()