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 }>() ); 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 }>() ); // 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 }>() ); // Receive room update from peer export const receiveRoomUpdate = createAction( '[Rooms] Receive Room Update', props<{ room: Partial }>() ); // Clear search results export const clearSearchResults = createAction('[Rooms] Clear Search Results'); // Set connection status export const setConnecting = createAction( '[Rooms] Set Connecting', props<{ isConnecting: boolean }>() );