diff --git a/src/core_modules/capture-core/components/WidgetAssignee/DisplayMode.component.js b/src/core_modules/capture-core/components/WidgetAssignee/DisplayMode.component.js
index 41216aa6ad..621a1d489d 100644
--- a/src/core_modules/capture-core/components/WidgetAssignee/DisplayMode.component.js
+++ b/src/core_modules/capture-core/components/WidgetAssignee/DisplayMode.component.js
@@ -17,6 +17,10 @@ const styles = () => ({
assignButton: {
margin: spacers.dp4,
},
+ avatarWrapper: {
+ display: 'flex',
+ alignItems: 'center',
+ },
avatar: {
margin: spacers.dp4,
},
@@ -26,15 +30,16 @@ type Props = {
assignee: Assignee | null,
onEdit: () => {},
writeAccess: boolean,
+ avatarId?: string,
...CssClasses,
};
-const DisplayModePlain = ({ assignee, onEdit, writeAccess, classes }: Props) => (
+const DisplayModePlain = ({ assignee, onEdit, writeAccess, avatarId, classes }: Props) => (
assignee ? (
-
+
{i18n.t('Assigned to')}
-
+
{assignee.name}
({
},
});
-const WidgetAssigneePlain = ({ assignee, writeAccess, onSet, classes }: PlainProps) => {
+const WidgetAssigneePlain = ({ assignee, writeAccess, onSet, avatarId, classes }: PlainProps) => {
const [open, setOpenStatus] = useState(true);
const [editMode, setEditMode] = useState(false);
@@ -46,7 +46,12 @@ const WidgetAssigneePlain = ({ assignee, writeAccess, onSet, classes }: PlainPro
{editMode ? (
setEditMode(false)} onSet={handleSet} assignee={assignee} />
) : (
- setEditMode(true)} writeAccess={writeAccess} />
+ setEditMode(true)}
+ writeAccess={writeAccess}
+ avatarId={avatarId}
+ />
)}
diff --git a/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.container.js b/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.container.js
index 99769c8656..e6ea6dfd0b 100644
--- a/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.container.js
+++ b/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.container.js
@@ -4,10 +4,12 @@ import { useDataMutation } from '@dhis2/app-runtime';
import type { Props, Assignee } from './WidgetAssignee.types';
import { WidgetAssigneeComponent } from './WidgetAssignee.component';
import { convertClientToServer } from './converter';
+import { useUserAvatar } from './hooks';
const WidgetAssigneeWithHooks = (props: Props) => {
const { assignee, writeAccess, getSaveContext, onSave, onSaveError } = props;
const prevAssignee = useRef(assignee);
+ const { avatarId } = useUserAvatar(assignee?.id);
const [updateMutation] = useDataMutation(
{
@@ -32,7 +34,7 @@ const WidgetAssigneeWithHooks = (props: Props) => {
[updateMutation, getSaveContext, onSave, assignee],
);
- return
;
+ return
;
};
export const WidgetAssignee = (props: Props) => {
diff --git a/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.types.js b/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.types.js
index 03cffa05ad..33eb25a570 100644
--- a/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.types.js
+++ b/src/core_modules/capture-core/components/WidgetAssignee/WidgetAssignee.types.js
@@ -21,5 +21,6 @@ export type PlainProps = {|
assignee: Assignee | null,
writeAccess: boolean,
onSet: (user: Assignee | null) => void,
+ avatarId?: string,
...CssClasses,
|};
diff --git a/src/core_modules/capture-core/components/WidgetAssignee/hooks/index.js b/src/core_modules/capture-core/components/WidgetAssignee/hooks/index.js
new file mode 100644
index 0000000000..d6927c9a30
--- /dev/null
+++ b/src/core_modules/capture-core/components/WidgetAssignee/hooks/index.js
@@ -0,0 +1,2 @@
+// @flow
+export { useUserAvatar } from './useUserAvatar';
diff --git a/src/core_modules/capture-core/components/WidgetAssignee/hooks/useUserAvatar.js b/src/core_modules/capture-core/components/WidgetAssignee/hooks/useUserAvatar.js
new file mode 100644
index 0000000000..fd6d12d375
--- /dev/null
+++ b/src/core_modules/capture-core/components/WidgetAssignee/hooks/useUserAvatar.js
@@ -0,0 +1,19 @@
+// @flow
+import { useApiMetadataQuery } from 'capture-core/utils/reactQueryHelpers';
+
+export const useUserAvatar = (userId?: string) => {
+ const queryKey = ['users', ...(userId ? [userId] : [])];
+ const queryFn = {
+ resource: 'users',
+ id: userId,
+ params: {
+ fields: 'avatar',
+ },
+ };
+ const queryOptions = { enabled: Boolean(userId) };
+ const { data } = useApiMetadataQuery
(queryKey, queryFn, queryOptions);
+
+ return {
+ avatarId: data?.avatar?.id,
+ };
+};