@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
79 lines • 3.16 kB
TypeScript
import type { MutationOptions } from "../shared/hook-types";
import type { QueryKey } from "../shared/query-keys";
/**
* Mutation options with full TanStack Query lifecycle support
* Enables optimistic updates via onMutate returning context
*/
export type CheckoutMutationOptions<TData, TVariables, TContext = unknown> = MutationOptions<TData, TVariables, TContext>;
export type ShippingOptionLike = {
id: string;
price_type?: string | null;
amount?: number | null;
};
export type CheckoutCartLike = {
id: string;
region_id?: string | null;
shipping_methods?: {
shipping_option_id?: string;
data?: Record<string, unknown>;
}[];
payment_collection?: {
payment_sessions?: unknown[];
};
};
export type CheckoutShippingInputBase = {
cartId?: string;
enabled?: boolean;
cacheKey?: string;
};
export type CheckoutPaymentInputBase = {
cartId?: string;
regionId?: string;
enabled?: boolean;
};
export type CheckoutService<TCart, TShippingOption, TPaymentProvider, TPaymentCollection, TCompleteResult> = {
listShippingOptions: (cartId: string, signal?: AbortSignal) => Promise<TShippingOption[]>;
calculateShippingOption?: (optionId: string, input: {
cart_id: string;
data?: Record<string, unknown>;
}, signal?: AbortSignal) => Promise<TShippingOption>;
addShippingMethod: (cartId: string, optionId: string, data?: Record<string, unknown>) => Promise<TCart>;
listPaymentProviders: (regionId: string, signal?: AbortSignal) => Promise<TPaymentProvider[]>;
initiatePaymentSession: (cartId: string, providerId: string, cart?: TCart | null) => Promise<TPaymentCollection>;
completeCart?: (cartId: string) => Promise<TCompleteResult>;
};
export type CheckoutQueryKeys = {
all: () => QueryKey;
shippingOptions: (cartId: string, cacheKey?: string) => QueryKey;
shippingOptionPrice: (params: {
cartId: string;
optionId: string;
data?: Record<string, unknown>;
}) => QueryKey;
paymentProviders: (regionId: string) => QueryKey;
};
export type UseCheckoutShippingResult<TShippingOption, TCart = unknown> = {
shippingOptions: TShippingOption[];
shippingPrices: Record<string, number>;
isLoading: boolean;
isFetching: boolean;
isCalculating: boolean;
setShippingMethod: (optionId: string, data?: Record<string, unknown>) => void;
setShippingMethodAsync: (optionId: string, data?: Record<string, unknown>) => Promise<TCart>;
isSettingShipping: boolean;
selectedShippingMethodId?: string;
selectedShippingMethodData?: Record<string, unknown>;
selectedOption?: TShippingOption;
};
export type UseCheckoutPaymentResult<TPaymentProvider, TPaymentCollection = unknown> = {
paymentProviders: TPaymentProvider[];
initiatePayment: (providerId: string) => void;
initiatePaymentAsync: (providerId: string) => Promise<TPaymentCollection>;
isInitiatingPayment: boolean;
isLoading: boolean;
isFetching: boolean;
canInitiatePayment: boolean;
hasPaymentCollection: boolean;
hasPaymentSessions: boolean;
};
//# sourceMappingURL=types.d.ts.map