@heyframe/composables
Version:
HeyFrame Frontends composables for Vue
112 lines (104 loc) • 4.07 kB
text/typescript
import { pascalCase } from "scule";
import { resolveComponent } from "vue";
import type { Schemas } from "#heyframe";
/**
* A composables library compatible with Vue 3 and HeyFrame 6.
*
* Some more info...
*
* @remarks
* The `widget-lib` defines the {@link IWidget} interface and {@link Widget} class,
* which are used to build widgets.
*
* @packageDocumentation
*/
export * from "./types";
export * from "./cms";
export * from "./createHeyFrameContext";
export * from "./useAddress/useAddress";
export * from "./useAddToCart/useAddToCart";
export * from "./useBreadcrumbs/useBreadcrumbs";
export * from "./useCart/useCart";
export * from "./useCartItem/useCartItem";
export * from "./useCategory/useCategory";
export * from "./useCategorySearch/useCategorySearch";
export * from "./useCheckout/useCheckout";
export * from "./useCmsBlock/useCmsBlock";
export * from "./useCmsMeta/useCmsMeta";
export * from "./useCmsSection/useCmsSection";
export * from "./useCmsTranslations/useCmsTranslations";
export * from "./useContext/useContext";
export * from "./useCountries/useCountries";
export * from "./useCustomerOrders/useCustomerOrders";
export * from "./useCustomerPassword/useCustomerPassword";
export * from "./useDefaultOrderAssociations/useDefaultOrderAssociations";
export * from "./useInternationalization/useInternationalization";
export * from "./useLandingSearch/useLandingSearch";
export * from "./useListing/useListing";
export * from "./useLocalWishlist/useLocalWishlist";
export * from "./useNavigation/useNavigation";
export * from "./useNavigationContext/useNavigationContext";
export * from "./useNavigationSearch/useNavigationSearch";
export * from "./useNewsletter/useNewsletter";
export * from "./useNotifications/useNotifications";
export * from "./useOrderDetails/useOrderDetails";
export * from "./useOrderPayment/useOrderPayment";
export * from "./usePrice/usePrice";
export * from "./useProduct/useProduct";
export * from "./useProductAssociations/useProductAssociations";
export * from "./useProductConfigurator/useProductConfigurator";
export * from "./useProductPrice/useProductPrice";
export * from "./useProductReviews/useProductReviews";
export * from "./useProductSearch/useProductSearch";
export * from "./useProductSearchSuggest/useProductSearchSuggest";
export * from "./useProductWishlist/useProductWishlist";
export * from "./useSalutations/useSalutations";
export * from "./useSessionContext/useSessionContext";
export * from "./useHeyFrameContext/useHeyFrameContext";
export * from "./useSyncWishlist/useSyncWishlist";
export * from "./useUrlResolver/useUrlResolver";
export * from "./useUser/useUser";
export * from "./useWishlist/useWishlist";
export * from "./useB2bQuoteManagement/useB2bQuoteManagement";
export * from "./useCartNotification/useCartNotification";
export * from "./useCartErrorParamsResolver/useCartErrorParamsResolver";
export function resolveCmsComponent(
content: Schemas["CmsSection"] | Schemas["CmsBlock"] | Schemas["CmsSlot"],
) {
const componentName = content.type;
const type =
content.apiAlias === "cms_block"
? "Block"
: content.apiAlias === "cms_section"
? "Section"
: "Element";
const componentNameToResolve = pascalCase(`Cms-${type}-${componentName}`);
try {
const resolvedComponent = resolveComponent(componentNameToResolve);
return {
componentName,
componentNameToResolve,
isResolved: resolvedComponent !== componentName,
resolvedComponent:
typeof resolvedComponent !== "string" ? resolvedComponent : undefined,
};
} catch (e) {
return {
componentName,
componentNameToResolve,
resolvedComponent: undefined,
resolved: false,
isResolved: false,
error: (e as Error).message,
};
}
}
// TODO: handle defaults in app
export function getDefaultApiParams(): {
[composableName: string]: unknown;
} {
console.error(
"[@heyframe/composables] `getDefaultApiParams` is deprecated and will be removed in the next major release.",
);
return {};
}