diff --git a/libs/components/src/lib/components/ChannelList/ChannelListComponents/index.tsx b/libs/components/src/lib/components/ChannelList/ChannelListComponents/index.tsx index 61b0ff6dd0..1db92e93b0 100644 --- a/libs/components/src/lib/components/ChannelList/ChannelListComponents/index.tsx +++ b/libs/components/src/lib/components/ChannelList/ChannelListComponents/index.tsx @@ -19,7 +19,7 @@ import { useAppDispatch } from '@mezon/store'; import { Icons } from '@mezon/ui'; -import { DONE_ONBOARDING_STATUS, EPermission } from '@mezon/utils'; +import { DONE_ONBOARDING_STATUS, EPermission, generateE2eId } from '@mezon/utils'; import { memo, useEffect, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useModal } from 'react-modal-hook'; @@ -128,6 +128,7 @@ export const Events = memo(() => {
diff --git a/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/eventInfoModal.tsx b/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/eventInfoModal.tsx index 99ad345b5e..dcabc6a8b5 100644 --- a/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/eventInfoModal.tsx +++ b/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/eventInfoModal.tsx @@ -3,7 +3,7 @@ import { selectCurrentChannelId, selectCurrentClanId, selectTheme } from '@mezon import { handleUploadFile, useMezon } from '@mezon/transport'; import { TextArea, TimePicker } from '@mezon/ui'; import type { ContenSubmitEventProps } from '@mezon/utils'; -import { ERepeatType, MAX_FILE_SIZE_1MB, fileTypeImage } from '@mezon/utils'; +import { ERepeatType, MAX_FILE_SIZE_1MB, fileTypeImage, generateE2eId } from '@mezon/utils'; import { Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; @@ -296,7 +296,7 @@ const EventInfoModal = (props: EventInfoModalProps) => { > {t('actions.uploadImage')}
- handleFile(e)} className="w-full text-sm text-slate-500 " /> + handleFile(e)} className="w-full text-sm text-slate-500 " data-e2e={generateE2eId('clan_page.modal.create_event.upload.image_cover_input')} /> {contentSubmit.logo && logo}
diff --git a/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/index.tsx b/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/index.tsx index 3f652905c5..b16b0b2e1d 100644 --- a/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/index.tsx +++ b/libs/components/src/lib/components/ChannelList/EventChannelModal/ModalCreate/index.tsx @@ -11,7 +11,7 @@ import { useAppDispatch, useAppSelector } from '@mezon/store'; -import { ContenSubmitEventProps, ERepeatType, OptionEvent, Tabs_Option } from '@mezon/utils'; +import { ContenSubmitEventProps, ERepeatType, generateE2eId, OptionEvent, Tabs_Option } from '@mezon/utils'; import isEqual from 'lodash.isequal'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -401,6 +401,7 @@ const ModalCreate = (props: ModalCreateProps) => { diff --git a/libs/components/src/lib/components/ChannelList/EventChannelModal/StartEvent/StartEvent.tsx b/libs/components/src/lib/components/ChannelList/EventChannelModal/StartEvent/StartEvent.tsx index 236a056d6f..540c221815 100644 --- a/libs/components/src/lib/components/ChannelList/EventChannelModal/StartEvent/StartEvent.tsx +++ b/libs/components/src/lib/components/ChannelList/EventChannelModal/StartEvent/StartEvent.tsx @@ -4,6 +4,7 @@ import { Icons } from '@mezon/ui'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import ListEventManagement from './ListEventManagement'; +import { generateE2eId } from '@mezon/utils'; type StartEventModalProps = { onClose: () => void; @@ -31,7 +32,7 @@ export const StartEventModal = (props: StartEventModalProps) => {
-
+
{t('actions.create')}
diff --git a/libs/components/src/lib/components/ChannelSetting/channelSettingItem.tsx b/libs/components/src/lib/components/ChannelSetting/channelSettingItem.tsx index 74079a162c..ad95cee01e 100644 --- a/libs/components/src/lib/components/ChannelSetting/channelSettingItem.tsx +++ b/libs/components/src/lib/components/ChannelSetting/channelSettingItem.tsx @@ -1,7 +1,7 @@ import { useChannels, usePermissionChecker } from '@mezon/core'; import { ChannelsEntity, selectChannelById, selectWelcomeChannelByClanId, useAppSelector } from '@mezon/store'; import { Icons } from '@mezon/ui'; -import { EPermission, IChannel, checkIsThread } from '@mezon/utils'; +import { EPermission, IChannel, checkIsThread, generateE2eId } from '@mezon/utils'; import { ChannelType } from 'mezon-js'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -98,7 +98,12 @@ const ChannelSettingItem = (props: ChannelSettingItemProps) => {

- + {!isThread && ( <> {getTabTranslation ? getTabTranslation(tabName) : tabName} diff --git a/libs/components/src/lib/components/ClanSettings/ClanSettingOverview/ClanBannerBackground/index.tsx b/libs/components/src/lib/components/ClanSettings/ClanSettingOverview/ClanBannerBackground/index.tsx index 6a9d3b1dfb..4e8c168528 100644 --- a/libs/components/src/lib/components/ClanSettings/ClanSettingOverview/ClanBannerBackground/index.tsx +++ b/libs/components/src/lib/components/ClanSettings/ClanSettingOverview/ClanBannerBackground/index.tsx @@ -1,7 +1,7 @@ import { selectCurrentChannelId, selectCurrentClanId } from '@mezon/store'; import { handleUploadFile, useMezon } from '@mezon/transport'; import { Icons } from '@mezon/ui'; -import { MAX_FILE_SIZE_10MB, fileTypeImage } from '@mezon/utils'; +import { MAX_FILE_SIZE_10MB, fileTypeImage, generateE2eId } from '@mezon/utils'; import { useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; @@ -95,7 +95,14 @@ const ClanBannerBackground = ({ onUpload, urlImage }: ClanBannerBackgroundProps) > {!urlImage &&

{t('clanBanner.chooseImage')}

} - handleFile(e)} type="file" className="hidden" /> + handleFile(e)} + type="file" + className="hidden" + data-e2e={generateE2eId('clan_page.settings.upload.clan_banner_input')} + /> diff --git a/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/Mission/ModalAddRule.tsx b/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/Mission/ModalAddRule.tsx index 5e5c7d4e81..98d4511c9d 100644 --- a/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/Mission/ModalAddRule.tsx +++ b/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/Mission/ModalAddRule.tsx @@ -1,6 +1,6 @@ import { editOnboarding, EGuideType, onboardingActions, useAppDispatch } from '@mezon/store'; import { handleUploadEmoticon, useMezon } from '@mezon/transport'; -import { fileTypeImage, MAX_FILE_SIZE_10MB } from '@mezon/utils'; +import { fileTypeImage, generateE2eId, MAX_FILE_SIZE_10MB } from '@mezon/utils'; import { Snowflake } from '@theinternetfolks/snowflake'; import type { ApiOnboardingItem } from 'mezon-js/api.gen'; import type { ChangeEvent } from 'react'; @@ -192,6 +192,7 @@ const ModalAddRules = ({ onClose, ruleEdit, tempId }: { onClose: () => void; rul tabIndex={0} accept=".jpg,.jpeg,.png,.gif" onChange={handleAddImage} + data-e2e={generateE2eId('clan_page.settings.upload.onboarding_resource_input')} />
diff --git a/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/index.tsx b/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/index.tsx index 2cbf5ca4a9..1fa34140a0 100644 --- a/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/index.tsx +++ b/libs/components/src/lib/components/ClanSettings/SettingOnBoarding/index.tsx @@ -13,6 +13,7 @@ import ModalSaveChanges from '../ClanSettingOverview/ModalSaveChanges'; import GuideItemLayout from './GuideItemLayout'; import ClanGuideSetting from './Mission/ClanGuideSetting'; import Questions from './Questions/Questions'; +import { generateE2eId } from '@mezon/utils'; export enum EOnboardingStep { QUESTION, @@ -350,6 +351,7 @@ const MainIndex = ({ handleGoToPage, onCloseSetting, showOnboardingHighlight }:
handleGoToPage(EOnboardingStep.MISSION)} + data-e2e={generateE2eId('clan_page.settings.onboarding.button.clan_guide')} > {t('buttons.edit')}
diff --git a/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/ModalUploadSound.tsx b/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/ModalUploadSound.tsx index f1c50fd08a..8c2335ea1a 100644 --- a/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/ModalUploadSound.tsx +++ b/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/ModalUploadSound.tsx @@ -3,6 +3,7 @@ import type React from 'react'; import { MediaType, selectCurrentClanId, soundEffectActions, useAppDispatch } from '@mezon/store'; import { handleUploadEmoticon, useMezon } from '@mezon/transport'; import { Icons, Modal } from '@mezon/ui'; +import { generateE2eId } from '@mezon/utils'; import { Snowflake } from '@theinternetfolks/snowflake'; import { useEffect, useRef, useState } from 'react'; import { useSelector } from 'react-redux'; @@ -214,6 +215,7 @@ const ModalUploadSound = ({ sound, onSuccess, onClose }: ModalUploadSoundProps) accept="audio/mp3,audio/mpeg,audio/wav" className="absolute inset-0 w-full h-full opacity-0 cursor-pointer z-10" onChange={handleFileChange} + data-e2e={generateE2eId('clan_page.settings.upload.voice_sticker_input')} />
-

{error}

+

{error}

)} diff --git a/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/index.tsx b/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/index.tsx index 7f7efc072f..cd1ca3966d 100644 --- a/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/index.tsx +++ b/libs/components/src/lib/components/ClanSettings/SettingSoundEffect/index.tsx @@ -11,6 +11,7 @@ import { useAppSelector } from '@mezon/store'; import { Icons } from '@mezon/ui'; +import { generateE2eId } from '@mezon/utils'; import type { ClanSticker } from 'mezon-js'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -94,9 +95,7 @@ const SettingSoundEffect = () => {
{t('main.uploadInstructions')}
-

- {t('main.fileRequirements')} -

+

{t('main.fileRequirements')}

@@ -111,6 +110,7 @@ const SettingSoundEffect = () => { setSelectedSound(null); setShowModal(true); }} + data-e2e={generateE2eId('clan_page.settings.voice_sticker.button_upload')} > {t('main.uploadSound')} diff --git a/libs/components/src/lib/components/ClanSettings/SettingSticker/ModalEditSticker.tsx b/libs/components/src/lib/components/ClanSettings/SettingSticker/ModalEditSticker.tsx index 6ea4a0f742..01553f61a1 100644 --- a/libs/components/src/lib/components/ClanSettings/SettingSticker/ModalEditSticker.tsx +++ b/libs/components/src/lib/components/ClanSettings/SettingSticker/ModalEditSticker.tsx @@ -3,7 +3,7 @@ import { createSticker, emojiSuggestionActions, selectCurrentClanId, updateStick import { handleUploadEmoticon, useMezon } from '@mezon/transport'; import { Button, ButtonLoading, Checkbox, Icons, InputField } from '@mezon/ui'; -import { LIMIT_SIZE_UPLOAD_IMG, fileTypeImage, resizeFileImage, sanitizeUrlSecure } from '@mezon/utils'; +import { LIMIT_SIZE_UPLOAD_IMG, fileTypeImage, generateE2eId, resizeFileImage, sanitizeUrlSecure } from '@mezon/utils'; import { Snowflake } from '@theinternetfolks/snowflake'; import type { ClanEmoji, ClanSticker } from 'mezon-js'; import type { ApiClanStickerAddRequest, MezonUpdateClanEmojiByIdBody } from 'mezon-js/api.gen'; @@ -299,6 +299,7 @@ const ModalSticker = ({ graphic, handleCloseModal, type }: ModalEditStickerProps onChange={handleChooseFile} ref={fileRef} onKeyDown={handleOnEnter} + data-e2e={generateE2eId('clan_page.settings.upload.emoji_input')} /> )} diff --git a/libs/components/src/lib/components/DragAndDrop/TooManyUpload.tsx b/libs/components/src/lib/components/DragAndDrop/TooManyUpload.tsx index e04318b5b5..eada144f72 100644 --- a/libs/components/src/lib/components/DragAndDrop/TooManyUpload.tsx +++ b/libs/components/src/lib/components/DragAndDrop/TooManyUpload.tsx @@ -1,6 +1,6 @@ import { useEscapeKey } from '@mezon/core'; import { Icons } from '@mezon/ui'; -import { MAX_FILE_ATTACHMENTS, UploadLimitReason } from '@mezon/utils'; +import { MAX_FILE_ATTACHMENTS, UploadLimitReason, generateE2eId } from '@mezon/utils'; import { useMemo } from 'react'; interface ITooManyUploadProps { @@ -24,7 +24,7 @@ const TooManyUpload = ({ togglePopup, limitReason, limitSize }: ITooManyUploadPr }; }, [limitReason]); return ( -
+
@@ -32,10 +32,10 @@ const TooManyUpload = ({ togglePopup, limitReason, limitSize }: ITooManyUploadPr
-

{title}

+

{title}

-

{content}

+

{content}

diff --git a/libs/components/src/lib/components/EnableComunityClan/index.tsx b/libs/components/src/lib/components/EnableComunityClan/index.tsx index 5372155baa..53052678c9 100644 --- a/libs/components/src/lib/components/EnableComunityClan/index.tsx +++ b/libs/components/src/lib/components/EnableComunityClan/index.tsx @@ -1,4 +1,5 @@ import { selectIsCommunityEnabled, useAppSelector } from '@mezon/store'; +import { generateE2eId } from '@mezon/utils'; import { useTranslation } from 'react-i18next'; const EnableComunity = ({ onEnable, clanId }: { onEnable: () => void; clanId?: string }) => { @@ -32,6 +33,7 @@ const EnableComunity = ({ onEnable, clanId }: { onEnable: () => void; clanId?: s