import type { CreateListIntentData, CreateListSuccessResponse } from "./handlers/create-list-handler"; import type { CreateCartLineIntentData, CreateCartLineSuccessResponse } from "./handlers/create-cart-line-handler"; import type { InitiateCheckoutIntentData, InitiateCheckoutSuccessResponse } from "./handlers/initiate-checkout-handler"; import type { DeleteListIntentData, DeleteListSuccessResponse } from "./handlers/delete-list-handler"; import type { EditItemListsIntentData, EditItemListsSuccessResponse } from "./handlers/edit-item-lists-handler"; import type { EditItemVariantIntentData, EditItemVariantSuccessResponse } from "./handlers/edit-item-variant-handler"; import type { EditListAccessIntentData, EditListAccessSuccessResponse } from "./handlers/edit-list-access-handler"; import type { EditListIntentData, EditListSuccessResponse } from "./handlers/edit-list-handler"; import type { ViewHomeSuccessResponse } from "./handlers/view-home-handler"; import type { ViewListDetailPageMenuIntentData, ViewListDetailPageMenuSuccessResponse } from "./handlers/view-list-detail-page-menu-handler"; import { ViewListIntentData, ViewListSuccessResponse } from "./handlers/view-list-handler"; import type { ViewListMenuIntentData, ViewListMenuSuccessResponse } from "./handlers/view-list-menu-handler"; import { ViewListsSuccessResponse } from "./handlers/view-lists-handler"; import { ViewNotificationsSuccessResponse } from "./handlers/view-notifications-handler"; import { ViewOrderIntentData, ViewOrderSuccessResponse } from "./handlers/view-order-handler"; import type { ViewOrderMenuIntentData, ViewOrderMenuSuccessResponse } from "./handlers/view-order-menu-handler"; import { ViewOrdersSuccessResponse } from "./handlers/view-orders-handler"; import { ViewProductIntentData, ViewProductSuccessResponse } from "./handlers/view-product-handler"; import { ViewProfileSuccessResponse } from "./handlers/view-profile-handler"; import type { InitiateQuickBuyIntentData, InitiateQuickBuySuccessResponse } from "./handlers/initiate-quick-buy-handler"; import { ViewSavesSuccessResponse } from "./handlers/view-saves-handler"; import type { InitiateSignInIntentData, InitiateSignInSuccessResponse } from "./handlers/initiate-sign-in-handler"; import type { SaveCartLineIntentData, SaveCartLineSuccessResponse } from "./handlers/save-cart-line-handler"; import type { SaveItemIntentData, SaveItemSuccessResponse } from "./handlers/save-item-handler"; import type { ShareListIntentData, ShareListSuccessResponse } from "./handlers/share-list-handler"; import { ToastIntentData, ToastSuccessResponse } from "./handlers/show-toast-handler"; import type { UnsaveItemIntentData, UnsaveItemSuccessResponse } from "./handlers/unsave-item-handler"; export type { CreateCartLineSuccessResponse, InitiateCheckoutSuccessResponse, CreateListSuccessResponse, DeleteListSuccessResponse, EditItemListsSuccessResponse, EditItemVariantSuccessResponse, EditListAccessSuccessResponse, EditListSuccessResponse, SaveCartLineSuccessResponse, SaveItemSuccessResponse, ShareListSuccessResponse, ToastSuccessResponse, UnsaveItemSuccessResponse, }; export type Intent = "create:cart-line" | "initiate:checkout" | "save:item" | "edit:item-variant" | "edit:item-lists" | "unsave:item" | "edit:list" | "edit:list-access" | "delete:list" | "create:list" | "initiate:share" | "view:home" | "view:list" | "view:lists" | "view:orders" | "view:order" | "view:saves" | "view:notifications" | "view:profile" | "view:product" | "view:list-menu" | "view:order-menu" | "view:list-detail-page-menu" | "initiate:sign-in" | "initiate:quick-buy" | "save:cart-line" | "show:toast"; export type IntentQueryWithParams = `${Intent}?${string}`; export type IntentResponse = ClosedIntentResponse | ErrorIntentResponse | IntentToSuccessResponse; export type IntentResponseEvent = CustomEvent>; export interface IntentActivity> { intent: I; data: D; complete: Promise>; } export interface IntentResponseBase { intent: I; code: "ok" | "error" | "closed"; } export interface ClosedIntentResponse extends IntentResponseBase { code: "closed"; } export interface ErrorIntentResponse extends IntentResponseBase { code: "error"; message: string; issues: string[]; } export interface SuccessIntentResponse extends IntentResponseBase { code: "ok"; data: T; } interface IntentDataMap { "create:cart-line": CreateCartLineIntentData; "initiate:checkout": InitiateCheckoutIntentData; "save:item": SaveItemIntentData; "edit:item-variant": EditItemVariantIntentData; "edit:item-lists": EditItemListsIntentData; "unsave:item": UnsaveItemIntentData; "edit:list": EditListIntentData; "edit:list-access": EditListAccessIntentData; "delete:list": DeleteListIntentData; "create:list": CreateListIntentData; "initiate:share": ShareListIntentData; "view:home": void; "view:list": ViewListIntentData; "view:lists": void; "view:orders": void; "view:order": ViewOrderIntentData; "view:saves": void; "view:notifications": void; "view:profile": void; "view:product": ViewProductIntentData; "view:list-menu": ViewListMenuIntentData; "view:order-menu": ViewOrderMenuIntentData; "view:list-detail-page-menu": ViewListDetailPageMenuIntentData; "initiate:sign-in": InitiateSignInIntentData; "initiate:quick-buy": InitiateQuickBuyIntentData; "save:cart-line": SaveCartLineIntentData; "show:toast": ToastIntentData; } interface IntentSuccessResponseMap { "create:cart-line": CreateCartLineSuccessResponse; "initiate:checkout": InitiateCheckoutSuccessResponse; "save:item": SaveItemSuccessResponse; "edit:item-variant": EditItemVariantSuccessResponse; "edit:item-lists": EditItemListsSuccessResponse | UnsaveItemSuccessResponse; "unsave:item": UnsaveItemSuccessResponse; "edit:list": EditListSuccessResponse; "edit:list-access": EditListAccessSuccessResponse; "delete:list": DeleteListSuccessResponse; "create:list": CreateListSuccessResponse; "initiate:share": ShareListSuccessResponse; "view:home": ViewHomeSuccessResponse; "view:list": ViewListSuccessResponse; "view:lists": ViewListsSuccessResponse; "view:orders": ViewOrdersSuccessResponse; "view:order": ViewOrderSuccessResponse; "view:saves": ViewSavesSuccessResponse; "view:notifications": ViewNotificationsSuccessResponse; "view:profile": ViewProfileSuccessResponse; "view:product": ViewProductSuccessResponse; "view:list-menu": ViewListMenuSuccessResponse; "view:order-menu": ViewOrderMenuSuccessResponse; "view:list-detail-page-menu": ViewListDetailPageMenuSuccessResponse; "initiate:sign-in": InitiateSignInSuccessResponse; "initiate:quick-buy": InitiateQuickBuySuccessResponse; "save:cart-line": SaveCartLineSuccessResponse; "show:toast": ToastSuccessResponse; } export type IntentToData = I extends keyof IntentDataMap ? IntentDataMap[I] : never; export type IntentToSuccessResponse = I extends keyof IntentSuccessResponseMap ? IntentSuccessResponseMap[I] : never; export type IntentResposeEvent = CustomEvent; export interface IntentEventBus { addEventListener(type: I, callback: (event: IntentResponseEvent) => void): void; removeEventListener(type: Intent, callback: (event: IntentResposeEvent) => void): void; dispatchEvent(event: IntentResponseEvent): boolean; }