diff --git a/packages/flat-components/src/components/HomePage/HomePageHeroButton/index.tsx b/packages/flat-components/src/components/HomePage/HomePageHeroButton/index.tsx index 61a3793851d..997b284b9c5 100644 --- a/packages/flat-components/src/components/HomePage/HomePageHeroButton/index.tsx +++ b/packages/flat-components/src/components/HomePage/HomePageHeroButton/index.tsx @@ -33,7 +33,6 @@ export const HomePageHeroButton: React.FC = ({ {t(`home-page-hero-button-type.${type}`)} - {children} ); diff --git a/packages/flat-components/src/components/HomePage/RoomList/RoomListItem/index.tsx b/packages/flat-components/src/components/HomePage/RoomList/RoomListItem/index.tsx index de5e79524bc..d674584a33e 100644 --- a/packages/flat-components/src/components/HomePage/RoomList/RoomListItem/index.tsx +++ b/packages/flat-components/src/components/HomePage/RoomList/RoomListItem/index.tsx @@ -19,6 +19,7 @@ export interface RoomListItemProps { ownerAvatar?: string; generateAvatar?: (uid: string) => string; status: RoomStatusType; + isPmi?: boolean; isPeriodic?: boolean; menuActions?: Array> | null; primaryAction?: RoomListItemPrimaryAction | null; @@ -35,6 +36,7 @@ export function RoomListItem({ ownerAvatar, generateAvatar, status, + isPmi, isPeriodic, menuActions, primaryAction, @@ -75,6 +77,7 @@ export function RoomListItem({ {beginTime && format(beginTime, "yyyy/MM/dd")} {isPeriodic && `(${t("periodic")})`} + {isPmi && `(${t("pmi")})`}
void; onCancel: () => void; } @@ -24,6 +26,7 @@ export interface InviteModalProps { export const InviteModal: React.FC = ({ visible, room, + isPmi, periodicWeeks, userName, baseUrl, @@ -52,9 +55,8 @@ export const InviteModal: React.FC = ({ const onCopyClicked = (): void => { const basePrefixText = - t("invite-prefix", { userName, title }) + - "\n" + - (formattedTimeRange ? t("invite-begin-time", { time: formattedTimeRange }) : ""); + t(isPmi ? "pmi-invite-prefix" : "invite-prefix", { userName, title }) + + (formattedTimeRange ? "\n" + t("invite-begin-time", { time: formattedTimeRange }) : ""); const baseSuffixText = "\n" + "\n" + @@ -64,7 +66,7 @@ export const InviteModal: React.FC = ({ if (periodicUUID) { const content = periodicWeeks - ? t("repeat-weeks", { weeks: getWeekNames(periodicWeeks, language) }) + ? "\n" + t("repeat-weeks", { weeks: getWeekNames(periodicWeeks, language) }) : ""; onCopy(`${basePrefixText}${content}${baseSuffixText}`); @@ -84,7 +86,7 @@ export const InviteModal: React.FC = ({ onOk={onCopyClicked} >
- {t("invite-title", { userName })} + {t(isPmi ? "pmi-invite-title" : "invite-title", { userName })} {t("join-and-book-by-room-uuid")}
diff --git a/packages/flat-components/src/components/PeriodicRoomPage/MoreMenu.tsx b/packages/flat-components/src/components/PeriodicRoomPage/MoreMenu.tsx index d8081d04990..80270dec3dc 100644 --- a/packages/flat-components/src/components/PeriodicRoomPage/MoreMenu.tsx +++ b/packages/flat-components/src/components/PeriodicRoomPage/MoreMenu.tsx @@ -12,6 +12,7 @@ export interface MoreMenuProps { userName: string; inviteBaseUrl: string; isCreator: boolean; + isPmi?: boolean; onCopyInvitation: (text: string) => void; onCancelSubPeriodicRoom: () => void; jumpToRoomDetailPage: () => void; @@ -23,6 +24,7 @@ export const MoreMenu: React.FC = ({ userName, inviteBaseUrl, isCreator, + isPmi, onCopyInvitation, onCancelSubPeriodicRoom, jumpToRoomDetailPage, @@ -79,6 +81,7 @@ export const MoreMenu: React.FC = ({ /> ; userName: string; isCreator: boolean; @@ -31,6 +32,7 @@ export interface PeriodicRoomPanelProps { } export const PeriodicRoomPanel: React.FC = ({ + pmi, rooms, userName, inviteBaseUrl, @@ -127,6 +129,7 @@ export const PeriodicRoomPanel: React.FC = ({ jumpToModifyOrdinaryRoomPage( room.roomUUID, diff --git a/packages/flat-components/src/components/RoomDetailPage/RoomDetailFooter/index.tsx b/packages/flat-components/src/components/RoomDetailPage/RoomDetailFooter/index.tsx index c7b420ad69f..e60e6ac1b1b 100644 --- a/packages/flat-components/src/components/RoomDetailPage/RoomDetailFooter/index.tsx +++ b/packages/flat-components/src/components/RoomDetailPage/RoomDetailFooter/index.tsx @@ -16,6 +16,7 @@ export interface RoomDetailFooterProps { inviteBaseUrl: string; // repeated weeks for periodic rooms periodicWeeks?: Week[]; + isPmi?: boolean; onJoinRoom: () => void; onReplayRoom: () => void; onModifyRoom: () => void; @@ -31,6 +32,7 @@ export const RoomDetailFooter = /* @__PURE__ */ observer( isCreator, isPeriodicDetailsPage, periodicWeeks, + isPmi, onJoinRoom, onReplayRoom, onModifyRoom, @@ -89,6 +91,7 @@ export const RoomDetailFooter = /* @__PURE__ */ observer( {user.name} @@ -186,7 +188,9 @@ const Row = /* @__PURE__ */ observer(function Row({
) : ( - + {user.name} {isSelf && {t("me")}} diff --git a/packages/flat-components/src/components/UsersPanel/style.less b/packages/flat-components/src/components/UsersPanel/style.less index 6d8b37c21ac..f50ed5bccb5 100644 --- a/packages/flat-components/src/components/UsersPanel/style.less +++ b/packages/flat-components/src/components/UsersPanel/style.less @@ -141,6 +141,7 @@ display: inline-flex; gap: 4px; font-size: 14px; + overflow: hidden; } .users-panel-is-self { @@ -234,4 +235,4 @@ .users-panel-list-item::after { background-color: var(--grey-9); } -} \ No newline at end of file +} diff --git a/packages/flat-i18n/locales/en.json b/packages/flat-i18n/locales/en.json index 1bbe262c298..2ab40274f10 100644 --- a/packages/flat-i18n/locales/en.json +++ b/packages/flat-i18n/locales/en.json @@ -110,11 +110,12 @@ "periodic": "Periodic", "today": "Today", "tomorrow": "Tomorrow", - "pmi-invite-prefix": "{{userName}} invites you to join {{appName}} personal room", + "pmi-invite-prefix": "{{userName}} invites you to join {{appName}} PMI room\n\nRoom theme: {{title}}", "invite-begin-time": "Start time: {{time}}", "invite-prefix": "{{userName}} invites you to join the {{appName}} room\n\nRoom theme: {{title}}", "invite-suffix": "Room ID: {{uuid}}", "invite-title": "{{userName}} invite to join the {{appName}} room", + "pmi-invite-title": "{{userName}} invites you to join {{appName}} PMI room", "invite-join-link": "Join Link: {{link}}", "join-link": "Join Link", "repeat-weeks": "Repeat period: {{weeks}}", @@ -260,11 +261,13 @@ "begin": "Begin", "join-options": "Join Room Options", "create-room-default-title": "The room created by {{name}}", + "pmi-create-room-default-title": "The PMI room created by {{name}}", "turn-on-the-camera": "Camera", "turn-on-cursor-name": "Show cursor name of others", "enter-room-uuid": "Please enter the room ID", "turn-on-the-microphone": "Microphone", "schedule-room-default-title": "The room scheduled by {{name}}", + "pmi-schedule-room-default-title": "The PMI room scheduled by {{name}}", "delete-room-records": "Delete room record", "delete-room-records-tips": "Are you sure to delete the current room record?", "repeat-frequency": "Every {{week}}", @@ -529,6 +532,7 @@ "user-account": "Account", "user-profile": "My Profile", "username": "Name", + "pmi": "PMI", "turn-on-the-pmi": "Use PMI", "copy-pmi": "Copy PMI", "wait-for-teacher-to-enter": "The room hasn't started yet. Please wait for the teacher to enter", @@ -536,8 +540,8 @@ "user-pmi-drained": "User PMI used up, please contact the administrator", "pmi-room-exist": "PMI room already exists, please cancel existing PMI room first", "pmi-help": "Your own room number, you can use this fixed number to create a room", - "personal-room-id": "Personal Room ID", - "personal-room-link": "Personal Room Link", + "personal-room-id": "PMI", + "personal-room-link": "PMI Link", "upload-avatar": "Upload Avatar", "upload-avatar-failed": "Upload avatar failed", "bind-wechat": "Bind WeChat", diff --git a/packages/flat-i18n/locales/zh-CN.json b/packages/flat-i18n/locales/zh-CN.json index bf84d64013f..5b964d2de38 100644 --- a/packages/flat-i18n/locales/zh-CN.json +++ b/packages/flat-i18n/locales/zh-CN.json @@ -110,14 +110,15 @@ "all-loaded": "已全部加载", "no-record": "暂无记录", "no-room": "暂无房间", - "pmi-invite-prefix": "{{userName}} 邀请你加入 {{appName}} 个人房间", - "invite-prefix": "{{userName}} 邀请你加入 {{appName}} 房间\n房间主题:{{title}}\n", - "invite-begin-time": "开始时间:{{time}}\n", + "pmi-invite-prefix": "{{userName}} 邀请你加入 {{appName}} 个人房间\n\n房间主题:{{title}}", + "invite-prefix": "{{userName}} 邀请你加入 {{appName}} 房间\n\n房间主题:{{title}}", + "invite-begin-time": "开始时间:{{time}}", "invite-suffix": "房间号:{{uuid}}", "invite-join-link": "加入链接:{{link}}", "join-link": "加入链接", "repeat-weeks": "重复周期:{{weeks}}", - "invite-title": "{{userName}} 邀请加入 {{appName}} 房间", + "invite-title": "{{userName}} 邀请你加入 {{appName}} 房间", + "pmi-invite-title": "{{userName}} 邀请你加入 {{appName}} 个人房间", "join-and-book-by-room-uuid": "可通过房间号加入和预约", "room-theme": "房间主题", "room-uuid": "房间号", @@ -258,6 +259,7 @@ "delete-records": "删除记录", "history": "历史记录", "create-room-default-title": "{{name}} 创建的房间", + "pmi-create-room-default-title": "{{name}} 创建的个人房间", "begin": "开始", "join-options": "加入房间选项", "turn-on-the-camera": "开启摄像头", @@ -265,6 +267,7 @@ "enter-room-uuid": "请输入房间号", "turn-on-the-microphone": "开启麦克风", "schedule-room-default-title": "{{name}} 预定的房间", + "pmi-schedule-room-default-title": "{{name}} 预定的个人房间", "delete-room-records": "删除房间记录", "delete-room-records-tips": "确定删除当前房间记录?", "view-all-rooms-in-periodic-rooms": "查看全部 ({{count}}) 场房间", @@ -529,6 +532,7 @@ "user-account": "账号安全", "user-profile": "我的资料", "username": "昵称", + "pmi": "个人房间", "turn-on-the-pmi": "使用个人房间号", "copy-pmi": "复制个人房间信息", "wait-for-teacher-to-enter": "房间未开始,请等待老师进入", diff --git a/packages/flat-pages/src/HomePage/MainRoomListPanel/MainRoomList.tsx b/packages/flat-pages/src/HomePage/MainRoomListPanel/MainRoomList.tsx index f2000caa961..d7ddd899129 100644 --- a/packages/flat-pages/src/HomePage/MainRoomListPanel/MainRoomList.tsx +++ b/packages/flat-pages/src/HomePage/MainRoomListPanel/MainRoomList.tsx @@ -137,6 +137,7 @@ export const MainRoomList = observer(function MainRoomList({ endTime={endTime} generateAvatar={generateAvatar} isPeriodic={!!room.periodicUUID} + isPmi={room.inviteCode === globalStore.pmi} menuActions={getSubActions(room)} ownerAvatar={room.ownerAvatarURL} ownerName={room.ownerName} @@ -231,6 +232,7 @@ export const MainRoomList = observer(function MainRoomList({ {currentRoom && ( (function CreateRoomBox const sp = useSafePromise(); const globalStore = useContext(GlobalStoreContext); const preferencesStore = useContext(PreferencesStoreContext); - const pushHistory = usePushHistory(); const [form] = Form.useForm(); @@ -54,7 +51,7 @@ export const CreateRoomBox = observer(function CreateRoomBox const [isShowModal, showModal] = useState(false); const [isFormValidated, setIsFormValidated] = useState(false); - const [pmi, hasPmi] = [globalStore.pmi, useMemo(() => !!globalStore.pmi, [globalStore.pmi])]; + const { pmi } = globalStore; // if there exists pmi room, it can not be selected const defaultPmi = useMemo( @@ -62,11 +59,6 @@ export const CreateRoomBox = observer(function CreateRoomBox [globalStore.pmiRoomExist, preferencesStore.autoPmiOn], ); - const canEnterRoomDirectly = useMemo( - () => preferencesStore.autoPmiOn && globalStore.pmiRoomExist, - [globalStore.pmiRoomExist, preferencesStore.autoPmiOn], - ); - // @TODO: need to remove region from preferences store const [roomRegion] = useState(preferencesStore.getRegion()); @@ -75,7 +67,9 @@ export const CreateRoomBox = observer(function CreateRoomBox const defaultValues: CreateRoomFormValues = { roomTitle: globalStore.userInfo?.name - ? t("create-room-default-title", { name: globalStore.userInfo.name }) + ? t(`${defaultPmi ? "pmi-" : ""}create-room-default-title`, { + name: globalStore.userInfo.name, + }) : "", roomType: RoomType.BigClass, autoMicOn: preferencesStore.autoMicOn, @@ -84,14 +78,10 @@ export const CreateRoomBox = observer(function CreateRoomBox }; useEffect(() => { - const checkPmi = (): void => { - if (!hasPmi) { - globalStore.updatePmi(); - } - }; - - checkPmi(); - }, [hasPmi, globalStore]); + if (!globalStore.pmi) { + globalStore.updatePmi(); + } + }, [globalStore]); useEffect(() => { let ticket = NaN; @@ -112,7 +102,7 @@ export const CreateRoomBox = observer(function CreateRoomBox const handleCopy = useCallback( (id: string) => { const copyText = - t("pmi-invite-prefix", { + t("pmi-invite-title", { userName: globalStore.userInfo?.name, }) + "\n" + @@ -129,28 +119,15 @@ export const CreateRoomBox = observer(function CreateRoomBox ); const handleCreateRoom = (): void => { - if (canEnterRoomDirectly) { - // enter room directly - onJoinRoom(globalStore.pmiRoomUUID); - } else { - form.setFieldsValue(defaultValues); - showModal(true); - formValidateStatus(); - } - }; - - const onJoinRoom = async (roomUUID: string): Promise => { - if (globalStore.isTurnOffDeviceTest || window.isElectron) { - await joinRoomHandler(roomUUID, pushHistory); - } else { - pushHistory(RouteNameType.DevicesTestPage, { roomUUID }); - } + form.setFieldsValue(defaultValues); + showModal(true); + formValidateStatus(); }; return ( <> - {hasPmi && ( + {!!pmi && ( (function CreateRoomBox }): React.ReactNode { return ( updateAutoPmiOn(!autoPmiOn)} diff --git a/packages/flat-pages/src/PeriodicRoomDetailPage/index.tsx b/packages/flat-pages/src/PeriodicRoomDetailPage/index.tsx index 80ecf6cce5f..d7940f7e0a3 100644 --- a/packages/flat-pages/src/PeriodicRoomDetailPage/index.tsx +++ b/packages/flat-pages/src/PeriodicRoomDetailPage/index.tsx @@ -143,6 +143,7 @@ export const PeriodicRoomDetailPage = observer<{}>(function PeriodicRoomDetailPa jumpToModifyPeriodicRoomPage={jumpToModifyPeriodicRoomPage} jumpToRoomDetailPage={jumpToRoomDetailPage} periodicInfo={periodicInfo.periodic} + pmi={globalStore.pmi} rooms={rooms} userName={ownerName} onCancelPeriodicRoom={onCancelPeriodicRoom} diff --git a/packages/flat-pages/src/RoomDetailPage/index.tsx b/packages/flat-pages/src/RoomDetailPage/index.tsx index e34641365fb..a10f6536501 100644 --- a/packages/flat-pages/src/RoomDetailPage/index.tsx +++ b/packages/flat-pages/src/RoomDetailPage/index.tsx @@ -130,6 +130,7 @@ export const RoomDetailPage = observer(function RoomDetailPage() { inviteBaseUrl={FLAT_WEB_BASE_URL} isCreator={isCreator} isPeriodicDetailsPage={false} + isPmi={roomInfo.inviteCode === globalStore.pmi} jumpToPeriodicRoomDetailPage={jumpToPeriodicRoomDetailPage} periodicWeeks={periodicInfo?.periodic.weeks} room={roomInfo} diff --git a/packages/flat-pages/src/UserScheduledPage/index.tsx b/packages/flat-pages/src/UserScheduledPage/index.tsx index 154fed278c4..08b4ab5f598 100644 --- a/packages/flat-pages/src/UserScheduledPage/index.tsx +++ b/packages/flat-pages/src/UserScheduledPage/index.tsx @@ -47,7 +47,9 @@ export const UserScheduledPage = observer(function UserScheduledPage() { const scheduleBeginTime = getInitialBeginTime(); return { title: globalStore.userInfo?.name - ? t("schedule-room-default-title", { name: globalStore.userInfo.name }) + ? t(`${defaultPmi ? "pmi-" : ""}schedule-room-default-title`, { + name: globalStore.userInfo.name, + }) : "", type: RoomType.BigClass, isPeriodic: false, diff --git a/packages/flat-pages/src/components/Modal/InviteModal.tsx b/packages/flat-pages/src/components/Modal/InviteModal.tsx index 5f4bbfb0ad2..320f385628c 100644 --- a/packages/flat-pages/src/components/Modal/InviteModal.tsx +++ b/packages/flat-pages/src/components/Modal/InviteModal.tsx @@ -46,6 +46,7 @@ export const InviteModal = observer(function InviteModal({ return (