159 lines
4.0 KiB
TypeScript
159 lines
4.0 KiB
TypeScript
import { createAction, props } from '@ngrx/store';
|
|
import { Room, RoomSettings, ServerInfo, RoomPermissions } from '../../core/models';
|
|
|
|
// Load rooms from storage
|
|
export const loadRooms = createAction('[Rooms] Load Rooms');
|
|
|
|
export const loadRoomsSuccess = createAction(
|
|
'[Rooms] Load Rooms Success',
|
|
props<{ rooms: Room[] }>()
|
|
);
|
|
|
|
export const loadRoomsFailure = createAction(
|
|
'[Rooms] Load Rooms Failure',
|
|
props<{ error: string }>()
|
|
);
|
|
|
|
// Search servers
|
|
export const searchServers = createAction(
|
|
'[Rooms] Search Servers',
|
|
props<{ query: string }>()
|
|
);
|
|
|
|
export const searchServersSuccess = createAction(
|
|
'[Rooms] Search Servers Success',
|
|
props<{ servers: ServerInfo[] }>()
|
|
);
|
|
|
|
export const searchServersFailure = createAction(
|
|
'[Rooms] Search Servers Failure',
|
|
props<{ error: string }>()
|
|
);
|
|
|
|
// Create room
|
|
export const createRoom = createAction(
|
|
'[Rooms] Create Room',
|
|
props<{ name: string; description?: string; topic?: string; isPrivate?: boolean; password?: string }>()
|
|
);
|
|
|
|
export const createRoomSuccess = createAction(
|
|
'[Rooms] Create Room Success',
|
|
props<{ room: Room }>()
|
|
);
|
|
|
|
export const createRoomFailure = createAction(
|
|
'[Rooms] Create Room Failure',
|
|
props<{ error: string }>()
|
|
);
|
|
|
|
// Join room
|
|
export const joinRoom = createAction(
|
|
'[Rooms] Join Room',
|
|
props<{ roomId: string; password?: string; serverInfo?: { name: string; description?: string; hostName?: string } }>()
|
|
);
|
|
|
|
export const joinRoomSuccess = createAction(
|
|
'[Rooms] Join Room Success',
|
|
props<{ room: Room }>()
|
|
);
|
|
|
|
export const joinRoomFailure = createAction(
|
|
'[Rooms] Join Room Failure',
|
|
props<{ error: string }>()
|
|
);
|
|
|
|
// Leave room
|
|
export const leaveRoom = createAction('[Rooms] Leave Room');
|
|
|
|
export const leaveRoomSuccess = createAction('[Rooms] Leave Room Success');
|
|
|
|
// Delete room
|
|
export const deleteRoom = createAction(
|
|
'[Rooms] Delete Room',
|
|
props<{ roomId: string }>()
|
|
);
|
|
|
|
export const deleteRoomSuccess = createAction(
|
|
'[Rooms] Delete Room Success',
|
|
props<{ roomId: string }>()
|
|
);
|
|
|
|
// Forget room locally
|
|
export const forgetRoom = createAction(
|
|
'[Rooms] Forget Room',
|
|
props<{ roomId: string }>()
|
|
);
|
|
|
|
export const forgetRoomSuccess = createAction(
|
|
'[Rooms] Forget Room Success',
|
|
props<{ roomId: string }>()
|
|
);
|
|
|
|
// Update room settings
|
|
export const updateRoomSettings = createAction(
|
|
'[Rooms] Update Room Settings',
|
|
props<{ settings: Partial<RoomSettings> }>()
|
|
);
|
|
|
|
export const updateRoomSettingsSuccess = createAction(
|
|
'[Rooms] Update Room Settings Success',
|
|
props<{ settings: RoomSettings }>()
|
|
);
|
|
|
|
export const updateRoomSettingsFailure = createAction(
|
|
'[Rooms] Update Room Settings Failure',
|
|
props<{ error: string }>()
|
|
);
|
|
|
|
// Update room permissions
|
|
export const updateRoomPermissions = createAction(
|
|
'[Rooms] Update Room Permissions',
|
|
props<{ roomId: string; permissions: Partial<RoomPermissions> }>()
|
|
);
|
|
|
|
// Update server icon (permission enforced)
|
|
export const updateServerIcon = createAction(
|
|
'[Rooms] Update Server Icon',
|
|
props<{ roomId: string; icon: string }>()
|
|
);
|
|
|
|
export const updateServerIconSuccess = createAction(
|
|
'[Rooms] Update Server Icon Success',
|
|
props<{ roomId: string; icon: string; iconUpdatedAt: number }>()
|
|
);
|
|
|
|
export const updateServerIconFailure = createAction(
|
|
'[Rooms] Update Server Icon Failure',
|
|
props<{ error: string }>()
|
|
);
|
|
|
|
// Set current room
|
|
export const setCurrentRoom = createAction(
|
|
'[Rooms] Set Current Room',
|
|
props<{ room: Room }>()
|
|
);
|
|
|
|
// Clear current room
|
|
export const clearCurrentRoom = createAction('[Rooms] Clear Current Room');
|
|
|
|
// Update room
|
|
export const updateRoom = createAction(
|
|
'[Rooms] Update Room',
|
|
props<{ roomId: string; changes: Partial<Room> }>()
|
|
);
|
|
|
|
// Receive room update from peer
|
|
export const receiveRoomUpdate = createAction(
|
|
'[Rooms] Receive Room Update',
|
|
props<{ room: Partial<Room> }>()
|
|
);
|
|
|
|
// Clear search results
|
|
export const clearSearchResults = createAction('[Rooms] Clear Search Results');
|
|
|
|
// Set connection status
|
|
export const setConnecting = createAction(
|
|
'[Rooms] Set Connecting',
|
|
props<{ isConnecting: boolean }>()
|
|
);
|