perf: 优化topic在多回复时的预览体验

pull/70/head
moonrailgun 2 years ago
parent 43969e23dd
commit 206b90d026

@ -1285,11 +1285,16 @@ importers:
server/plugins/com.msgbyte.topic/web/plugins/com.msgbyte.topic: server/plugins/com.msgbyte.topic/web/plugins/com.msgbyte.topic:
specifiers: specifiers:
'@types/lodash': ^4.14.191
'@types/styled-components': ^5.1.26 '@types/styled-components': ^5.1.26
lodash: ^4.17.21
react: 18.2.0 react: 18.2.0
styled-components: ^5.3.6 styled-components: ^5.3.6
zustand: ^4.1.2 zustand: ^4.1.2
dependencies:
lodash: 4.17.21
devDependencies: devDependencies:
'@types/lodash': 4.14.191
'@types/styled-components': 5.1.26 '@types/styled-components': 5.1.26
react: 18.2.0 react: 18.2.0
styled-components: 5.3.6_react@18.2.0 styled-components: 5.3.6_react@18.2.0

@ -9,8 +9,12 @@
}, },
"devDependencies": { "devDependencies": {
"@types/styled-components": "^5.1.26", "@types/styled-components": "^5.1.26",
"@types/lodash": "^4.14.191",
"react": "18.2.0", "react": "18.2.0",
"styled-components": "^5.3.6", "styled-components": "^5.3.6",
"zustand": "^4.1.2" "zustand": "^4.1.2"
},
"dependencies": {
"lodash": "^4.17.21"
} }
} }

@ -7,7 +7,7 @@ import {
} from '@capital/common'; } from '@capital/common';
import { import {
IconBtn, IconBtn,
Input, TextArea,
UserName, UserName,
UserAvatar, UserAvatar,
MessageAckContainer, MessageAckContainer,
@ -123,11 +123,14 @@ export const TopicCard: React.FC<{
{showReply && ( {showReply && (
<ReplyBox> <ReplyBox>
<Input <TextArea
autoFocus autoFocus
placeholder={Translate.replyThisTopic} placeholder={Translate.replyThisTopic}
disabled={loading} disabled={loading}
value={comment} value={comment}
row={2}
maxLength={1000}
showCount={true}
onChange={(e) => setComment(e.target.value)} onChange={(e) => setComment(e.target.value)}
onPressEnter={handleComment} onPressEnter={handleComment}
/> />

@ -1,8 +1,10 @@
import { getMessageRender } from '@capital/common'; import { getMessageRender } from '@capital/common';
import { UserAvatar, UserName } from '@capital/component'; import { UserAvatar, UserName } from '@capital/component';
import React from 'react'; import React, { useState } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import type { GroupTopicComment } from '../types'; import type { GroupTopicComment } from '../types';
import _takeRight from 'lodash/takeRight';
import { Translate } from '../translate';
const Root = styled.div` const Root = styled.div`
padding: 10px; padding: 10px;
@ -14,6 +16,16 @@ const Root = styled.div`
background-color: rgba(0, 0, 0, 0.25); background-color: rgba(0, 0, 0, 0.25);
} }
.show-more {
font-size: 12px;
cursor: pointer;
text-align: center;
&:hover {
color: #40a9ff;
}
}
.comment-item { .comment-item {
display: flex; display: flex;
margin-bottom: 10px; margin-bottom: 10px;
@ -37,9 +49,21 @@ const Root = styled.div`
export const TopicComments: React.FC<{ export const TopicComments: React.FC<{
comments: GroupTopicComment[]; comments: GroupTopicComment[];
}> = React.memo((props) => { }> = React.memo((props) => {
const [showAllComment, setShowAllComment] = useState(false);
const comments = showAllComment
? props.comments
: _takeRight(props.comments, 2);
return ( return (
<Root> <Root>
{props.comments.map((comment) => ( {props.comments.length > 2 && !showAllComment && (
<div className="show-more" onClick={() => setShowAllComment(true)}>
{Translate.loadMore}...
</div>
)}
{comments.map((comment) => (
<div key={comment.id} className="comment-item"> <div key={comment.id} className="comment-item">
<div className="left"> <div className="left">
<UserAvatar userId={comment.author} size={24} /> <UserAvatar userId={comment.author} size={24} />

Loading…
Cancel
Save