63 lines
2.2 KiB
TypeScript
63 lines
2.2 KiB
TypeScript
export type CheckoutContext = {
|
|
productId?: string | null;
|
|
qty?: string | number | null;
|
|
addressId?: string | null;
|
|
cross?: boolean | string | null;
|
|
select?: boolean | string | null;
|
|
};
|
|
|
|
export function readCheckoutContext(params: URLSearchParams): CheckoutContext {
|
|
return {
|
|
productId: params.get('productId'),
|
|
qty: params.get('qty'),
|
|
addressId: params.get('addressId'),
|
|
cross: params.get('cross'),
|
|
select: params.get('select'),
|
|
};
|
|
}
|
|
|
|
export function appendCheckoutContext(qs: URLSearchParams, ctx: CheckoutContext) {
|
|
if (ctx.productId) qs.set('productId', ctx.productId);
|
|
if (ctx.qty != null && ctx.qty !== '') qs.set('qty', String(ctx.qty));
|
|
if (ctx.addressId) qs.set('addressId', ctx.addressId);
|
|
if (ctx.cross === true || ctx.cross === '1') qs.set('cross', '1');
|
|
if (ctx.select === true || ctx.select === '1') qs.set('select', '1');
|
|
}
|
|
|
|
export function buildOrderConfirmUrl(search: CheckoutContext) {
|
|
const qs = new URLSearchParams();
|
|
if (search.productId) qs.set('productId', search.productId);
|
|
if (search.qty != null && search.qty !== '') qs.set('qty', String(search.qty));
|
|
if (search.addressId) qs.set('addressId', search.addressId);
|
|
if (search.cross === true || search.cross === '1') qs.set('cross', '1');
|
|
const query = qs.toString();
|
|
return query ? `/order/confirm?${query}` : '/order/confirm';
|
|
}
|
|
|
|
export function buildAddressListUrl(ctx: CheckoutContext = {}) {
|
|
const qs = new URLSearchParams();
|
|
appendCheckoutContext(qs, ctx);
|
|
const query = qs.toString();
|
|
return query ? `/addresses?${query}` : '/addresses';
|
|
}
|
|
|
|
export function buildAddressEditUrl(id: string | 'new', ctx: CheckoutContext = {}) {
|
|
const path = id === 'new' ? '/addresses/new' : `/addresses/${id}/edit`;
|
|
const qs = new URLSearchParams();
|
|
appendCheckoutContext(qs, ctx);
|
|
const query = qs.toString();
|
|
return query ? `${path}?${query}` : path;
|
|
}
|
|
|
|
export function buildProductDetailUrl(productId?: string | null) {
|
|
return productId ? `/product/${productId}` : '/';
|
|
}
|
|
|
|
export function buildOrderAddressSelectUrl(orderId: string) {
|
|
return `/addresses?orderId=${orderId}&select=1`;
|
|
}
|
|
|
|
export function hasCheckoutContext(ctx: CheckoutContext) {
|
|
return Boolean(ctx.productId || ctx.select === true || ctx.select === '1');
|
|
}
|