use default exports and not named exports
This commit is contained in:
@@ -2,7 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { FolderOpen } from "lucide-react";
|
import { FolderOpen } from "lucide-react";
|
||||||
import { CollectionGrid, type CollectionGridProps } from "@/components/commerce/collection-grid";
|
import { CollectionGrid, type CollectionGridProps } from "@/components/commerce/collection-grid";
|
||||||
|
|
||||||
export const collectionGridEditor: ComponentConfig<CollectionGridProps> = {
|
const collectionGridEditor: ComponentConfig<CollectionGridProps> = {
|
||||||
label: "Collections",
|
label: "Collections",
|
||||||
icon: <FolderOpen size={16} />,
|
icon: <FolderOpen size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
@@ -29,3 +29,5 @@ export const collectionGridEditor: ComponentConfig<CollectionGridProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <CollectionGrid {...props} />,
|
render: (props) => <CollectionGrid {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default collectionGridEditor;
|
||||||
|
|||||||
@@ -4,10 +4,7 @@ import { imageField } from "@reacteditor/plugin-media/field";
|
|||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
import { CollectionView, type CollectionProps } from "@/components/commerce/collection";
|
import { CollectionView, type CollectionProps } from "@/components/commerce/collection";
|
||||||
|
|
||||||
export function createCollectionEditor(opts: {
|
const collectionEditor: ComponentConfig<CollectionProps> = {
|
||||||
collectionField: any;
|
|
||||||
}): ComponentConfig<CollectionProps> {
|
|
||||||
return {
|
|
||||||
label: "Collection page",
|
label: "Collection page",
|
||||||
icon: <FolderOpen size={16} />,
|
icon: <FolderOpen size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
@@ -48,7 +45,7 @@ export function createCollectionEditor(opts: {
|
|||||||
metafieldFilters: [],
|
metafieldFilters: [],
|
||||||
},
|
},
|
||||||
fields: {
|
fields: {
|
||||||
collection: { label: "Collection", ...opts.collectionField },
|
collection: { label: "Collection", type: "shopifyCollection" } as any,
|
||||||
showDescription: {
|
showDescription: {
|
||||||
label: "Description",
|
label: "Description",
|
||||||
type: "radio",
|
type: "radio",
|
||||||
@@ -247,5 +244,6 @@ export function createCollectionEditor(opts: {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
render: (props) => <CollectionView {...props} />,
|
render: (props) => <CollectionView {...props} />,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
export default collectionEditor;
|
||||||
|
|||||||
@@ -2,10 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { Star } from "lucide-react";
|
import { Star } from "lucide-react";
|
||||||
import { FeaturedProductView, type FeaturedProductProps } from "@/components/commerce/featured-product";
|
import { FeaturedProductView, type FeaturedProductProps } from "@/components/commerce/featured-product";
|
||||||
|
|
||||||
export function createFeaturedProductEditor(opts: {
|
const featuredProductEditor: ComponentConfig<FeaturedProductProps> = {
|
||||||
productField: any;
|
|
||||||
}): ComponentConfig<FeaturedProductProps> {
|
|
||||||
return {
|
|
||||||
label: "Featured product",
|
label: "Featured product",
|
||||||
icon: <Star size={16} />,
|
icon: <Star size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
@@ -17,7 +14,7 @@ export function createFeaturedProductEditor(opts: {
|
|||||||
tone: "default",
|
tone: "default",
|
||||||
},
|
},
|
||||||
fields: {
|
fields: {
|
||||||
product: { label: "Product", ...opts.productField },
|
product: { label: "Product", type: "shopifyProduct" } as any,
|
||||||
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
||||||
ctaLabel: { label: "CTA label", type: "text", contentEditable: true },
|
ctaLabel: { label: "CTA label", type: "text", contentEditable: true },
|
||||||
align: {
|
align: {
|
||||||
@@ -38,5 +35,6 @@ export function createFeaturedProductEditor(opts: {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
render: (props) => <FeaturedProductView {...props} />,
|
render: (props) => <FeaturedProductView {...props} />,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
export default featuredProductEditor;
|
||||||
|
|||||||
@@ -2,15 +2,13 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { Package } from "lucide-react";
|
import { Package } from "lucide-react";
|
||||||
import { ProductDetailsView, type ProductDetailsProps } from "@/components/commerce/product-details";
|
import { ProductDetailsView, type ProductDetailsProps } from "@/components/commerce/product-details";
|
||||||
|
|
||||||
export function createProductDetailsEditor(opts: {
|
const productDetailsEditor: ComponentConfig<ProductDetailsProps> = {
|
||||||
productField: any;
|
|
||||||
}): ComponentConfig<ProductDetailsProps> {
|
|
||||||
return {
|
|
||||||
label: "Product details",
|
label: "Product details",
|
||||||
icon: <Package size={16} />,
|
icon: <Package size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
defaultProps: { product: null },
|
defaultProps: { product: null },
|
||||||
fields: { product: { label: "Product", ...opts.productField } },
|
fields: { product: { label: "Product", type: "shopifyProduct" } as any },
|
||||||
render: (props) => <ProductDetailsView {...props} />,
|
render: (props) => <ProductDetailsView {...props} />,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
export default productDetailsEditor;
|
||||||
|
|||||||
@@ -2,10 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { GalleryHorizontalEnd } from "lucide-react";
|
import { GalleryHorizontalEnd } from "lucide-react";
|
||||||
import { ProductsCarousel, type ProductsCarouselProps } from "@/components/commerce/products-carousel";
|
import { ProductsCarousel, type ProductsCarouselProps } from "@/components/commerce/products-carousel";
|
||||||
|
|
||||||
export function createProductsCarouselEditor(opts: {
|
const productsCarouselEditor: ComponentConfig<ProductsCarouselProps> = {
|
||||||
collectionField: any;
|
|
||||||
}): ComponentConfig<ProductsCarouselProps> {
|
|
||||||
return {
|
|
||||||
label: "Products carousel",
|
label: "Products carousel",
|
||||||
icon: <GalleryHorizontalEnd size={16} />,
|
icon: <GalleryHorizontalEnd size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
@@ -20,7 +17,7 @@ export function createProductsCarouselEditor(opts: {
|
|||||||
ctaHref: "",
|
ctaHref: "",
|
||||||
},
|
},
|
||||||
fields: {
|
fields: {
|
||||||
collection: { label: "Collection", ...opts.collectionField },
|
collection: { label: "Collection", type: "shopifyCollection" } as any,
|
||||||
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
||||||
heading: { label: "Heading", type: "text", contentEditable: true },
|
heading: { label: "Heading", type: "text", contentEditable: true },
|
||||||
subheading: { label: "Subheading", type: "textarea", contentEditable: true },
|
subheading: { label: "Subheading", type: "textarea", contentEditable: true },
|
||||||
@@ -38,5 +35,6 @@ export function createProductsCarouselEditor(opts: {
|
|||||||
ctaHref: { label: "CTA link", type: "text" },
|
ctaHref: { label: "CTA link", type: "text" },
|
||||||
},
|
},
|
||||||
render: (props) => <ProductsCarousel {...props} />,
|
render: (props) => <ProductsCarousel {...props} />,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
export default productsCarouselEditor;
|
||||||
|
|||||||
@@ -2,10 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { LayoutGrid } from "lucide-react";
|
import { LayoutGrid } from "lucide-react";
|
||||||
import { ProductsGrid, type ProductsGridProps } from "@/components/commerce/products-grid";
|
import { ProductsGrid, type ProductsGridProps } from "@/components/commerce/products-grid";
|
||||||
|
|
||||||
export function createProductsGridEditor(opts: {
|
const productsGridEditor: ComponentConfig<ProductsGridProps> = {
|
||||||
collectionField: any;
|
|
||||||
}): ComponentConfig<ProductsGridProps> {
|
|
||||||
return {
|
|
||||||
label: "Products grid",
|
label: "Products grid",
|
||||||
icon: <LayoutGrid size={16} />,
|
icon: <LayoutGrid size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
@@ -20,7 +17,7 @@ export function createProductsGridEditor(opts: {
|
|||||||
ctaHref: "",
|
ctaHref: "",
|
||||||
},
|
},
|
||||||
fields: {
|
fields: {
|
||||||
collection: { label: "Collection", ...opts.collectionField },
|
collection: { label: "Collection", type: "shopifyCollection" } as any,
|
||||||
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
||||||
heading: { label: "Heading", type: "text", contentEditable: true },
|
heading: { label: "Heading", type: "text", contentEditable: true },
|
||||||
subheading: { label: "Subheading", type: "textarea", contentEditable: true },
|
subheading: { label: "Subheading", type: "textarea", contentEditable: true },
|
||||||
@@ -37,5 +34,6 @@ export function createProductsGridEditor(opts: {
|
|||||||
ctaHref: { label: "CTA link", type: "text" },
|
ctaHref: { label: "CTA link", type: "text" },
|
||||||
},
|
},
|
||||||
render: (props) => <ProductsGrid {...props} />,
|
render: (props) => <ProductsGrid {...props} />,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
export default productsGridEditor;
|
||||||
|
|||||||
@@ -2,10 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { Sparkles } from "lucide-react";
|
import { Sparkles } from "lucide-react";
|
||||||
import { RecommendedProductsView, type RecommendedProductsProps } from "@/components/commerce/recommended-products";
|
import { RecommendedProductsView, type RecommendedProductsProps } from "@/components/commerce/recommended-products";
|
||||||
|
|
||||||
export function createRecommendedProductsEditor(opts: {
|
const recommendedProductsEditor: ComponentConfig<RecommendedProductsProps> = {
|
||||||
productField: any;
|
|
||||||
}): ComponentConfig<RecommendedProductsProps> {
|
|
||||||
return {
|
|
||||||
label: "Recommended products",
|
label: "Recommended products",
|
||||||
icon: <Sparkles size={16} />,
|
icon: <Sparkles size={16} />,
|
||||||
category: "commerce",
|
category: "commerce",
|
||||||
@@ -16,11 +13,12 @@ export function createRecommendedProductsEditor(opts: {
|
|||||||
limit: 4,
|
limit: 4,
|
||||||
},
|
},
|
||||||
fields: {
|
fields: {
|
||||||
product: { label: "Source product", ...opts.productField },
|
product: { label: "Source product", type: "shopifyProduct" } as any,
|
||||||
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
tagline: { label: "Tagline", type: "text", contentEditable: true },
|
||||||
heading: { label: "Heading", type: "text", contentEditable: true },
|
heading: { label: "Heading", type: "text", contentEditable: true },
|
||||||
limit: { label: "Limit", type: "number", min: 2, max: 8 },
|
limit: { label: "Limit", type: "number", min: 2, max: 8 },
|
||||||
},
|
},
|
||||||
render: (props) => <RecommendedProductsView {...props} />,
|
render: (props) => <RecommendedProductsView {...props} />,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
export default recommendedProductsEditor;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ComponentConfig } from '@reacteditor/core';
|
|||||||
import { Search } from 'lucide-react';
|
import { Search } from 'lucide-react';
|
||||||
import { SearchProductsView, type SearchProductsProps } from '@/components/commerce/search-products';
|
import { SearchProductsView, type SearchProductsProps } from '@/components/commerce/search-products';
|
||||||
|
|
||||||
export const searchProductsEditor: ComponentConfig<SearchProductsProps> = {
|
const searchProductsEditor: ComponentConfig<SearchProductsProps> = {
|
||||||
label: 'Search & filter',
|
label: 'Search & filter',
|
||||||
icon: <Search size={16} />,
|
icon: <Search size={16} />,
|
||||||
category: 'commerce',
|
category: 'commerce',
|
||||||
@@ -240,3 +240,5 @@ export const searchProductsEditor: ComponentConfig<SearchProductsProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <SearchProductsView {...props} />,
|
render: (props) => <SearchProductsView {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default searchProductsEditor;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Megaphone } from "lucide-react";
|
|||||||
import { CTA, type CTAProps } from "@/components/cta/cta";
|
import { CTA, type CTAProps } from "@/components/cta/cta";
|
||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
|
|
||||||
export const ctaEditor: ComponentConfig<CTAProps> = {
|
const ctaEditor: ComponentConfig<CTAProps> = {
|
||||||
label: "Call to action",
|
label: "Call to action",
|
||||||
icon: <Megaphone size={16} />,
|
icon: <Megaphone size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -51,3 +51,5 @@ export const ctaEditor: ComponentConfig<CTAProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <CTA {...props} />,
|
render: (props) => <CTA {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default ctaEditor;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { HelpCircle } from "lucide-react";
|
import { HelpCircle } from "lucide-react";
|
||||||
import { FAQ, type FAQProps } from "@/components/faq/faq";
|
import { FAQ, type FAQProps } from "@/components/faq/faq";
|
||||||
|
|
||||||
export const faqEditor: ComponentConfig<FAQProps> = {
|
const faqEditor: ComponentConfig<FAQProps> = {
|
||||||
label: "FAQ",
|
label: "FAQ",
|
||||||
icon: <HelpCircle size={16} />,
|
icon: <HelpCircle size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -50,3 +50,5 @@ export const faqEditor: ComponentConfig<FAQProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <FAQ {...props} />,
|
render: (props) => <FAQ {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default faqEditor;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { Sparkles } from "lucide-react";
|
import { Sparkles } from "lucide-react";
|
||||||
import { Features, type FeaturesProps } from "@/components/features/features";
|
import { Features, type FeaturesProps } from "@/components/features/features";
|
||||||
|
|
||||||
export const featuresEditor: ComponentConfig<FeaturesProps> = {
|
const featuresEditor: ComponentConfig<FeaturesProps> = {
|
||||||
label: "Features",
|
label: "Features",
|
||||||
icon: <Sparkles size={16} />,
|
icon: <Sparkles size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -52,3 +52,5 @@ export const featuresEditor: ComponentConfig<FeaturesProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Features {...props} />,
|
render: (props) => <Features {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default featuresEditor;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { LayoutGrid } from "lucide-react";
|
import { LayoutGrid } from "lucide-react";
|
||||||
import { Footer, type FooterProps } from "@/components/footer/footer";
|
import { Footer, type FooterProps } from "@/components/footer/footer";
|
||||||
|
|
||||||
export const footerEditor: ComponentConfig<FooterProps> = {
|
const footerEditor: ComponentConfig<FooterProps> = {
|
||||||
label: "Footer",
|
label: "Footer",
|
||||||
icon: <LayoutGrid size={16} />,
|
icon: <LayoutGrid size={16} />,
|
||||||
category: "footer",
|
category: "footer",
|
||||||
@@ -100,3 +100,5 @@ export const footerEditor: ComponentConfig<FooterProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Footer {...props} />,
|
render: (props) => <Footer {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default footerEditor;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { LayoutTemplate } from "lucide-react";
|
|||||||
import { Hero, type HeroProps } from "@/components/hero/hero";
|
import { Hero, type HeroProps } from "@/components/hero/hero";
|
||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
|
|
||||||
export const heroEditor: ComponentConfig<HeroProps> = {
|
const heroEditor: ComponentConfig<HeroProps> = {
|
||||||
label: "Hero",
|
label: "Hero",
|
||||||
icon: <LayoutTemplate size={16} />,
|
icon: <LayoutTemplate size={16} />,
|
||||||
category: "hero",
|
category: "hero",
|
||||||
@@ -80,3 +80,5 @@ export const heroEditor: ComponentConfig<HeroProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Hero {...props} />,
|
render: (props) => <Hero {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default heroEditor;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ComponentConfig } from "@reacteditor/core";
|
|||||||
import { Megaphone } from "lucide-react";
|
import { Megaphone } from "lucide-react";
|
||||||
import { Banner, type BannerProps } from "@/components/landing/banner";
|
import { Banner, type BannerProps } from "@/components/landing/banner";
|
||||||
|
|
||||||
export const bannerEditor: ComponentConfig<BannerProps> = {
|
const bannerEditor: ComponentConfig<BannerProps> = {
|
||||||
label: "Announcement bar",
|
label: "Announcement bar",
|
||||||
icon: <Megaphone size={16} />,
|
icon: <Megaphone size={16} />,
|
||||||
category: "hero",
|
category: "hero",
|
||||||
@@ -28,3 +28,5 @@ export const bannerEditor: ComponentConfig<BannerProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Banner {...props} />,
|
render: (props) => <Banner {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default bannerEditor;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Images } from "lucide-react";
|
|||||||
import { ImageGallery, type ImageGalleryProps } from "@/components/landing/image-gallery";
|
import { ImageGallery, type ImageGalleryProps } from "@/components/landing/image-gallery";
|
||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
|
|
||||||
export const imageGalleryEditor: ComponentConfig<ImageGalleryProps> = {
|
const imageGalleryEditor: ComponentConfig<ImageGalleryProps> = {
|
||||||
label: "Image gallery",
|
label: "Image gallery",
|
||||||
icon: <Images size={16} />,
|
icon: <Images size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -48,3 +48,5 @@ export const imageGalleryEditor: ComponentConfig<ImageGalleryProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <ImageGallery {...props} />,
|
render: (props) => <ImageGallery {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default imageGalleryEditor;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const baseFields: Fields<NewsletterCtaProps> = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const newsletterCtaEditor: ComponentConfig<NewsletterCtaProps> = {
|
const newsletterCtaEditor: ComponentConfig<NewsletterCtaProps> = {
|
||||||
label: "Newsletter",
|
label: "Newsletter",
|
||||||
icon: <Mail size={16} />,
|
icon: <Mail size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -78,3 +78,5 @@ export const newsletterCtaEditor: ComponentConfig<NewsletterCtaProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <NewsletterCta {...props} />,
|
render: (props) => <NewsletterCta {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default newsletterCtaEditor;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Award } from "lucide-react";
|
|||||||
import { Logos, type LogosProps } from "@/components/logos/logos";
|
import { Logos, type LogosProps } from "@/components/logos/logos";
|
||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
|
|
||||||
export const logosEditor: ComponentConfig<LogosProps> = {
|
const logosEditor: ComponentConfig<LogosProps> = {
|
||||||
label: "Press / Logos",
|
label: "Press / Logos",
|
||||||
icon: <Award size={16} />,
|
icon: <Award size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -42,3 +42,5 @@ export const logosEditor: ComponentConfig<LogosProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Logos {...props} />,
|
render: (props) => <Logos {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default logosEditor;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { imageField } from "@reacteditor/plugin-media/field";
|
|||||||
import { Navigation, type NavigationProps } from "@/components/navigation/navigation";
|
import { Navigation, type NavigationProps } from "@/components/navigation/navigation";
|
||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
|
|
||||||
export const navigationEditor: ComponentConfig<NavigationProps> = {
|
const navigationEditor: ComponentConfig<NavigationProps> = {
|
||||||
label: "Navigation",
|
label: "Navigation",
|
||||||
icon: <MenuIcon size={16} />,
|
icon: <MenuIcon size={16} />,
|
||||||
category: "navigation",
|
category: "navigation",
|
||||||
@@ -72,3 +72,5 @@ export const navigationEditor: ComponentConfig<NavigationProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Navigation {...props} />,
|
render: (props) => <Navigation {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default navigationEditor;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Quote } from "lucide-react";
|
|||||||
import { Testimonials, type TestimonialsProps } from "@/components/testimonials/testimonials";
|
import { Testimonials, type TestimonialsProps } from "@/components/testimonials/testimonials";
|
||||||
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
import { frontendAiMediaAdapter } from "@/services/media-adapter";
|
||||||
|
|
||||||
export const testimonialsEditor: ComponentConfig<TestimonialsProps> = {
|
const testimonialsEditor: ComponentConfig<TestimonialsProps> = {
|
||||||
label: "Testimonials",
|
label: "Testimonials",
|
||||||
icon: <Quote size={16} />,
|
icon: <Quote size={16} />,
|
||||||
category: "content",
|
category: "content",
|
||||||
@@ -56,3 +56,5 @@ export const testimonialsEditor: ComponentConfig<TestimonialsProps> = {
|
|||||||
},
|
},
|
||||||
render: (props) => <Testimonials {...props} />,
|
render: (props) => <Testimonials {...props} />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default testimonialsEditor;
|
||||||
|
|||||||
@@ -1,49 +1,29 @@
|
|||||||
import {
|
import navigationEditor from "@/components/navigation/navigation.editor";
|
||||||
createFieldShopifyProduct,
|
import footerEditor from "@/components/footer/footer.editor";
|
||||||
createFieldShopifyCollection,
|
|
||||||
} from "@reacteditor/field-shopify";
|
|
||||||
|
|
||||||
import { navigationEditor } from "@/components/navigation/navigation.editor";
|
import heroEditor from "@/components/hero/hero.editor";
|
||||||
import { footerEditor } from "@/components/footer/footer.editor";
|
import bannerEditor from "@/components/landing/banner.editor";
|
||||||
|
|
||||||
import { heroEditor } from "@/components/hero/hero.editor";
|
import featuredProductEditor from "@/components/commerce/featured-product.editor";
|
||||||
import { bannerEditor } from "@/components/landing/banner.editor";
|
import productsGridEditor from "@/components/commerce/products-grid.editor";
|
||||||
|
import productsCarouselEditor from "@/components/commerce/products-carousel.editor";
|
||||||
|
import collectionGridEditor from "@/components/commerce/collection-grid.editor";
|
||||||
|
import collectionEditor from "@/components/commerce/collection.editor";
|
||||||
|
import productDetailsEditor from "@/components/commerce/product-details.editor";
|
||||||
|
import recommendedProductsEditor from "@/components/commerce/recommended-products.editor";
|
||||||
|
import searchProductsEditor from "@/components/commerce/search-products.editor";
|
||||||
|
|
||||||
import { createFeaturedProductEditor } from "@/components/commerce/featured-product.editor";
|
import featuresEditor from "@/components/features/features.editor";
|
||||||
import { createProductsGridEditor } from "@/components/commerce/products-grid.editor";
|
import testimonialsEditor from "@/components/testimonials/testimonials.editor";
|
||||||
import { createProductsCarouselEditor } from "@/components/commerce/products-carousel.editor";
|
import imageGalleryEditor from "@/components/landing/image-gallery.editor";
|
||||||
import { collectionGridEditor } from "@/components/commerce/collection-grid.editor";
|
import newsletterCtaEditor from "@/components/landing/newsletter-cta.editor";
|
||||||
import { createCollectionEditor } from "@/components/commerce/collection.editor";
|
import logosEditor from "@/components/logos/logos.editor";
|
||||||
import { createProductDetailsEditor } from "@/components/commerce/product-details.editor";
|
import ctaEditor from "@/components/cta/cta.editor";
|
||||||
import { createRecommendedProductsEditor } from "@/components/commerce/recommended-products.editor";
|
import faqEditor from "@/components/faq/faq.editor";
|
||||||
import { searchProductsEditor } from "@/components/commerce/search-products.editor";
|
|
||||||
|
|
||||||
import { featuresEditor } from "@/components/features/features.editor";
|
|
||||||
import { testimonialsEditor } from "@/components/testimonials/testimonials.editor";
|
|
||||||
import { imageGalleryEditor } from "@/components/landing/image-gallery.editor";
|
|
||||||
import { newsletterCtaEditor } from "@/components/landing/newsletter-cta.editor";
|
|
||||||
import { logosEditor } from "@/components/logos/logos.editor";
|
|
||||||
import { ctaEditor } from "@/components/cta/cta.editor";
|
|
||||||
import { faqEditor } from "@/components/faq/faq.editor";
|
|
||||||
|
|
||||||
import Root from "@/config/root";
|
import Root from "@/config/root";
|
||||||
import type { UserConfig } from "@/config/types";
|
import type { UserConfig } from "@/config/types";
|
||||||
|
|
||||||
const SHOPIFY_DOMAIN =
|
|
||||||
process.env.NEXT_PUBLIC_SHOPIFY_DOMAIN ?? "mock.shop";
|
|
||||||
const STOREFRONT_TOKEN =
|
|
||||||
process.env.NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN ?? "";
|
|
||||||
|
|
||||||
const productField = createFieldShopifyProduct({
|
|
||||||
storeDomain: SHOPIFY_DOMAIN,
|
|
||||||
storefrontAccessToken: STOREFRONT_TOKEN || undefined,
|
|
||||||
}) as any;
|
|
||||||
|
|
||||||
const collectionField = createFieldShopifyCollection({
|
|
||||||
storeDomain: SHOPIFY_DOMAIN,
|
|
||||||
storefrontAccessToken: STOREFRONT_TOKEN || undefined,
|
|
||||||
}) as any;
|
|
||||||
|
|
||||||
const categories = {
|
const categories = {
|
||||||
navigation: { title: "Navigation" },
|
navigation: { title: "Navigation" },
|
||||||
hero: { title: "Hero & Banners" },
|
hero: { title: "Hero & Banners" },
|
||||||
@@ -64,9 +44,9 @@ export const homeConfig: UserConfig = {
|
|||||||
...sharedComponents,
|
...sharedComponents,
|
||||||
hero: heroEditor,
|
hero: heroEditor,
|
||||||
banner: bannerEditor,
|
banner: bannerEditor,
|
||||||
"featured-product": createFeaturedProductEditor({ productField }),
|
"featured-product": featuredProductEditor,
|
||||||
"products-grid": createProductsGridEditor({ collectionField }),
|
"products-grid": productsGridEditor,
|
||||||
"products-carousel": createProductsCarouselEditor({ collectionField }),
|
"products-carousel": productsCarouselEditor,
|
||||||
"collection-grid": collectionGridEditor,
|
"collection-grid": collectionGridEditor,
|
||||||
features: featuresEditor,
|
features: featuresEditor,
|
||||||
testimonials: testimonialsEditor,
|
testimonials: testimonialsEditor,
|
||||||
@@ -83,9 +63,9 @@ export const productConfig: UserConfig = {
|
|||||||
categories,
|
categories,
|
||||||
components: {
|
components: {
|
||||||
...sharedComponents,
|
...sharedComponents,
|
||||||
"product-details": createProductDetailsEditor({ productField }),
|
"product-details": productDetailsEditor,
|
||||||
"recommended-products": createRecommendedProductsEditor({ productField }),
|
"recommended-products": recommendedProductsEditor,
|
||||||
"products-carousel": createProductsCarouselEditor({ collectionField }),
|
"products-carousel": productsCarouselEditor,
|
||||||
} as any,
|
} as any,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -94,7 +74,7 @@ export const collectionsConfig: UserConfig = {
|
|||||||
categories,
|
categories,
|
||||||
components: {
|
components: {
|
||||||
...sharedComponents,
|
...sharedComponents,
|
||||||
collection: createCollectionEditor({ collectionField }),
|
collection: collectionEditor,
|
||||||
} as any,
|
} as any,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user