Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/payments/added processing payment #1702

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Projects/Payment/GraphQL/Octopus/PaymentData.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ query PaymentData {
}
futureCharge {
...MemberChargeFragment
pastFailedChargeIds
}
ongoingCharges {
...MemberChargeFragment
}
}
}
Expand Down
7 changes: 6 additions & 1 deletion Projects/Payment/Sources/PaymentStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import hGraphQL

public struct PaymentState: StateProtocol {
var paymentData: PaymentData?
var ongoingPaymentData: [PaymentData] = []
var paymentDiscountsData: PaymentDiscountsData?
public var paymentStatusData: PaymentStatusData? = nil
var paymentHistory: [PaymentHistoryListData] = []
Expand All @@ -18,6 +19,7 @@ public struct PaymentState: StateProtocol {
public enum PaymentAction: ActionProtocol {
case load
case setPaymentData(data: PaymentData?)
case setOngoingPaymentData(data: [PaymentData])
case fetchPaymentStatus
case setPaymentStatus(data: PaymentStatusData)
case fetchDiscountsData
Expand All @@ -41,7 +43,8 @@ public final class PaymentStore: LoadingStateStore<PaymentState, PaymentAction,
case .load:
do {
let paymentData = try await self.paymentService.getPaymentData()
self.send(.setPaymentData(data: paymentData))
self.send(.setPaymentData(data: paymentData.upcoming))
self.send(.setOngoingPaymentData(data: paymentData.ongoing))
} catch {
self.setError(L10n.General.errorBody, for: .getPaymentData)
}
Expand Down Expand Up @@ -80,6 +83,8 @@ public final class PaymentStore: LoadingStateStore<PaymentState, PaymentAction,
case let .setPaymentData(data):
removeLoading(for: .getPaymentData)
newState.paymentData = data
case let .setOngoingPaymentData(data):
newState.ongoingPaymentData = data
case .fetchPaymentStatus:
setLoading(for: .getPaymentStatus)
case let .setPaymentStatus(data):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,7 @@ struct PaymentStatusView: View {
.stroke(hBorderColor.primary, lineWidth: 0.5)
)
case .pending:
HStack(spacing: 8) {
Spacer()
Image(uiImage: hCoreUIAssets.infoFilled.image)
.resizable()
.frame(width: 16, height: 16)
.foregroundColor(hSignalColor.Blue.element)

hText(L10n.paymentsPaymentInProgress, style: .label)
.foregroundColor(hSignalColor.Blue.text)
Spacer()
}
.padding(.vertical, 14)
.background(
RoundedRectangle(cornerRadius: 12)
.fill(hSignalColor.Blue.fill)
)
.overlay(
RoundedRectangle(cornerRadius: 12)
.stroke(hBorderColor.primary, lineWidth: 0.5)
)
InfoCard(text: L10n.paymentsInProgress, type: .info)
case let .failedForPrevious(from, to):
InfoCard(
text:
Expand Down
64 changes: 35 additions & 29 deletions Projects/Payment/Sources/Screens/PaymentsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public struct PaymentsView: View {
private var successView: some View {
hForm {
VStack(spacing: 8) {
upcomingPayment
payments
PresentableStoreLens(
PaymentStore.self,
getter: { state in
Expand Down Expand Up @@ -69,38 +69,21 @@ public struct PaymentsView: View {
}
}

private var upcomingPayment: some View {
private var payments: some View {
PresentableStoreLens(
PaymentStore.self,
getter: { state in
state
}
) { state in
VStack(spacing: 8) {
if let upcomingPayment = state.paymentData {
hSection {
hRow {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .center, spacing: 8) {
hText(L10n.paymentsUpcomingPayment)
Spacer()
hText(upcomingPayment.payment.net.formattedAmount)
Image(uiImage: hCoreUIAssets.chevronRightSmall.image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 16, height: 16)
.foregroundColor(hTextColor.Opaque.secondary)
}
.foregroundColor(.primary)
hText(upcomingPayment.payment.date.displayDate)
.foregroundColor(hTextColor.Opaque.secondary)
}
}
.withEmptyAccessory
.onTap {
router.push(upcomingPayment)
}
if !state.ongoingPaymentData.isEmpty {
ForEach(state.ongoingPaymentData, id: \.id) { paymentData in
paymentView(for: paymentData)
}
}
if let upcomingPayment = state.paymentData {
paymentView(for: upcomingPayment)
} else {
VStack(spacing: 16) {
Image(uiImage: hCoreUIAssets.infoFilledSmall.image)
Expand All @@ -111,18 +94,41 @@ public struct PaymentsView: View {
}
.padding(.vertical, .padding32)
}

hSection {
ConnectPaymentCardView()
.environmentObject(paymentNavigationVm.connectPaymentVm)
}
if let status = state.paymentData?.status, status != .upcoming {
hSection {
PaymentStatusView(status: status) { _ in
}
}
}

}
private func paymentView(for paymentData: PaymentData) -> some View {
hSection {
hRow {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .center, spacing: 8) {
hText(
paymentData.status == .upcoming
? L10n.paymentsUpcomingPayment : L10n.paymentsProcessingPayment
)
Spacer()
hText(paymentData.payment.net.formattedAmount)
Image(uiImage: hCoreUIAssets.chevronRightSmall.image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 16, height: 16)
.foregroundColor(hTextColor.Opaque.secondary)
}
.foregroundColor(.primary)
hText(paymentData.payment.date.displayDate)
.foregroundColor(hTextColor.Opaque.secondary)
}
}
.withEmptyAccessory
.onTap {
router.push(paymentData)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,82 +3,84 @@ import hCore

public class hPaymentClientDemo: hPaymentClient {
public init() {}
public func getPaymentData() async throws -> PaymentData? {
public func getPaymentData() async throws -> (upcoming: PaymentData?, ongoing: [PaymentData]) {
try await Task.sleep(nanoseconds: 1_000_000_000)
return .init(
id: "",
payment: .init(
gross: .sek(460),
net: .sek(400),
carriedAdjustment: nil,
settlementAdjustment: nil,
date: "2023-11-30"
),
status: .upcoming,
contracts: [
.init(
id: "id",
title: "Title",
subtitle: "Subtitle",
amount: .sek(200),
periods: [
.init(
id: "id",
from: "2023-11-01",
to: "2023-11-30",
amount: .sek(200),
isOutstanding: false,
desciption: nil
)
]
),
.init(
id: "id1",
title: "Title 2",
subtitle: "Subtitle 2",
amount: .sek(200),
periods: [
.init(
id: "id2",
from: "2023-11-01",
to: "2023-11-30",
amount: .sek(100),
isOutstanding: false,
desciption: nil
),
.init(
id: "id12",
from: "2023-10-01",
to: "2023-10-31",
amount: .sek(100),
isOutstanding: true,
desciption: nil
),
]
),
],
discounts: [
.init(
id: "CODE",
code: "CODE",
amount: .sek(30),
title: "15% off for 1 year",
listOfAffectedInsurances: [.init(id: "1", displayName: "Car Insurance * ABH 234")],
validUntil: "2023-12-10",
canBeDeleted: false
),
.init(
id: "CODE 2",
code: "CODE 2",
amount: .sek(30),
title: "15% off for 1 year",
listOfAffectedInsurances: [.init(id: "1", displayName: "Home insurace &*")],
validUntil: "2023-11-03",
canBeDeleted: false
return (
.init(
id: "",
payment: .init(
gross: .sek(460),
net: .sek(400),
carriedAdjustment: nil,
settlementAdjustment: nil,
date: "2023-11-30"
),
],
paymentDetails: .init(paymentMethod: "Method", account: "Account", bank: "Bank"),
addedToThePayment: nil
status: .upcoming,
contracts: [
.init(
id: "id",
title: "Title",
subtitle: "Subtitle",
amount: .sek(200),
periods: [
.init(
id: "id",
from: "2023-11-01",
to: "2023-11-30",
amount: .sek(200),
isOutstanding: false,
desciption: nil
)
]
),
.init(
id: "id1",
title: "Title 2",
subtitle: "Subtitle 2",
amount: .sek(200),
periods: [
.init(
id: "id2",
from: "2023-11-01",
to: "2023-11-30",
amount: .sek(100),
isOutstanding: false,
desciption: nil
),
.init(
id: "id12",
from: "2023-10-01",
to: "2023-10-31",
amount: .sek(100),
isOutstanding: true,
desciption: nil
),
]
),
],
discounts: [
.init(
id: "CODE",
code: "CODE",
amount: .sek(30),
title: "15% off for 1 year",
listOfAffectedInsurances: [.init(id: "1", displayName: "Car Insurance * ABH 234")],
validUntil: "2023-12-10",
canBeDeleted: false
),
.init(
id: "CODE 2",
code: "CODE 2",
amount: .sek(30),
title: "15% off for 1 year",
listOfAffectedInsurances: [.init(id: "1", displayName: "Home insurace &*")],
validUntil: "2023-11-03",
canBeDeleted: false
),
],
paymentDetails: .init(paymentMethod: "Method", account: "Account", bank: "Bank"),
addedToThePayment: nil
), []
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import hGraphQL
public class hPaymentService {
@Inject var client: hPaymentClient

public func getPaymentData() async throws -> PaymentData? {
func getPaymentData() async throws -> (upcoming: PaymentData?, ongoing: [PaymentData?]) {
log.info("hPaymentService: getPaymentData", error: nil, attributes: nil)
return try await client.getPaymentData()
}
Expand Down Expand Up @@ -37,7 +37,7 @@ public class hPaymentClientOctopus: hPaymentClient {

public init() {}

public func getPaymentData() async throws -> PaymentData? {
public func getPaymentData() async throws -> (upcoming: PaymentData?, ongoing: [PaymentData]) {
let query = OctopusGraphQL.PaymentDataQuery()
let data = try await octopus.client.fetch(query: query, cachePolicy: .fetchIgnoringCacheCompletely)

Expand All @@ -48,7 +48,12 @@ public class hPaymentClientOctopus: hPaymentClient {
)

let paymentDetails = PaymentData.PaymentDetails(with: paymentDetailsData)
return PaymentData(with: data, paymentDetails: paymentDetails)
let upcomingPayment = PaymentData(with: data, paymentDetails: paymentDetails)
let ongoingPayments: [PaymentData] = data.currentMember.ongoingCharges.compactMap({
.init(with: $0.fragments.memberChargeFragment, paymentDataQueryCurrentMember: data.currentMember)
})
return (upcomingPayment, ongoingPayments)

}

public func getPaymentStatusData() async throws -> PaymentStatusData {
Expand Down
Loading
Loading