Skip to content

Commit

Permalink
Calculate remote message height
Browse files Browse the repository at this point in the history
  • Loading branch information
ayoy committed Oct 9, 2024
1 parent aa02f56 commit f3e969b
Showing 1 changed file with 56 additions and 31 deletions.
87 changes: 56 additions & 31 deletions DuckDuckGo/HomePage/View/HomePageView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ extension HomePage.Views {
}

@State private var scrollPosition: CGFloat = 0
@State private var remoteMessageHeight: CGFloat = 0

var continueSetUpCardsTopPadding: CGFloat {
addressBarModel.shouldShowAddressBar || activeRemoteMessageModel.shouldShowRemoteMessage ? 24 : 0
Expand Down Expand Up @@ -124,22 +125,6 @@ extension HomePage.Views {
max(0, ((Self.settingsPanelWidth + Self.minWindowWidth) - geometry.size.width) / 2)
}

func shouldCenterContent(with geometry: GeometryProxy) -> Bool {
if model.isContinueSetUpAvailable && model.isContinueSetUpVisible && continueSetUpModel.shouldShowAllFeatures {
return false
}
if model.isFavoriteVisible && favoritesModel.showAllFavorites {
return false
}
if model.isRecentActivityVisible && recentlyVisitedModel.showRecentlyVisited {
return false
}
if activeRemoteMessageModel.shouldShowRemoteMessage {
return geometry.size.height > totalHeight + 2 * 112
}
return true
}

func innerView(geometryProxy: GeometryProxy) -> some View {
VStack(spacing: 32) {

Expand Down Expand Up @@ -178,6 +163,9 @@ extension HomePage.Views {
}
}
.frame(width: Self.targetWidth)
.onPreferenceChange(RemoteMessageHeightPreferenceKey.self) { value in
remoteMessageHeight = value
}

} else {
if !addressBarModel.shouldShowAddressBar || !activeRemoteMessageModel.shouldShowRemoteMessage {
Expand Down Expand Up @@ -236,21 +224,24 @@ extension HomePage.Views {
@ViewBuilder
func remoteMessage() -> some View {
if let remoteMessage = activeRemoteMessageModel.remoteMessage, let modelType = remoteMessage.content, modelType.isSupported {
RemoteMessageView(viewModel: .init(
messageId: remoteMessage.id,
modelType: modelType,
onDidClose: { action in
activeRemoteMessageModel.dismissRemoteMessage(with: action)
},
onDidAppear: {
activeRemoteMessageModel.isViewOnScreen = true
},
onDidDisappear: {
activeRemoteMessageModel.isViewOnScreen = false
},
openURLHandler: { url in
WindowControllersManager.shared.showTab(with: .contentFromURL(url, source: .appOpenUrl))
}))
ZStack {
RemoteMessageView(viewModel: .init(
messageId: remoteMessage.id,
modelType: modelType,
onDidClose: { action in
activeRemoteMessageModel.dismissRemoteMessage(with: action)
},
onDidAppear: {
activeRemoteMessageModel.isViewOnScreen = true
},
onDidDisappear: {
activeRemoteMessageModel.isViewOnScreen = false
},
openURLHandler: { url in
WindowControllersManager.shared.showTab(with: .contentFromURL(url, source: .appOpenUrl))
}))
RemoteMessageHeightGetter()
}
} else {
EmptyView()
}
Expand Down Expand Up @@ -391,6 +382,22 @@ extension HomePage.Views {
/// This extension defines views and objects related to displaying Big Search Box.
extension HomePage.Views.RootView {

func shouldCenterContent(with geometry: GeometryProxy) -> Bool {
if model.isContinueSetUpAvailable && model.isContinueSetUpVisible && continueSetUpModel.shouldShowAllFeatures {
return false
}
if model.isFavoriteVisible && favoritesModel.showAllFavorites {
return false
}
if model.isRecentActivityVisible && recentlyVisitedModel.showRecentlyVisited {
return false
}
if activeRemoteMessageModel.shouldShowRemoteMessage {
return geometry.size.height > totalHeight + 2 * remoteMessageHeight
}
return true
}

@ViewBuilder
var scrollOffsetReader: some View {
GeometryReader { geometry in
Expand Down Expand Up @@ -419,4 +426,22 @@ extension HomePage.Views.RootView {
value = nextValue()
}
}

struct RemoteMessageHeightGetter: View {
var body: some View {
GeometryReader { geometry in
Color.clear
.preference(key: RemoteMessageHeightPreferenceKey.self, value: geometry.size.height)
}
}
}

struct RemoteMessageHeightPreferenceKey: PreferenceKey {
typealias Value = CGFloat
static var defaultValue: CGFloat = 0

static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = nextValue()
}
}
}

0 comments on commit f3e969b

Please sign in to comment.