feat(call): add docked call panel and remote cursor overlay
- Implemented DockedCallPanel component to render the docked call interface when an active call is present. - Created RemoteCursorOverlay component to display remote cursor positions during screen sharing. - Added hooks for managing docked call state and remote cursor functionality. - Introduced pending drag state management for seamless transitions between docked and floating states. - Developed embed filter management components for personal and room-wide settings, allowing users to customize URL embed visibility. - Implemented auto-joining functionality for rooms within spaces, enhancing user experience during space navigation. - Added state management for tracking joining progress of rooms in spaces.
This commit is contained in:
@@ -5,6 +5,7 @@ import { mDirectAtom, useBindMDirectAtom } from '../mDirectList';
|
||||
import { roomToUnreadAtom, useBindRoomToUnreadAtom } from '../room/roomToUnread';
|
||||
import { roomToParentsAtom, useBindRoomToParentsAtom } from '../room/roomToParents';
|
||||
import { roomIdToTypingMembersAtom, useBindRoomIdToTypingMembersAtom } from '../typingMembers';
|
||||
import { useAutoJoinSpaceRooms } from '../../hooks/useAutoJoinSpaceRooms';
|
||||
|
||||
export const useBindAtoms = (mx: MatrixClient) => {
|
||||
useBindMDirectAtom(mx, mDirectAtom);
|
||||
@@ -14,4 +15,5 @@ export const useBindAtoms = (mx: MatrixClient) => {
|
||||
useBindRoomToUnreadAtom(mx, roomToUnreadAtom);
|
||||
|
||||
useBindRoomIdToTypingMembersAtom(mx, roomIdToTypingMembersAtom);
|
||||
useAutoJoinSpaceRooms(mx);
|
||||
};
|
||||
|
||||
37
src/app/state/joiningProgress.ts
Normal file
37
src/app/state/joiningProgress.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { atom } from 'jotai';
|
||||
|
||||
/**
|
||||
* Represents the progress of auto-joining rooms in a space
|
||||
*/
|
||||
export interface JoiningProgress {
|
||||
/** Total number of rooms/spaces to join */
|
||||
total: number;
|
||||
/** Number of rooms/spaces already processed */
|
||||
current: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Atom that tracks the progress of auto-joining rooms per space.
|
||||
* Key is the space ID, value is the progress.
|
||||
* When joining is complete, the entry is removed.
|
||||
*/
|
||||
export const joiningProgressAtom = atom<Map<string, JoiningProgress>>(new Map());
|
||||
|
||||
/**
|
||||
* Writable atom to update joining progress for a specific space
|
||||
*/
|
||||
export const updateJoiningProgressAtom = atom(
|
||||
null,
|
||||
(get, set, update: { spaceId: string; progress: JoiningProgress | null }) => {
|
||||
const current = get(joiningProgressAtom);
|
||||
const newMap = new Map(current);
|
||||
|
||||
if (update.progress === null) {
|
||||
newMap.delete(update.spaceId);
|
||||
} else {
|
||||
newMap.set(update.spaceId, update.progress);
|
||||
}
|
||||
|
||||
set(joiningProgressAtom, newMap);
|
||||
}
|
||||
);
|
||||
@@ -28,6 +28,7 @@ export interface Settings {
|
||||
hideActivity: boolean;
|
||||
|
||||
isPeopleDrawer: boolean;
|
||||
isCallPanelDocked: boolean;
|
||||
memberSortFilterIndex: number;
|
||||
enterForNewline: boolean;
|
||||
messageLayout: MessageLayout;
|
||||
@@ -43,10 +44,14 @@ export interface Settings {
|
||||
showNotifications: boolean;
|
||||
isNotificationSounds: boolean;
|
||||
|
||||
showRemoteCursor: boolean;
|
||||
|
||||
hour24Clock: boolean;
|
||||
dateFormatString: string;
|
||||
|
||||
developerTools: boolean;
|
||||
|
||||
autoJoinSpaceRooms: boolean;
|
||||
}
|
||||
|
||||
const defaultSettings: Settings = {
|
||||
@@ -62,6 +67,7 @@ const defaultSettings: Settings = {
|
||||
hideActivity: false,
|
||||
|
||||
isPeopleDrawer: true,
|
||||
isCallPanelDocked: false,
|
||||
memberSortFilterIndex: 0,
|
||||
enterForNewline: false,
|
||||
messageLayout: 0,
|
||||
@@ -77,10 +83,14 @@ const defaultSettings: Settings = {
|
||||
showNotifications: true,
|
||||
isNotificationSounds: true,
|
||||
|
||||
showRemoteCursor: true,
|
||||
|
||||
hour24Clock: false,
|
||||
dateFormatString: 'D MMM YYYY',
|
||||
|
||||
developerTools: false,
|
||||
|
||||
autoJoinSpaceRooms: true,
|
||||
};
|
||||
|
||||
export const getSettings = () => {
|
||||
|
||||
Reference in New Issue
Block a user