http-request-manager 18.5.20 → 18.5.22
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.
|
@@ -736,18 +736,19 @@ class ChannelInfo {
|
|
|
736
736
|
}
|
|
737
737
|
|
|
738
738
|
class WSUser {
|
|
739
|
-
constructor(
|
|
740
|
-
this.
|
|
739
|
+
constructor(id = '', ldap = '', name = '', email = '') {
|
|
740
|
+
this.id = id;
|
|
741
741
|
this.ldap = ldap;
|
|
742
742
|
this.name = name;
|
|
743
743
|
this.email = email;
|
|
744
744
|
}
|
|
745
745
|
static adapt(item) {
|
|
746
|
-
const user = new WSUser(item?.
|
|
746
|
+
const user = new WSUser(item?.id || item?.sessionId, // Support both for backward compatibility
|
|
747
|
+
item?.ldap, item?.name, item?.email);
|
|
747
748
|
// Copy any additional properties
|
|
748
749
|
if (item) {
|
|
749
750
|
Object.keys(item).forEach(key => {
|
|
750
|
-
if (!['sessionId', 'ldap', 'name', 'email'].includes(key)) {
|
|
751
|
+
if (!['id', 'sessionId', 'ldap', 'name', 'email'].includes(key)) {
|
|
751
752
|
user[key] = item[key];
|
|
752
753
|
}
|
|
753
754
|
});
|
|
@@ -789,7 +790,10 @@ class WebsocketService {
|
|
|
789
790
|
const message = {
|
|
790
791
|
type: 'subscribe',
|
|
791
792
|
subscribedChannel: channelName,
|
|
792
|
-
content:
|
|
793
|
+
content: {
|
|
794
|
+
id: this.getSessionId(),
|
|
795
|
+
...user
|
|
796
|
+
}
|
|
793
797
|
};
|
|
794
798
|
this.socket.send(JSON.stringify(message));
|
|
795
799
|
this.isSubscribed = true; // Set the flag immediately after sending
|
|
@@ -2884,12 +2888,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2884
2888
|
}], ctorParameters: () => [] });
|
|
2885
2889
|
|
|
2886
2890
|
class ChannelMessage {
|
|
2887
|
-
constructor(sessionId =
|
|
2891
|
+
constructor(sessionId = null, content = null) {
|
|
2888
2892
|
this.sessionId = sessionId;
|
|
2889
2893
|
this.content = content;
|
|
2890
2894
|
}
|
|
2891
2895
|
static adapt(item) {
|
|
2892
|
-
return new ChannelMessage(item?.sessionId
|
|
2896
|
+
return new ChannelMessage(item?.sessionId || item?.id, // Support both for backward compatibility
|
|
2897
|
+
item?.content);
|
|
2893
2898
|
}
|
|
2894
2899
|
}
|
|
2895
2900
|
|
|
@@ -2899,6 +2904,10 @@ const defaultState = {
|
|
|
2899
2904
|
dataObject: null,
|
|
2900
2905
|
};
|
|
2901
2906
|
class HTTPManagerStateService extends ComponentStore {
|
|
2907
|
+
// Convenience observable that returns users for a specific channel
|
|
2908
|
+
getUsersForChannel$(channel) {
|
|
2909
|
+
return this.userListByChannel$.pipe(map(channelMap => channelMap.get(channel) || []));
|
|
2910
|
+
}
|
|
2902
2911
|
constructor(apiOptions = ApiRequest.adapt(), dataType, database) {
|
|
2903
2912
|
super(defaultState);
|
|
2904
2913
|
this.apiOptions = apiOptions;
|
|
@@ -2924,6 +2933,9 @@ class HTTPManagerStateService extends ComponentStore {
|
|
|
2924
2933
|
this.wsRetryAttempts$ = this.wsRetryAttempts.asObservable();
|
|
2925
2934
|
this.messages = new BehaviorSubject([]);
|
|
2926
2935
|
this.messages$ = this.messages.asObservable();
|
|
2936
|
+
this.userListByChannel = new BehaviorSubject(new Map());
|
|
2937
|
+
this.userListByChannel$ = this.userListByChannel.asObservable();
|
|
2938
|
+
// Legacy support - returns all unique users across all channels
|
|
2927
2939
|
this.userList = new BehaviorSubject([]);
|
|
2928
2940
|
this.userList$ = this.userList.asObservable();
|
|
2929
2941
|
this.user = new BehaviorSubject(null);
|
|
@@ -2959,7 +2971,7 @@ class HTTPManagerStateService extends ComponentStore {
|
|
|
2959
2971
|
this.httpManagerService.disconnect();
|
|
2960
2972
|
}
|
|
2961
2973
|
if (message.type === 'success') {
|
|
2962
|
-
if (message.data.
|
|
2974
|
+
if (message.data.id !== this.user.value?.id) {
|
|
2963
2975
|
const user = WSUser.adapt(message.data);
|
|
2964
2976
|
this.user.next(user);
|
|
2965
2977
|
}
|
|
@@ -2987,7 +2999,7 @@ class HTTPManagerStateService extends ComponentStore {
|
|
|
2987
2999
|
break;
|
|
2988
3000
|
case 'stateMangerMessage':
|
|
2989
3001
|
;
|
|
2990
|
-
if (message.data.sessionId !== this.user.value?.
|
|
3002
|
+
if (message.data.sessionId !== this.user.value?.id) {
|
|
2991
3003
|
console.log('💬 Message:', message.data);
|
|
2992
3004
|
this.userAction.next(message.data);
|
|
2993
3005
|
this.fetchRecord(RequestOptions.adapt({ path: message.data.content.path }), message.data.content.method);
|
|
@@ -2995,23 +3007,30 @@ class HTTPManagerStateService extends ComponentStore {
|
|
|
2995
3007
|
break;
|
|
2996
3008
|
case 'channelMessage':
|
|
2997
3009
|
// Handle channel-based messages (from sendChannelMessage)
|
|
2998
|
-
// Structure: { type: 'channelMessage',
|
|
3010
|
+
// Structure: { type: 'channelMessage', channels: [...], sessionId: {id, ldap, name, email}, content: {message payload} }
|
|
2999
3011
|
// Skip messages from self
|
|
3000
|
-
const senderSessionId = message.
|
|
3001
|
-
if (senderSessionId === this.user.value?.
|
|
3012
|
+
const senderSessionId = message.sessionId?.id;
|
|
3013
|
+
if (senderSessionId === this.user.value?.id) {
|
|
3002
3014
|
break;
|
|
3003
3015
|
}
|
|
3004
3016
|
console.log('💬 Channel Message received:', message);
|
|
3005
|
-
if (message.
|
|
3017
|
+
if (message.content) {
|
|
3006
3018
|
this.appendMessages(ChannelMessage.adapt({
|
|
3007
|
-
sessionId: message.
|
|
3008
|
-
content: message.
|
|
3019
|
+
sessionId: message.sessionId,
|
|
3020
|
+
content: message.content,
|
|
3009
3021
|
}));
|
|
3010
3022
|
}
|
|
3011
3023
|
break;
|
|
3012
3024
|
case 'usersInChannel':
|
|
3013
|
-
console.log(
|
|
3014
|
-
|
|
3025
|
+
console.log(`👥 Users in channel "${message.channel}":`, message.data.users);
|
|
3026
|
+
// Update channel-specific user list
|
|
3027
|
+
const currentMap = new Map(this.userListByChannel.value);
|
|
3028
|
+
currentMap.set(message.channel, message.data.users);
|
|
3029
|
+
this.userListByChannel.next(currentMap);
|
|
3030
|
+
// Update legacy userList with unique users across all channels
|
|
3031
|
+
const allUsers = Array.from(currentMap.values()).flat();
|
|
3032
|
+
const uniqueUsers = allUsers.filter((user, index, self) => index === self.findIndex(u => u.id === user.id));
|
|
3033
|
+
this.userList.next(uniqueUsers);
|
|
3015
3034
|
break;
|
|
3016
3035
|
default:
|
|
3017
3036
|
// Messages are already added at the beginning of the tap
|
|
@@ -4529,7 +4548,7 @@ class WsMessagingComponent {
|
|
|
4529
4548
|
const selectedChannels = this.channels.value;
|
|
4530
4549
|
const message = ChannelMessage.adapt({
|
|
4531
4550
|
sessionId: {
|
|
4532
|
-
|
|
4551
|
+
id: user.id,
|
|
4533
4552
|
ldap: user.ldap,
|
|
4534
4553
|
name: user.name,
|
|
4535
4554
|
email: user.email,
|