mirror of
https://github.com/ProtonMail/ios-mail.git
synced 2026-05-15 09:50:39 +00:00
ET-5955: Added unlimited upsell design in SidebarScreen
This commit is contained in:
@@ -32,8 +32,4 @@ extension UpsellConfiguration {
|
||||
false
|
||||
#endif
|
||||
}
|
||||
|
||||
var humanReadableUpsoldPlanName: String {
|
||||
"Mail Plus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,8 +241,6 @@ struct SidebarScreen: View {
|
||||
|
||||
@ViewBuilder
|
||||
private func upsellSidebarItem(item: SidebarItem, upsellType: UpsellType) -> some View {
|
||||
let planName = UpsellConfiguration.mail.humanReadableUpsoldPlanName
|
||||
|
||||
SidebarItemButton(
|
||||
item: item,
|
||||
isTappable: isButtonTappable,
|
||||
@@ -250,7 +248,7 @@ struct SidebarScreen: View {
|
||||
content: {
|
||||
HStack(spacing: .zero) {
|
||||
sidebarItemImage(icon: upsellType.icon.image, isSelected: false, renderingMode: .original)
|
||||
itemNameLabel(name: upsellType.title(planName: planName), isSelected: false, foregroundColor: upsellType.tint)
|
||||
itemNameLabel(name: upsellType.title, isSelected: false)
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
@@ -379,11 +377,11 @@ struct SidebarScreen: View {
|
||||
.accessibilityIdentifier(SidebarScreenIdentifiers.badgeIcon)
|
||||
}
|
||||
|
||||
private func itemNameLabel(name: String, isSelected: Bool, foregroundColor: Color? = nil) -> some View {
|
||||
private func itemNameLabel(name: String, isSelected: Bool) -> some View {
|
||||
Text(name)
|
||||
.font(.subheadline)
|
||||
.fontWeight(isSelected ? .bold : .regular)
|
||||
.foregroundStyle(foregroundColor ?? (isSelected ? DS.Color.Sidebar.textSelected : DS.Color.Sidebar.textNorm))
|
||||
.foregroundStyle(isSelected ? DS.Color.Sidebar.textSelected : DS.Color.Sidebar.textNorm)
|
||||
.lineLimit(1)
|
||||
.accessibilityIdentifier(SidebarScreenIdentifiers.textItem)
|
||||
}
|
||||
@@ -464,24 +462,25 @@ private extension SidebarOtherItem {
|
||||
}
|
||||
|
||||
private extension UpsellType {
|
||||
var planName: String {
|
||||
switch self {
|
||||
case .mailPlus:
|
||||
"Mail Plus"
|
||||
case .unlimited:
|
||||
"Unlimited"
|
||||
}
|
||||
}
|
||||
|
||||
var icon: ImageResource {
|
||||
switch self {
|
||||
case .mailPlus, .unlimited:
|
||||
case .mailPlus:
|
||||
DS.Icon.icDiamond
|
||||
case .unlimited:
|
||||
DS.Icon.icInfinity
|
||||
}
|
||||
}
|
||||
|
||||
func title(planName: String) -> String {
|
||||
switch self {
|
||||
case .mailPlus, .unlimited:
|
||||
L10n.Sidebar.upgrade(to: planName).string
|
||||
}
|
||||
}
|
||||
|
||||
var tint: Color? {
|
||||
switch self {
|
||||
case .mailPlus, .unlimited:
|
||||
nil
|
||||
}
|
||||
var title: String {
|
||||
L10n.Sidebar.upgrade(to: planName).string
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,9 +37,10 @@ final class SidebarScreenSnapshotTests {
|
||||
createFolder: .createFolder
|
||||
)
|
||||
|
||||
@Test(arguments: [UIUserInterfaceStyle.light, .dark])
|
||||
func testSidebarWithDataLayoutsCorrectOnIphoneX(style: UIUserInterfaceStyle) {
|
||||
@Test(arguments: [UIUserInterfaceStyle.light, .dark], [UpsellType.mailPlus, .unlimited])
|
||||
func testSidebarWithDataLayoutsCorrectOnIphoneX(style: UIUserInterfaceStyle, upsellType: UpsellType) {
|
||||
var state = self.state
|
||||
state.upsell = .upsell(upsellType)
|
||||
|
||||
state.folders = [SidebarCustomFolder.topSecretFolder].map(\.sidebarFolder)
|
||||
state.system = [PMSystemLabel.inbox, .sent, .outbox].compactMap(\.sidebarSystemFolder)
|
||||
@@ -48,13 +49,13 @@ final class SidebarScreenSnapshotTests {
|
||||
let sidebarScreen = SidebarScreen(
|
||||
state: state,
|
||||
userSession: .dummy,
|
||||
upsellEligibilityPublisher: .init(constant: .eligible(.mailPlus)),
|
||||
upsellEligibilityPublisher: .init(constant: .eligible(upsellType)),
|
||||
appVersionProvider: .init(bundle: bundleStub, sdkVersionProvider: .init(sdkVersion: "0.61.0")),
|
||||
sidebarFactory: { _ in SidebarSpy() }
|
||||
) { _ in }
|
||||
.environmentObject(AppUIStateStore(sidebarState: .init(zIndex: .zero, visibleWidth: 320)))
|
||||
|
||||
assertSnapshotsOnIPhoneX(of: sidebarScreen, styles: [style])
|
||||
assertSnapshotsOnIPhoneX(of: sidebarScreen, named: "\(upsellType)", styles: [style])
|
||||
}
|
||||
|
||||
@Test(arguments: [UIUserInterfaceStyle.light, .dark])
|
||||
|
||||
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 156 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 149 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 156 KiB |
@@ -98,6 +98,7 @@ public extension DS.Icon {
|
||||
public extension DS.Icon {
|
||||
static let icCode = ImageResource.icCode
|
||||
static let icDiamond = ImageResource.icDiamond
|
||||
static let icInfinity = ImageResource.icInfinity
|
||||
static let icEnvelopeDot = ImageResource.icEnvelopeDot
|
||||
static let icEnvelopeOpen = ImageResource.icEnvelopeOpen
|
||||
static let icFileLines = ImageResource.icFileLines
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icon.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
Vendored
BIN
Binary file not shown.
Reference in New Issue
Block a user