| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright 2021 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- import SwiftUI
- import FirebaseInAppMessaging
- import FirebaseInAppMessagingSwift
- struct ModalInAppMessageView: View {
- var modalMessage: InAppMessagingModalDisplay
- var delegate: InAppMessagingDisplayDelegate
- var body: some View {
- VStack {
- if let imageData = modalMessage.imageData?.imageRawData,
- let image = UIImage(data: imageData) {
- Image(uiImage: image)
- }
- Text(modalMessage.title).padding(4)
- if let bodyText = modalMessage.bodyText {
- Text(bodyText).padding(4)
- }
- actionButton(modalMessage: modalMessage, delegate: delegate).padding(4)
- dismissButton(modalMessage: modalMessage, delegate: delegate).padding(4)
- }
- .background(Color.white)
- .border(Color.black)
- .cornerRadius(4)
- }
- @ViewBuilder
- func actionButton(modalMessage: InAppMessagingModalDisplay,
- delegate: InAppMessagingDisplayDelegate) -> some View {
- if let button = modalMessage.actionButton {
- Button(action: {
- if let actionURL = modalMessage.actionURL {
- let action = InAppMessagingAction(actionText: button.buttonText,
- actionURL: actionURL)
- delegate.messageClicked?(modalMessage, with: action)
- } else {
- delegate.messageDismissed?(modalMessage, dismissType: .typeUserTapClose)
- }
- }) {
- Text(button.buttonText).bold()
- }
- }
- EmptyView()
- }
- // Need a dismiss button for the case where there's an action button with an action URL. Otherwise
- // user would be forced into a clickthrough.
- @ViewBuilder
- func dismissButton(modalMessage: InAppMessagingModalDisplay,
- delegate: InAppMessagingDisplayDelegate) -> some View {
- if let _ = modalMessage.actionButton, modalMessage.actionURL != nil {
- Button(action: {
- delegate.messageDismissed?(modalMessage, dismissType: .typeUserTapClose)
- }) {
- Text("Dismiss").bold()
- }
- }
- EmptyView()
- }
- struct ModalInAppMessageView_Previews: PreviewProvider {
- static var previews: some View {
- let modalMessage = InAppMessagingPreviewHelpers.modalMessage()
- return ModalInAppMessageView(modalMessage: modalMessage,
- delegate: InAppMessagingPreviewHelpers.Delegate())
- }
- }
- }
|