From edd3f73211b74786df280b8edaf7526f18945c59 Mon Sep 17 00:00:00 2001
From: Eemaan Amir <57627710+eemaanamir@users.noreply.github.com>
Date: Fri, 20 Jun 2025 12:18:53 +0500
Subject: [PATCH] feat: made user profile image visible (#778)
* feat: made user profile image visible
* refactor: updated selector name
* refactor: updated selector name
---
src/discussions/learners/data/selectors.js | 4 +++
.../learners/learner/LearnerAvatar.jsx | 31 ++++++++++++-------
.../comments/comment/CommentHeader.jsx | 4 +++
.../post-comments/comments/comment/Reply.jsx | 3 ++
src/discussions/posts/data/selectors.js | 4 +++
src/discussions/posts/post/PostHeader.jsx | 4 +++
6 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/src/discussions/learners/data/selectors.js b/src/discussions/learners/data/selectors.js
index 8b439e0f..bf3ea98e 100644
--- a/src/discussions/learners/data/selectors.js
+++ b/src/discussions/learners/data/selectors.js
@@ -12,3 +12,7 @@ export const selectUsernameSearch = () => state => state.learners.usernameSearch
export const selectLearnerSorting = () => state => state.learners.sortedBy;
export const selectLearnerNextPage = () => state => state.learners.nextPage;
+
+export const selectLearnerAvatar = author => state => (
+ state.learners.learnerProfiles[author]?.profileImage?.imageUrlLarge
+);
diff --git a/src/discussions/learners/learner/LearnerAvatar.jsx b/src/discussions/learners/learner/LearnerAvatar.jsx
index 567cc8e4..72bee0ff 100644
--- a/src/discussions/learners/learner/LearnerAvatar.jsx
+++ b/src/discussions/learners/learner/LearnerAvatar.jsx
@@ -2,19 +2,26 @@ import React from 'react';
import PropTypes from 'prop-types';
import { Avatar } from '@openedx/paragon';
+import { useSelector } from 'react-redux';
-const LearnerAvatar = ({ username }) => (
-
-);
+import { selectLearnerAvatar } from '../data/selectors';
+
+const LearnerAvatar = ({ username }) => {
+ const learnerAvatar = useSelector(selectLearnerAvatar(username));
+ return (
+
+ );
+};
LearnerAvatar.propTypes = {
username: PropTypes.string.isRequired,
diff --git a/src/discussions/post-comments/comments/comment/CommentHeader.jsx b/src/discussions/post-comments/comments/comment/CommentHeader.jsx
index 4da4483e..7877043b 100644
--- a/src/discussions/post-comments/comments/comment/CommentHeader.jsx
+++ b/src/discussions/post-comments/comments/comment/CommentHeader.jsx
@@ -3,10 +3,12 @@ import PropTypes from 'prop-types';
import { Avatar } from '@openedx/paragon';
import classNames from 'classnames';
+import { useSelector } from 'react-redux';
import { AvatarOutlineAndLabelColors } from '../../../../data/constants';
import { AuthorLabel } from '../../../common';
import { useAlertBannerVisible } from '../../../data/hooks';
+import { selectAuthorAvatar } from '../../../posts/data/selectors';
const CommentHeader = ({
author,
@@ -23,6 +25,7 @@ const CommentHeader = ({
lastEdit,
closed,
});
+ const authorAvatar = useSelector(selectAuthorAvatar(author));
return (
{
lastEdit,
closed,
});
+ const authorAvatar = useSelector(selectAuthorAvatar(author));
const handleDeleteConfirmation = useCallback(() => {
dispatch(removeComment(id));
@@ -121,6 +123,7 @@ const Reply = ({ responseId }) => {
state => state.threads.sortedBy;
export const selectThreadFilters = () => state => state.threads.filters;
export const selectThreadNextPage = () => state => state.threads.nextPage;
+
+export const selectAuthorAvatar = author => state => (
+ state.threads.avatars?.[author]?.profile.image
+);
diff --git a/src/discussions/posts/post/PostHeader.jsx b/src/discussions/posts/post/PostHeader.jsx
index eeb38878..a3b000c2 100644
--- a/src/discussions/posts/post/PostHeader.jsx
+++ b/src/discussions/posts/post/PostHeader.jsx
@@ -4,18 +4,21 @@ import PropTypes from 'prop-types';
import { Avatar, Badge, Icon } from '@openedx/paragon';
import { Question } from '@openedx/paragon/icons';
import classNames from 'classnames';
+import { useSelector } from 'react-redux';
import { useIntl } from '@edx/frontend-platform/i18n';
import { AvatarOutlineAndLabelColors, ThreadType } from '../../../data/constants';
import { AuthorLabel } from '../../common';
import { useAlertBannerVisible } from '../../data/hooks';
+import { selectAuthorAvatar } from '../data/selectors';
import messages from './messages';
export const PostAvatar = React.memo(({
author, postType, authorLabel, fromPostLink, read,
}) => {
const outlineColor = AvatarOutlineAndLabelColors[authorLabel];
+ const authorAvatars = useSelector(selectAuthorAvatar(author));
const avatarSize = useMemo(() => {
let size = '2rem';
@@ -60,6 +63,7 @@ export const PostAvatar = React.memo(({
width: avatarSize,
}}
alt={author}
+ src={authorAvatars?.imageUrlSmall}
/>
);