Skip to content

Commit

Permalink
switch SwiftUIView/ComposeView, refactor di
Browse files Browse the repository at this point in the history
  • Loading branch information
ry-itto committed Sep 2, 2023
1 parent ae30313 commit 437fdc1
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 8 deletions.
60 changes: 52 additions & 8 deletions app-ios/Modules/Sources/Contributor/ContributorView.swift
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
import Component
import KMPContainer
import Dependencies
import Model
import shared
import SwiftUI

public struct ContributorView: View {
@State var presentingURL: IdentifiableURL?
@ObservedObject var viewModel: ContributorViewModel = .init()

public init() {}

public var body: some View {
Group {
// ContributorSwiftUIView { url in
// presentingURL = .init(string: url)
// }

ContributorComposeView { url in
presentingURL = .init(string: url)
}
}
ContributorComposeView(
viewModel.getRepositoryForCompose(),
onContributorItemClick: { contributorUrl in
presentingURL = IdentifiableURL(string: contributorUrl)
}
Expand All @@ -31,21 +38,58 @@ public struct ContributorView: View {
ContributorView()
}

struct ContributorSwiftUIView: View {
@ObservedObject var viewModel: ContributorViewModel = .init()
let onContributorItemClick: (String) -> Void

var body: some View {
Group {
switch viewModel.state.contributors {
case .initial, .loading:
ProgressView()
.task {
await viewModel.load()
}
case .failed:
EmptyView()
case .loaded(let contributors):
ScrollView {
LazyVStack(spacing: 20) {
ForEach(contributors, id: \.id) { contributor in
Button {
if let profileUrl = contributor.profileUrl {
onContributorItemClick(profileUrl)
}
} label: {
PersonLabel(
name: contributor.username,
iconUrlString: contributor.iconUrl
)
}
}
}
.padding(16)
}
}
}
}
}

struct ContributorComposeView: UIViewControllerRepresentable {
let contributorsRepository: ContributorsRepository
@Dependency(\.contributorsRepositoryData) var contributorsRepositoryData
@Environment(\.colorScheme) var colorScheme
let onContributorItemClick: (String) -> Void

init(_ contributorsRepository: ContributorsRepository, onContributorItemClick: @escaping (String) -> Void) {
self.contributorsRepository = contributorsRepository
init(onContributorItemClick: @escaping (String) -> Void) {
self.onContributorItemClick = onContributorItemClick
}

func makeUIViewController(context: Context) -> UIViewController {
let vc = DarwinContributorsKt.contributorViewController(
contributorsRepository: contributorsRepository,
contributorsRepository: contributorsRepositoryData.contributorsRepository,
onContributorItemClick: onContributorItemClick
)
vc.overrideUserInterfaceStyle = .light
vc.overrideUserInterfaceStyle = .init(colorScheme)
return vc
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import Dependencies
import shared

public struct ContributorsRepositoryProvider {
public let contributorsRepository: any ContributorsRepository
}

extension ContributorsRepositoryProvider: DependencyKey {
@MainActor
public static var liveValue: ContributorsRepositoryProvider = ContributorsRepositoryProvider(
contributorsRepository: Container.shared.get(type: ContributorsRepository.self) as ContributorsRepository
)

public static var testValue: ContributorsRepositoryProvider = ContributorsRepositoryProvider(
contributorsRepository: DefaultContributorsRepository(
contributorsApi: FakeContributorsApiClient()
)
)
}

public extension DependencyValues {
var contributorsRepositoryData: ContributorsRepositoryProvider {
get { self[ContributorsRepositoryProvider.self] }
set { self[ContributorsRepositoryProvider.self] = newValue }
}
}

0 comments on commit 437fdc1

Please sign in to comment.