feat(dashboard,core-flows,js-sdk,types,link-modules,payment): ability to copy payment link (#8630)

what: 

- enables a button to create a payment link when a payment delta is present
- api to delete order payment collection
- adds a pending amount to payment collections

Note: Not the happiest with the decision on when to create a payment collection and when not to. The code should programatically create or delete payment collections currently to generate the right collection for the payment delta. Adding a more specific flow to create and manage a payment collection will help reduce this burden from the code path and onto CX/merchant.

Another issue I found is that the payment collection status doesn't get updated when payment is complete as it still gets stuck to "authorized" state

https://github.com/user-attachments/assets/037a10f9-3621-43c2-94ba-1ada4b0a041b
This commit is contained in:
Riqwan Thamir
2024-08-20 12:30:17 +02:00
committed by GitHub
parent 69830ca89c
commit fa44e3f5a8
35 changed files with 631 additions and 94 deletions
+3
View File
@@ -11,6 +11,7 @@ import { Invite } from "./invite"
import { Notification } from "./notification"
import { Order } from "./order"
import { Payment } from "./payment"
import { PaymentCollection } from "./payment-collection"
import { PriceList } from "./price-list"
import { PricePreference } from "./price-preference"
import { Product } from "./product"
@@ -67,6 +68,7 @@ export class Admin {
public payment: Payment
public productVariant: ProductVariant
public refundReason: RefundReason
public paymentCollection: PaymentCollection
constructor(client: Client) {
this.invite = new Invite(client)
@@ -102,5 +104,6 @@ export class Admin {
this.productVariant = new ProductVariant(client)
this.refundReason = new RefundReason(client)
this.exchange = new Exchange(client)
this.paymentCollection = new PaymentCollection(client)
}
}
@@ -0,0 +1,63 @@
import { HttpTypes, SelectParams } from "@medusajs/types"
import { Client } from "../client"
import { ClientHeaders } from "../types"
export class PaymentCollection {
private client: Client
constructor(client: Client) {
this.client = client
}
async list(
query?: HttpTypes.AdminPaymentCollectionFilters,
headers?: ClientHeaders
) {
return await this.client.fetch<HttpTypes.AdminPaymentCollectionsResponse>(
`/admin/payment-collections`,
{
query,
headers,
}
)
}
async retrieve(
id: string,
query?: HttpTypes.AdminPaymentCollectionFilters,
headers?: ClientHeaders
) {
return await this.client.fetch<HttpTypes.AdminPaymentCollectionResponse>(
`/admin/payment-collections/${id}`,
{
query,
headers,
}
)
}
async create(
body: HttpTypes.AdminCreatePaymentCollection,
query?: SelectParams,
headers?: ClientHeaders
) {
return await this.client.fetch<HttpTypes.AdminPaymentCollectionResponse>(
`/admin/payment-collections`,
{
method: "POST",
headers,
body,
query,
}
)
}
async delete(id: string, headers?: ClientHeaders) {
return await this.client.fetch<HttpTypes.AdminDeletePaymentCollectionResponse>(
`/admin/payment-collections/${id}`,
{
method: "DELETE",
headers,
}
)
}
}