Merge branch 'bugfix/CXTDT-569436' into 'develop'

Digital PCT265 defect CXTDT-569436: Restore render dispatch in handleNewData....

### Summary
Fix first time rendering.

### JIRA Ticket
https://onejira.verizon.com/browse/CXTDT-569436

Co-authored-by: Hedden, Kyle Matthew <kyle.hedden@verizonwireless.com>

See merge request https://gitlab.verizon.com/BPHV_MIPS/mvm_core_ui/-/merge_requests/1125
This commit is contained in:
Bruce, Matt R 2024-06-12 13:18:25 +00:00
commit d0bf8a1573
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()
registerCells()
super.handleNewData(pageModel)
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
}
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)
}
override open func handleNewData(_ pageModel: PageModelProtocol? = nil) {
super.handleNewData(pageModel)
override open func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
closeButton = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { [weak self] _ in
guard let self = self else { return }

View File

@ -23,8 +23,8 @@ open class ModalMoleculeStackTemplate: MoleculeStackTemplate {
// MARK: - Lifecycle
//--------------------------------------------------
override open func handleNewData(_ pageModel: PageModelProtocol? = nil) {
super.handleNewData(pageModel)
override open func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
_ = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { [weak self] _ in
guard let self = self else { return }
let closeAction = (self.templateModel as? ModalStackPageTemplateModel)?.closeAction ??

View File

@ -85,8 +85,8 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
return view
}
open override func handleNewData(_ pageModel: PageModelProtocol? = nil) {
super.handleNewData(pageModel)
open override func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
if pageModel != nil {
setup()

View File

@ -20,10 +20,10 @@ open class MoleculeStackTemplate: ThreeLayerViewController, TemplateProtocol {
// MARK: - Lifecycle
//--------------------------------------------------
open override func handleNewData(_ pageModel: PageModelProtocol? = nil) {
open override func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
topViewOutsideOfScroll = templateModel?.anchorHeader ?? false
bottomViewOutsideOfScroll = templateModel?.anchorFooter ?? false
super.handleNewData(pageModel)
super.handleNewData(pageModel, shouldTriggerRender: shouldTriggerRender)
}
// For subclassing the model.

View File

@ -225,9 +225,9 @@ import MVMCore
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
open func handleNewData(_ pageModel: PageModelProtocol? = nil) {
open func handleNewData(_ pageModel: PageModelProtocol? = nil, shouldTriggerRender: Bool = true) {
guard var newPageModel = pageModel ?? self.pageModel else { return }
let originalModel = isFirstRender ? nil : self.pageModel as? MVMControllerModelProtocol
@ -279,13 +279,19 @@ import MVMCore
// Notify the manager of new data.
// Warning: Some flows cause table reloads. Until the UI update is decoupled, should be after the updateUI.
manager?.newDataReceived?(in: self)
if allUpdatedMolecules.isEmpty || isFirstRender {
debugLog("Performing full page render...")
updateUI()
} else {
debugLog("Performing partial render of \(allUpdatedMolecules) molecules...")
updateUI(for: allUpdatedMolecules)
guard shouldTriggerRender else { return }
// Dispatch to decouple execution. First massage data through template classes, then render.
Task { @MainActor in
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()
}
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() {