From e77d7343ad637e3ffdf0e3650b1d87d08b343fdb Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Thu, 23 Mar 2023 10:32:37 +0800 Subject: [PATCH 1/7] feat: reply message deleted tip --- public/locales/en/chat.json | 2 ++ public/locales/zh/chat.json | 2 ++ src/common/component/Message/Reply.tsx | 11 ++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/public/locales/en/chat.json b/public/locales/en/chat.json index 0b483f42..3622e118 100644 --- a/public/locales/en/chat.json +++ b/public/locales/en/chat.json @@ -41,6 +41,8 @@ "new_msg": "{{num}} new messages", "mark_read": "Mark As Read", + "reply_msg_del": "This message has been deleted.", + "file": "file", "image": "image", "forward": "forward" diff --git a/public/locales/zh/chat.json b/public/locales/zh/chat.json index b95ad249..21a588f5 100644 --- a/public/locales/zh/chat.json +++ b/public/locales/zh/chat.json @@ -42,6 +42,8 @@ "new_msg": "{{num}} 条新消息", "mark_read": "设为已读", + "reply_msg_del": "被回复的消息已删除!", + "file": "文件", "image": "图片", "forward": "转发" diff --git a/src/common/component/Message/Reply.tsx b/src/common/component/Message/Reply.tsx index 3935d6d8..2bca8630 100644 --- a/src/common/component/Message/Reply.tsx +++ b/src/common/component/Message/Reply.tsx @@ -8,8 +8,10 @@ import LinkifyText from '../LinkifyText'; import Avatar from "../Avatar"; import { useAppSelector } from "../../../app/store"; import { MessagePayload } from "../../../app/slices/message"; +import { useTranslation } from "react-i18next"; const renderContent = (data: MessagePayload) => { + const { content_type, content, thumbnail, properties } = data; let res = null; switch (content_type) { @@ -56,6 +58,7 @@ interface ReplyProps { } const Reply: FC = ({ mid, interactive = true }) => { + const { t } = useTranslation("chat"); const { data, users } = useAppSelector((store) => { return { data: store.message[mid], users: store.users.byId }; }); @@ -74,7 +77,13 @@ const Reply: FC = ({ mid, interactive = true }) => { }, 3000); } }; - if (!data) return null; + if (!data) return
{t("reply_msg_del")}
; const currUser = users[data.from_uid || 0]; if (!currUser) return null; From fe55f49bfcc8ab27eec7afcd0f7ed14bdcaad68e Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Thu, 23 Mar 2023 11:07:55 +0800 Subject: [PATCH 2/7] chore: update tailwind setting and unread badge --- src/routes/chat/SessionList/Session.tsx | 2 +- tailwind.config.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/chat/SessionList/Session.tsx b/src/routes/chat/SessionList/Session.tsx index 1d425f57..e44b293f 100644 --- a/src/routes/chat/SessionList/Session.tsx +++ b/src/routes/chat/SessionList/Session.tsx @@ -144,7 +144,7 @@ const Session: FC = ({
0 ? `w-36` : ``)}>{renderPreviewMessage(previewMsg)} {unreads > 0 && !isCurrentPath && ( - 99 && 'w-1.5 !h-1.5 p-0 min-w-[unset]', muted && "bg-gray-500")}> + 99 && 'w-1.5 !h-1.5 p-0 min-w-[unset]', muted && "bg-gray-500")}> {unreads > 99 ? null : unreads} )} diff --git a/tailwind.config.js b/tailwind.config.js index f379de9f..dbab1e2b 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -4,6 +4,9 @@ module.exports = { content: ["./src/**/*.{js,jsx,ts,tsx}", "./public/*.html"], theme: { extend: { + fontSize: { + xs: ["0.75rem", "1.125rem"] + }, colors: { primary: { 25: "#F5FEFF", From bf63ec6d12dc6dd4df2a467047b9b1ddf089618f Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Thu, 23 Mar 2023 11:08:28 +0800 Subject: [PATCH 3/7] feat: continue in web when invite link redirected --- src/routes/reg/SignInLink.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/routes/reg/SignInLink.tsx b/src/routes/reg/SignInLink.tsx index 52a75c27..17f37bf7 100644 --- a/src/routes/reg/SignInLink.tsx +++ b/src/routes/reg/SignInLink.tsx @@ -1,16 +1,18 @@ import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; -import { NavLink } from 'react-router-dom'; +import { NavLink, useSearchParams } from 'react-router-dom'; import { isMobile } from '../../common/utils'; export default function SignInLink({ token }: { token?: string }) { const { t } = useTranslation("auth"); + let [searchParams] = useSearchParams(new URLSearchParams(location.search)); + const ctx = searchParams.get("ctx") ?? "app"; useEffect(() => { // 移动端访问,则跳转 - if (isMobile() && !!token) { + if (isMobile() && !!token && ctx == "app") { location.href = `https://join.voce.chat/download?link=${encodeURIComponent(`${location.origin}&magic_token=${token}`)}`; } - }, [token]); + }, [token, ctx]); return (
From 478c6c022ef953e7b9edff7bb625a63bc1a5e70a Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Thu, 23 Mar 2023 11:41:28 +0800 Subject: [PATCH 4/7] fix: join link in SignInLink --- src/routes/reg/SignInLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/reg/SignInLink.tsx b/src/routes/reg/SignInLink.tsx index 17f37bf7..bb993b97 100644 --- a/src/routes/reg/SignInLink.tsx +++ b/src/routes/reg/SignInLink.tsx @@ -10,7 +10,7 @@ export default function SignInLink({ token }: { token?: string }) { useEffect(() => { // 移动端访问,则跳转 if (isMobile() && !!token && ctx == "app") { - location.href = `https://join.voce.chat/download?link=${encodeURIComponent(`${location.origin}&magic_token=${token}`)}`; + location.href = `https://join.voce.chat/download?link=${encodeURIComponent(`${location.origin}?magic_token=${token}`)}`; } }, [token, ctx]); From bb37f1b2e6172ad1f30240d66f09a7b5b96e1c47 Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Thu, 23 Mar 2023 11:41:46 +0800 Subject: [PATCH 5/7] chore: updates --- package.json | 2 +- src/common/component/Message/Reply.tsx | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ffaf53eb..fa558ae8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vocechat-web", - "version": "0.3.53", + "version": "0.3.54", "private": true, "homepage": "https://voce.chat", "dependencies": { diff --git a/src/common/component/Message/Reply.tsx b/src/common/component/Message/Reply.tsx index 2bca8630..e851ca91 100644 --- a/src/common/component/Message/Reply.tsx +++ b/src/common/component/Message/Reply.tsx @@ -77,12 +77,11 @@ const Reply: FC = ({ mid, interactive = true }) => { }, 3000); } }; + const defaultClass = `flex items-start flex-col md:flex-row p-2 bg-gray-100 dark:bg-gray-900 rounded-lg gap-2 mb-1`; if (!data) return
{t("reply_msg_del")}
; const currUser = users[data.from_uid || 0]; if (!currUser) return null; @@ -91,7 +90,7 @@ const Reply: FC = ({ mid, interactive = true }) => {
Date: Thu, 23 Mar 2023 13:50:29 +0800 Subject: [PATCH 6/7] refactor: preload license info --- src/common/component/BlankPlaceholder.tsx | 4 +--- src/common/hook/useLicense.ts | 11 +++++++---- src/common/hook/usePreload.ts | 4 +++- src/routes/setting/License/index.tsx | 2 +- src/routes/setting/navs.tsx | 6 ++---- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/common/component/BlankPlaceholder.tsx b/src/common/component/BlankPlaceholder.tsx index 4268398f..97c73cda 100644 --- a/src/common/component/BlankPlaceholder.tsx +++ b/src/common/component/BlankPlaceholder.tsx @@ -12,7 +12,6 @@ import IconInvite from "../../assets/icons/placeholder.invite.svg"; import IconDownload from "../../assets/icons/placeholder.download.svg"; import UsersModal from "./UsersModal"; import { useAppSelector } from "../../app/store"; -import useLicense from "../hook/useLicense"; interface Props { @@ -25,11 +24,10 @@ const classes = { }; const BlankPlaceholder: FC = ({ type = "chat" }) => { const { t } = useTranslation("welcome"); - const { server, isAdmin } = useAppSelector((store) => { return { server: store.server, isAdmin: store.authData.user?.is_admin }; }); + const { server, isAdmin, upgraded } = useAppSelector((store) => { return { server: store.server, isAdmin: store.authData.user?.is_admin, upgraded: store.server.upgraded }; }); const [inviteModalVisible, setInviteModalVisible] = useState(false); const [createChannelVisible, setCreateChannelVisible] = useState(false); const [userListVisible, setUserListVisible] = useState(false); - const { upgraded } = useLicense(); const toggleChannelModalVisible = () => { setCreateChannelVisible((prev) => !prev); }; diff --git a/src/common/hook/useLicense.ts b/src/common/hook/useLicense.ts index 78aa249c..a88a7353 100644 --- a/src/common/hook/useLicense.ts +++ b/src/common/hook/useLicense.ts @@ -5,13 +5,15 @@ import { useUpsertLicenseMutation } from "../../app/services/server"; import { useAppSelector } from "../../app/store"; - -const useLicense = () => { +// type Props = { +// refetchOnMountOrArgChange?: boolean +// } | undefined +const useLicense = (refetchOnMountOrArgChange = false) => { const { userCount, isGuest, upgraded } = useAppSelector((store) => { return { userCount: store.users.ids.length, isGuest: store.authData.guest, upgraded: store.server.upgraded }; }); - const { data: license, refetch: refetchLicense } = useGetLicenseQuery(undefined, { - refetchOnMountOrArgChange: true, + const { data: license, refetch: refetchLicense, isLoading } = useGetLicenseQuery(undefined, { + refetchOnMountOrArgChange, skip: isGuest }); const [check, { isLoading: isChecking, isSuccess: checked }] = useCheckLicenseMutation(); @@ -40,6 +42,7 @@ const useLicense = () => { reachLimit: userCount >= lUserLimit, license, checked, + isLoading, checking: isChecking, upserting, upserted, diff --git a/src/common/hook/usePreload.ts b/src/common/hook/usePreload.ts index 9ee21266..c0a7ea71 100644 --- a/src/common/hook/usePreload.ts +++ b/src/common/hook/usePreload.ts @@ -7,11 +7,13 @@ import { useLazyGetServerQuery } from "../../app/services/server"; import useStreaming from "./useStreaming"; import { useAppSelector } from "../../app/store"; import { useLazyLoadMoreMessagesQuery } from "../../app/services/message"; +import useLicense from "./useLicense"; // type Props={ // guest?:boolean // } let preloadChannelMsgs = false; export default function usePreload() { + const { isLoading: loadingLicense } = useLicense(false); const [preloadChannelMessages] = useLazyLoadMoreMessagesQuery(); const { rehydrate, rehydrated } = useRehydrate(); const { @@ -85,7 +87,7 @@ export default function usePreload() { }, [canStreaming]); return { - loading: usersLoading || serverLoading || favoritesLoading || !rehydrated, + loading: usersLoading || serverLoading || favoritesLoading || !rehydrated || loadingLicense, error: usersError && serverError && favoritesError, success: usersSuccess && serverSuccess && favoritesSuccess, data: { diff --git a/src/routes/setting/License/index.tsx b/src/routes/setting/License/index.tsx index e6ad0a93..572cbfed 100644 --- a/src/routes/setting/License/index.tsx +++ b/src/routes/setting/License/index.tsx @@ -27,7 +27,7 @@ const Item = ({ label, data, foldable = false, ...rest }: ItemProps) => { export default function License() { const { t, i18n } = useTranslation("setting"); // const { t: ct } = useTranslation(); - const { license: licenseInfo, reachLimit, upsertLicense, upserting, upserted } = useLicense(); + const { license: licenseInfo, reachLimit, upsertLicense, upserting, upserted } = useLicense(true); const [modalVisible, setModalVisible] = useState(false); const [updateVisible, setUpdateVisible] = useState(false); const [base58Fold, setBase58Fold] = useState(true); diff --git a/src/routes/setting/navs.tsx b/src/routes/setting/navs.tsx index 261fe5b1..78c3293c 100644 --- a/src/routes/setting/navs.tsx +++ b/src/routes/setting/navs.tsx @@ -14,7 +14,6 @@ import Version from "../../common/component/Version"; // import ConfigAgora from "./config/Agora"; import { useAppSelector } from "../../app/store"; import ServerVersionChecker from "../../common/component/ServerVersionChecker"; -import useLicense from "../../common/hook/useLicense"; const navs = [ { @@ -98,10 +97,9 @@ const navs = [ ]; const useNavs = () => { - const { upgraded } = useLicense(); const { t } = useTranslation("setting"); - const loginUser = useAppSelector((store) => { - return store.authData.user; + const { loginUser, upgraded } = useAppSelector((store) => { + return { loginUser: store.authData.user, upgraded: store.server.upgraded }; }); const transformedNavs = navs.map(n => { const { name, items, ...rest } = n; From d5a0d52b4dedd1c740b0c93bfc467189a5f1dd1b Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Thu, 23 Mar 2023 21:56:40 +0800 Subject: [PATCH 7/7] chore: updates --- package.json | 2 +- src/app/config.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fa558ae8..057d4839 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vocechat-web", - "version": "0.3.54", + "version": "0.3.55", "private": true, "homepage": "https://voce.chat", "dependencies": { diff --git a/src/app/config.ts b/src/app/config.ts index 92325d40..2cc33e8c 100644 --- a/src/app/config.ts +++ b/src/app/config.ts @@ -12,8 +12,10 @@ let prices: Price[] = [ } ]; const official_dev = `https://dev.voce.chat`; -// const local_dev = `http://07333.qicp.vip:3030`; const local_dev = official_dev; + +// const local_dev = `http://07333.qicp.vip:3030`; +// const local_dev = `https://im.ttt.td`; // const local_dev = `http://localhost:3333`; export const BASE_ORIGIN = process.env.REACT_APP_RELEASE ? `${location.origin}`