-
-
- {invitations.length > 0 && (
-
-
- Room invitations
-
-
- {invitations.map((invitation) => (
-
-
-
- {invitation.roomName}
-
-
- {invitation.membershipRole}
- {invitation.accessExpiresAt
- ? ` · expires ${new Date(
- invitation.accessExpiresAt,
- ).toLocaleString()}`
- : ""}
-
-
-
-
-
- ))}
-
-
- )}
-
- {showCreate && (
-
- )}
-
- {showDirect && (
-
-
- New direct or group message
-
-
- The same participant set always reopens the same private
- conversation.
-
-
- {directory.map((actor) => (
-
- ))}
-
-
-
-
-
-
- )}
-
- {error && (
-
- {error}
-
- )}
- {notice && (
-
- {notice}
-
- )}
-
- {busy === "load" && rooms.length === 0 ? (
-
-
- Loading governed rooms
-
- ) : groupedRooms.length === 0 ? (
-
-
-
No visible rooms
-
- Private rooms only appear after an invitation is accepted.
-
-
- ) : (
- groupedRooms.map(([group, groupRooms]) => (
-
-
- {group}
-
-
- {groupRooms.map((room) => (
-
-
-
- {room.roomType === "direct" ? (
-
- ) : room.visibility === "organisation" ? (
-
- ) : (
-
- )}
-
-
-
-
- {room.displayName}
-
- {room.roomType}
- {room.archivedAt && Archived}
-
-
- {room.description ||
- room.topic ||
- "No purpose recorded"}
-
-
-
- {room.memberCount}
-
- Owner: {room.owner || "Unassigned"}
- {room.visibility}
-
-
-
-
- {room.membershipRole ? (
- <>
-
-
- {room.membershipRole !== "owner" && (
-
- )}
- {(room.membershipRole === "owner" ||
- room.membershipRole === "moderator") && (
-
- )}
- >
- ) : (
-
- )}
-
- {room.membershipRole && (
-
-
- Sidebar group and order
-
-
-
- )}
-
- ))}
-
-
- ))
- )}
-