Skip to content

Commit

Permalink
[Popover] Added demos
Browse files Browse the repository at this point in the history
  • Loading branch information
LouisBorleeAdevinta committed Jul 15, 2024
1 parent b8e76be commit 401cfac
Show file tree
Hide file tree
Showing 7 changed files with 181 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .Demo/Classes/Enum/UIComponent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ struct UIComponent: RawRepresentable, CaseIterable, Equatable {
.chip,
.formField,
.icon,
.popover,
.progressBarIndeterminate,
.progressBarSingle,
.progressTracker,
Expand Down Expand Up @@ -45,6 +46,7 @@ struct UIComponent: RawRepresentable, CaseIterable, Equatable {
static let formField = UIComponent(rawValue: "FormField")
static let icon = UIComponent(rawValue: "Icon")
static let iconButton = UIComponent(rawValue: "Icon Button")
static let popover = UIComponent(rawValue: "Popover")
static let progressBarIndeterminate = UIComponent(rawValue: "Progress Bar Indeterminate")
static let progressBarSingle = UIComponent(rawValue: "Progress Bar Single")
static let progressTracker = UIComponent(rawValue: "Progress Tracker")
Expand Down
12 changes: 9 additions & 3 deletions .Demo/Classes/View/Components/ComponentsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ struct ComponentsView: View {
Button("Button") {
self.navigateToView(ButtonComponentView())
}
Button("Icon Button") {
self.navigateToView(IconButtonComponentView())
}
}

Group {
Expand All @@ -59,6 +56,15 @@ struct ComponentsView: View {
self.navigateToView(IconComponentView())
}

if #available(iOS 16.4, *) {
Button("Popover") {
self.navigateToView(PopoverDemoView())
}
} else {
Text("Popover: unavailable below iOS version 16.4")
.foregroundStyle(.red)
}

Group {
Button("Progress Bar - Indeterminate") {
self.navigateToView(ProgressBarIndeterminateComponentView())
Expand Down
2 changes: 2 additions & 0 deletions .Demo/Classes/View/Components/ComponentsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ extension ComponentsViewController {
viewController = FormFieldComponentUIViewController.build()
case .icon:
viewController = IconComponentUIViewController.build()
case .popover:
viewController = PopoverPresentingUIViewController.build()
case .progressBarIndeterminate:
viewController = ProgressBarIndeterminateComponentUIViewController.build()
case .progressBarSingle:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
//
// PopoverDemoView.swift
// SparkDemo
//
// Created by louis.borlee on 15/07/2024.
// Copyright © 2024 Adevinta. All rights reserved.
//

import SwiftUI
import SparkCore
import SparkPopover

@available(iOS 16.4, *)
struct PopoverDemoView: View {

private let theme = SparkTheme()

var body: some View {
ForEach(PopoverIntent.allCases, id: \.self) { intent in
let colors = intent.getColors(theme: theme)
PopoverDemoItem(intent: intent, colors: colors)
}
.buttonStyle(.borderedProminent)
}
}

@available(iOS 16.4, *)
struct PopoverDemoItem: View {
let intent: PopoverIntent
let colors: PopoverColors
@State var isPresented: Bool = false

var body: some View {
Button(intent.name) {
isPresented = true
}
.tint(colors.background.color)
.foregroundStyle(colors.foreground.color)
.popover(theme: SparkTheme(), intent: intent, isPresented: $isPresented) { colors in
Text("This is a label that should be multiline, depending on the content size. This is a label that should be multiline, depending on the content size.")
.foregroundStyle(colors.foreground.color)
.frame(width: 300)
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
//
// PopoverContentDemoViewController.swift
// SparkDemo
//
// Created by louis.borlee on 15/07/2024.
// Copyright © 2024 Adevinta. All rights reserved.
//

import UIKit
import SparkCore
import SparkPopover

final class PopoverContentDemoViewController: UIViewController {

let label: UILabel = {
let label = UILabel()
label.text = "This is a label that should be multiline, depending on the content size. This is a label that should be multiline, depending on the content size."
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()

init(theme: Theme, intent: PopoverIntent) {
super.init(nibName: nil, bundle: nil)
self.label.textColor = intent.getColors(theme: theme).foreground.uiColor
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .clear

self.view.addSubview(self.label)
NSLayoutConstraint.activate([
self.label.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 0),
self.label.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0),
self.label.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0),
self.label.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: 0),
self.label.widthAnchor.constraint(lessThanOrEqualToConstant: 300)
])

}

override func viewDidLayoutSubviews() {
self.preferredContentSize = self.view.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
//
// PopoverPresentingUIViewController.swift
// SparkDemo
//
// Created by louis.borlee on 15/07/2024.
// Copyright © 2024 Adevinta. All rights reserved.
//

import UIKit
import SparkCore
import SparkPopover

final class PopoverPresentingUIViewController: UIViewController {

private let theme = SparkTheme()

override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .systemBackground

let buttons: [UIView] = PopoverIntent.allCases.enumerated().map { index, intent in
let popoverColors = intent.getColors(theme: self.theme)
let button = UIButton(configuration: .filled())
button.setTitle(intent.name, for: .normal)
button.setTitleColor(popoverColors.foreground.uiColor, for: .normal)
button.tintColor = popoverColors.background.uiColor
button.addAction(.init(handler: { [weak self] _ in
self?.showPopover(sourceView: button, intent: intent, withArrow: index % 2 == 0)
}), for: .touchUpInside)
return button
}

let stackView = UIStackView(arrangedSubviews: buttons)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .vertical
stackView.alignment = .center
stackView.spacing = 12

self.view.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
])
}

private func showPopover(sourceView: UIView, intent: PopoverIntent, withArrow showArrow: Bool) {
if let presentedViewController {
presentedViewController.dismiss(animated: true)
} else {
let theme = SparkTheme()
let popoverViewController = PopoverViewController(contentViewController: PopoverContentDemoViewController(theme: theme, intent: intent), theme: theme, intent: intent, showArrow: showArrow)
self.presentPopover(popoverViewController, sourceView: sourceView)
}
}
}

// MARK: - Builder
extension PopoverPresentingUIViewController {

static func build() -> PopoverPresentingUIViewController {
return PopoverPresentingUIViewController()
}
}
9 changes: 9 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ let package = Package(
// path: "../spark-ios-component-icon"
/*version*/ "0.0.1"..."999.999.999"
),
.package(
url: "https://github.com/adevinta/spark-ios-component-popover.git",
// path: "../spark-ios-component-popover"
/*version*/ "0.0.1"..."999.999.999"
),
.package(
url: "https://github.com/adevinta/spark-ios-component-progress-bar.git",
// path: "../spark-ios-component-progress-bar"
Expand Down Expand Up @@ -164,6 +169,10 @@ let package = Package(
name: "SparkIcon",
package: "spark-ios-component-icon"
),
.product(
name: "SparkPopover",
package: "spark-ios-component-popover"
),
.product(
name: "SparkProgressBar",
package: "spark-ios-component-progress-bar"
Expand Down

0 comments on commit 401cfac

Please sign in to comment.