1.0.64 • Published 12 months ago

@tempi-public/core-renderer v1.0.64

Weekly downloads
-
License
MIT
Repository
-
Last release
12 months ago

Tích hợp

Cài đặt

yarn add @tempi/core-renderer

# hoặc

npm install @tempi/core-renderer

Sử dụng với React - chỉ xử lý các component tĩnh của Tempi

Cách sử dụng BuilderComponent (deprecated - vui lòng sử dụng component RenderPage)

import { 
  builder, 
  BuilderComponent, 
  buildComponentDict, 
  PublicPageResponse 
} from "@tempi/core-renderer";
import { components as coreComponents } from '@tempi/core-elements/dist/renderer';

const publishedDomain = 'vnshop.vn'

builder.init(publishedDomain, {
  env: "dev", // dev | staging | production | internal | local
});

function App() {
  const [content, setContent] = useState();
  const [metaData, setMetaData] = useState();
  const slug = location.pathname.substring(1);

  const componentDict = buildComponentDict(coreComponents);
  
  useEffect(() => {
    const fetchPage = async () => {
      const { content: pageContent, metaData } = await builder.getPublicPageV2({
        slug: slug || "/", 
        device: "desktop",
      });
      setContent(pageContent);
      setMetaData(metaData);
    };
    fetchPage();
  }, []);

  return (
    <BuilderComponent
      content={content}
      configs={{
        env: 'dev',
        device: 'desktop',
        terminalCode: 'vnshop',
        locationCode: 'HN001'
      }}
      componentDict={componentDict}
    />
  );
}

export default App;

Cách sử dụng RenderPage

import { 
  builder, 
  RenderPage, 
  buildComponentDict, 
  PublicPageResponse 
} from "@tempi/core-renderer";
import { components as coreComponents } from '@tempi/core-elements/dist/renderer';

const publishedDomain = 'vnshop.vn'

builder.init(publishedDomain, {
  env: "dev", // dev | staging | production | internal | local
});

function App() {
  const [content, setContent] = useState();
  const [metaData, setMetaData] = useState();
  const slug = location.pathname.substring(1);

  const componentDict = buildComponentDict(coreComponents);
    
  useEffect(() => {
    const fetchPage = async () => {
      const { content: pageContent, metaData } = await builder.getPublicPageV2({
        slug: slug || "/", 
        device: "desktop",
      });
      setContent(pageContent);
      setMetaData(metaData);
    };
    fetchPage();
  }, []);

  return (
    <RenderPage 
      content={content}
      configs={ {
        env: 'dev',
        device:'desktop',
        globalData: {
          menu: [],
          websiteId: 1,
        },
      }}
      numOfHydratedBlocks={5}
      componentDict={componentDict} 
    />
  );
}

export default App;

API

builder

functionDescriptionType
initkhởi tạo builderfunction(domain: string, { env: 'dev' | 'stag' | 'production' | 'internal' }) => void
getPublicPageV2lấy data của pagefunction({ slug: string; device: 'desktop' | 'mobile' }) => Promise\<PublicPageResponse>
getSSRInputslấy các thông tin cần thiết sử dụng để khởi tạo dữ liệu SSR như products, megaMenu,...function(pbConfig: PageBuilderResponse) => { key: string: SSRInput[] }

BuilderComponent (deprecated)

PropertyDescriptionType
contentCấu hình của builder (dữ liêu content lấy từ builder.getPublicPageV2)PageBuilderResponse
configsCác cấu hình thêm cho builder (env, device, mappingDynamicSlots), có thể tự định nghĩa thêm fieldsStoreState
componentDictCác component có thể render trong BuilderComponent - required{key: string?: React.ComponentType}
ssrDataDữ liệu phục vụ cơ chế SSR cho các component động{key: string : SSROutput[]}

RenderPage

PropertyDescriptionType
contentCấu hình của builder (dữ liêu content lấy từ builder.getPublicPageV2)PageBuilderResponse
configsCác cấu hình thêm cho builder (env, device, mappingDynamicSlots), có thể tự định nghĩa thêm fieldsStoreState
componentDictCác component có thể render trong BuilderComponent - required{key: string?: React.ComponentType}
ssrDataDữ liệu phục vụ cơ chế SSR cho các component động{key: string : SSROutput[]}
numOfHydratedBlockssố block cần SSR. Nếu k truyền SSR tất cả blocksnumber
addGlobalStyledefault trueboolean
addLandingLinksdefault trueboolean
rootIdid root element. default ROOTstring

PublicPageResponse

PropertyDescriptionType
idnumber
nameTên pagestring
pbConfig (deprecated)Cấu hình page (format của Tempi)PageBuilderResponse
contentCấu hình page (format của Tempi)PageBuilderResponse
extraInfoCác thông tin thêm của page như SEO, tracking, ...IPageExtraInfo
canonicalCanonical của pagestring
menuDanh sách menu của page nếu page thuộc websitearray

Page

PropertyType
idnumber
pbConfig (deprecated)PageBuilderResponse
contentPageBuilderResponse
metaTitlestring
metaDescriptionstring
metaImagestring
faviconUrlstring

PageBuilderResponse

PropertyDescriptionType
key: stringCấu hình từng component (format của Tempi)PBComponent

PBComponent

PropertyDescriptionType
idid (unique) của từng componentstring
parentIdid của component cha của component hiện tại, nếu là root thì parentId = nullstring
childrendanh sách id của các component là con của component hiện tạistring[]
tagđịnh danh của từng loại component. Ví dụ: row, col, image, best_selling_product,...string
styleStyle chung của componentReact.CSSProperties
versionstring
customAttributesCấu hình riêng của từng component. có thể tự định nghĩa thêmT extends key: string: any;

IPageExtraInfo

PropertyType
metaTitlestring
metaDescriptionstring
metaImagestring
faviconUrlstring
noIndexboolean
tekoTrackingWebMobilestring
tekoTrackingWebDesktopstring
facebookPixelIdstring
googleAnalyticsIdstring
googleTagManagerIdstring
googleAdsIdstring
tiktokPixelIdstring
headContentHtmlstring
bodyContentHtmlstring

StoreState

PropertyDescriptionType
envmôi trường"local", "internal", "test-1", "dev", "staging", "production"
deviceSử dụng để hiển thị các component ở từng chế độ màn hình"desktop", "mobile"
mappingDynamicSlotsslot trên tempi và component trên Ecommerce tương ứng{tag: string: React.ComponentType}
globalDataGlobalData

Slot

product_carousel_desktop | product_grid_desktop | product_carousel_mobile | product_grid_mobile | mega_menu | recent_search | recent_product | pending_payment

SSRInput

PropertyDescriptionType
slotLoại slot cần sử dụng cơ chế SSRSlot
collectionSlugslug của collection (dùng cho danh sách sản phẩm) - slot = product_*string
menuZonezone của menu (dùng cho mega menu) - slot = mega_menustring

SSROutput

PropertyDescriptionType
slotLoại slot cần sử dụng cơ chế SSRSlot
serverDataDữ liệu đầu vào của slot sử dụng cơ chế SSRunknown (quy định bởi bên tích hợp)

GlobalData

PropertyDescriptionType
menumenu websiteobject[]
websiteIdid websitenumber
pagepage of websitePublicPageResponse

Sử dụng với Next - bao gồm cơ chế SSR bởi getServerSideProps

import { 
  builder, 
  BuilderComponent, 
  buildComponentDict, 
  PublicPageResponse 
} from "@tempi/core-renderer";
import {
  ProductCarouselDesktop,
  ProductGridDesktop,
  ProductCarouselMobile,
  ProductGridMobile,
  MegaMenu,
  RecentSearch,
  RecentProduct,
  PendingPayment,
} from 'components'
import { components as coreComponents } from '@tempi/core-elements/dist/renderer';
import { components as ecomComponents } from '@tempi/ecom-elements/dist/renderer';

function Page({ content, extraInfo, ssrData }) {

  const componentDict = buildComponentDict({...coreComponents, ...ecomComponent});

  return (
    <>
      <CustomHead extraInfo={extraInfo} >
      <BuilderComponent
        content={content}
        ssrData={ssrData}
        configs={{
          device: 'desktop', // quan trọng, sử dụng để hiển thị các component ở từng chế độ màn hình
          mappingDynamicSlots={{
            product_carousel_desktop: ProductCarouselDesktop,
            product_grid_desktop: ProductGridDesktop,
            product_carousel_mobile: ProductCarouselMobile,
            product_grid_mobile: ProductGridMobile,
            mega_menu: MegaMenu,
            recent_search: RecentSearch,
            recent_product: RecentProduct,
            pending_payment: PendingPayment
          }}
          componentDict={componentDict}
          terminalCode: 'vnshop',
          locationCode: 'HN001',
        }}
      />
    </>
  );
};
export async function getServerSideProps() {
  builder.init(publishedDomain, {
    env: "dev", // dev | stag | production | internal
  });

  const { content, metaData } = await builder.getPublicPageV2({
    slug: slug || "/", 
    device: "desktop",
  });

  const ssrInputs = builder.getSSRInputs(content);

  const ssrData = await ecommerceFunctionGetData(ssrInputs) // hàm này sẽ xử lý lấy data SSR, ví dụ products, megaMenu, ...

  // Pass data to the page via props
  return { props: { content, extraInfo, ssrData } }
}