Digital PCT265 defect CXTDT-569436: Restore render dispatch in handleNewData. Add optional flag to disable in situations where we want to handle it ourselves.
This commit is contained in:
parent
e3b6591ee4
commit
2dcbc9d41b
@ -79,10 +79,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
open override func handleNewData(_ pageModel: PageModelProtocol? = nil) {
|
open override func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
|
||||||
setup()
|
setup()
|
||||||
registerCells()
|
registerCells()
|
||||||
super.handleNewData(pageModel)
|
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func updateUI(for molecules: [MoleculeModelProtocol]? = nil) {
|
open override func updateUI(for molecules: [MoleculeModelProtocol]? = nil) {
|
||||||
|
|||||||
@ -25,8 +25,8 @@ open class ModalMoleculeListTemplate: MoleculeListTemplate {
|
|||||||
try decoder.decode(ModalListPageTemplateModel.self, from: data)
|
try decoder.decode(ModalListPageTemplateModel.self, from: data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override open func handleNewData(_ pageModel: PageModelProtocol? = nil) {
|
override open func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
|
||||||
super.handleNewData(pageModel)
|
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
|
||||||
|
|
||||||
closeButton = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { [weak self] _ in
|
closeButton = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { [weak self] _ in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
|||||||
@ -23,8 +23,8 @@ open class ModalMoleculeStackTemplate: MoleculeStackTemplate {
|
|||||||
// MARK: - Lifecycle
|
// MARK: - Lifecycle
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|
||||||
override open func handleNewData(_ pageModel: PageModelProtocol? = nil) {
|
override open func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
|
||||||
super.handleNewData(pageModel)
|
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
|
||||||
_ = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { [weak self] _ in
|
_ = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { [weak self] _ in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let closeAction = (self.templateModel as? ModalStackPageTemplateModel)?.closeAction ??
|
let closeAction = (self.templateModel as? ModalStackPageTemplateModel)?.closeAction ??
|
||||||
|
|||||||
@ -85,8 +85,8 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
|
|||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func handleNewData(_ pageModel: PageModelProtocol? = nil) {
|
open override func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
|
||||||
super.handleNewData(pageModel)
|
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
|
||||||
|
|
||||||
if pageModel != nil {
|
if pageModel != nil {
|
||||||
setup()
|
setup()
|
||||||
|
|||||||
@ -20,10 +20,10 @@ open class MoleculeStackTemplate: ThreeLayerViewController, TemplateProtocol {
|
|||||||
// MARK: - Lifecycle
|
// MARK: - Lifecycle
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|
||||||
open override func handleNewData(_ pageModel: PageModelProtocol? = nil) {
|
open override func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
|
||||||
topViewOutsideOfScroll = templateModel?.anchorHeader ?? false
|
topViewOutsideOfScroll = templateModel?.anchorHeader ?? false
|
||||||
bottomViewOutsideOfScroll = templateModel?.anchorFooter ?? false
|
bottomViewOutsideOfScroll = templateModel?.anchorFooter ?? false
|
||||||
super.handleNewData(pageModel)
|
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
|
||||||
}
|
}
|
||||||
|
|
||||||
// For subclassing the model.
|
// For subclassing the model.
|
||||||
|
|||||||
@ -225,9 +225,9 @@ import MVMCore
|
|||||||
return navigationModel
|
return navigationModel
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Processes any new data. Called after the page is loaded the first time and on response updates for this page. Triggers a render refresh.
|
/// Processes any new data. Called after the page is loaded the first time and on response updates for this page. Triggers a render refresh unless specified otherwise.
|
||||||
@MainActor
|
@MainActor
|
||||||
open func handleNewData(_ pageModel: PageModelProtocol? = nil) {
|
open func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
|
||||||
|
|
||||||
guard var newPageModel = pageModel ?? self.pageModel else { return }
|
guard var newPageModel = pageModel ?? self.pageModel else { return }
|
||||||
let originalModel = isFirstRender ? nil : self.pageModel as? MVMControllerModelProtocol
|
let originalModel = isFirstRender ? nil : self.pageModel as? MVMControllerModelProtocol
|
||||||
@ -279,13 +279,19 @@ import MVMCore
|
|||||||
// Notify the manager of new data.
|
// Notify the manager of new data.
|
||||||
// Warning: Some flows cause table reloads. Until the UI update is decoupled, should be after the updateUI.
|
// Warning: Some flows cause table reloads. Until the UI update is decoupled, should be after the updateUI.
|
||||||
manager?.newDataReceived?(in: self)
|
manager?.newDataReceived?(in: self)
|
||||||
|
|
||||||
if allUpdatedMolecules.isEmpty || isFirstRender {
|
guard shouldTriggerRender else { return }
|
||||||
debugLog("Performing full page render...")
|
|
||||||
updateUI()
|
// Dispatch to decouple execution. First massage data through template classes, then render.
|
||||||
} else {
|
Task { @MainActor in
|
||||||
debugLog("Performing partial render of \(allUpdatedMolecules) molecules...")
|
|
||||||
updateUI(for: allUpdatedMolecules)
|
if allUpdatedMolecules.isEmpty || isFirstRender {
|
||||||
|
debugLog("Performing full page render...")
|
||||||
|
updateUI()
|
||||||
|
} else {
|
||||||
|
debugLog("Performing partial render of \(allUpdatedMolecules) molecules...")
|
||||||
|
updateUI(for: allUpdatedMolecules)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,7 +405,8 @@ import MVMCore
|
|||||||
initialLoad()
|
initialLoad()
|
||||||
}
|
}
|
||||||
|
|
||||||
handleNewData(pageModel) // Set outside shouldFinishProcessingLoad.
|
handleNewData(pageModel, shouldTriggerRender: false) // Set outside shouldFinishProcessingLoad.
|
||||||
|
updateUI() // Force the rendering on the same main UI thread.
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func viewDidLayoutSubviews() {
|
open override func viewDidLayoutSubviews() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user