stream-chat-angular 6.0.0-beta.5 → 6.0.0-rc.2
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/README.md +2 -2
- package/assets/i18n/en.d.ts +0 -1
- package/assets/version.d.ts +1 -1
- package/{esm2022 → esm2020}/assets/i18n/en.mjs +1 -2
- package/{esm2022 → esm2020}/assets/version.mjs +2 -2
- package/esm2020/lib/attachment-configuration.service.mjs +182 -0
- package/esm2020/lib/attachment-list/attachment-list.component.mjs +232 -0
- package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +55 -0
- package/esm2020/lib/attachment.service.mjs +481 -0
- package/esm2020/lib/avatar/avatar.component.mjs +160 -0
- package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +66 -0
- package/esm2020/lib/channel/channel.component.mjs +45 -0
- package/esm2020/lib/channel-header/channel-header.component.mjs +72 -0
- package/esm2020/lib/channel-list/channel-list.component.mjs +47 -0
- package/esm2020/lib/channel-preview/channel-preview.component.mjs +155 -0
- package/esm2020/lib/channel-query.mjs +77 -0
- package/esm2020/lib/channel.service.mjs +1561 -0
- package/esm2020/lib/chat-client.service.mjs +233 -0
- package/esm2020/lib/custom-templates.service.mjs +244 -0
- package/{esm2022 → esm2020}/lib/date-parser.service.mjs +5 -5
- package/esm2020/lib/file-utils.mjs +35 -0
- package/{esm2022 → esm2020}/lib/get-channel-display-text.mjs +1 -1
- package/esm2020/lib/get-message-translation.mjs +12 -0
- package/esm2020/lib/icon/icon-placeholder/icon-placeholder.component.mjs +28 -0
- package/{esm2022 → esm2020}/lib/icon/icon.component.mjs +5 -5
- package/{esm2022 → esm2020}/lib/icon/icon.module.mjs +11 -11
- package/{esm2022 → esm2020}/lib/icon/loading-indicator/loading-indicator.component.mjs +5 -5
- package/esm2020/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +20 -0
- package/{esm2022 → esm2020}/lib/list-users.mjs +1 -1
- package/esm2020/lib/message/message.component.mjs +486 -0
- package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +123 -0
- package/esm2020/lib/message-actions.service.mjs +187 -0
- package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +71 -0
- package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +333 -0
- package/{esm2022 → esm2020}/lib/message-input/emoji-input.service.mjs +7 -7
- package/esm2020/lib/message-input/message-input-config.service.mjs +50 -0
- package/esm2020/lib/message-input/message-input.component.mjs +507 -0
- package/{esm2022 → esm2020}/lib/message-input/textarea/textarea.component.mjs +6 -6
- package/{esm2022 → esm2020}/lib/message-input/textarea.directive.mjs +5 -5
- package/{esm2022 → esm2020}/lib/message-input/voice-recorder.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/message-list/group-styles.mjs +1 -1
- package/esm2020/lib/message-list/message-list.component.mjs +717 -0
- package/esm2020/lib/message-preview.mjs +21 -0
- package/esm2020/lib/message-reactions/message-reactions.component.mjs +168 -0
- package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +61 -0
- package/{esm2022 → esm2020}/lib/message-reactions.service.mjs +6 -6
- package/esm2020/lib/message-text/message-text.component.mjs +143 -0
- package/esm2020/lib/message.service.mjs +43 -0
- package/{esm2022 → esm2020}/lib/modal/modal.component.mjs +6 -6
- package/esm2020/lib/notification/notification.component.mjs +20 -0
- package/esm2020/lib/notification-list/notification-list.component.mjs +36 -0
- package/{esm2022 → esm2020}/lib/notification.service.mjs +6 -6
- package/esm2020/lib/paginated-list/paginated-list.component.mjs +94 -0
- package/{esm2022 → esm2020}/lib/parse-date.mjs +1 -1
- package/esm2020/lib/read-by.mjs +12 -0
- package/esm2020/lib/stream-autocomplete-textarea.module.mjs +33 -0
- package/{esm2022 → esm2020}/lib/stream-avatar.module.mjs +5 -5
- package/{esm2022 → esm2020}/lib/stream-chat.module.mjs +59 -59
- package/{esm2022 → esm2020}/lib/stream-i18n.service.mjs +6 -6
- package/esm2020/lib/stream-textarea.module.mjs +31 -0
- package/{esm2022 → esm2020}/lib/theme.service.mjs +6 -6
- package/esm2020/lib/thread/thread.component.mjs +51 -0
- package/{esm2022 → esm2020}/lib/transliteration.service.mjs +5 -5
- package/esm2020/lib/types-custom.mjs +2 -0
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/user-list/user-list.component.mjs +47 -0
- package/esm2020/lib/virtualized-list.service.mjs +271 -0
- package/{esm2022 → esm2020}/lib/virtualized-message-list.service.mjs +1 -1
- package/{esm2022 → esm2020}/lib/voice-recorder/amplitude-recorder.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/voice-recorder/audio-recorder.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/voice-recorder/media-recorder.mjs +1 -1
- package/esm2020/lib/voice-recorder/mp3-transcoder.mjs +61 -0
- package/esm2020/lib/voice-recorder/transcoder.service.mjs +121 -0
- package/esm2020/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +35 -0
- package/esm2020/lib/voice-recorder/voice-recorder.component.mjs +80 -0
- package/{esm2022 → esm2020}/lib/voice-recorder/voice-recorder.module.mjs +9 -9
- package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +112 -0
- package/esm2020/lib/voice-recording/voice-recording.component.mjs +91 -0
- package/{esm2022 → esm2020}/lib/voice-recording/voice-recording.module.mjs +5 -5
- package/{esm2022 → esm2020}/lib/wave-form-sampler.mjs +1 -1
- package/esm2020/public-api.mjs +86 -0
- package/esm2020/stream-chat.mjs +2 -0
- package/fesm2015/stream-chat-angular.mjs +9171 -0
- package/fesm2015/stream-chat-angular.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/stream-chat-angular.mjs +1251 -961
- package/fesm2020/stream-chat-angular.mjs.map +1 -0
- package/lib/attachment-configuration.service.d.ts +12 -12
- package/lib/attachment-list/attachment-list.component.d.ts +15 -10
- package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +1 -1
- package/lib/attachment.service.d.ts +12 -10
- package/lib/avatar/avatar.component.d.ts +7 -7
- package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +5 -5
- package/lib/channel/channel.component.d.ts +1 -1
- package/lib/channel-header/channel-header.component.d.ts +2 -2
- package/lib/channel-list/channel-list.component.d.ts +3 -4
- package/lib/channel-preview/channel-preview.component.d.ts +6 -6
- package/lib/channel-query.d.ts +26 -0
- package/lib/channel.service.d.ts +146 -154
- package/lib/chat-client.service.d.ts +17 -15
- package/lib/custom-templates.service.d.ts +50 -50
- package/lib/get-channel-display-text.d.ts +1 -2
- package/lib/get-message-translation.d.ts +3 -3
- package/lib/icon/icon-placeholder/icon-placeholder.component.d.ts +2 -2
- package/lib/icon/icon.component.d.ts +2 -2
- package/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -1
- package/lib/message/message.component.d.ts +6 -6
- package/lib/message-actions-box/message-actions-box.component.d.ts +5 -4
- package/lib/message-actions.service.d.ts +10 -10
- package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +1 -1
- package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +5 -5
- package/lib/message-input/emoji-input.service.d.ts +2 -2
- package/lib/message-input/message-input-config.service.d.ts +3 -3
- package/lib/message-input/message-input.component.d.ts +10 -33
- package/lib/message-input/textarea/textarea.component.d.ts +3 -3
- package/lib/message-input/textarea.directive.d.ts +1 -1
- package/lib/message-list/group-styles.d.ts +1 -1
- package/lib/message-list/message-list.component.d.ts +3 -2
- package/lib/message-preview.d.ts +2 -3
- package/lib/message-reactions/message-reactions.component.d.ts +9 -8
- package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +6 -5
- package/lib/message-reactions.service.d.ts +4 -4
- package/lib/message-text/message-text.component.d.ts +5 -5
- package/lib/message.service.d.ts +6 -7
- package/lib/modal/modal.component.d.ts +1 -1
- package/lib/notification/notification.component.d.ts +2 -2
- package/lib/notification-list/notification-list.component.d.ts +1 -0
- package/lib/notification.service.d.ts +1 -1
- package/lib/paginated-list/paginated-list.component.d.ts +2 -5
- package/lib/read-by.d.ts +1 -2
- package/lib/stream-i18n.service.d.ts +1 -1
- package/lib/theme.service.d.ts +1 -1
- package/lib/thread/thread.component.d.ts +3 -3
- package/lib/types-custom.d.ts +15 -0
- package/lib/types.d.ts +116 -155
- package/lib/user-list/user-list.component.d.ts +2 -3
- package/lib/virtualized-message-list.service.d.ts +1 -1
- package/lib/voice-recorder/amplitude-recorder.service.d.ts +2 -2
- package/lib/voice-recorder/media-recorder.d.ts +2 -2
- package/lib/voice-recorder/transcoder.service.d.ts +4 -4
- package/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.d.ts +1 -0
- package/lib/voice-recorder/voice-recorder.component.d.ts +2 -2
- package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +3 -3
- package/lib/voice-recording/voice-recording.component.d.ts +2 -3
- package/package.json +21 -15
- package/public-api.d.ts +3 -0
- package/src/assets/i18n/en.ts +0 -1
- package/src/assets/version.ts +1 -1
- package/esm2022/lib/attachment-configuration.service.mjs +0 -185
- package/esm2022/lib/attachment-list/attachment-list.component.mjs +0 -212
- package/esm2022/lib/attachment-preview-list/attachment-preview-list.component.mjs +0 -55
- package/esm2022/lib/attachment.service.mjs +0 -479
- package/esm2022/lib/avatar/avatar.component.mjs +0 -157
- package/esm2022/lib/avatar-placeholder/avatar-placeholder.component.mjs +0 -66
- package/esm2022/lib/channel/channel.component.mjs +0 -45
- package/esm2022/lib/channel-header/channel-header.component.mjs +0 -72
- package/esm2022/lib/channel-list/channel-list.component.mjs +0 -50
- package/esm2022/lib/channel-preview/channel-preview.component.mjs +0 -150
- package/esm2022/lib/channel.service.mjs +0 -1393
- package/esm2022/lib/chat-client.service.mjs +0 -227
- package/esm2022/lib/custom-templates.service.mjs +0 -244
- package/esm2022/lib/file-utils.mjs +0 -35
- package/esm2022/lib/get-message-translation.mjs +0 -12
- package/esm2022/lib/icon/icon-placeholder/icon-placeholder.component.mjs +0 -28
- package/esm2022/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +0 -20
- package/esm2022/lib/message/message.component.mjs +0 -486
- package/esm2022/lib/message-actions-box/message-actions-box.component.mjs +0 -120
- package/esm2022/lib/message-actions.service.mjs +0 -187
- package/esm2022/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +0 -71
- package/esm2022/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +0 -333
- package/esm2022/lib/message-input/message-input-config.service.mjs +0 -50
- package/esm2022/lib/message-input/message-input.component.mjs +0 -507
- package/esm2022/lib/message-list/message-list.component.mjs +0 -715
- package/esm2022/lib/message-preview.mjs +0 -21
- package/esm2022/lib/message-reactions/message-reactions.component.mjs +0 -165
- package/esm2022/lib/message-reactions-selector/message-reactions-selector.component.mjs +0 -57
- package/esm2022/lib/message-text/message-text.component.mjs +0 -143
- package/esm2022/lib/message.service.mjs +0 -43
- package/esm2022/lib/notification/notification.component.mjs +0 -20
- package/esm2022/lib/notification-list/notification-list.component.mjs +0 -33
- package/esm2022/lib/paginated-list/paginated-list.component.mjs +0 -94
- package/esm2022/lib/read-by.mjs +0 -12
- package/esm2022/lib/stream-autocomplete-textarea.module.mjs +0 -33
- package/esm2022/lib/stream-textarea.module.mjs +0 -31
- package/esm2022/lib/thread/thread.component.mjs +0 -51
- package/esm2022/lib/types.mjs +0 -2
- package/esm2022/lib/user-list/user-list.component.mjs +0 -47
- package/esm2022/lib/virtualized-list.service.mjs +0 -273
- package/esm2022/lib/voice-recorder/mp3-transcoder.mjs +0 -61
- package/esm2022/lib/voice-recorder/transcoder.service.mjs +0 -121
- package/esm2022/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +0 -32
- package/esm2022/lib/voice-recorder/voice-recorder.component.mjs +0 -80
- package/esm2022/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +0 -112
- package/esm2022/lib/voice-recording/voice-recording.component.mjs +0 -91
- package/esm2022/public-api.mjs +0 -82
- package/fesm2022/stream-chat-angular.mjs.map +0 -1
- /package/{esm2022 → esm2020}/lib/format-duration.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/injection-tokens.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/is-image-attachment.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/is-on-separate-date.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/is-safari.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/message-input/textarea.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/stream-chat-angular.mjs +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { filter } from 'rxjs/operators';
|
|
3
|
+
import { getChannelDisplayText } from '../get-channel-display-text';
|
|
4
|
+
import { getMessageTranslation } from '../get-message-translation';
|
|
5
|
+
import { getReadBy } from '../read-by';
|
|
6
|
+
import { isOnSeparateDate } from '../is-on-separate-date';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../channel.service";
|
|
9
|
+
import * as i2 from "../chat-client.service";
|
|
10
|
+
import * as i3 from "../message.service";
|
|
11
|
+
import * as i4 from "../custom-templates.service";
|
|
12
|
+
import * as i5 from "../date-parser.service";
|
|
13
|
+
import * as i6 from "@angular/common";
|
|
14
|
+
import * as i7 from "../avatar-placeholder/avatar-placeholder.component";
|
|
15
|
+
import * as i8 from "../icon/icon-placeholder/icon-placeholder.component";
|
|
16
|
+
import * as i9 from "@ngx-translate/core";
|
|
17
|
+
/**
|
|
18
|
+
* The `ChannelPreview` component displays a channel preview in the channel list, it consists of the image, name and latest message of the channel.
|
|
19
|
+
*/
|
|
20
|
+
export class ChannelPreviewComponent {
|
|
21
|
+
constructor(channelService, ngZone, chatClientService, messageService, customTemplatesService, dateParser) {
|
|
22
|
+
this.channelService = channelService;
|
|
23
|
+
this.ngZone = ngZone;
|
|
24
|
+
this.chatClientService = chatClientService;
|
|
25
|
+
this.customTemplatesService = customTemplatesService;
|
|
26
|
+
this.dateParser = dateParser;
|
|
27
|
+
this.isActive = false;
|
|
28
|
+
this.isUnreadMessageWasCalled = false;
|
|
29
|
+
this.isUnread = false;
|
|
30
|
+
this.latestMessageText = 'streamChat.Nothing yet...';
|
|
31
|
+
this.subscriptions = [];
|
|
32
|
+
this.canSendReadEvents = true;
|
|
33
|
+
this.displayAs = messageService.displayAs;
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.subscriptions.push(this.chatClientService.user$.subscribe((user) => {
|
|
37
|
+
if (user?.id !== this.userId) {
|
|
38
|
+
this.userId = user?.id;
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
this.subscriptions.push(this.channelService.activeChannel$.subscribe((activeChannel) => (this.isActive = activeChannel?.id === this.channel?.id)));
|
|
42
|
+
const messages = this.channel?.state?.latestMessages;
|
|
43
|
+
if (messages && messages.length > 0) {
|
|
44
|
+
this.setLatestMessage(messages[messages.length - 1]);
|
|
45
|
+
}
|
|
46
|
+
this.updateUnreadState();
|
|
47
|
+
const capabilities = this.channel?.data?.own_capabilities || [];
|
|
48
|
+
this.canSendReadEvents = capabilities.indexOf('read-events') !== -1;
|
|
49
|
+
this.subscriptions.push(this.channel.on('message.new', this.handleMessageEvent.bind(this)));
|
|
50
|
+
this.subscriptions.push(this.channel.on('message.updated', this.handleMessageEvent.bind(this)));
|
|
51
|
+
this.subscriptions.push(this.channel.on('message.deleted', this.handleMessageEvent.bind(this)));
|
|
52
|
+
this.subscriptions.push(this.channel.on('channel.truncated', this.handleMessageEvent.bind(this)));
|
|
53
|
+
this.subscriptions.push(this.channel.on('message.read', () => this.ngZone.run(() => {
|
|
54
|
+
this.isUnreadMessageWasCalled = false;
|
|
55
|
+
this.updateUnreadState();
|
|
56
|
+
})));
|
|
57
|
+
this.subscriptions.push(this.chatClientService.events$
|
|
58
|
+
.pipe(filter((e) => e.eventType === 'notification.mark_unread' &&
|
|
59
|
+
this.channel.id === e.event?.channel_id))
|
|
60
|
+
.subscribe(() => {
|
|
61
|
+
this.ngZone.run(() => {
|
|
62
|
+
this.isUnreadMessageWasCalled = true;
|
|
63
|
+
this.updateUnreadState();
|
|
64
|
+
});
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
ngOnDestroy() {
|
|
68
|
+
this.subscriptions.forEach((s) => s.unsubscribe());
|
|
69
|
+
}
|
|
70
|
+
get avatarImage() {
|
|
71
|
+
return this.channel?.data?.image;
|
|
72
|
+
}
|
|
73
|
+
get avatarName() {
|
|
74
|
+
return this.channel?.data?.name;
|
|
75
|
+
}
|
|
76
|
+
get title() {
|
|
77
|
+
if (!this.channel) {
|
|
78
|
+
return '';
|
|
79
|
+
}
|
|
80
|
+
return getChannelDisplayText(this.channel, this.chatClientService.chatClient.user);
|
|
81
|
+
}
|
|
82
|
+
setAsActiveChannel() {
|
|
83
|
+
void this.channelService.setAsActiveChannel(this.channel);
|
|
84
|
+
}
|
|
85
|
+
handleMessageEvent(event) {
|
|
86
|
+
this.ngZone.run(() => {
|
|
87
|
+
if (this.channel?.state.latestMessages.length === 0) {
|
|
88
|
+
this.latestMessage = undefined;
|
|
89
|
+
this.latestMessageStatus = undefined;
|
|
90
|
+
this.latestMessageText = 'streamChat.Nothing yet...';
|
|
91
|
+
this.latestMessageTime = undefined;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const latestMessage = this.channel?.state.latestMessages[this.channel?.state.latestMessages.length - 1];
|
|
95
|
+
if (!event.message || latestMessage?.id !== event.message.id) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.setLatestMessage(latestMessage);
|
|
99
|
+
this.updateUnreadState();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
setLatestMessage(message) {
|
|
103
|
+
this.latestMessage = message;
|
|
104
|
+
if (message?.deleted_at) {
|
|
105
|
+
this.latestMessageText = 'streamChat.Message deleted';
|
|
106
|
+
}
|
|
107
|
+
else if (message?.text) {
|
|
108
|
+
this.latestMessageText =
|
|
109
|
+
getMessageTranslation(message, this.channel, this.chatClientService.chatClient.user) || message.text;
|
|
110
|
+
}
|
|
111
|
+
else if (message?.attachments && message.attachments.length) {
|
|
112
|
+
this.latestMessageText = 'streamChat.🏙 Attachment...';
|
|
113
|
+
}
|
|
114
|
+
if (this.latestMessage && this.latestMessage.type === 'regular') {
|
|
115
|
+
this.latestMessageTime = isOnSeparateDate(new Date(), this.latestMessage.created_at)
|
|
116
|
+
? this.dateParser.parseDate(this.latestMessage.created_at)
|
|
117
|
+
: this.dateParser.parseTime(this.latestMessage.created_at);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.latestMessageTime = undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
updateUnreadState() {
|
|
124
|
+
if (this.channel &&
|
|
125
|
+
this.latestMessage &&
|
|
126
|
+
this.latestMessage.user?.id === this.userId &&
|
|
127
|
+
this.latestMessage.status === 'received' &&
|
|
128
|
+
this.latestMessage.type === 'regular') {
|
|
129
|
+
this.latestMessageStatus =
|
|
130
|
+
getReadBy(this.latestMessage, this.channel).length > 0
|
|
131
|
+
? 'read'
|
|
132
|
+
: 'delivered';
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
this.latestMessageStatus = undefined;
|
|
136
|
+
}
|
|
137
|
+
if ((this.isActive && !this.isUnreadMessageWasCalled) ||
|
|
138
|
+
!this.canSendReadEvents) {
|
|
139
|
+
this.unreadCount = 0;
|
|
140
|
+
this.isUnread = false;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this.unreadCount = this.channel.countUnread();
|
|
144
|
+
this.isUnread = !!this.unreadCount;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
ChannelPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelPreviewComponent, deps: [{ token: i1.ChannelService }, { token: i0.NgZone }, { token: i2.ChatClientService }, { token: i3.MessageService }, { token: i4.CustomTemplatesService }, { token: i5.DateParserService }], target: i0.ɵɵFactoryTarget.Component });
|
|
148
|
+
ChannelPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ChannelPreviewComponent, selector: "stream-channel-preview", inputs: { channel: "channel" }, ngImport: i0, template: "<button\n class=\"str-chat__channel-preview-messenger str-chat__channel-preview\"\n data-testid=\"channel-preview-container\"\n [class.str-chat__channel-preview-messenger--active]=\"isActive\"\n [class.str-chat__channel-preview--active]=\"isActive\"\n [class.str-chat__channel-preview-messenger--unread]=\"isUnread\"\n (click)=\"setAsActiveChannel()\"\n>\n <div class=\"str-chat__channel-preview-messenger--left\">\n <stream-avatar-placeholder\n type=\"channel\"\n location=\"channel-preview\"\n name=\"{{ avatarName }}\"\n imageUrl=\"{{ avatarImage }}\"\n [channel]=\"channel\"\n ></stream-avatar-placeholder>\n </div>\n <div\n class=\"str-chat__channel-preview-messenger--right str-chat__channel-preview-end\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.channelPreviewInfoTemplate$ | async) ||\n defaultChannelInfo;\n context: {\n channelDisplayTitle: title,\n channel: channel,\n unreadCount: unreadCount,\n latestMessageText: latestMessageText,\n latestMessageStatus: latestMessageStatus,\n latestMessageTime: latestMessageTime,\n latestMessage: latestMessage\n }\n \"\n ></ng-container>\n <ng-template\n #defaultChannelInfo\n let-channelDisplayTitle=\"channelDisplayTitle\"\n let-unreadCount=\"unreadCount\"\n let-latestMessageText=\"latestMessageText\"\n let-latestMessageStatus=\"latestMessageStatus\"\n let-latestMessageTime=\"latestMessageTime\"\n >\n <div class=\"str-chat__channel-preview-end-first-row\">\n <div class=\"str-chat__channel-preview-messenger--name\">\n <span data-testid=\"channel-preview-title\">{{\n channelDisplayTitle\n }}</span>\n </div>\n <div\n *ngIf=\"unreadCount\"\n data-testid=\"unread-badge\"\n class=\"str-chat__channel-preview-unread-badge\"\n >\n {{ unreadCount }}\n </div>\n </div>\n <div class=\"str-chat__channel-preview-end-second-row\">\n <div\n data-testid=\"latest-message\"\n class=\"str-chat__channel-preview-messenger--last-message\"\n >\n <ng-container *ngIf=\"displayAs === 'text'; else asHTML\">\n {{ latestMessageText | translate }}\n </ng-container>\n <ng-template #asHTML>\n <span\n data-testid=\"html-content\"\n [innerHTML]=\"latestMessageText | translate\"\n ></span>\n </ng-template>\n </div>\n <div\n *ngIf=\"latestMessageStatus\"\n data-testid=\"latest-message-status\"\n class=\"str-chat__channel-preview-messenger--status str-chat__channel-preview-messenger--status-{{\n latestMessageStatus\n }}\"\n >\n <stream-icon-placeholder\n [icon]=\"latestMessageStatus === 'delivered' ? 'delivered' : 'read'\"\n ></stream-icon-placeholder>\n </div>\n <div\n *ngIf=\"latestMessageTime\"\n data-testid=\"latest-message-time\"\n class=\"str-chat__channel-preview-messenger--time\"\n >\n {{ latestMessageTime }}\n </div>\n </div>\n </ng-template>\n </div>\n</button>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "component", type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
|
|
149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelPreviewComponent, decorators: [{
|
|
150
|
+
type: Component,
|
|
151
|
+
args: [{ selector: 'stream-channel-preview', template: "<button\n class=\"str-chat__channel-preview-messenger str-chat__channel-preview\"\n data-testid=\"channel-preview-container\"\n [class.str-chat__channel-preview-messenger--active]=\"isActive\"\n [class.str-chat__channel-preview--active]=\"isActive\"\n [class.str-chat__channel-preview-messenger--unread]=\"isUnread\"\n (click)=\"setAsActiveChannel()\"\n>\n <div class=\"str-chat__channel-preview-messenger--left\">\n <stream-avatar-placeholder\n type=\"channel\"\n location=\"channel-preview\"\n name=\"{{ avatarName }}\"\n imageUrl=\"{{ avatarImage }}\"\n [channel]=\"channel\"\n ></stream-avatar-placeholder>\n </div>\n <div\n class=\"str-chat__channel-preview-messenger--right str-chat__channel-preview-end\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.channelPreviewInfoTemplate$ | async) ||\n defaultChannelInfo;\n context: {\n channelDisplayTitle: title,\n channel: channel,\n unreadCount: unreadCount,\n latestMessageText: latestMessageText,\n latestMessageStatus: latestMessageStatus,\n latestMessageTime: latestMessageTime,\n latestMessage: latestMessage\n }\n \"\n ></ng-container>\n <ng-template\n #defaultChannelInfo\n let-channelDisplayTitle=\"channelDisplayTitle\"\n let-unreadCount=\"unreadCount\"\n let-latestMessageText=\"latestMessageText\"\n let-latestMessageStatus=\"latestMessageStatus\"\n let-latestMessageTime=\"latestMessageTime\"\n >\n <div class=\"str-chat__channel-preview-end-first-row\">\n <div class=\"str-chat__channel-preview-messenger--name\">\n <span data-testid=\"channel-preview-title\">{{\n channelDisplayTitle\n }}</span>\n </div>\n <div\n *ngIf=\"unreadCount\"\n data-testid=\"unread-badge\"\n class=\"str-chat__channel-preview-unread-badge\"\n >\n {{ unreadCount }}\n </div>\n </div>\n <div class=\"str-chat__channel-preview-end-second-row\">\n <div\n data-testid=\"latest-message\"\n class=\"str-chat__channel-preview-messenger--last-message\"\n >\n <ng-container *ngIf=\"displayAs === 'text'; else asHTML\">\n {{ latestMessageText | translate }}\n </ng-container>\n <ng-template #asHTML>\n <span\n data-testid=\"html-content\"\n [innerHTML]=\"latestMessageText | translate\"\n ></span>\n </ng-template>\n </div>\n <div\n *ngIf=\"latestMessageStatus\"\n data-testid=\"latest-message-status\"\n class=\"str-chat__channel-preview-messenger--status str-chat__channel-preview-messenger--status-{{\n latestMessageStatus\n }}\"\n >\n <stream-icon-placeholder\n [icon]=\"latestMessageStatus === 'delivered' ? 'delivered' : 'read'\"\n ></stream-icon-placeholder>\n </div>\n <div\n *ngIf=\"latestMessageTime\"\n data-testid=\"latest-message-time\"\n class=\"str-chat__channel-preview-messenger--time\"\n >\n {{ latestMessageTime }}\n </div>\n </div>\n </ng-template>\n </div>\n</button>\n" }]
|
|
152
|
+
}], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i0.NgZone }, { type: i2.ChatClientService }, { type: i3.MessageService }, { type: i4.CustomTemplatesService }, { type: i5.DateParserService }]; }, propDecorators: { channel: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}] } });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLXByZXZpZXcvY2hhbm5lbC1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLXByZXZpZXcvY2hhbm5lbC1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFHMUQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBa0JsQyxZQUNVLGNBQThCLEVBQzlCLE1BQWMsRUFDZCxpQkFBb0MsRUFDNUMsY0FBOEIsRUFDdkIsc0JBQThDLEVBQzdDLFVBQTZCO1FBTDdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUVyQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzdDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBbkJ2QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQyxh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QjthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztTQUN0QztRQUNELElBQ0UsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ2pELENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUN2QjtZQUNBLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7O29IQTNMVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4RkN0QnBDLG94R0E4RkE7MkZEeEVhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSx3QkFBd0I7NFBBUXpCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhbm5lbCwgRXZlbnQsIEZvcm1hdE1lc3NhZ2VSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldENoYW5uZWxEaXNwbGF5VGV4dCB9IGZyb20gJy4uL2dldC1jaGFubmVsLWRpc3BsYXktdGV4dCc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vZ2V0LW1lc3NhZ2UtdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRSZWFkQnkgfSBmcm9tICcuLi9yZWFkLWJ5JztcbmltcG9ydCB7IGlzT25TZXBhcmF0ZURhdGUgfSBmcm9tICcuLi9pcy1vbi1zZXBhcmF0ZS1kYXRlJztcbmltcG9ydCB7IERhdGVQYXJzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0ZS1wYXJzZXIuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBDaGFubmVsUHJldmlld2AgY29tcG9uZW50IGRpc3BsYXlzIGEgY2hhbm5lbCBwcmV2aWV3IGluIHRoZSBjaGFubmVsIGxpc3QsIGl0IGNvbnNpc3RzIG9mIHRoZSBpbWFnZSwgbmFtZSBhbmQgbGF0ZXN0IG1lc3NhZ2Ugb2YgdGhlIGNoYW5uZWwuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1jaGFubmVsLXByZXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhbm5lbC1wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbm5lbFByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUaGUgY2hhbm5lbCB0byBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIGNoYW5uZWw6IENoYW5uZWwgfCB1bmRlZmluZWQ7XG4gIGlzQWN0aXZlID0gZmFsc2U7XG4gIGlzVW5yZWFkTWVzc2FnZVdhc0NhbGxlZCA9IGZhbHNlO1xuICBpc1VucmVhZCA9IGZhbHNlO1xuICB1bnJlYWRDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsYXRlc3RNZXNzYWdlVGV4dDogc3RyaW5nID0gJ3N0cmVhbUNoYXQuTm90aGluZyB5ZXQuLi4nO1xuICBsYXRlc3RNZXNzYWdlU3RhdHVzPzogJ2RlbGl2ZXJlZCcgfCAncmVhZCc7XG4gIGxhdGVzdE1lc3NhZ2VUaW1lPzogc3RyaW5nO1xuICBsYXRlc3RNZXNzYWdlPzogRm9ybWF0TWVzc2FnZVJlc3BvbnNlO1xuICBkaXNwbGF5QXM6ICd0ZXh0JyB8ICdodG1sJztcbiAgdXNlcklkPzogc3RyaW5nO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IChTdWJzY3JpcHRpb24gfCB7IHVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkIH0pW10gPSBbXTtcbiAgcHJpdmF0ZSBjYW5TZW5kUmVhZEV2ZW50cyA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHVibGljIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlUGFyc2VyOiBEYXRlUGFyc2VyU2VydmljZVxuICApIHtcbiAgICB0aGlzLmRpc3BsYXlBcyA9IG1lc3NhZ2VTZXJ2aWNlLmRpc3BsYXlBcztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZS51c2VyJC5zdWJzY3JpYmUoKHVzZXIpID0+IHtcbiAgICAgICAgaWYgKHVzZXI/LmlkICE9PSB0aGlzLnVzZXJJZCkge1xuICAgICAgICAgIHRoaXMudXNlcklkID0gdXNlcj8uaWQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbCQuc3Vic2NyaWJlKFxuICAgICAgICAoYWN0aXZlQ2hhbm5lbCkgPT5cbiAgICAgICAgICAodGhpcy5pc0FjdGl2ZSA9IGFjdGl2ZUNoYW5uZWw/LmlkID09PSB0aGlzLmNoYW5uZWw/LmlkKVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmNoYW5uZWw/LnN0YXRlPy5sYXRlc3RNZXNzYWdlcztcbiAgICBpZiAobWVzc2FnZXMgJiYgbWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRMYXRlc3RNZXNzYWdlKG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVVbnJlYWRTdGF0ZSgpO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9XG4gICAgICAodGhpcy5jaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdKSB8fCBbXTtcbiAgICB0aGlzLmNhblNlbmRSZWFkRXZlbnRzID0gY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3JlYWQtZXZlbnRzJykgIT09IC0xO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsIS5vbignbWVzc2FnZS5uZXcnLCB0aGlzLmhhbmRsZU1lc3NhZ2VFdmVudC5iaW5kKHRoaXMpKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWwhLm9uKCdtZXNzYWdlLnVwZGF0ZWQnLCB0aGlzLmhhbmRsZU1lc3NhZ2VFdmVudC5iaW5kKHRoaXMpKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWwhLm9uKCdtZXNzYWdlLmRlbGV0ZWQnLCB0aGlzLmhhbmRsZU1lc3NhZ2VFdmVudC5iaW5kKHRoaXMpKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWwhLm9uKCdjaGFubmVsLnRydW5jYXRlZCcsIHRoaXMuaGFuZGxlTWVzc2FnZUV2ZW50LmJpbmQodGhpcykpXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbCEub24oJ21lc3NhZ2UucmVhZCcsICgpID0+XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1VucmVhZE1lc3NhZ2VXYXNDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVVucmVhZFN0YXRlKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2UuZXZlbnRzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAoZSkgPT5cbiAgICAgICAgICAgICAgZS5ldmVudFR5cGUgPT09ICdub3RpZmljYXRpb24ubWFya191bnJlYWQnICYmXG4gICAgICAgICAgICAgIHRoaXMuY2hhbm5lbCEuaWQgPT09IGUuZXZlbnQ/LmNoYW5uZWxfaWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNVbnJlYWRNZXNzYWdlV2FzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVW5yZWFkU3RhdGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXQgYXZhdGFySW1hZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbm5lbD8uZGF0YT8uaW1hZ2U7XG4gIH1cblxuICBnZXQgYXZhdGFyTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFubmVsPy5kYXRhPy5uYW1lO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIGlmICghdGhpcy5jaGFubmVsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRDaGFubmVsRGlzcGxheVRleHQoXG4gICAgICB0aGlzLmNoYW5uZWwsXG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlciFcbiAgICApO1xuICB9XG5cbiAgc2V0QXNBY3RpdmVDaGFubmVsKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5zZXRBc0FjdGl2ZUNoYW5uZWwodGhpcy5jaGFubmVsISk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1lc3NhZ2VFdmVudChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbm5lbD8uc3RhdGUubGF0ZXN0TWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sYXRlc3RNZXNzYWdlU3RhdHVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VUZXh0ID0gJ3N0cmVhbUNoYXQuTm90aGluZyB5ZXQuLi4nO1xuICAgICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RNZXNzYWdlID1cbiAgICAgICAgdGhpcy5jaGFubmVsPy5zdGF0ZS5sYXRlc3RNZXNzYWdlc1tcbiAgICAgICAgICB0aGlzLmNoYW5uZWw/LnN0YXRlLmxhdGVzdE1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgXTtcbiAgICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBsYXRlc3RNZXNzYWdlPy5pZCAhPT0gZXZlbnQubWVzc2FnZS5pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNldExhdGVzdE1lc3NhZ2UobGF0ZXN0TWVzc2FnZSk7XG4gICAgICB0aGlzLnVwZGF0ZVVucmVhZFN0YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldExhdGVzdE1lc3NhZ2UobWVzc2FnZT86IEZvcm1hdE1lc3NhZ2VSZXNwb25zZSkge1xuICAgIHRoaXMubGF0ZXN0TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKG1lc3NhZ2U/LmRlbGV0ZWRfYXQpIHtcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZVRleHQgPSAnc3RyZWFtQ2hhdC5NZXNzYWdlIGRlbGV0ZWQnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZT8udGV4dCkge1xuICAgICAgdGhpcy5sYXRlc3RNZXNzYWdlVGV4dCA9XG4gICAgICAgIGdldE1lc3NhZ2VUcmFuc2xhdGlvbihcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHRoaXMuY2hhbm5lbCxcbiAgICAgICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlclxuICAgICAgICApIHx8IG1lc3NhZ2UudGV4dDtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VUZXh0ID0gJ3N0cmVhbUNoYXQu8J+PmSBBdHRhY2htZW50Li4uJztcbiAgICB9XG4gICAgaWYgKHRoaXMubGF0ZXN0TWVzc2FnZSAmJiB0aGlzLmxhdGVzdE1lc3NhZ2UudHlwZSA9PT0gJ3JlZ3VsYXInKSB7XG4gICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VUaW1lID0gaXNPblNlcGFyYXRlRGF0ZShcbiAgICAgICAgbmV3IERhdGUoKSxcbiAgICAgICAgdGhpcy5sYXRlc3RNZXNzYWdlLmNyZWF0ZWRfYXRcbiAgICAgIClcbiAgICAgICAgPyB0aGlzLmRhdGVQYXJzZXIucGFyc2VEYXRlKHRoaXMubGF0ZXN0TWVzc2FnZS5jcmVhdGVkX2F0KVxuICAgICAgICA6IHRoaXMuZGF0ZVBhcnNlci5wYXJzZVRpbWUodGhpcy5sYXRlc3RNZXNzYWdlLmNyZWF0ZWRfYXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VUaW1lID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVW5yZWFkU3RhdGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGFubmVsICYmXG4gICAgICB0aGlzLmxhdGVzdE1lc3NhZ2UgJiZcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZS51c2VyPy5pZCA9PT0gdGhpcy51c2VySWQgJiZcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZS5zdGF0dXMgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZS50eXBlID09PSAncmVndWxhcidcbiAgICApIHtcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZVN0YXR1cyA9XG4gICAgICAgIGdldFJlYWRCeSh0aGlzLmxhdGVzdE1lc3NhZ2UsIHRoaXMuY2hhbm5lbCkubGVuZ3RoID4gMFxuICAgICAgICAgID8gJ3JlYWQnXG4gICAgICAgICAgOiAnZGVsaXZlcmVkJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXRlc3RNZXNzYWdlU3RhdHVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAodGhpcy5pc0FjdGl2ZSAmJiAhdGhpcy5pc1VucmVhZE1lc3NhZ2VXYXNDYWxsZWQpIHx8XG4gICAgICAhdGhpcy5jYW5TZW5kUmVhZEV2ZW50c1xuICAgICkge1xuICAgICAgdGhpcy51bnJlYWRDb3VudCA9IDA7XG4gICAgICB0aGlzLmlzVW5yZWFkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudW5yZWFkQ291bnQgPSB0aGlzLmNoYW5uZWwhLmNvdW50VW5yZWFkKCk7XG4gICAgdGhpcy5pc1VucmVhZCA9ICEhdGhpcy51bnJlYWRDb3VudDtcbiAgfVxufVxuIiwiPGJ1dHRvblxuICBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLXByZXZpZXctbWVzc2VuZ2VyIHN0ci1jaGF0X19jaGFubmVsLXByZXZpZXdcIlxuICBkYXRhLXRlc3RpZD1cImNoYW5uZWwtcHJldmlldy1jb250YWluZXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1tZXNzZW5nZXItLWFjdGl2ZV09XCJpc0FjdGl2ZVwiXG4gIFtjbGFzcy5zdHItY2hhdF9fY2hhbm5lbC1wcmV2aWV3LS1hY3RpdmVdPVwiaXNBY3RpdmVcIlxuICBbY2xhc3Muc3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1tZXNzZW5nZXItLXVucmVhZF09XCJpc1VucmVhZFwiXG4gIChjbGljayk9XCJzZXRBc0FjdGl2ZUNoYW5uZWwoKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1wcmV2aWV3LW1lc3Nlbmdlci0tbGVmdFwiPlxuICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICB0eXBlPVwiY2hhbm5lbFwiXG4gICAgICBsb2NhdGlvbj1cImNoYW5uZWwtcHJldmlld1wiXG4gICAgICBuYW1lPVwie3sgYXZhdGFyTmFtZSB9fVwiXG4gICAgICBpbWFnZVVybD1cInt7IGF2YXRhckltYWdlIH19XCJcbiAgICAgIFtjaGFubmVsXT1cImNoYW5uZWxcIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1wcmV2aWV3LW1lc3Nlbmdlci0tcmlnaHQgc3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1lbmRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2hhbm5lbFByZXZpZXdJbmZvVGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgZGVmYXVsdENoYW5uZWxJbmZvO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgY2hhbm5lbERpc3BsYXlUaXRsZTogdGl0bGUsXG4gICAgICAgICAgY2hhbm5lbDogY2hhbm5lbCxcbiAgICAgICAgICB1bnJlYWRDb3VudDogdW5yZWFkQ291bnQsXG4gICAgICAgICAgbGF0ZXN0TWVzc2FnZVRleHQ6IGxhdGVzdE1lc3NhZ2VUZXh0LFxuICAgICAgICAgIGxhdGVzdE1lc3NhZ2VTdGF0dXM6IGxhdGVzdE1lc3NhZ2VTdGF0dXMsXG4gICAgICAgICAgbGF0ZXN0TWVzc2FnZVRpbWU6IGxhdGVzdE1lc3NhZ2VUaW1lLFxuICAgICAgICAgIGxhdGVzdE1lc3NhZ2U6IGxhdGVzdE1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAjZGVmYXVsdENoYW5uZWxJbmZvXG4gICAgICBsZXQtY2hhbm5lbERpc3BsYXlUaXRsZT1cImNoYW5uZWxEaXNwbGF5VGl0bGVcIlxuICAgICAgbGV0LXVucmVhZENvdW50PVwidW5yZWFkQ291bnRcIlxuICAgICAgbGV0LWxhdGVzdE1lc3NhZ2VUZXh0PVwibGF0ZXN0TWVzc2FnZVRleHRcIlxuICAgICAgbGV0LWxhdGVzdE1lc3NhZ2VTdGF0dXM9XCJsYXRlc3RNZXNzYWdlU3RhdHVzXCJcbiAgICAgIGxldC1sYXRlc3RNZXNzYWdlVGltZT1cImxhdGVzdE1lc3NhZ2VUaW1lXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1lbmQtZmlyc3Qtcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1wcmV2aWV3LW1lc3Nlbmdlci0tbmFtZVwiPlxuICAgICAgICAgIDxzcGFuIGRhdGEtdGVzdGlkPVwiY2hhbm5lbC1wcmV2aWV3LXRpdGxlXCI+e3tcbiAgICAgICAgICAgIGNoYW5uZWxEaXNwbGF5VGl0bGVcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInVucmVhZENvdW50XCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInVucmVhZC1iYWRnZVwiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1wcmV2aWV3LXVucmVhZC1iYWRnZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB1bnJlYWRDb3VudCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLXByZXZpZXctZW5kLXNlY29uZC1yb3dcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibGF0ZXN0LW1lc3NhZ2VcIlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1tZXNzZW5nZXItLWxhc3QtbWVzc2FnZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheUFzID09PSAndGV4dCc7IGVsc2UgYXNIVE1MXCI+XG4gICAgICAgICAgICB7eyBsYXRlc3RNZXNzYWdlVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXNIVE1MPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJodG1sLWNvbnRlbnRcIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhdGVzdE1lc3NhZ2VUZXh0IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImxhdGVzdE1lc3NhZ2VTdGF0dXNcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibGF0ZXN0LW1lc3NhZ2Utc3RhdHVzXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLXByZXZpZXctbWVzc2VuZ2VyLS1zdGF0dXMgc3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1tZXNzZW5nZXItLXN0YXR1cy17e1xuICAgICAgICAgICAgbGF0ZXN0TWVzc2FnZVN0YXR1c1xuICAgICAgICAgIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgW2ljb25dPVwibGF0ZXN0TWVzc2FnZVN0YXR1cyA9PT0gJ2RlbGl2ZXJlZCcgPyAnZGVsaXZlcmVkJyA6ICdyZWFkJ1wiXG4gICAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJsYXRlc3RNZXNzYWdlVGltZVwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJsYXRlc3QtbWVzc2FnZS10aW1lXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLXByZXZpZXctbWVzc2VuZ2VyLS10aW1lXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGxhdGVzdE1lc3NhZ2VUaW1lIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2J1dHRvbj5cbiJdfQ==
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class allows you to make paginated channel query requests.
|
|
3
|
+
*/
|
|
4
|
+
export class ChannelQuery {
|
|
5
|
+
constructor(chatService, channelService, filters, sort = { last_message_at: -1 }, options = {
|
|
6
|
+
limit: 25,
|
|
7
|
+
state: true,
|
|
8
|
+
presence: true,
|
|
9
|
+
watch: true,
|
|
10
|
+
}) {
|
|
11
|
+
this.chatService = chatService;
|
|
12
|
+
this.channelService = channelService;
|
|
13
|
+
this.filters = filters;
|
|
14
|
+
this.sort = sort;
|
|
15
|
+
this.options = options;
|
|
16
|
+
}
|
|
17
|
+
async query(queryType) {
|
|
18
|
+
if (queryType === 'first-page' || queryType === 'recover-state') {
|
|
19
|
+
this.nextPageConfiguration = undefined;
|
|
20
|
+
}
|
|
21
|
+
const prevChannels = queryType === 'recover-state' ? [] : this.channelService.channels;
|
|
22
|
+
let filters;
|
|
23
|
+
let options;
|
|
24
|
+
if (this.nextPageConfiguration) {
|
|
25
|
+
if (this.nextPageConfiguration.type === 'filter') {
|
|
26
|
+
filters = {
|
|
27
|
+
...this.filters,
|
|
28
|
+
...this.nextPageConfiguration.paginationFilter,
|
|
29
|
+
};
|
|
30
|
+
options = this.options;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
options = {
|
|
34
|
+
...this.options,
|
|
35
|
+
offset: this.nextPageConfiguration.offset,
|
|
36
|
+
};
|
|
37
|
+
filters = this.filters;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
filters = this.filters;
|
|
42
|
+
options = this.options;
|
|
43
|
+
}
|
|
44
|
+
const channels = await this.chatService.chatClient.queryChannels(filters, this.sort || {}, options);
|
|
45
|
+
this.setNextPageConfiguration(channels);
|
|
46
|
+
const currentActiveChannel = this.channelService.activeChannel;
|
|
47
|
+
if (queryType === 'recover-state' &&
|
|
48
|
+
currentActiveChannel &&
|
|
49
|
+
!channels.find((c) => c.cid === currentActiveChannel?.cid)) {
|
|
50
|
+
try {
|
|
51
|
+
await currentActiveChannel.watch();
|
|
52
|
+
channels.unshift(currentActiveChannel);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
this.chatService.chatClient.logger('warn', 'Unable to refetch active channel after state recover', error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
channels: [...prevChannels, ...channels],
|
|
60
|
+
hasMorePage: channels.length >= this.options.limit,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
setNextPageConfiguration(channelQueryResult) {
|
|
64
|
+
if (this.customPaginator) {
|
|
65
|
+
this.nextPageConfiguration = this.customPaginator(channelQueryResult);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.nextPageConfiguration = {
|
|
69
|
+
type: 'offset',
|
|
70
|
+
offset: (this.nextPageConfiguration?.type === 'offset'
|
|
71
|
+
? this.nextPageConfiguration.offset
|
|
72
|
+
: 0) + channelQueryResult.length,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFXdkIsWUFDVSxXQUE4QixFQUM5QixjQUE4QixFQUM5QixPQUF1QixFQUN2QixPQUFvQixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUMzQyxVQUEwQjtRQUNoQyxLQUFLLEVBQUUsRUFBRTtRQUNULEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLElBQUk7UUFDZCxLQUFLLEVBQUUsSUFBSTtLQUNaO1FBVE8sZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUF1QztRQUMzQyxZQUFPLEdBQVAsT0FBTyxDQUtkO0lBQ0EsQ0FBQztJQUVKLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBMkI7UUFDckMsSUFBSSxTQUFTLEtBQUssWUFBWSxJQUFJLFNBQVMsS0FBSyxlQUFlLEVBQUU7WUFDL0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQztTQUN4QztRQUNELE1BQU0sWUFBWSxHQUNoQixTQUFTLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3BFLElBQUksT0FBdUIsQ0FBQztRQUM1QixJQUFJLE9BQXVCLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDaEQsT0FBTyxHQUFHO29CQUNSLEdBQUcsSUFBSSxDQUFDLE9BQU87b0JBQ2YsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCO2lCQUMvQyxDQUFDO2dCQUNGLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLE9BQU8sR0FBRztvQkFDUixHQUFHLElBQUksQ0FBQyxPQUFPO29CQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTTtpQkFDMUMsQ0FBQztnQkFDRixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN4QjtTQUNGO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN4QjtRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUM5RCxPQUFPLEVBQ1AsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQ2YsT0FBTyxDQUNSLENBQUM7UUFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUMvRCxJQUNFLFNBQVMsS0FBSyxlQUFlO1lBQzdCLG9CQUFvQjtZQUNwQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssb0JBQW9CLEVBQUUsR0FBRyxDQUFDLEVBQzFEO1lBQ0EsSUFBSTtnQkFDRixNQUFNLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDeEM7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ2hDLE1BQU0sRUFDTixzREFBc0QsRUFDdEQsS0FBZ0MsQ0FDakMsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDeEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFNO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCLENBQUMsa0JBQTZCO1FBQ3BELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUc7Z0JBQzNCLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFDSixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEtBQUssUUFBUTtvQkFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO29CQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTTthQUNyQyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFubmVsLFxuICBDaGFubmVsRmlsdGVycyxcbiAgQ2hhbm5lbE9wdGlvbnMsXG4gIENoYW5uZWxTb3J0LFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENoYW5uZWxRdWVyeVJlc3VsdCxcbiAgQ2hhbm5lbFF1ZXJ5VHlwZSxcbiAgTmV4dFBhZ2VDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB5b3UgdG8gbWFrZSBwYWdpbmF0ZWQgY2hhbm5lbCBxdWVyeSByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENoYW5uZWxRdWVyeSB7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBhbiBvZmZzZXQgYmFzZWQgcGFnaW5hdGlvbiwgeW91IGNhbiBjaGFuZ2UvZXh0ZW5kIHRoaXMgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGN1c3RvbSBwYWdpbmF0b3IgbWV0aG9kLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbGF0ZXN0IGNoYW5uZWwgcXVlcnkuXG4gICAqXG4gICAqIFlvdSBjYW4gcmV0dXJuIGVpdGhlciBhbiBvZmZzZXQsIG9yIGEgZmlsdGVyIHVzaW5nIHRoZSBbYCRsdGVgL2AkZ3RlYCBvcGVyYXRvcl0oL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3F1ZXJ5X3N5bnRheF9vcGVyYXRvcnMvKS4gSWYgeW91IHJldHVybiBhIGZpbHRlciwgaXQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZmlsdGVyIHByb3ZpZGVkIGZvciB0aGUgYGluaXRgIG1ldGhvZC5cbiAgICovXG4gIGN1c3RvbVBhZ2luYXRvcj86IChjaGFubmVsUXVlcnlSZXN1bHQ6IENoYW5uZWxbXSkgPT4gTmV4dFBhZ2VDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIG5leHRQYWdlQ29uZmlndXJhdGlvbj86IE5leHRQYWdlQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGZpbHRlcnM6IENoYW5uZWxGaWx0ZXJzLFxuICAgIHByaXZhdGUgc29ydDogQ2hhbm5lbFNvcnQgPSB7IGxhc3RfbWVzc2FnZV9hdDogLTEgfSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgbGltaXQ6IDI1LFxuICAgICAgc3RhdGU6IHRydWUsXG4gICAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICAgIHdhdGNoOiB0cnVlLFxuICAgIH1cbiAgKSB7fVxuXG4gIGFzeW5jIHF1ZXJ5KHF1ZXJ5VHlwZTogQ2hhbm5lbFF1ZXJ5VHlwZSk6IFByb21pc2U8Q2hhbm5lbFF1ZXJ5UmVzdWx0PiB7XG4gICAgaWYgKHF1ZXJ5VHlwZSA9PT0gJ2ZpcnN0LXBhZ2UnIHx8IHF1ZXJ5VHlwZSA9PT0gJ3JlY292ZXItc3RhdGUnKSB7XG4gICAgICB0aGlzLm5leHRQYWdlQ29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcHJldkNoYW5uZWxzID1cbiAgICAgIHF1ZXJ5VHlwZSA9PT0gJ3JlY292ZXItc3RhdGUnID8gW10gOiB0aGlzLmNoYW5uZWxTZXJ2aWNlLmNoYW5uZWxzO1xuICAgIGxldCBmaWx0ZXJzOiBDaGFubmVsRmlsdGVycztcbiAgICBsZXQgb3B0aW9uczogQ2hhbm5lbE9wdGlvbnM7XG4gICAgaWYgKHRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uKSB7XG4gICAgICBpZiAodGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24udHlwZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgZmlsdGVycyA9IHtcbiAgICAgICAgICAuLi50aGlzLmZpbHRlcnMsXG4gICAgICAgICAgLi4udGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24ucGFnaW5hdGlvbkZpbHRlcixcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgIG9mZnNldDogdGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24ub2Zmc2V0LFxuICAgICAgICB9O1xuICAgICAgICBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgY29uc3QgY2hhbm5lbHMgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmNoYXRDbGllbnQucXVlcnlDaGFubmVscyhcbiAgICAgIGZpbHRlcnMsXG4gICAgICB0aGlzLnNvcnQgfHwge30sXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICB0aGlzLnNldE5leHRQYWdlQ29uZmlndXJhdGlvbihjaGFubmVscyk7XG5cbiAgICBjb25zdCBjdXJyZW50QWN0aXZlQ2hhbm5lbCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbDtcbiAgICBpZiAoXG4gICAgICBxdWVyeVR5cGUgPT09ICdyZWNvdmVyLXN0YXRlJyAmJlxuICAgICAgY3VycmVudEFjdGl2ZUNoYW5uZWwgJiZcbiAgICAgICFjaGFubmVscy5maW5kKChjKSA9PiBjLmNpZCA9PT0gY3VycmVudEFjdGl2ZUNoYW5uZWw/LmNpZClcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGN1cnJlbnRBY3RpdmVDaGFubmVsLndhdGNoKCk7XG4gICAgICAgIGNoYW5uZWxzLnVuc2hpZnQoY3VycmVudEFjdGl2ZUNoYW5uZWwpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jaGF0Q2xpZW50LmxvZ2dlcihcbiAgICAgICAgICAnd2FybicsXG4gICAgICAgICAgJ1VuYWJsZSB0byByZWZldGNoIGFjdGl2ZSBjaGFubmVsIGFmdGVyIHN0YXRlIHJlY292ZXInLFxuICAgICAgICAgIGVycm9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYW5uZWxzOiBbLi4ucHJldkNoYW5uZWxzLCAuLi5jaGFubmVsc10sXG4gICAgICBoYXNNb3JlUGFnZTogY2hhbm5lbHMubGVuZ3RoID49IHRoaXMub3B0aW9ucy5saW1pdCEsXG4gICAgfTtcbiAgfVxuXG4gIHNldE5leHRQYWdlQ29uZmlndXJhdGlvbihjaGFubmVsUXVlcnlSZXN1bHQ6IENoYW5uZWxbXSkge1xuICAgIGlmICh0aGlzLmN1c3RvbVBhZ2luYXRvcikge1xuICAgICAgdGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmN1c3RvbVBhZ2luYXRvcihjaGFubmVsUXVlcnlSZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5leHRQYWdlQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgdHlwZTogJ29mZnNldCcsXG4gICAgICAgIG9mZnNldDpcbiAgICAgICAgICAodGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24/LnR5cGUgPT09ICdvZmZzZXQnXG4gICAgICAgICAgICA/IHRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uLm9mZnNldFxuICAgICAgICAgICAgOiAwKSArIGNoYW5uZWxRdWVyeVJlc3VsdC5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIl19
|