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;
};