89 lines
3.5 KiB
TypeScript
89 lines
3.5 KiB
TypeScript
import {
|
|
createFieldShopifyProduct,
|
|
createFieldShopifyCollection,
|
|
} from "@reacteditor/field-shopify";
|
|
|
|
import { navigationEditor } from "@/editor/components/navigation/navigation.editor";
|
|
import { footerEditor } from "@/editor/components/footer/footer.editor";
|
|
|
|
import { heroEditor } from "@/editor/components/hero/hero.editor";
|
|
import { bannerEditor } from "@/editor/components/landing/banner.editor";
|
|
|
|
import { createFeaturedProductEditor } from "@/editor/components/commerce/featured-product.editor";
|
|
import { createProductsGridEditor } from "@/editor/components/commerce/products-grid.editor";
|
|
import { createProductsCarouselEditor } from "@/editor/components/commerce/products-carousel.editor";
|
|
import { collectionGridEditor } from "@/editor/components/commerce/collection-grid.editor";
|
|
import { createCollectionEditor } from "@/editor/components/commerce/collection.editor";
|
|
import { createProductDetailsEditor } from "@/editor/components/commerce/product-details.editor";
|
|
import { createRecommendedProductsEditor } from "@/editor/components/commerce/recommended-products.editor";
|
|
|
|
import { featuresEditor } from "@/editor/components/features/features.editor";
|
|
import { testimonialsEditor } from "@/editor/components/testimonials/testimonials.editor";
|
|
import { imageGalleryEditor } from "@/editor/components/landing/image-gallery.editor";
|
|
import { newsletterCtaEditor } from "@/editor/components/landing/newsletter-cta.editor";
|
|
import { logosEditor } from "@/editor/components/logos/logos.editor";
|
|
import { ctaEditor } from "@/editor/components/cta/cta.editor";
|
|
import { faqEditor } from "@/editor/components/faq/faq.editor";
|
|
|
|
import Root from "./root";
|
|
import type { UserConfig } from "./types";
|
|
import { initialData } from "./initial-data";
|
|
|
|
export type CreateConfigOptions = {
|
|
domain: string;
|
|
token?: string | null;
|
|
};
|
|
|
|
export function createConfig({ domain, token }: CreateConfigOptions): UserConfig {
|
|
const productField = createFieldShopifyProduct({
|
|
storeDomain: domain,
|
|
storefrontAccessToken: token ?? undefined,
|
|
}) as any;
|
|
const collectionField = createFieldShopifyCollection({
|
|
storeDomain: domain,
|
|
storefrontAccessToken: token ?? undefined,
|
|
}) as any;
|
|
|
|
return {
|
|
root: Root,
|
|
categories: {
|
|
navigation: { title: "Navigation" },
|
|
hero: { title: "Hero & Banners" },
|
|
commerce: { title: "Commerce" },
|
|
content: { title: "Content" },
|
|
footer: { title: "Footer" },
|
|
},
|
|
components: {
|
|
navigation: navigationEditor,
|
|
hero: heroEditor,
|
|
banner: bannerEditor,
|
|
"featured-product": createFeaturedProductEditor({ productField }),
|
|
"products-grid": createProductsGridEditor({ collectionField }),
|
|
"products-carousel": createProductsCarouselEditor({ collectionField }),
|
|
"collection-grid": collectionGridEditor,
|
|
collection: createCollectionEditor({ collectionField }),
|
|
"product-details": createProductDetailsEditor({ productField }),
|
|
"recommended-products": createRecommendedProductsEditor({ productField }),
|
|
features: featuresEditor,
|
|
testimonials: testimonialsEditor,
|
|
"image-gallery": imageGalleryEditor,
|
|
"newsletter-cta": newsletterCtaEditor,
|
|
logos: logosEditor,
|
|
cta: ctaEditor,
|
|
faq: faqEditor,
|
|
footer: footerEditor,
|
|
} as any,
|
|
};
|
|
}
|
|
|
|
function toBase64(s: string): string {
|
|
if (typeof btoa === "function") return btoa(unescape(encodeURIComponent(s)));
|
|
return Buffer.from(s, "utf8").toString("base64");
|
|
}
|
|
|
|
export const componentKey = toBase64(
|
|
`commerce-redesign-${JSON.stringify({ initialData })}`,
|
|
);
|
|
|
|
export default createConfig;
|