import { AccordionContentEditor, AccordionEditor, AccordionItemEditor, ButtonEditorV2, ButtonSubmitV3Editor, CountdownEditor, DEFAULT_PRODUCT_LIST, DEFAULT_PRODUCT_LIST_HEADING, DEFAULT_TABS, DividerEditor, FormV4Editor, GalleryEditor, getColWidthProps, HeadingEditor, HtmlCodeEditor, IconEditor, ImageEditor, ListItemContentEditorV2, ListItemEditorV2, ListItemIconEditorV2, LuckyDrawV2Editor, MapEditor, NumberCounterEditor, ParagraphEditor, ProductListContentEditor, ProductListEditor, SliderEditor, SocialIconEditor, SpacerEditor, StoreListEditor, SubscriptionFormV2, TabEditor, TabItemEditor, TableEditor, TempiProductListEditorV2, QRCodeEditor, ColEditor, RowEditor, ExamScoreEditor, VideoEditor, ArticleListEditor, LeadFormEditor, TEMPI_DEFAULT_PRODUCT_LIST, TreasureHuntingEditor, LuckyMoneyEditor, PotSmashingEditor, SampleComponentEditor, PageFlipEditor, DEFAULT_PAGE_FLIP, } from '@tempi/core-elements'; import { CodeRegular, CursorHoverRegular, ImageRegular, ImageMultipleRegular, SplitHorizontalRegular, CartRegular, TextTRegular, TableRegular, FormRegular, StarRegular, ClockRegular, QrCodeRegular, CellularData1Regular, BuildingShopRegular, AutoFitHeightRegular, MapRegular, ScaleFitRegular, CenterVerticalRegular, TabDesktopRegular, AppsListRegular, ChannelShareRegular, SearchInfoRegular, VideoRegular, DocumentOnePageRegular, BookOpenRegular, } from '@fluentui/react-icons'; import { AntdCustomIcon as Icon } from '@tempi/icons-dev'; import { Element } from '@tempi/core-editor'; import { ElementCategory, ElementProps, MENU_ITEMS, t, } from '@tempi/editor-site'; import { ELEMENT_CATEGORIES } from './categories'; export const ELEMENTS: ElementProps[] = [ { category: [ElementCategory.MINI_GAME], icon: , selector: , key: MENU_ITEMS.TREASURE_HUNTING, name: t('mini_game.treasureHunting'), trackingContentName: 'dragTreasureHunting', }, { category: [ElementCategory.MINI_GAME], icon: , selector: , key: MENU_ITEMS.LUCKY_MONEY, name: t('mini_game.lucky_money'), trackingContentName: 'dragLuckyMoney', }, { category: [ElementCategory.MINI_GAME], icon: , selector: , key: MENU_ITEMS.POT_SMASHING, name: t('mini_game.potSmashing'), trackingContentName: 'dragPotSmashing', }, { name: 'QR Code', icon: , selector: , key: MENU_ITEMS.QR_CODE, trackingContentName: 'dragQRCode', category: [ELEMENT_CATEGORIES.CONTENT], }, { name: t('Danh sách sản phẩm'), icon: , selector: , key: MENU_ITEMS.TEMPI_PRODUCT_LIST, category: [ELEMENT_CATEGORIES.COLLECT_LEAD, ELEMENT_CATEGORIES.PRODUCT], trackingContentName: 'dragProductList', }, { name: t('Bố cục 2 cột'), icon: ( ), selector: ( ), key: MENU_ITEMS.LAYOUT, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragLayout', }, { name: t('Đoạn văn'), icon: , selector: , key: MENU_ITEMS.PARAGRAPH, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragParagraph', }, { name: t('Bảng'), icon: , selector: , key: MENU_ITEMS.TABLE, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragTable', }, { name: t('common.image'), icon: , selector: , key: MENU_ITEMS.IMAGE, category: [ELEMENT_CATEGORIES.MEDIA], trackingContentName: 'dragImage', }, { name: 'Form', icon: , selector: ( ), key: MENU_ITEMS.FORM, category: [ELEMENT_CATEGORIES.COLLECT_LEAD], trackingContentName: 'dragForm', }, { name: t('Form đăng ký'), icon: , selector: ( ), key: MENU_ITEMS.SUBSCRIPTION_FORM, category: [ELEMENT_CATEGORIES.COLLECT_LEAD], trackingContentName: 'dragSubscriptionForm', isHide: true, }, { name: t('Nút bấm'), icon: , selector: , key: MENU_ITEMS.BUTTON, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragButton', }, { name: t('Thư viện ảnh'), icon: , key: MENU_ITEMS.GALLERY, selector: , category: [ELEMENT_CATEGORIES.MEDIA], trackingContentName: 'dragGallery', }, { name: 'Video', icon: , selector: , key: MENU_ITEMS.VIDEO, category: [ELEMENT_CATEGORIES.MEDIA], trackingContentName: 'dragVideo', }, { name: 'Slideshow', icon: , selector: , key: MENU_ITEMS.SLIDESHOW, category: [ELEMENT_CATEGORIES.MEDIA], trackingContentName: 'dragSlideshow', }, { name: t('Khoảng cách'), icon: , selector: , key: MENU_ITEMS.SPACER, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragSpacer', }, { name: t('Đường phân chia'), icon: , selector: , key: MENU_ITEMS.DIVIDER, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragDivider', }, { name: 'Icon', icon: , selector: , key: MENU_ITEMS.ICON, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragIcon', }, { name: 'Tab', icon: , selector: ( ), key: MENU_ITEMS.TAB, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragTab', }, { name: t('Mã HTML'), icon: , selector: , key: MENU_ITEMS.HTML_CODE, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragHtmlCode', }, { name: t('Đếm ngược'), icon: , selector: , key: MENU_ITEMS.COUNTDOWN, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragCountdown', }, { name: t('Danh sách Icon'), icon: , selector: ( ), key: MENU_ITEMS.LIST, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragList', }, { name: t('Nội dung thu gọn'), icon: , selector: ( ), key: MENU_ITEMS.ACCORDION, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragAccordion', }, { name: t('Vòng quay may mắn'), icon: , selector: , key: MENU_ITEMS.LUCKY_DRAW_V2, category: [ELEMENT_CATEGORIES.COLLECT_LEAD], trackingContentName: 'dragLuckyDrawV2', }, { name: t('Nội dung thu gọn'), icon: , selector: ( ), key: MENU_ITEMS.ACCORDION, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragAccordion', isHide: true, }, { name: t('Bản đồ'), icon: , key: MENU_ITEMS.MAP, selector: , category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragMap', }, { name: t('Icon mạng xã hội'), icon: , selector: , key: MENU_ITEMS.SOCIAL_ICON, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragSocialIcon', }, { name: t('Danh sách cửa hàng'), icon: , selector: , key: MENU_ITEMS.STORE_LIST, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragStoreList', }, { name: 'Progress', icon: , selector: , key: MENU_ITEMS.NUMBER_COUNTER, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragNumberCounter', }, { name: t('Sản phẩm Teko'), icon: , selector: ( ), key: MENU_ITEMS.PRODUCT_LIST, category: [ELEMENT_CATEGORIES.TEKO], trackingContentName: 'dragProductList', }, { category: [ELEMENT_CATEGORIES.TEKO], icon: , selector: , key: 'EXAM_SCORE', name: t('Điểm thi đại học'), trackingContentName: 'dragExamScore', }, { category: [ELEMENT_CATEGORIES.COLLECT_LEAD], icon: , selector: ( ), key: MENU_ITEMS.LEAD_FORM, name: 'Lead Form (Teko CDP)', trackingContentName: 'dragLeadForm', }, { name: t('Danh sách bài viết'), icon: , selector: , key: MENU_ITEMS.ARTICLE_LIST, category: [ELEMENT_CATEGORIES.CONTENT], trackingContentName: 'dragArticleList', }, { name: t('book_page_flip'), icon: , selector: , key: MENU_ITEMS.PAGE_FLIP, category: [ElementCategory.BETA], trackingContentName: 'dragPageFlip', badge: { text: t('beta'), color: 'volcano', }, }, ]; export const allElementsExclude = ( excludeList: string[] = [], ): ElementProps[] => { if (!excludeList.length) return ELEMENTS; return ELEMENTS.filter((component) => !excludeList.includes(component.key)); }; export const groupElementsByCat = ( elements: ElementProps[] = ELEMENTS, categories: Record = ElementCategory, ) => { return Object.keys(categories).map((key) => { const catName = categories[key] as string; const items = elements.filter((item) => item.category.includes(catName)); if (key === 'ALL') return { key: key, name: catName, items: elements, }; return { key: key, name: catName, items, }; }); }; export const getElements = ( elements = [], configs?: { elements: ElementProps[]; merchantId?: number; ignoreElementKeys?: string[]; extendElements?: ElementProps[]; }, ): ElementProps[] => { const { merchantId, ignoreElementKeys, extendElements } = configs || {}; const { merchantIdsDisplayCustomComponent = [], newComponents = {} } = window?.config || {}; const now = new Date(); const isMerchantPermitted = merchantIdsDisplayCustomComponent.length === 0 || merchantIdsDisplayCustomComponent.includes(merchantId); const setIgnoreElementKeys = new Set(ignoreElementKeys); let newElements = []; elements.forEach((element, index) => { if (!setIgnoreElementKeys.has(element.key)) { if ( newComponents?.[element.key]?.endTime && newComponents[element.key].endTime >= now.getTime() ) { newElements[index] = { ...element, badge: { text: t('Mới'), }, }; } else { newElements[index] = { ...element }; } } }); if (isMerchantPermitted) { newElements.push({ category: [ElementCategory.CUSTOM], icon: , selector: , key: MENU_ITEMS.SAMPLE_COMPONENT, name: 'Tempi sample', trackingContentName: 'sampleComponent', }); } if (extendElements) { newElements = newElements.concat(extendElements); } return newElements; };