polfan-server-js-client 0.1.99933 → 0.1.99934
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +4 -1
- package/build/index.js +84 -96
- package/build/index.js.map +1 -1
- package/build/types/state-tracker/ChatStateTracker.d.ts +3 -3
- package/build/types/state-tracker/UsersManager.d.ts +15 -0
- package/package.json +1 -1
- package/src/state-tracker/ChatStateTracker.ts +3 -3
- package/src/state-tracker/UsersManager.ts +41 -0
- package/build/types/state-tracker/Utils.d.ts +0 -15
- package/src/state-tracker/Utils.ts +0 -40
|
@@ -4,7 +4,7 @@ import { RoomsManager } from "./RoomsManager";
|
|
|
4
4
|
import { SpacesManager } from "./SpacesManager";
|
|
5
5
|
import { PermissionsManager } from "./PermissionsManager";
|
|
6
6
|
import { EmoticonsManager } from "./EmoticonsManager";
|
|
7
|
-
import {
|
|
7
|
+
import { UsersManager } from "./UsersManager";
|
|
8
8
|
export declare class ChatStateTracker {
|
|
9
9
|
readonly client: WebSocketChatClient;
|
|
10
10
|
/**
|
|
@@ -24,9 +24,9 @@ export declare class ChatStateTracker {
|
|
|
24
24
|
*/
|
|
25
25
|
readonly emoticons: EmoticonsManager;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Users related state.
|
|
28
28
|
*/
|
|
29
|
-
readonly
|
|
29
|
+
readonly users: UsersManager;
|
|
30
30
|
private _me;
|
|
31
31
|
private readonly deferredSession;
|
|
32
32
|
constructor(client: WebSocketChatClient);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChatStateTracker } from "./ChatStateTracker";
|
|
2
|
+
import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
|
|
3
|
+
import { User } from "../types/src";
|
|
4
|
+
export declare class UsersManager {
|
|
5
|
+
private tracker;
|
|
6
|
+
private readonly users;
|
|
7
|
+
constructor(tracker: ChatStateTracker);
|
|
8
|
+
/**
|
|
9
|
+
* Get all available (cached) user objects at once.
|
|
10
|
+
*/
|
|
11
|
+
getAvailable(): Promise<ObservableIndexedObjectCollection<User>>;
|
|
12
|
+
private handleMembers;
|
|
13
|
+
private handleUsers;
|
|
14
|
+
private handleSession;
|
|
15
|
+
}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@ import {SpacesManager} from "./SpacesManager";
|
|
|
5
5
|
import {PermissionsManager} from "./PermissionsManager";
|
|
6
6
|
import {DeferredTask} from "./AsyncUtils";
|
|
7
7
|
import {EmoticonsManager} from "./EmoticonsManager";
|
|
8
|
-
import {
|
|
8
|
+
import {UsersManager} from "./UsersManager";
|
|
9
9
|
|
|
10
10
|
export class ChatStateTracker {
|
|
11
11
|
/**
|
|
@@ -29,9 +29,9 @@ export class ChatStateTracker {
|
|
|
29
29
|
public readonly emoticons = new EmoticonsManager(this);
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Users related state.
|
|
33
33
|
*/
|
|
34
|
-
public readonly
|
|
34
|
+
public readonly users = new UsersManager(this);
|
|
35
35
|
|
|
36
36
|
private _me: User = null;
|
|
37
37
|
private readonly deferredSession = new DeferredTask();
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {ChatStateTracker} from "./ChatStateTracker";
|
|
2
|
+
import {ObservableIndexedObjectCollection} from "../IndexedObjectCollection";
|
|
3
|
+
import {RoomMember, Session, SpaceMember, User} from "../types/src";
|
|
4
|
+
import {extractUserFromMember} from "./functions";
|
|
5
|
+
|
|
6
|
+
export class UsersManager {
|
|
7
|
+
private readonly users: ObservableIndexedObjectCollection<User> = new ObservableIndexedObjectCollection('id');
|
|
8
|
+
|
|
9
|
+
public constructor(private tracker: ChatStateTracker) {
|
|
10
|
+
tracker.client.on('UserUpdated', event => this.handleUsers([event.user]));
|
|
11
|
+
tracker.client.on('RoomMemberJoined', event => this.handleMembers([event.member]));
|
|
12
|
+
tracker.client.on('RoomMemberUpdated', event => this.handleMembers([event.member]));
|
|
13
|
+
tracker.client.on('SpaceMemberJoined', event => this.handleMembers([event.member]));
|
|
14
|
+
tracker.client.on('SpaceMemberUpdated', event => this.handleMembers([event.member]));
|
|
15
|
+
tracker.client.on('SpaceMembers', event => this.handleMembers(event.members));
|
|
16
|
+
tracker.client.on('RoomMembers', event => this.handleMembers(event.members));
|
|
17
|
+
tracker.client.on('Messages', event => this.handleUsers(event.messages.map(message => message.user)));
|
|
18
|
+
tracker.client.on('NewMessage', event => this.handleUsers([event.message.user]));
|
|
19
|
+
tracker.client.on('Session', event => this.handleSession(event));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Get all available (cached) user objects at once.
|
|
24
|
+
*/
|
|
25
|
+
public async getAvailable(): Promise<ObservableIndexedObjectCollection<User>> {
|
|
26
|
+
return this.users;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private handleMembers(members: (RoomMember | SpaceMember)[]): void {
|
|
30
|
+
this.users.set(...members.map(extractUserFromMember));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private handleUsers(users: User[]): void {
|
|
34
|
+
this.users.set(...users);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private handleSession(session: Session): void {
|
|
38
|
+
this.users.deleteAll();
|
|
39
|
+
this.users.set(session.user);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ChatStateTracker } from "./ChatStateTracker";
|
|
2
|
-
import { IndexedObjectCollection } from "../IndexedObjectCollection";
|
|
3
|
-
import { Room, RoomSummary, User } from "../types/src";
|
|
4
|
-
export declare class Utils {
|
|
5
|
-
private tracker;
|
|
6
|
-
constructor(tracker: ChatStateTracker);
|
|
7
|
-
/**
|
|
8
|
-
* Collect all room summaries and rooms you joined in one collection.
|
|
9
|
-
*/
|
|
10
|
-
collectAllAvailableRooms(): Promise<IndexedObjectCollection<Room | RoomSummary>>;
|
|
11
|
-
/**
|
|
12
|
-
* Collect all users from all spaces and rooms you are in.
|
|
13
|
-
*/
|
|
14
|
-
collectAllAvailableUsers(): Promise<IndexedObjectCollection<User>>;
|
|
15
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import {ChatStateTracker} from "./ChatStateTracker";
|
|
2
|
-
import {IndexedObjectCollection} from "../IndexedObjectCollection";
|
|
3
|
-
import {Room, RoomSummary, User} from "../types/src";
|
|
4
|
-
import {extractUserFromMember} from "./functions";
|
|
5
|
-
|
|
6
|
-
export class Utils {
|
|
7
|
-
public constructor(private tracker: ChatStateTracker) {}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Collect all room summaries and rooms you joined in one collection.
|
|
11
|
-
*/
|
|
12
|
-
public async collectAllAvailableRooms(): Promise<IndexedObjectCollection<Room | RoomSummary>> {
|
|
13
|
-
const result = new IndexedObjectCollection<Room | RoomSummary>('id');
|
|
14
|
-
const spaces = await this.tracker.spaces.get();
|
|
15
|
-
const collections = await Promise.all([
|
|
16
|
-
...spaces.items.map(space => this.tracker.spaces.getRooms(space.id)),
|
|
17
|
-
this.tracker.rooms.get(),
|
|
18
|
-
]);
|
|
19
|
-
|
|
20
|
-
collections.forEach(collection => result.set(...collection.items));
|
|
21
|
-
|
|
22
|
-
return result;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Collect all users from all spaces and rooms you are in.
|
|
27
|
-
*/
|
|
28
|
-
public async collectAllAvailableUsers(): Promise<IndexedObjectCollection<User>> {
|
|
29
|
-
const result = new IndexedObjectCollection<User>('id');
|
|
30
|
-
const [spaces, rooms] = await Promise.all([this.tracker.spaces.get(), this.tracker.rooms.get()]);
|
|
31
|
-
const collections = await Promise.all([
|
|
32
|
-
...spaces.items.map(space => this.tracker.spaces.getMembers(space.id)),
|
|
33
|
-
...rooms.items.map(room => this.tracker.rooms.getMembers(room.id)),
|
|
34
|
-
]);
|
|
35
|
-
|
|
36
|
-
collections.forEach(collection => result.set(...collection.items.map(extractUserFromMember)));
|
|
37
|
-
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
}
|