Messaging · Calls: controls, tiles, a grid, a shared screen, a bar, a ringing dialog, a huddle
CallControls holds the microphone, camera and a shared screen as toggles, then Leave. ParticipantTile shows a camera's frame from the host or the person's initials, their name with a mark when muted, and a ring while they speak. VideoCallGrid lays tiles in even rows as far as they fit across its measured width; a short last row centers at the full rows' width. ScreenShareView names who presents and offers Stop presenting for your own share, the call's tiles beside or below. VoiceCallBar tells where a call is, how long it has run and who is in it, with the microphone and Leave. IncomingCallDialog rings with the caller's picture; Accept or Decline answers each ring once, and Escape declines. HuddleIndicator rings while a huddle is live; a press joins. The recorder's device toggle and the camera's name chip now have one home in media. People: member names sort whatever their case, a status's words save trimmed, and a profile card's local time ticks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
37e56c7ab7
commit
48d02c4903
26 files changed
+1535
-51
No files matched your search
@@ -104,14 +104,14 @@ impl MemberList {
|
||||
}
|
||||
}
|
||||
|
||||
/// The groups `members` fall in, online first, each by name; empty groups drop out.
|
||||
/// The groups `members` fall in, online first, each by name whatever its case; empty groups drop out.
|
||||
fn grouped(members: &[Member]) -> Vec<(&'static str, Vec<&Member>)> {
|
||||
let group = |online: bool| {
|
||||
let mut group: Vec<&Member> = members
|
||||
.iter()
|
||||
.filter(|member| (member.presence != Presence::Offline) == online)
|
||||
.collect();
|
||||
group.sort_by(|a, b| a.name.cmp(&b.name));
|
||||
group.sort_by_key(|member| member.name.to_lowercase());
|
||||
group
|
||||
};
|
||||
[("Online", group(true)), ("Offline", group(false))]
|
||||
@@ -250,13 +250,19 @@ mod tests {
|
||||
Member::new("d", "Dev", Presence::Offline),
|
||||
Member::new("a", "Ana", Presence::Away),
|
||||
Member::new("b", "Ben", Presence::Online),
|
||||
Member::new("e", "bea", Presence::Online),
|
||||
];
|
||||
assert_eq!(
|
||||
names(&members),
|
||||
[
|
||||
(
|
||||
"Online",
|
||||
vec!["Ana".to_string(), "Ben".into(), "Chloé".into()]
|
||||
vec![
|
||||
"Ana".to_string(),
|
||||
"bea".into(),
|
||||
"Ben".into(),
|
||||
"Chloé".into()
|
||||
]
|
||||
),
|
||||
("Offline", vec!["Dev".into()])
|
||||
]
|
||||
|
||||
Reference in new issue
Block a user