Add facepile to homepage
This commit is contained in:
		
					parent
					
						
							
								8da7031b9e
							
						
					
				
			
			
				commit
				
					
						6f2870340a
					
				
			
		
					 4 changed files with 64 additions and 2 deletions
				
			
		| 
						 | 
					@ -285,15 +285,26 @@ export function useGroupCallRooms(client) {
 | 
				
			||||||
      const groupCalls = client.groupCallEventHandler.groupCalls.values();
 | 
					      const groupCalls = client.groupCallEventHandler.groupCalls.values();
 | 
				
			||||||
      const rooms = Array.from(groupCalls).map((groupCall) => groupCall.room);
 | 
					      const rooms = Array.from(groupCalls).map((groupCall) => groupCall.room);
 | 
				
			||||||
      const sortedRooms = sortRooms(client, rooms);
 | 
					      const sortedRooms = sortRooms(client, rooms);
 | 
				
			||||||
      setRooms(sortedRooms);
 | 
					      const items = sortedRooms.map((room) => {
 | 
				
			||||||
 | 
					        const groupCall = client.getGroupCallForRoom(room.roomId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          room,
 | 
				
			||||||
 | 
					          groupCall,
 | 
				
			||||||
 | 
					          participants: [...groupCall.participants],
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      setRooms(items);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    updateRooms();
 | 
					    updateRooms();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    client.on("GroupCall.incoming", updateRooms);
 | 
					    client.on("GroupCall.incoming", updateRooms);
 | 
				
			||||||
 | 
					    client.on("GroupCall.participants", updateRooms);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return () => {
 | 
					    return () => {
 | 
				
			||||||
      client.removeListener("GroupCall.incoming", updateRooms);
 | 
					      client.removeListener("GroupCall.incoming", updateRooms);
 | 
				
			||||||
 | 
					      client.removeListener("GroupCall.participants", updateRooms);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  }, []);
 | 
					  }, []);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										24
									
								
								src/Facepile.jsx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/Facepile.jsx
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					import React from "react";
 | 
				
			||||||
 | 
					import styles from "./Facepile.module.css";
 | 
				
			||||||
 | 
					import ColorHash from "color-hash";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const colorHash = new ColorHash({ lightness: 0.3 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function Facepile({ participants }) {
 | 
				
			||||||
 | 
					  console.log(participants);
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <div
 | 
				
			||||||
 | 
					      className={styles.facepile}
 | 
				
			||||||
 | 
					      title={participants.map((member) => member.name).join(", ")}
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      {participants.map((member) => (
 | 
				
			||||||
 | 
					        <div
 | 
				
			||||||
 | 
					          className={styles.avatar}
 | 
				
			||||||
 | 
					          style={{ backgroundColor: colorHash.hex(member.name) }}
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <span>{member.name.slice(0, 1).toUpperCase()}</span>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      ))}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								src/Facepile.module.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/Facepile.module.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					.facepile {
 | 
				
			||||||
 | 
					  margin: 0 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.facepile .avatar {
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  width: 20px;
 | 
				
			||||||
 | 
					  height: 20px;
 | 
				
			||||||
 | 
					  border-radius: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.facepile .avatar > * {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  left: 0;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  pointer-events: none;
 | 
				
			||||||
 | 
					  font-weight: 600;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.facepile .avatar span {
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  width: 20px;
 | 
				
			||||||
 | 
					  line-height: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,7 @@ import {
 | 
				
			||||||
  GroupCallIntent,
 | 
					  GroupCallIntent,
 | 
				
			||||||
  GroupCallType,
 | 
					  GroupCallType,
 | 
				
			||||||
} from "matrix-js-sdk/src/browser-index";
 | 
					} from "matrix-js-sdk/src/browser-index";
 | 
				
			||||||
 | 
					import { Facepile } from "./Facepile";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const colorHash = new ColorHash({ lightness: 0.3 });
 | 
					const colorHash = new ColorHash({ lightness: 0.3 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,7 +172,7 @@ export function Home({ client, onLogout }) {
 | 
				
			||||||
            <section>
 | 
					            <section>
 | 
				
			||||||
              <h3>Recent Rooms</h3>
 | 
					              <h3>Recent Rooms</h3>
 | 
				
			||||||
              <div className={styles.roomList}>
 | 
					              <div className={styles.roomList}>
 | 
				
			||||||
                {rooms.map((room) => (
 | 
					                {rooms.map(({ room, participants }) => (
 | 
				
			||||||
                  <Link
 | 
					                  <Link
 | 
				
			||||||
                    className={styles.roomListItem}
 | 
					                    className={styles.roomListItem}
 | 
				
			||||||
                    key={room.roomId}
 | 
					                    key={room.roomId}
 | 
				
			||||||
| 
						 | 
					@ -184,6 +185,7 @@ export function Home({ client, onLogout }) {
 | 
				
			||||||
                      <span>{room.name.slice(0, 1)}</span>
 | 
					                      <span>{room.name.slice(0, 1)}</span>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <div className={styles.roomName}>{room.name}</div>
 | 
					                    <div className={styles.roomName}>{room.name}</div>
 | 
				
			||||||
 | 
					                    <Facepile participants={participants} />
 | 
				
			||||||
                  </Link>
 | 
					                  </Link>
 | 
				
			||||||
                ))}
 | 
					                ))}
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue