ngxsmk-datatable
Version:
A powerful, feature-rich Angular datatable component with virtual scrolling, built for Angular 17+
137 lines (136 loc) • 3.6 kB
TypeScript
import { OnDestroy } from '@angular/core';
import { Observable } from 'rxjs';
import { CollaborativeEditingConfig, CollaborativeOperation, CollaborativeUser, CollaborativeSession, CollaborativeConflict, CollaborativeCursor, CollaborativeSelection } from '../interfaces/collaborative-editing.interface';
import * as i0 from "@angular/core";
/**
* Collaborative Editing Service
* Enables real-time multi-user editing with WebSocket support
*/
export declare class CollaborativeEditingService implements OnDestroy {
private websocket;
private config;
private reconnectAttempts;
private readonly maxReconnectAttempts;
private reconnectTimer;
private presenceTimer?;
private sessionSubject;
private activeUsersSubject;
private operationsSubject;
private conflictsSubject;
private connectionStatusSubject;
readonly session$: Observable<CollaborativeSession | null>;
readonly activeUsers$: Observable<CollaborativeUser[]>;
readonly operations$: Observable<CollaborativeOperation>;
readonly conflicts$: Observable<CollaborativeConflict>;
readonly connectionStatus$: Observable<"error" | "connected" | "connecting" | "disconnected">;
private operations;
private currentVersion;
constructor();
/**
* Initialize collaborative editing
*/
initialize(config: CollaborativeEditingConfig): Promise<void>;
/**
* Connect to WebSocket server
*/
private connect;
/**
* Disconnect from WebSocket
*/
disconnect(): void;
/**
* Broadcast operation to other users
*/
broadcastOperation(operation: CollaborativeOperation): void;
/**
* Update cursor position
*/
updateCursor(cursor: CollaborativeCursor): void;
/**
* Update selection
*/
updateSelection(selection: CollaborativeSelection): void;
/**
* Request sync
*/
requestSync(): void;
/**
* Get active users
*/
getActiveUsers(): CollaborativeUser[];
/**
* Get current session
*/
getSession(): CollaborativeSession | null;
/**
* Handle WebSocket open
*/
private handleOpen;
/**
* Handle WebSocket message
*/
private handleMessage;
/**
* Handle operation message
*/
private handleOperationMessage;
/**
* Handle presence message
*/
private handlePresenceMessage;
/**
* Handle cursor message
*/
private handleCursorMessage;
/**
* Handle selection message
*/
private handleSelectionMessage;
/**
* Handle join message
*/
private handleJoinMessage;
/**
* Handle leave message
*/
private handleLeaveMessage;
/**
* Handle sync message
*/
private handleSyncMessage;
/**
* Handle WebSocket error
*/
private handleError;
/**
* Handle WebSocket close
*/
private handleClose;
/**
* Attempt to reconnect
*/
private attemptReconnect;
/**
* Send message to WebSocket
*/
private sendMessage;
/**
* Start presence broadcast
*/
private startPresenceBroadcast;
/**
* Apply operational transformation
*/
private applyOperationalTransform;
/**
* Check if operations conflict
*/
private operationsConflict;
/**
* Generate random user color
*/
private generateUserColor;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<CollaborativeEditingService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<CollaborativeEditingService>;
}