AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/Drawer/Views/DrawerBodyTextView.swift (109 lines of code) (raw):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
import Foundation
import SwiftUI
import FluentUI
internal struct DrawerBodyTextView: View {
let item: BodyTextDrawerListItemViewModel
var body: some View {
HStack {
Text(item.title)
.foregroundColor(.primary)
.padding(.leading, DrawerListConstants.textPaddingLeading)
.font(.body)
Spacer()
}
.padding(.horizontal, DrawerListConstants.optionPaddingHorizontal)
.padding(.vertical, DrawerListConstants.optionPaddingVertical)
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.accessibilityIdentifier(item.accessibilityIdentifier)
.background(Color(StyleProvider.color.drawerColor))
}
}
internal struct DrawerBodyWithActionTextView: View {
let item: BodyTextWithActionDrawerListItemViewModel
@State
var isConfirming = false
var body: some View {
HStack {
Text(item.title)
.foregroundColor(.primary)
.padding(.leading, DrawerListConstants.textPaddingLeading)
.font(.body)
Spacer()
Text(item.actionText)
.onTapGesture {
isConfirming = true
}
.padding(.leading, DrawerListConstants.textPaddingLeading)
.foregroundColor(Color(StyleProvider.color.primaryColor))
}
.padding(.horizontal, DrawerListConstants.optionPaddingHorizontal)
.padding(.vertical, DrawerListConstants.optionPaddingVertical)
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.accessibilityIdentifier(item.accessibilityIdentifier)
.accessibilityAddTraits(.isButton)
.background(Color(StyleProvider.color.drawerColor))
.fullScreenCover(isPresented: $isConfirming) {
CustomAlert(
title: item.confirmTitle,
agreeText: item.confirmAccept,
denyText: item.confirmDeny,
dismiss: {
isConfirming = false
},
agreeAction: item.accept,
denyAction: item.deny
)
.background(BackgroundCleanerView())
}
.transaction { transaction in
transaction.disablesAnimations = true
// transaction.animation = .linear(duration: 1)
}
}
}
internal struct DrawerIconTextActionListItemView: View {
let item: IconTextActionListItemViewModel
@State var isConfirming = false
var body: some View {
HStack {
Icon(name: item.startCompositeIcon, size: DrawerListConstants.iconSize)
.accessibilityHidden(true)
.foregroundColor(item.isEnabled ? .primary : .gray)
Text(item.title)
.foregroundColor(item.isEnabled ? .primary : .gray)
.padding(.leading, DrawerListConstants.textPaddingLeading)
.font(.body)
.onTapGesture {
isConfirming = true
}
Spacer()
}
.padding(.horizontal, DrawerListConstants.optionPaddingHorizontal)
.padding(.vertical, DrawerListConstants.optionPaddingVertical)
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.accessibilityIdentifier(item.accessibilityIdentifier)
.accessibilityAddTraits(.isButton)
.background(Color(StyleProvider.color.drawerColor))
.opacity(item.isEnabled ? 1.0 : DrawerListConstants.disabledOpacity)
.disabled(!item.isEnabled)
.fullScreenCover(isPresented: $isConfirming) {
CustomAlert(
title: item.confirmTitle,
message: item.confirmMessage,
agreeText: item.confirmAccept,
denyText: item.confirmDeny,
dismiss: {
isConfirming = false
},
agreeAction: item.accept,
denyAction: item.deny
)
.background(BackgroundCleanerView())
}
.transaction { transaction in
transaction.disablesAnimations = true
}
}
}