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(sessionId = '', ldap = '', name = '', email = '') {
740
- this.sessionId = sessionId;
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?.sessionId, item?.ldap, item?.name, item?.email);
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: user
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 = '', content = null) {
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, item?.content);
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.sessionId !== this.user.value?.sessionId) {
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?.sessionId) {
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', channel, data: { sessionId, content: ChannelMessage } }
3010
+ // Structure: { type: 'channelMessage', channels: [...], sessionId: {id, ldap, name, email}, content: {message payload} }
2999
3011
  // Skip messages from self
3000
- const senderSessionId = message.data?.content?.sessionId?.sessionId || message.data?.sessionId;
3001
- if (senderSessionId === this.user.value?.sessionId) {
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.data?.content) {
3017
+ if (message.content) {
3006
3018
  this.appendMessages(ChannelMessage.adapt({
3007
- sessionId: message.data.content.sessionId,
3008
- content: message.data.content.content,
3019
+ sessionId: message.sessionId,
3020
+ content: message.content,
3009
3021
  }));
3010
3022
  }
3011
3023
  break;
3012
3024
  case 'usersInChannel':
3013
- console.log('👥 Users:', message.data.users);
3014
- this.userList.next(message.data.users);
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
- sessionId: user.sessionId,
4551
+ id: user.id,
4533
4552
  ldap: user.ldap,
4534
4553
  name: user.name,
4535
4554
  email: user.email,