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:
Hedden, Kyle Matthew 2024-06-11 19:06:46 -04:00
parent e3b6591ee4
commit 2dcbc9d41b
6 changed files with 27 additions and 20 deletions

View File

@ -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) {

View File

@ -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 }

View File

@ -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 ??

View File

@ -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()

View File

@ -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.

View File

@ -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() {