mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
Merge branch 'codex/fix/media-load-failure-alert'
# Conflicts: # public/translations/ar/default.json # public/translations/bn/default.json # public/translations/cs/default.json # public/translations/da/default.json # public/translations/de/default.json # public/translations/el/default.json # public/translations/en/default.json # public/translations/es/default.json # public/translations/fa/default.json # public/translations/fi/default.json # public/translations/fil/default.json # public/translations/fr/default.json # public/translations/he/default.json # public/translations/hi/default.json # public/translations/hu/default.json # public/translations/id/default.json # public/translations/it/default.json # public/translations/ja/default.json # public/translations/ko/default.json # public/translations/mr/default.json # public/translations/nl/default.json # public/translations/no/default.json # public/translations/pl/default.json # public/translations/pt/default.json # public/translations/ro/default.json # public/translations/ru/default.json # public/translations/sq/default.json # public/translations/sv/default.json # public/translations/te/default.json # public/translations/th/default.json # public/translations/tr/default.json # public/translations/uk/default.json # public/translations/ur/default.json # public/translations/vi/default.json # public/translations/zh/default.json
This commit is contained in:
@@ -25,7 +25,7 @@ import useSafeAccountComment from '../../hooks/use-safe-account-comment';
|
||||
import { useCurrentTime } from '../../hooks/use-current-time';
|
||||
import { useBoardPseudonymityMode } from '../../hooks/use-board-pseudonymity-mode';
|
||||
import CommentContent from '../comment-content';
|
||||
import CommentMedia from '../comment-media';
|
||||
import CommentMedia, { MediaLoadFailureInfo } from '../comment-media';
|
||||
import FailedPublishNotice from '../failed-publish-notice';
|
||||
import LoadingEllipsis from '../loading-ellipsis';
|
||||
import PostMenuMobile from './post-menu-mobile';
|
||||
@@ -71,7 +71,14 @@ const RepliesFooter = ({ hasMore, loadingString }: { hasMore: boolean; loadingSt
|
||||
// Store scroll position for replies virtuoso across navigations
|
||||
const lastVirtuosoStates: { [key: string]: StateSnapshot } = {};
|
||||
|
||||
const PostInfoAndMedia = ({ post, postReplyCount = 0, roles, threadNumber, postsByAuthorInThread }: PostProps & { postsByAuthorInThread?: Map<string, number> }) => {
|
||||
const PostInfoAndMedia = ({
|
||||
onMediaLoadFailureChange,
|
||||
post,
|
||||
postReplyCount = 0,
|
||||
roles,
|
||||
threadNumber,
|
||||
postsByAuthorInThread,
|
||||
}: PostProps & { onMediaLoadFailureChange?: (url: string | undefined) => void; postsByAuthorInThread?: Map<string, number> }) => {
|
||||
const { t } = useTranslation();
|
||||
const directories = useDirectories();
|
||||
const resolvedPost = withResolvedCommentCommunityAddress(post);
|
||||
@@ -444,12 +451,22 @@ const PostInfoAndMedia = ({ post, postReplyCount = 0, roles, threadNumber, posts
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{(hasThumbnail || link) && !(deleted || removed || purged) && <PostMediaContent key={cid} post={resolvedPost} link={link} />}
|
||||
{(hasThumbnail || link) && !(deleted || removed || purged) && (
|
||||
<PostMediaContent key={cid} onMediaLoadFailureChange={onMediaLoadFailureChange} post={resolvedPost} link={link} />
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const PostMediaContent = ({ post, link }: { post: Comment | undefined; link: string }) => {
|
||||
const PostMediaContent = ({
|
||||
onMediaLoadFailureChange,
|
||||
post,
|
||||
link,
|
||||
}: {
|
||||
onMediaLoadFailureChange?: (url: string | undefined) => void;
|
||||
post: Comment | undefined;
|
||||
link: string;
|
||||
}) => {
|
||||
const [showThumbnail, setShowThumbnail] = useState(true);
|
||||
const { thumbnailUrl, linkWidth, linkHeight, spoiler, deleted, removed, parentCid } = post || {};
|
||||
const purged = post?.commentModeration?.purged;
|
||||
@@ -468,6 +485,7 @@ const PostMediaContent = ({ post, link }: { post: Comment | undefined; link: str
|
||||
setShowThumbnail={setShowThumbnail}
|
||||
parentCid={parentCid}
|
||||
spoiler={spoiler}
|
||||
onMediaLoadFailureChange={onMediaLoadFailureChange}
|
||||
/>
|
||||
)
|
||||
);
|
||||
@@ -539,6 +557,8 @@ const Reply = ({
|
||||
onRetry={canRetryFailedPost ? onRetryFailedPost : undefined}
|
||||
/>
|
||||
) : undefined;
|
||||
const [failedMediaUrl, setFailedMediaUrl] = useState<string | undefined>();
|
||||
const mediaLoadFailureInfo = failedMediaUrl && failedMediaUrl === post?.link ? <MediaLoadFailureInfo url={failedMediaUrl} /> : undefined;
|
||||
|
||||
return (
|
||||
<div className={`${styles.replyMobile} ${disableDeferredLayout ? styles.pretextVirtualizedReply : ''}`}>
|
||||
@@ -549,9 +569,16 @@ const Reply = ({
|
||||
data-author-address={author?.shortAddress}
|
||||
data-post-cid={postCid}
|
||||
>
|
||||
<PostInfoAndMedia post={post} postReplyCount={postReplyCount} postsByAuthorInThread={postsByAuthorInThread} roles={roles} threadNumber={threadNumber} />
|
||||
<PostInfoAndMedia
|
||||
onMediaLoadFailureChange={setFailedMediaUrl}
|
||||
post={post}
|
||||
postReplyCount={postReplyCount}
|
||||
postsByAuthorInThread={postsByAuthorInThread}
|
||||
roles={roles}
|
||||
threadNumber={threadNumber}
|
||||
/>
|
||||
{post && !hidden && (!(removed || deleted || purged) || ((removed || deleted) && reason) || purged) && (
|
||||
<CommentContent comment={post} prependContent={failedPublishNotice} />
|
||||
<CommentContent appendContent={mediaLoadFailureInfo} comment={post} prependContent={failedPublishNotice} />
|
||||
)}
|
||||
{post && <ReplyBacklinks post={post} quotedByMap={quotedByMap} directRepliesByParentCid={directRepliesByParentCid} />}
|
||||
</div>
|
||||
@@ -684,6 +711,8 @@ const PostMobile = ({
|
||||
onRetry={canRetryFailedPost ? onRetryFailedPost : undefined}
|
||||
/>
|
||||
) : undefined;
|
||||
const [failedMediaUrl, setFailedMediaUrl] = useState<string | undefined>();
|
||||
const mediaLoadFailureInfo = failedMediaUrl && failedMediaUrl === resolvedPost?.link ? <MediaLoadFailureInfo url={failedMediaUrl} /> : undefined;
|
||||
|
||||
// Author-deleted replies are hidden from thread replies; moderator removals still render their placeholder.
|
||||
const filteredReplies = useMemo(() => filterRepliesForDisplay(freshRepliesForRender), [freshRepliesForRender]);
|
||||
@@ -840,13 +869,14 @@ const PostMobile = ({
|
||||
>
|
||||
{shouldShowSnow() && <img src='assets/xmashat.gif' className={styles.xmasHat} alt='' />}
|
||||
<PostInfoAndMedia
|
||||
onMediaLoadFailureChange={setFailedMediaUrl}
|
||||
post={resolvedPost}
|
||||
postReplyCount={replyCount}
|
||||
postsByAuthorInThread={postsByAuthorInThread}
|
||||
roles={roles}
|
||||
threadNumber={resolvedPost?.number}
|
||||
/>
|
||||
{resolvedPost && <CommentContent comment={resolvedPost} prependContent={failedPublishNotice} />}
|
||||
{resolvedPost && <CommentContent appendContent={mediaLoadFailureInfo} comment={resolvedPost} prependContent={failedPublishNotice} />}
|
||||
{resolvedPost && <ReplyBacklinks post={resolvedPost} quotedByMap={quotedByMap} directRepliesByParentCid={directRepliesByParentCid} />}
|
||||
</div>
|
||||
{!isInPostView && !isInPendingPostView && (showReplies || isModQueue) && (
|
||||
|
||||
Reference in New Issue
Block a user