Files
cinny/src/app/organisms/read-receipts/ReadReceipts.jsx
T

76 lines
2.2 KiB
React
Raw Normal View History

2021-08-16 17:37:29 +05:30
import React, { useState, useEffect } from 'react';
import initMatrix from '../../../client/initMatrix';
import cons from '../../../client/state/cons';
import navigation from '../../../client/state/navigation';
2021-08-26 18:28:33 +05:30
import { getUsername, getUsernameOfRoomMember } from '../../../util/matrixUtil';
2021-08-16 17:37:29 +05:30
import colorMXID from '../../../util/colorMXID';
import IconButton from '../../atoms/button/IconButton';
import PeopleSelector from '../../molecules/people-selector/PeopleSelector';
import Dialog from '../../molecules/dialog/Dialog';
import CrossIC from '../../../../public/res/ic/outlined/cross.svg';
2021-10-18 17:25:52 +02:00
import { openProfileViewer } from '../../../client/action/navigation';
2021-08-16 17:37:29 +05:30
function ReadReceipts() {
const [isOpen, setIsOpen] = useState(false);
const [readers, setReaders] = useState([]);
2021-08-16 17:37:29 +05:30
const [roomId, setRoomId] = useState(null);
useEffect(() => {
const loadReadReceipts = (rId, userIds) => {
setReaders(userIds);
setRoomId(rId);
setIsOpen(true);
};
2021-08-16 17:37:29 +05:30
navigation.on(cons.events.navigation.READRECEIPTS_OPENED, loadReadReceipts);
return () => {
navigation.removeListener(cons.events.navigation.READRECEIPTS_OPENED, loadReadReceipts);
};
}, []);
useEffect(() => {
if (isOpen === false) {
setReaders([]);
2021-08-16 17:37:29 +05:30
setRoomId(null);
}
}, [isOpen]);
function renderPeople(userId) {
2021-08-16 17:37:29 +05:30
const room = initMatrix.matrixClient.getRoom(roomId);
const member = room.getMember(userId);
const getUserDisplayName = () => {
2021-08-26 18:28:33 +05:30
if (room?.getMember(userId)) return getUsernameOfRoomMember(room.getMember(userId));
return getUsername(userId);
};
2021-08-16 17:37:29 +05:30
return (
<PeopleSelector
key={userId}
2021-10-18 17:25:52 +02:00
onClick={() => {
setIsOpen(false);
openProfileViewer(userId, roomId);
2021-10-18 17:25:52 +02:00
}}
2021-08-16 17:37:29 +05:30
avatarSrc={member?.getAvatarUrl(initMatrix.matrixClient.baseUrl, 24, 24, 'crop')}
name={getUserDisplayName(userId)}
color={colorMXID(userId)}
2021-08-16 17:37:29 +05:30
/>
);
}
return (
<Dialog
isOpen={isOpen}
2021-08-16 17:58:46 +05:30
title="Seen by"
2021-08-16 17:37:29 +05:30
onRequestClose={() => setIsOpen(false)}
contentOptions={<IconButton src={CrossIC} onClick={() => setIsOpen(false)} tooltip="Close" />}
>
{
readers.map(renderPeople)
2021-08-16 17:37:29 +05:30
}
</Dialog>
);
}
export default ReadReceipts;