feat: Add mobile responsive layout, open room access, and admin room management
Mobile Responsive Layout: - Add useMediaQuery, useIsMobile, useIsTablet, useIsDesktop hooks for device detection - Create MobileHeader component with hamburger menu and action drawer - Create BottomToolbar for mobile navigation (Files, Members) - Create SlidePanel component for full-screen mobile sidebars - Update RoomDetail.tsx with mobile/desktop conditional rendering - Update RoomList.tsx with single-column grid and touch-friendly buttons - Add CSS custom properties for safe areas and touch targets (min 44px) - Add mobile viewport meta tags for notched devices Open Room Access: - All authenticated users can view all rooms (not just their own) - Users can join active rooms they're not members of - Add is_member field to room responses - Update room list API to return all rooms by default Admin Room Management: - Add permanent delete functionality for system admins - Add delete confirmation dialog with room title verification - Broadcast room deletion via WebSocket to connected users - Add users search API for adding members 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -87,3 +87,31 @@ def get_display_name(db: Session, user_id: str) -> str:
|
||||
if user:
|
||||
return user.display_name
|
||||
return user_id # Fallback to email if user not in database
|
||||
|
||||
|
||||
def search_users(db: Session, query: str, limit: int = 20) -> list[User]:
|
||||
"""Search users by display_name or user_id (email)
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
query: Search query string
|
||||
limit: Maximum number of results (default 20)
|
||||
|
||||
Returns:
|
||||
List of matching users
|
||||
"""
|
||||
from sqlalchemy import or_
|
||||
|
||||
search_pattern = f"%{query}%"
|
||||
|
||||
return (
|
||||
db.query(User)
|
||||
.filter(
|
||||
or_(
|
||||
User.display_name.ilike(search_pattern),
|
||||
User.user_id.ilike(search_pattern)
|
||||
)
|
||||
)
|
||||
.limit(limit)
|
||||
.all()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user