stream-chat-angular 6.2.0 → 6.3.0-beta.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/assets/i18n/en.d.ts +42 -0
- package/assets/version.d.ts +1 -1
- package/esm2020/assets/i18n/en.mjs +43 -1
- package/esm2020/assets/version.mjs +2 -2
- package/esm2020/lib/channel-list/channel-list.component.mjs +3 -3
- package/esm2020/lib/channel-preview/channel-preview.component.mjs +4 -1
- package/esm2020/lib/channel.service.mjs +6 -3
- package/esm2020/lib/custom-templates.service.mjs +9 -1
- package/esm2020/lib/icon/icon.component.mjs +1 -1
- package/esm2020/lib/message/message.component.mjs +21 -6
- package/esm2020/lib/message-actions.service.mjs +5 -1
- package/esm2020/lib/message-input/message-input.component.mjs +30 -5
- package/esm2020/lib/message-preview.mjs +3 -2
- package/esm2020/lib/modal/modal.component.mjs +3 -3
- package/esm2020/lib/modal/stream-modal.module.mjs +19 -0
- package/esm2020/lib/notification-list/stream-notification.module.mjs +20 -0
- package/esm2020/lib/paginated-list/stream-paginated-list.module.mjs +20 -0
- package/esm2020/lib/polls/base-poll.component.mjs +87 -0
- package/esm2020/lib/polls/poll/poll.component.mjs +34 -0
- package/esm2020/lib/polls/poll-actions/add-option/add-option.component.mjs +67 -0
- package/esm2020/lib/polls/poll-actions/poll-actions.component.mjs +137 -0
- package/esm2020/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.mjs +82 -0
- package/esm2020/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.mjs +63 -0
- package/esm2020/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.mjs +33 -0
- package/esm2020/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.mjs +82 -0
- package/esm2020/lib/polls/poll-actions/upsert-answer/upsert-answer.component.mjs +60 -0
- package/esm2020/lib/polls/poll-composer/poll-composer.component.mjs +134 -0
- package/esm2020/lib/polls/poll-composer/validators.mjs +18 -0
- package/esm2020/lib/polls/poll-header/poll-header.component.mjs +80 -0
- package/esm2020/lib/polls/poll-option-selector/poll-option-selector.component.mjs +137 -0
- package/esm2020/lib/polls/poll-options-list/poll-options-list.component.mjs +39 -0
- package/esm2020/lib/polls/poll-preview/poll-preview.component.mjs +31 -0
- package/esm2020/lib/polls/stream-polls.module.mjs +108 -0
- package/esm2020/lib/polls/unique.validator.mjs +13 -0
- package/esm2020/lib/stream-chat.module.mjs +26 -19
- package/esm2020/lib/types.mjs +1 -1
- package/esm2020/public-api.mjs +18 -1
- package/fesm2015/stream-chat-angular.mjs +1333 -61
- package/fesm2015/stream-chat-angular.mjs.map +1 -1
- package/fesm2020/stream-chat-angular.mjs +1291 -59
- package/fesm2020/stream-chat-angular.mjs.map +1 -1
- package/lib/channel.service.d.ts +2 -1
- package/lib/custom-templates.service.d.ts +14 -0
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/message/message.component.d.ts +1 -1
- package/lib/message-actions.service.d.ts +4 -0
- package/lib/message-input/message-input.component.d.ts +11 -1
- package/lib/message-preview.d.ts +1 -1
- package/lib/modal/stream-modal.module.d.ts +9 -0
- package/lib/notification-list/stream-notification.module.d.ts +10 -0
- package/lib/paginated-list/stream-paginated-list.module.d.ts +10 -0
- package/lib/polls/base-poll.component.d.ts +43 -0
- package/lib/polls/poll/poll.component.d.ts +12 -0
- package/lib/polls/poll-actions/add-option/add-option.component.d.ts +22 -0
- package/lib/polls/poll-actions/poll-actions.component.d.ts +50 -0
- package/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.d.ts +25 -0
- package/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.d.ts +22 -0
- package/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.d.ts +20 -0
- package/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.d.ts +24 -0
- package/lib/polls/poll-actions/upsert-answer/upsert-answer.component.d.ts +27 -0
- package/lib/polls/poll-composer/poll-composer.component.d.ts +43 -0
- package/lib/polls/poll-composer/validators.d.ts +3 -0
- package/lib/polls/poll-header/poll-header.component.d.ts +19 -0
- package/lib/polls/poll-option-selector/poll-option-selector.component.d.ts +27 -0
- package/lib/polls/poll-options-list/poll-options-list.component.d.ts +17 -0
- package/lib/polls/poll-preview/poll-preview.component.d.ts +13 -0
- package/lib/polls/stream-polls.module.d.ts +26 -0
- package/lib/polls/unique.validator.d.ts +2 -0
- package/lib/stream-chat.module.d.ts +20 -19
- package/lib/types.d.ts +2 -1
- package/package.json +6 -2
- package/public-api.d.ts +17 -0
- package/src/assets/i18n/en.ts +46 -0
- package/src/assets/styles/css/index.css +1 -1
- package/src/assets/styles/css/index.layout.css +1 -1
- package/src/assets/styles/scss/AttachmentList/AttachmentList-layout.scss +50 -0
- package/src/assets/styles/scss/AttachmentList/AttachmentList-theme.scss +56 -0
- package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-layout.scss +4 -1
- package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-theme.scss +11 -0
- package/src/assets/styles/scss/Autocomplete/Autocomplete-layout.scss +14 -0
- package/src/assets/styles/scss/Autocomplete/Autocomplete-theme.scss +11 -0
- package/src/assets/styles/scss/Dialog/Dialog-layout.scss +13 -5
- package/src/assets/styles/scss/DropzoneContainer/DropzoneContainer-layout.scss +14 -0
- package/src/assets/styles/scss/DropzoneContainer/DropzoneContainer-theme.scss +17 -0
- package/src/assets/styles/scss/Form/Form-layout.scss +40 -0
- package/src/assets/styles/scss/Form/Form-theme.scss +75 -10
- package/src/assets/styles/scss/Icon/Icon-layout.scss +6 -0
- package/src/assets/styles/scss/Icon/Icon-theme.scss +4 -0
- package/src/assets/styles/scss/LinkPreview/LinkPreview-layout.scss +18 -0
- package/src/assets/styles/scss/LinkPreview/LinkPreview-theme.scss +15 -0
- package/src/assets/styles/scss/Location/Location-layout.scss +52 -0
- package/src/assets/styles/scss/Location/Location-theme.scss +32 -0
- package/src/assets/styles/scss/Message/Message-layout.scss +37 -2
- package/src/assets/styles/scss/Message/Message-theme.scss +40 -1
- package/src/assets/styles/scss/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
- package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +32 -13
- package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +28 -20
- package/src/assets/styles/scss/Modal/Modal-layout.scss +2 -0
- package/src/assets/styles/scss/Modal/Modal-theme.scss +21 -6
- package/src/assets/styles/scss/Poll/Poll-layout.scss +45 -44
- package/src/assets/styles/scss/Poll/Poll-theme.scss +8 -36
- package/src/assets/styles/scss/_icons.scss +1 -0
- package/src/assets/styles/scss/index.layout.scss +3 -1
- package/src/assets/styles/scss/index.scss +2 -0
- package/src/assets/version.ts +1 -1
- /package/src/assets/styles/scss/DragAndDropContainer/{DragAmdDropContainer-layout.scss → DragAndDropContainer-layout.scss} +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Output, } from '@angular/core';
|
|
2
|
+
import { BasePollComponent } from '../../base-poll.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@ngx-translate/core";
|
|
6
|
+
import * as i3 from "../../../paginated-list/paginated-list.component";
|
|
7
|
+
import * as i4 from "../poll-results/poll-vote/poll-vote.component";
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export class PollAnswersListComponent extends BasePollComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.class = 'str-chat__modal__poll-answer-list';
|
|
15
|
+
/**
|
|
16
|
+
* The even that's emitted when the update/add comment button is clicked
|
|
17
|
+
*/
|
|
18
|
+
this.upsertOwnAnswer = new EventEmitter();
|
|
19
|
+
this.isLoading = false;
|
|
20
|
+
this.answers = [];
|
|
21
|
+
this.isClosed = false;
|
|
22
|
+
}
|
|
23
|
+
ngOnChanges(changes) {
|
|
24
|
+
super.ngOnChanges(changes);
|
|
25
|
+
if (changes['pollId']) {
|
|
26
|
+
void this.queryAnswers();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async queryAnswers() {
|
|
30
|
+
if (!this.poll) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
this.isLoading = true;
|
|
35
|
+
const response = await this.poll.queryAnswers({
|
|
36
|
+
filter: {},
|
|
37
|
+
sort: { created_at: -1 },
|
|
38
|
+
options: {
|
|
39
|
+
next: this.next,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
this.next = response.next;
|
|
43
|
+
this.answers = [...this.answers, ...response.votes];
|
|
44
|
+
this.markForCheck();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
this.notificationService.addTemporaryNotification('streamChat.Error loading answers');
|
|
48
|
+
this.markForCheck();
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
this.isLoading = false;
|
|
53
|
+
this.markForCheck();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
trackByAnswerId(_, answer) {
|
|
57
|
+
return answer.id;
|
|
58
|
+
}
|
|
59
|
+
stateStoreSelector(poll, markForCheck) {
|
|
60
|
+
const unsubscribe = poll.state.subscribeWithSelector((state) => ({
|
|
61
|
+
is_closed: state.is_closed,
|
|
62
|
+
own_answer: state.ownAnswer,
|
|
63
|
+
}), (state) => {
|
|
64
|
+
this.isClosed = state.is_closed ?? false;
|
|
65
|
+
this.ownAnswer = state.own_answer ?? undefined;
|
|
66
|
+
markForCheck();
|
|
67
|
+
});
|
|
68
|
+
return unsubscribe;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
PollAnswersListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollAnswersListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
+
PollAnswersListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollAnswersListComponent, selector: "stream-poll-answers-list", outputs: { upsertOwnAnswer: "upsertOwnAnswer" }, host: { properties: { "class": "this.class" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"str-chat__modal__poll-answer-list\">\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\" translate>\n streamChat.Poll comments\n </div>\n </div>\n <div class=\"str-chat__modal__poll-answer-list__body\">\n <div class=\"str-chat__poll-answer-list\">\n <stream-paginated-list\n class=\"str-chat__poll-answer-list\"\n [items]=\"answers\"\n [hasMore]=\"next !== undefined\"\n [isLoading]=\"isLoading\"\n [trackBy]=\"trackByAnswerId\"\n (loadMore)=\"queryAnswers()\"\n >\n <ng-template let-answer=\"item\">\n <div class=\"str-chat__poll-answer\">\n <p *ngIf=\"answer.answer_text\" class=\"str-chat__poll-answer__text\">\n {{ answer.answer_text }}\n </p>\n <stream-poll-vote [vote]=\"answer\"></stream-poll-vote>\n </div>\n </ng-template>\n </stream-paginated-list>\n <button\n *ngIf=\"!isClosed\"\n class=\"str-chat__poll-action\"\n (click)=\"upsertOwnAnswer.emit()\"\n >\n {{\n (ownAnswer\n ? \"streamChat.Update your comment\"\n : \"streamChat.Add a comment\"\n ) | translate\n }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.PaginatedListComponent, selector: "stream-paginated-list", inputs: ["items", "isLoading", "hasMore", "trackBy"], outputs: ["loadMore"] }, { kind: "component", type: i4.PollVoteComponent, selector: "stream-poll-vote", inputs: ["vote"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollAnswersListComponent, decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{ selector: 'stream-poll-answers-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"str-chat__modal__poll-answer-list\">\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\" translate>\n streamChat.Poll comments\n </div>\n </div>\n <div class=\"str-chat__modal__poll-answer-list__body\">\n <div class=\"str-chat__poll-answer-list\">\n <stream-paginated-list\n class=\"str-chat__poll-answer-list\"\n [items]=\"answers\"\n [hasMore]=\"next !== undefined\"\n [isLoading]=\"isLoading\"\n [trackBy]=\"trackByAnswerId\"\n (loadMore)=\"queryAnswers()\"\n >\n <ng-template let-answer=\"item\">\n <div class=\"str-chat__poll-answer\">\n <p *ngIf=\"answer.answer_text\" class=\"str-chat__poll-answer__text\">\n {{ answer.answer_text }}\n </p>\n <stream-poll-vote [vote]=\"answer\"></stream-poll-vote>\n </div>\n </ng-template>\n </stream-paginated-list>\n <button\n *ngIf=\"!isClosed\"\n class=\"str-chat__poll-action\"\n (click)=\"upsertOwnAnswer.emit()\"\n >\n {{\n (ownAnswer\n ? \"streamChat.Update your comment\"\n : \"streamChat.Add a comment\"\n ) | translate\n }}\n </button>\n </div>\n </div>\n</div>\n" }]
|
|
76
|
+
}], propDecorators: { class: [{
|
|
77
|
+
type: HostBinding,
|
|
78
|
+
args: ['class']
|
|
79
|
+
}], upsertOwnAnswer: [{
|
|
80
|
+
type: Output
|
|
81
|
+
}] } });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1hbnN3ZXJzLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtYWN0aW9ucy9wb2xsLWFuc3dlcnMtbGlzdC9wb2xsLWFuc3dlcnMtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1hY3Rpb25zL3BvbGwtYW5zd2Vycy1saXN0L3BvbGwtYW5zd2Vycy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBRVgsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFHOUQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8sd0JBQ1gsU0FBUSxpQkFBaUI7SUFQM0I7O1FBVXdCLFVBQUssR0FBRyxtQ0FBbUMsQ0FBQztRQUNsRTs7V0FFRztRQUNPLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNyRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBRyxLQUFLLENBQUM7S0E2RGxCO0lBMURDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JCLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsT0FBTztTQUNSO1FBQ0QsSUFBSTtZQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQzVDLE1BQU0sRUFBRSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEI7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msa0NBQWtDLENBQ25DLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsTUFBTSxLQUFLLENBQUM7U0FDYjtnQkFBUztZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBUyxFQUFFLE1BQWtCO1FBQzNDLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMsa0JBQWtCLENBQzFCLElBQVUsRUFDVixZQUF3QjtRQUV4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUNsRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNWLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDNUIsQ0FBQyxFQUNGLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7WUFDL0MsWUFBWSxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7UUFFRixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOztxSEF4RVUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsOE1DckJyQyxpeUNBd0NBOzJGRG5CYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsMEJBQTBCLG1CQUduQix1QkFBdUIsQ0FBQyxNQUFNOzhCQU16QixLQUFLO3NCQUExQixXQUFXO3VCQUFDLE9BQU87Z0JBSVYsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VQb2xsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmFzZS1wb2xsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb2xsLCBQb2xsQW5zd2VyIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuXG4vKipcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1wb2xsLWFuc3dlcnMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb2xsLWFuc3dlcnMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQb2xsQW5zd2Vyc0xpc3RDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlUG9sbENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlc1xue1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3MgPSAnc3RyLWNoYXRfX21vZGFsX19wb2xsLWFuc3dlci1saXN0JztcbiAgLyoqXG4gICAqIFRoZSBldmVuIHRoYXQncyBlbWl0dGVkIHdoZW4gdGhlIHVwZGF0ZS9hZGQgY29tbWVudCBidXR0b24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIHVwc2VydE93bkFuc3dlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIG5leHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGFuc3dlcnM6IFBvbGxBbnN3ZXJbXSA9IFtdO1xuICBpc0Nsb3NlZCA9IGZhbHNlO1xuICBvd25BbnN3ZXI6IFBvbGxBbnN3ZXIgfCB1bmRlZmluZWQ7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgIGlmIChjaGFuZ2VzWydwb2xsSWQnXSkge1xuICAgICAgdm9pZCB0aGlzLnF1ZXJ5QW5zd2VycygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5QW5zd2VycygpIHtcbiAgICBpZiAoIXRoaXMucG9sbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvbGwucXVlcnlBbnN3ZXJzKHtcbiAgICAgICAgZmlsdGVyOiB7fSxcbiAgICAgICAgc29ydDogeyBjcmVhdGVkX2F0OiAtMSB9LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgbmV4dDogdGhpcy5uZXh0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubmV4dCA9IHJlc3BvbnNlLm5leHQ7XG4gICAgICB0aGlzLmFuc3dlcnMgPSBbLi4udGhpcy5hbnN3ZXJzLCAuLi5yZXNwb25zZS52b3Rlc107XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBsb2FkaW5nIGFuc3dlcnMnXG4gICAgICApO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5QW5zd2VySWQoXzogbnVtYmVyLCBhbnN3ZXI6IFBvbGxBbnN3ZXIpIHtcbiAgICByZXR1cm4gYW5zd2VyLmlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRlU3RvcmVTZWxlY3RvcihcbiAgICBwb2xsOiBQb2xsLFxuICAgIG1hcmtGb3JDaGVjazogKCkgPT4gdm9pZFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCB1bnN1YnNjcmliZSA9IHBvbGwuc3RhdGUuc3Vic2NyaWJlV2l0aFNlbGVjdG9yKFxuICAgICAgKHN0YXRlKSA9PiAoe1xuICAgICAgICBpc19jbG9zZWQ6IHN0YXRlLmlzX2Nsb3NlZCxcbiAgICAgICAgb3duX2Fuc3dlcjogc3RhdGUub3duQW5zd2VyLFxuICAgICAgfSksXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5pc0Nsb3NlZCA9IHN0YXRlLmlzX2Nsb3NlZCA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5vd25BbnN3ZXIgPSBzdGF0ZS5vd25fYW5zd2VyID8/IHVuZGVmaW5lZDtcbiAgICAgICAgbWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbF9fcG9sbC1hbnN3ZXItbGlzdFwiPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbW9kYWwtaGVhZGVyX190aXRsZVwiIHRyYW5zbGF0ZT5cbiAgICAgIHN0cmVhbUNoYXQuUG9sbCBjb21tZW50c1xuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbF9fcG9sbC1hbnN3ZXItbGlzdF9fYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1hbnN3ZXItbGlzdFwiPlxuICAgICAgPHN0cmVhbS1wYWdpbmF0ZWQtbGlzdFxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wb2xsLWFuc3dlci1saXN0XCJcbiAgICAgICAgW2l0ZW1zXT1cImFuc3dlcnNcIlxuICAgICAgICBbaGFzTW9yZV09XCJuZXh0ICE9PSB1bmRlZmluZWRcIlxuICAgICAgICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlBbnN3ZXJJZFwiXG4gICAgICAgIChsb2FkTW9yZSk9XCJxdWVyeUFuc3dlcnMoKVwiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtYW5zd2VyPVwiaXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1hbnN3ZXJcIj5cbiAgICAgICAgICAgIDxwICpuZ0lmPVwiYW5zd2VyLmFuc3dlcl90ZXh0XCIgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1hbnN3ZXJfX3RleHRcIj5cbiAgICAgICAgICAgICAge3sgYW5zd2VyLmFuc3dlcl90ZXh0IH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8c3RyZWFtLXBvbGwtdm90ZSBbdm90ZV09XCJhbnN3ZXJcIj48L3N0cmVhbS1wb2xsLXZvdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3N0cmVhbS1wYWdpbmF0ZWQtbGlzdD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXNDbG9zZWRcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wb2xsLWFjdGlvblwiXG4gICAgICAgIChjbGljayk9XCJ1cHNlcnRPd25BbnN3ZXIuZW1pdCgpXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAob3duQW5zd2VyXG4gICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5VcGRhdGUgeW91ciBjb21tZW50XCJcbiAgICAgICAgICAgIDogXCJzdHJlYW1DaGF0LkFkZCBhIGNvbW1lbnRcIlxuICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core';
|
|
2
|
+
import { BasePollComponent } from '../../../base-poll.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@ngx-translate/core";
|
|
6
|
+
import * as i3 from "../poll-vote-results-list/poll-vote-results-list.component";
|
|
7
|
+
import * as i4 from "../poll-vote/poll-vote.component";
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export class PollResultsListComponent extends BasePollComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.class = 'str-chat__modal__poll-results';
|
|
15
|
+
this.name = '';
|
|
16
|
+
this.options = [];
|
|
17
|
+
this.votePreviewCount = 5;
|
|
18
|
+
this.maxVotedOptionIds = [];
|
|
19
|
+
this.voteCountsByOption = {};
|
|
20
|
+
this.latestVotesByOption = {};
|
|
21
|
+
}
|
|
22
|
+
stateStoreSelector(poll, markForCheck) {
|
|
23
|
+
const unsubscribe = poll.state.subscribeWithSelector((state) => ({
|
|
24
|
+
name: state.name,
|
|
25
|
+
options: state.options,
|
|
26
|
+
maxVotedOptionIds: state.maxVotedOptionIds,
|
|
27
|
+
vote_counts_by_option: state.vote_counts_by_option,
|
|
28
|
+
latest_votes_by_option: state.latest_votes_by_option,
|
|
29
|
+
}), (state) => {
|
|
30
|
+
this.name = state.name;
|
|
31
|
+
this.options = [...state.options];
|
|
32
|
+
this.options.sort((a, b) => {
|
|
33
|
+
return ((state.vote_counts_by_option[b.id] ?? 0) -
|
|
34
|
+
(state.vote_counts_by_option[a.id] ?? 0));
|
|
35
|
+
});
|
|
36
|
+
this.maxVotedOptionIds = state.maxVotedOptionIds;
|
|
37
|
+
this.voteCountsByOption = state.vote_counts_by_option;
|
|
38
|
+
this.latestVotesByOption = state.latest_votes_by_option;
|
|
39
|
+
markForCheck();
|
|
40
|
+
});
|
|
41
|
+
return unsubscribe;
|
|
42
|
+
}
|
|
43
|
+
isWinner(optionId) {
|
|
44
|
+
return (this.maxVotedOptionIds.length === 1 &&
|
|
45
|
+
this.maxVotedOptionIds[0] === optionId);
|
|
46
|
+
}
|
|
47
|
+
trackByOptionId(_, option) {
|
|
48
|
+
return option.id;
|
|
49
|
+
}
|
|
50
|
+
trackByVoteId(_, vote) {
|
|
51
|
+
return vote.id;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
PollResultsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollResultsListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
PollResultsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollResultsListComponent, selector: "stream-poll-results-list", host: { properties: { "class": "this.class" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"str-chat__modal__poll-results\"\n [class.str-chat__modal__poll-results--option-detail]=\"optionToView\"\n>\n <div class=\"str-chat__modal-header\">\n <!-- eslint-disable-next-line @angular-eslint/template/accessibility-elements-content -->\n <button\n *ngIf=\"optionToView\"\n class=\"str-chat__modal-header__go-back-button\"\n (click)=\"optionToView = undefined\"\n ></button>\n <div class=\"str-chat__modal-header__title\" translate>\n streamChat.Poll results\n </div>\n </div>\n <ng-container *ngIf=\"optionToView; else allOptions\">\n <div class=\"str-chat__modal__poll-results__body\">\n <stream-poll-vote-results-list\n [option]=\"optionToView\"\n [messageId]=\"messageId\"\n [pollId]=\"pollId\"\n ></stream-poll-vote-results-list>\n </div>\n </ng-container>\n <ng-template #allOptions>\n <div class=\"str-chat__modal__poll-results__body\">\n <div class=\"str-chat__modal__poll-results__title\">{{ name }}</div>\n <div class=\"str-chat__modal__poll-results__option-list\">\n <div\n *ngFor=\"let option of options; trackBy: trackByOptionId\"\n class=\"str-chat__poll-option\"\n >\n <div class=\"str-chat__poll-option__header\">\n <div class=\"str-chat__poll-option__option-text\">\n {{ option.text }}\n </div>\n <div class=\"str-chat__poll-result-option-vote-counter\">\n <div\n *ngIf=\"isWinner(option.id)\"\n class=\"str-chat__poll-result-winning-option-icon\"\n ></div>\n <span class=\"str-chat__poll-result-option-vote-count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count:\n voteCountsByOption[option.id] ?? 0} }}\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"latestVotesByOption[option?.id ?? '']\">\n <div class=\"str-chat__poll-vote-listing\">\n <ng-container\n *ngFor=\"\n let vote of latestVotesByOption[option?.id ?? '']\n | slice : 0 : votePreviewCount;\n trackBy: trackByVoteId\n \"\n >\n <stream-poll-vote [vote]=\"vote\"></stream-poll-vote>\n </ng-container>\n </div>\n </ng-container>\n <button\n *ngIf=\"\n voteCountsByOption[option?.id ?? ''] > votePreviewCount &&\n canQueryVotes\n \"\n class=\"str-chat__poll-option__show-all-votes-button\"\n translate\n (click)=\"optionToView = option\"\n >\n streamChat.Show all\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.PollVoteResultsListComponent, selector: "stream-poll-vote-results-list", inputs: ["option"] }, { kind: "component", type: i4.PollVoteComponent, selector: "stream-poll-vote", inputs: ["vote"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollResultsListComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'stream-poll-results-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__modal__poll-results\"\n [class.str-chat__modal__poll-results--option-detail]=\"optionToView\"\n>\n <div class=\"str-chat__modal-header\">\n <!-- eslint-disable-next-line @angular-eslint/template/accessibility-elements-content -->\n <button\n *ngIf=\"optionToView\"\n class=\"str-chat__modal-header__go-back-button\"\n (click)=\"optionToView = undefined\"\n ></button>\n <div class=\"str-chat__modal-header__title\" translate>\n streamChat.Poll results\n </div>\n </div>\n <ng-container *ngIf=\"optionToView; else allOptions\">\n <div class=\"str-chat__modal__poll-results__body\">\n <stream-poll-vote-results-list\n [option]=\"optionToView\"\n [messageId]=\"messageId\"\n [pollId]=\"pollId\"\n ></stream-poll-vote-results-list>\n </div>\n </ng-container>\n <ng-template #allOptions>\n <div class=\"str-chat__modal__poll-results__body\">\n <div class=\"str-chat__modal__poll-results__title\">{{ name }}</div>\n <div class=\"str-chat__modal__poll-results__option-list\">\n <div\n *ngFor=\"let option of options; trackBy: trackByOptionId\"\n class=\"str-chat__poll-option\"\n >\n <div class=\"str-chat__poll-option__header\">\n <div class=\"str-chat__poll-option__option-text\">\n {{ option.text }}\n </div>\n <div class=\"str-chat__poll-result-option-vote-counter\">\n <div\n *ngIf=\"isWinner(option.id)\"\n class=\"str-chat__poll-result-winning-option-icon\"\n ></div>\n <span class=\"str-chat__poll-result-option-vote-count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count:\n voteCountsByOption[option.id] ?? 0} }}\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"latestVotesByOption[option?.id ?? '']\">\n <div class=\"str-chat__poll-vote-listing\">\n <ng-container\n *ngFor=\"\n let vote of latestVotesByOption[option?.id ?? '']\n | slice : 0 : votePreviewCount;\n trackBy: trackByVoteId\n \"\n >\n <stream-poll-vote [vote]=\"vote\"></stream-poll-vote>\n </ng-container>\n </div>\n </ng-container>\n <button\n *ngIf=\"\n voteCountsByOption[option?.id ?? ''] > votePreviewCount &&\n canQueryVotes\n \"\n class=\"str-chat__poll-option__show-all-votes-button\"\n translate\n (click)=\"optionToView = option\"\n >\n streamChat.Show all\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
|
|
59
|
+
}], propDecorators: { class: [{
|
|
60
|
+
type: HostBinding,
|
|
61
|
+
args: ['class']
|
|
62
|
+
}] } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1yZXN1bHRzLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtYWN0aW9ucy9wb2xsLXJlc3VsdHMvcG9sbC1yZXN1bHRzLWxpc3QvcG9sbC1yZXN1bHRzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtYWN0aW9ucy9wb2xsLXJlc3VsdHMvcG9sbC1yZXN1bHRzLWxpc3QvcG9sbC1yZXN1bHRzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQUdqRTs7R0FFRztBQU9ILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBaUI7SUFOL0Q7O1FBT3dCLFVBQUssR0FBRywrQkFBK0IsQ0FBQztRQUM5RCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsWUFBTyxHQUFpQixFQUFFLENBQUM7UUFFM0IscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUNqQyx1QkFBa0IsR0FBMkIsRUFBRSxDQUFDO1FBQ2hELHdCQUFtQixHQUErQixFQUFFLENBQUM7S0ErQ3REO0lBN0NXLGtCQUFrQixDQUMxQixJQUFVLEVBQ1YsWUFBd0I7UUFFeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FDbEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtZQUNsRCxzQkFBc0IsRUFBRSxLQUFLLENBQUMsc0JBQXNCO1NBQ3JELENBQUMsRUFDRixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxDQUNMLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDekMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNqRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDO1lBQ3RELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUM7WUFDeEQsWUFBWSxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7UUFFRixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLE9BQU8sQ0FDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBUyxFQUFFLE1BQWtCO1FBQzNDLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVMsRUFBRSxJQUFjO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDOztxSEF0RFUsd0JBQXdCO3lHQUF4Qix3QkFBd0Isd0lDYnJDLDZ5RkE0RUE7MkZEL0RhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07OEJBR3pCLEtBQUs7c0JBQTFCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlUG9sbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtcG9sbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9sbCwgUG9sbE9wdGlvbiwgUG9sbFZvdGUgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5cbi8qKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLXBvbGwtcmVzdWx0cy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvbGwtcmVzdWx0cy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBvbGxSZXN1bHRzTGlzdENvbXBvbmVudCBleHRlbmRzIEJhc2VQb2xsQ29tcG9uZW50IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ3N0ci1jaGF0X19tb2RhbF9fcG9sbC1yZXN1bHRzJztcbiAgbmFtZSA9ICcnO1xuICBvcHRpb25zOiBQb2xsT3B0aW9uW10gPSBbXTtcbiAgb3B0aW9uVG9WaWV3OiBQb2xsT3B0aW9uIHwgdW5kZWZpbmVkO1xuICB2b3RlUHJldmlld0NvdW50ID0gNTtcbiAgbWF4Vm90ZWRPcHRpb25JZHM6IHN0cmluZ1tdID0gW107XG4gIHZvdGVDb3VudHNCeU9wdGlvbjogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBsYXRlc3RWb3Rlc0J5T3B0aW9uOiBSZWNvcmQ8c3RyaW5nLCBQb2xsVm90ZVtdPiA9IHt9O1xuXG4gIHByb3RlY3RlZCBzdGF0ZVN0b3JlU2VsZWN0b3IoXG4gICAgcG9sbDogUG9sbCxcbiAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBwb2xsLnN0YXRlLnN1YnNjcmliZVdpdGhTZWxlY3RvcihcbiAgICAgIChzdGF0ZSkgPT4gKHtcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcbiAgICAgICAgb3B0aW9uczogc3RhdGUub3B0aW9ucyxcbiAgICAgICAgbWF4Vm90ZWRPcHRpb25JZHM6IHN0YXRlLm1heFZvdGVkT3B0aW9uSWRzLFxuICAgICAgICB2b3RlX2NvdW50c19ieV9vcHRpb246IHN0YXRlLnZvdGVfY291bnRzX2J5X29wdGlvbixcbiAgICAgICAgbGF0ZXN0X3ZvdGVzX2J5X29wdGlvbjogc3RhdGUubGF0ZXN0X3ZvdGVzX2J5X29wdGlvbixcbiAgICAgIH0pLFxuICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMubmFtZSA9IHN0YXRlLm5hbWU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsuLi5zdGF0ZS5vcHRpb25zXTtcbiAgICAgICAgdGhpcy5vcHRpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHN0YXRlLnZvdGVfY291bnRzX2J5X29wdGlvbltiLmlkXSA/PyAwKSAtXG4gICAgICAgICAgICAoc3RhdGUudm90ZV9jb3VudHNfYnlfb3B0aW9uW2EuaWRdID8/IDApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWF4Vm90ZWRPcHRpb25JZHMgPSBzdGF0ZS5tYXhWb3RlZE9wdGlvbklkcztcbiAgICAgICAgdGhpcy52b3RlQ291bnRzQnlPcHRpb24gPSBzdGF0ZS52b3RlX2NvdW50c19ieV9vcHRpb247XG4gICAgICAgIHRoaXMubGF0ZXN0Vm90ZXNCeU9wdGlvbiA9IHN0YXRlLmxhdGVzdF92b3Rlc19ieV9vcHRpb247XG4gICAgICAgIG1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH1cblxuICBpc1dpbm5lcihvcHRpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubWF4Vm90ZWRPcHRpb25JZHMubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLm1heFZvdGVkT3B0aW9uSWRzWzBdID09PSBvcHRpb25JZFxuICAgICk7XG4gIH1cblxuICB0cmFja0J5T3B0aW9uSWQoXzogbnVtYmVyLCBvcHRpb246IFBvbGxPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLmlkO1xuICB9XG5cbiAgdHJhY2tCeVZvdGVJZChfOiBudW1iZXIsIHZvdGU6IFBvbGxWb3RlKSB7XG4gICAgcmV0dXJuIHZvdGUuaWQ7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzdHItY2hhdF9fbW9kYWxfX3BvbGwtcmVzdWx0c1wiXG4gIFtjbGFzcy5zdHItY2hhdF9fbW9kYWxfX3BvbGwtcmVzdWx0cy0tb3B0aW9uLWRldGFpbF09XCJvcHRpb25Ub1ZpZXdcIlxuPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsLWhlYWRlclwiPlxuICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9hY2Nlc3NpYmlsaXR5LWVsZW1lbnRzLWNvbnRlbnQgLS0+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJvcHRpb25Ub1ZpZXdcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbW9kYWwtaGVhZGVyX19nby1iYWNrLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwib3B0aW9uVG9WaWV3ID0gdW5kZWZpbmVkXCJcbiAgICA+PC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbC1oZWFkZXJfX3RpdGxlXCIgdHJhbnNsYXRlPlxuICAgICAgc3RyZWFtQ2hhdC5Qb2xsIHJlc3VsdHNcbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25Ub1ZpZXc7IGVsc2UgYWxsT3B0aW9uc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbW9kYWxfX3BvbGwtcmVzdWx0c19fYm9keVwiPlxuICAgICAgPHN0cmVhbS1wb2xsLXZvdGUtcmVzdWx0cy1saXN0XG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uVG9WaWV3XCJcbiAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgICBbcG9sbElkXT1cInBvbGxJZFwiXG4gICAgICA+PC9zdHJlYW0tcG9sbC12b3RlLXJlc3VsdHMtbGlzdD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjYWxsT3B0aW9ucz5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsX19wb2xsLXJlc3VsdHNfX2JvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbW9kYWxfX3BvbGwtcmVzdWx0c19fdGl0bGVcIj57eyBuYW1lIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsX19wb2xsLXJlc3VsdHNfX29wdGlvbi1saXN0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlPcHRpb25JZFwiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1vcHRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbl9faGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uX19vcHRpb24tdGV4dFwiPlxuICAgICAgICAgICAgICB7eyBvcHRpb24udGV4dCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtcmVzdWx0LW9wdGlvbi12b3RlLWNvdW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNXaW5uZXIob3B0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1yZXN1bHQtd2lubmluZy1vcHRpb24taWNvblwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1yZXN1bHQtb3B0aW9uLXZvdGUtY291bnRcIj5cbiAgICAgICAgICAgICAgICB7eyAnc3RyZWFtQ2hhdC57eyBjb3VudCB9fSB2b3RlcycgfCB0cmFuc2xhdGU6e2NvdW50OlxuICAgICAgICAgICAgICAgIHZvdGVDb3VudHNCeU9wdGlvbltvcHRpb24uaWRdID8/IDB9IH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXRlc3RWb3Rlc0J5T3B0aW9uW29wdGlvbj8uaWQgPz8gJyddXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtdm90ZS1saXN0aW5nXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCB2b3RlIG9mIGxhdGVzdFZvdGVzQnlPcHRpb25bb3B0aW9uPy5pZCA/PyAnJ11cbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDAgOiB2b3RlUHJldmlld0NvdW50O1xuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeVZvdGVJZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3RyZWFtLXBvbGwtdm90ZSBbdm90ZV09XCJ2b3RlXCI+PC9zdHJlYW0tcG9sbC12b3RlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHZvdGVDb3VudHNCeU9wdGlvbltvcHRpb24/LmlkID8/ICcnXSA+IHZvdGVQcmV2aWV3Q291bnQgJiZcbiAgICAgICAgICAgICAgY2FuUXVlcnlWb3Rlc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uX19zaG93LWFsbC12b3Rlcy1idXR0b25cIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAoY2xpY2spPVwib3B0aW9uVG9WaWV3ID0gb3B0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBzdHJlYW1DaGF0LlNob3cgYWxsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@ngx-translate/core";
|
|
4
|
+
import * as i2 from "../../../../date-parser.service";
|
|
5
|
+
import * as i3 from "@angular/common";
|
|
6
|
+
import * as i4 from "../../../../avatar-placeholder/avatar-placeholder.component";
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export class PollVoteComponent {
|
|
11
|
+
constructor(translateService, dateParser) {
|
|
12
|
+
this.translateService = translateService;
|
|
13
|
+
this.dateParser = dateParser;
|
|
14
|
+
this.anonymousTranslation = 'Anonymous';
|
|
15
|
+
this.translateService
|
|
16
|
+
.get('streamChat.Anonymous')
|
|
17
|
+
.subscribe((translation) => {
|
|
18
|
+
this.anonymousTranslation = translation;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
parseDate(date) {
|
|
22
|
+
return this.dateParser.parseDateTime(new Date(date));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
PollVoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollVoteComponent, deps: [{ token: i1.TranslateService }, { token: i2.DateParserService }], target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
PollVoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollVoteComponent, selector: "stream-poll-vote", inputs: { vote: "vote" }, ngImport: i0, template: "<div class=\"str-chat__poll-vote\">\n <div class=\"str-chat__poll-vote__author\">\n <stream-avatar-placeholder\n location=\"poll-voter\"\n [user]=\"vote?.user\"\n [imageUrl]=\"vote?.user?.image\"\n [name]=\"vote?.user?.name ?? anonymousTranslation\"\n type=\"user\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__poll-vote__author__name\">\n {{ vote?.user?.name ?? anonymousTranslation }}\n </div>\n </div>\n <div *ngIf=\"vote?.created_at\" class=\"str-chat__poll-vote__timestamp\">\n {{ parseDate(vote!.created_at) }}\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollVoteComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'stream-poll-vote', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"str-chat__poll-vote\">\n <div class=\"str-chat__poll-vote__author\">\n <stream-avatar-placeholder\n location=\"poll-voter\"\n [user]=\"vote?.user\"\n [imageUrl]=\"vote?.user?.image\"\n [name]=\"vote?.user?.name ?? anonymousTranslation\"\n type=\"user\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__poll-vote__author__name\">\n {{ vote?.user?.name ?? anonymousTranslation }}\n </div>\n </div>\n <div *ngIf=\"vote?.created_at\" class=\"str-chat__poll-vote__timestamp\">\n {{ parseDate(vote!.created_at) }}\n </div>\n</div>\n" }]
|
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DateParserService }]; }, propDecorators: { vote: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}] } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC12b3RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWFjdGlvbnMvcG9sbC1yZXN1bHRzL3BvbGwtdm90ZS9wb2xsLXZvdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtYWN0aW9ucy9wb2xsLXJlc3VsdHMvcG9sbC12b3RlL3BvbGwtdm90ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBSzFFOztHQUVHO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQU81QixZQUNVLGdCQUFrQyxFQUNsQyxVQUE2QjtRQUQ3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBSnZDLHlCQUFvQixHQUFHLFdBQVcsQ0FBQztRQU1qQyxJQUFJLENBQUMsZ0JBQWdCO2FBQ2xCLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQzthQUMzQixTQUFTLENBQUMsQ0FBQyxXQUFtQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7OEdBcEJVLGlCQUFpQjtrR0FBakIsaUJBQWlCLGtGQ2Q5QixzbEJBaUJBOzJGREhhLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTt1SUFNdEMsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFBvbGxBbnN3ZXIsIFBvbGxWb3RlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgRGF0ZVBhcnNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRlLXBhcnNlci5zZXJ2aWNlJztcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC12b3RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvbGwtdm90ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQb2xsVm90ZUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcG9sbCB2b3RlIG9yIGFuc3dlciB0byBkaXNwbGF5XG4gICAqL1xuICBASW5wdXQoKSB2b3RlOiBQb2xsVm90ZSB8IFBvbGxBbnN3ZXIgfCB1bmRlZmluZWQ7XG4gIGFub255bW91c1RyYW5zbGF0aW9uID0gJ0Fub255bW91cyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBhcnNlcjogRGF0ZVBhcnNlclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuZ2V0KCdzdHJlYW1DaGF0LkFub255bW91cycpXG4gICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuYW5vbnltb3VzVHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbjtcbiAgICAgIH0pO1xuICB9XG5cbiAgcGFyc2VEYXRlKGRhdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRhdGVQYXJzZXIucGFyc2VEYXRlVGltZShuZXcgRGF0ZShkYXRlKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC12b3RlXCI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC12b3RlX19hdXRob3JcIj5cbiAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgbG9jYXRpb249XCJwb2xsLXZvdGVyXCJcbiAgICAgIFt1c2VyXT1cInZvdGU/LnVzZXJcIlxuICAgICAgW2ltYWdlVXJsXT1cInZvdGU/LnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cInZvdGU/LnVzZXI/Lm5hbWUgPz8gYW5vbnltb3VzVHJhbnNsYXRpb25cIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLXZvdGVfX2F1dGhvcl9fbmFtZVwiPlxuICAgICAge3sgdm90ZT8udXNlcj8ubmFtZSA/PyBhbm9ueW1vdXNUcmFuc2xhdGlvbiB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInZvdGU/LmNyZWF0ZWRfYXRcIiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLXZvdGVfX3RpbWVzdGFtcFwiPlxuICAgIHt7IHBhcnNlRGF0ZSh2b3RlIS5jcmVhdGVkX2F0KSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
|
|
2
|
+
import { BasePollComponent } from '../../../base-poll.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../../../../paginated-list/paginated-list.component";
|
|
6
|
+
import * as i3 from "../poll-vote/poll-vote.component";
|
|
7
|
+
import * as i4 from "@ngx-translate/core";
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export class PollVoteResultsListComponent extends BasePollComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.isWinner = false;
|
|
15
|
+
this.voteCount = 0;
|
|
16
|
+
this.isLoading = false;
|
|
17
|
+
this.votes = [];
|
|
18
|
+
this.trackByVoteId = (_, vote) => {
|
|
19
|
+
return vote.id;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
ngOnChanges(changes) {
|
|
23
|
+
super.ngOnChanges(changes);
|
|
24
|
+
if (changes['option']) {
|
|
25
|
+
this.setupStateStoreSelector();
|
|
26
|
+
this.next = undefined;
|
|
27
|
+
this.votes = [];
|
|
28
|
+
void this.loadVotes();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async loadVotes() {
|
|
32
|
+
if (!this.poll) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
this.isLoading = true;
|
|
37
|
+
const response = await this.poll.queryOptionVotes({
|
|
38
|
+
filter: {
|
|
39
|
+
option_id: this.option?.id ?? '',
|
|
40
|
+
},
|
|
41
|
+
sort: { created_at: -1 },
|
|
42
|
+
options: {
|
|
43
|
+
next: this.next,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
this.next = response.next;
|
|
47
|
+
this.votes = [...this.votes, ...response.votes];
|
|
48
|
+
this.markForCheck();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.notificationService.addTemporaryNotification('streamChat.Error loading votes');
|
|
52
|
+
throw error;
|
|
53
|
+
this.markForCheck();
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
this.isLoading = false;
|
|
57
|
+
this.markForCheck();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
stateStoreSelector(poll, markForCheck) {
|
|
61
|
+
const subscribe = poll.state.subscribeWithSelector((state) => ({
|
|
62
|
+
voteCount: state.vote_counts_by_option[this.option?.id ?? ''],
|
|
63
|
+
maxVotedOptionIds: state.maxVotedOptionIds,
|
|
64
|
+
}), (state) => {
|
|
65
|
+
this.isWinner =
|
|
66
|
+
state.maxVotedOptionIds?.includes(this.option?.id ?? '') &&
|
|
67
|
+
state.maxVotedOptionIds.length === 1;
|
|
68
|
+
this.voteCount = state.voteCount ?? 0;
|
|
69
|
+
markForCheck();
|
|
70
|
+
});
|
|
71
|
+
return subscribe;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
PollVoteResultsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollVoteResultsListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
PollVoteResultsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollVoteResultsListComponent, selector: "stream-poll-vote-results-list", inputs: { option: "option" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"str-chat__poll-option str-chat__poll-option--full-vote-list\">\n <div class=\"str-chat__poll-option__header\">\n <div class=\"str-chat__poll-option__option-text\">{{ option?.text }}</div>\n <div class=\"str-chat__poll-result-option-vote-counter\">\n <div\n *ngIf=\"isWinner\"\n class=\"str-chat__poll-result-winning-option-icon\"\n ></div>\n <span class=\"str-chat__poll-result-option-vote-count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount ?? 0} }}\n </span>\n </div>\n </div>\n <stream-paginated-list\n class=\"str-chat__poll-vote-listing\"\n [items]=\"votes\"\n [hasMore]=\"next !== undefined\"\n [isLoading]=\"isLoading\"\n [trackBy]=\"trackByVoteId\"\n (loadMore)=\"loadVotes()\"\n >\n <ng-template let-vote=\"item\">\n <stream-poll-vote [vote]=\"vote\"></stream-poll-vote>\n </ng-template>\n </stream-paginated-list>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PaginatedListComponent, selector: "stream-paginated-list", inputs: ["items", "isLoading", "hasMore", "trackBy"], outputs: ["loadMore"] }, { kind: "component", type: i3.PollVoteComponent, selector: "stream-poll-vote", inputs: ["vote"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollVoteResultsListComponent, decorators: [{
|
|
77
|
+
type: Component,
|
|
78
|
+
args: [{ selector: 'stream-poll-vote-results-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"str-chat__poll-option str-chat__poll-option--full-vote-list\">\n <div class=\"str-chat__poll-option__header\">\n <div class=\"str-chat__poll-option__option-text\">{{ option?.text }}</div>\n <div class=\"str-chat__poll-result-option-vote-counter\">\n <div\n *ngIf=\"isWinner\"\n class=\"str-chat__poll-result-winning-option-icon\"\n ></div>\n <span class=\"str-chat__poll-result-option-vote-count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount ?? 0} }}\n </span>\n </div>\n </div>\n <stream-paginated-list\n class=\"str-chat__poll-vote-listing\"\n [items]=\"votes\"\n [hasMore]=\"next !== undefined\"\n [isLoading]=\"isLoading\"\n [trackBy]=\"trackByVoteId\"\n (loadMore)=\"loadVotes()\"\n >\n <ng-template let-vote=\"item\">\n <stream-poll-vote [vote]=\"vote\"></stream-poll-vote>\n </ng-template>\n </stream-paginated-list>\n</div>\n" }]
|
|
79
|
+
}], propDecorators: { option: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}] } });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC12b3RlLXJlc3VsdHMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1hY3Rpb25zL3BvbGwtcmVzdWx0cy9wb2xsLXZvdGUtcmVzdWx0cy1saXN0L3BvbGwtdm90ZS1yZXN1bHRzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtYWN0aW9ucy9wb2xsLXJlc3VsdHMvcG9sbC12b3RlLXJlc3VsdHMtbGlzdC9wb2xsLXZvdGUtcmVzdWx0cy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBR2pFOztHQUVHO0FBT0gsTUFBTSxPQUFPLDRCQUNYLFNBQVEsaUJBQWlCO0lBUDNCOztRQWNFLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQTJDdkIsa0JBQWEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUFjLEVBQUUsRUFBRTtZQUM1QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDO0tBc0JIO0lBakVDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxPQUFPO1NBQ1I7UUFDRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNoRCxNQUFNLEVBQUU7b0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUU7aUJBQ2pDO2dCQUNELElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEI7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0MsZ0NBQWdDLENBQ2pDLENBQUM7WUFDRixNQUFNLEtBQUssQ0FBQztZQUNaLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtnQkFBUztZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFNUyxrQkFBa0IsQ0FDMUIsSUFBVSxFQUNWLFlBQXdCO1FBRXhCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQ2hELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1YsU0FBUyxFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDN0QsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLEVBQ0YsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRO2dCQUNYLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO29CQUN4RCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBQ3RDLFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7eUhBOUVVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLCtJQ25CekMsMjdCQTBCQTsyRkRQYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0UsK0JBQStCLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNOzhCQVN0QyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VQb2xsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYmFzZS1wb2xsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb2xsLCBQb2xsT3B0aW9uLCBQb2xsVm90ZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC12b3RlLXJlc3VsdHMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb2xsLXZvdGUtcmVzdWx0cy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBvbGxWb3RlUmVzdWx0c0xpc3RDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlUG9sbENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlc1xue1xuICAvKipcbiAgICogVGhlIHBvbGwgb3B0aW9uIHRvIGRpc3BsYXkgdGhlIHZvdGVzIGZvclxuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uOiBQb2xsT3B0aW9uIHwgdW5kZWZpbmVkO1xuICBpc1dpbm5lciA9IGZhbHNlO1xuICB2b3RlQ291bnQgPSAwO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgbmV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdm90ZXM6IFBvbGxWb3RlW10gPSBbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgaWYgKGNoYW5nZXNbJ29wdGlvbiddKSB7XG4gICAgICB0aGlzLnNldHVwU3RhdGVTdG9yZVNlbGVjdG9yKCk7XG4gICAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnZvdGVzID0gW107XG4gICAgICB2b2lkIHRoaXMubG9hZFZvdGVzKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZFZvdGVzKCkge1xuICAgIGlmICghdGhpcy5wb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9sbC5xdWVyeU9wdGlvblZvdGVzKHtcbiAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgb3B0aW9uX2lkOiB0aGlzLm9wdGlvbj8uaWQgPz8gJycsXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IHsgY3JlYXRlZF9hdDogLTEgfSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG5leHQ6IHRoaXMubmV4dCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5leHQgPSByZXNwb25zZS5uZXh0O1xuICAgICAgdGhpcy52b3RlcyA9IFsuLi50aGlzLnZvdGVzLCAuLi5yZXNwb25zZS52b3Rlc107XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBsb2FkaW5nIHZvdGVzJ1xuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeVZvdGVJZCA9IChfOiBudW1iZXIsIHZvdGU6IFBvbGxWb3RlKSA9PiB7XG4gICAgcmV0dXJuIHZvdGUuaWQ7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHN0YXRlU3RvcmVTZWxlY3RvcihcbiAgICBwb2xsOiBQb2xsLFxuICAgIG1hcmtGb3JDaGVjazogKCkgPT4gdm9pZFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBzdWJzY3JpYmUgPSBwb2xsLnN0YXRlLnN1YnNjcmliZVdpdGhTZWxlY3RvcihcbiAgICAgIChzdGF0ZSkgPT4gKHtcbiAgICAgICAgdm90ZUNvdW50OiBzdGF0ZS52b3RlX2NvdW50c19ieV9vcHRpb25bdGhpcy5vcHRpb24/LmlkID8/ICcnXSxcbiAgICAgICAgbWF4Vm90ZWRPcHRpb25JZHM6IHN0YXRlLm1heFZvdGVkT3B0aW9uSWRzLFxuICAgICAgfSksXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5pc1dpbm5lciA9XG4gICAgICAgICAgc3RhdGUubWF4Vm90ZWRPcHRpb25JZHM/LmluY2x1ZGVzKHRoaXMub3B0aW9uPy5pZCA/PyAnJykgJiZcbiAgICAgICAgICBzdGF0ZS5tYXhWb3RlZE9wdGlvbklkcy5sZW5ndGggPT09IDE7XG4gICAgICAgIHRoaXMudm90ZUNvdW50ID0gc3RhdGUudm90ZUNvdW50ID8/IDA7XG4gICAgICAgIG1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uIHN0ci1jaGF0X19wb2xsLW9wdGlvbi0tZnVsbC12b3RlLWxpc3RcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbl9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbl9fb3B0aW9uLXRleHRcIj57eyBvcHRpb24/LnRleHQgfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtcmVzdWx0LW9wdGlvbi12b3RlLWNvdW50ZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJpc1dpbm5lclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtcmVzdWx0LXdpbm5pbmctb3B0aW9uLWljb25cIlxuICAgICAgPjwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1yZXN1bHQtb3B0aW9uLXZvdGUtY291bnRcIj5cbiAgICAgICAge3sgJ3N0cmVhbUNoYXQue3sgY291bnQgfX0gdm90ZXMnIHwgdHJhbnNsYXRlOntjb3VudDogdm90ZUNvdW50ID8/IDB9IH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8c3RyZWFtLXBhZ2luYXRlZC1saXN0XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC12b3RlLWxpc3RpbmdcIlxuICAgIFtpdGVtc109XCJ2b3Rlc1wiXG4gICAgW2hhc01vcmVdPVwibmV4dCAhPT0gdW5kZWZpbmVkXCJcbiAgICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgW3RyYWNrQnldPVwidHJhY2tCeVZvdGVJZFwiXG4gICAgKGxvYWRNb3JlKT1cImxvYWRWb3RlcygpXCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtdm90ZT1cIml0ZW1cIj5cbiAgICAgIDxzdHJlYW0tcG9sbC12b3RlIFt2b3RlXT1cInZvdGVcIj48L3N0cmVhbS1wb2xsLXZvdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9zdHJlYW0tcGFnaW5hdGVkLWxpc3Q+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input, } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
3
|
+
import { BasePollComponent } from '../../base-poll.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
import * as i2 from "@ngx-translate/core";
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export class UpsertAnswerComponent extends BasePollComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.class = 'str-chat__dialog';
|
|
14
|
+
/**
|
|
15
|
+
* The callback to close the modal the component is displayed in
|
|
16
|
+
*/
|
|
17
|
+
this.closeModal = () => { };
|
|
18
|
+
this.formGroup = new FormGroup({
|
|
19
|
+
comment: new FormControl('', [Validators.required]),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
ngOnChanges(changes) {
|
|
23
|
+
super.ngOnChanges(changes);
|
|
24
|
+
if (changes['answer']) {
|
|
25
|
+
this.formGroup.get('comment')?.setValue(this.answer?.answer_text ?? '');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async addComment() {
|
|
29
|
+
if (this.formGroup.invalid || !this.messageId) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
await this.poll?.addAnswer(this.formGroup.value.comment, this.messageId);
|
|
34
|
+
this.closeModal();
|
|
35
|
+
this.markForCheck();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
this.notificationService.addTemporaryNotification('streamChat.Failed to add comment');
|
|
39
|
+
this.markForCheck();
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
stateStoreSelector(_, __) {
|
|
44
|
+
return () => { };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
UpsertAnswerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: UpsertAnswerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
UpsertAnswerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: UpsertAnswerComponent, selector: "stream-upsert-answer", inputs: { answer: "answer", closeModal: "closeModal" }, host: { properties: { "class": "this.class" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__dialog str-chat__dialog--form str-chat__prompt-dialog str-chat__modal__poll-add-comment\"\n>\n <div class=\"str-chat__dialog__body\">\n <div class=\"str-chat__dialog__title\">\n {{\n (answer ? \"streamChat.Update your comment\" : \"streamChat.Add a comment\")\n | translate\n }}\n </div>\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"addComment()\">\n <div class=\"str-chat__dialog__field\">\n <input formControlName=\"comment\" id=\"comment\" type=\"text\" />\n </div>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n onClick=\"{close}\"\n type=\"button\"\n (click)=\"closeModal()\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n type=\"submit\"\n [disabled]=\"formGroup.invalid\"\n >\n {{ \"streamChat.Send\" | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: UpsertAnswerComponent, decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{ selector: 'stream-upsert-answer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__dialog str-chat__dialog--form str-chat__prompt-dialog str-chat__modal__poll-add-comment\"\n>\n <div class=\"str-chat__dialog__body\">\n <div class=\"str-chat__dialog__title\">\n {{\n (answer ? \"streamChat.Update your comment\" : \"streamChat.Add a comment\")\n | translate\n }}\n </div>\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"addComment()\">\n <div class=\"str-chat__dialog__field\">\n <input formControlName=\"comment\" id=\"comment\" type=\"text\" />\n </div>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n onClick=\"{close}\"\n type=\"button\"\n (click)=\"closeModal()\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n type=\"submit\"\n [disabled]=\"formGroup.invalid\"\n >\n {{ \"streamChat.Send\" | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n" }]
|
|
52
|
+
}], propDecorators: { class: [{
|
|
53
|
+
type: HostBinding,
|
|
54
|
+
args: ['class']
|
|
55
|
+
}], answer: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], closeModal: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}] } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBzZXJ0LWFuc3dlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1hY3Rpb25zL3Vwc2VydC1hbnN3ZXIvdXBzZXJ0LWFuc3dlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1hY3Rpb25zL3Vwc2VydC1hbnN3ZXIvdXBzZXJ0LWFuc3dlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBRTlEOztHQUVHO0FBT0gsTUFBTSxPQUFPLHFCQUNYLFNBQVEsaUJBQWlCO0lBUDNCOztRQVV3QixVQUFLLEdBQUcsa0JBQWtCLENBQUM7UUFLakQ7O1dBRUc7UUFDTSxlQUFVLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN4QixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BELENBQUMsQ0FBQztLQTZCSjtJQTNCQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM3QyxPQUFPO1NBQ1I7UUFDRCxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msa0NBQWtDLENBQ25DLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsTUFBTSxLQUFLLENBQUM7U0FDYjtJQUNILENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxDQUFPLEVBQUUsRUFBYztRQUNsRCxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDOztrSEEzQ1UscUJBQXFCO3NHQUFyQixxQkFBcUIsaU5DckJsQyxpckNBa0NBOzJGRGJhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTTs4QkFNekIsS0FBSztzQkFBMUIsV0FBVzt1QkFBQyxPQUFPO2dCQUlYLE1BQU07c0JBQWQsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBvbGwsIFBvbGxBbnN3ZXIgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBCYXNlUG9sbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Jhc2UtcG9sbC5jb21wb25lbnQnO1xuXG4vKipcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS11cHNlcnQtYW5zd2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Vwc2VydC1hbnN3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVXBzZXJ0QW5zd2VyQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZVBvbGxDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXNcbntcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ3N0ci1jaGF0X19kaWFsb2cnO1xuICAvKipcbiAgICogVGhlIHBvbGwgY29tbWVudCB0byBlZGl0LCB3aGVuIGluIGVkaXQgbW9kZVxuICAgKi9cbiAgQElucHV0KCkgYW5zd2VyOiBQb2xsQW5zd2VyIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIHRvIGNsb3NlIHRoZSBtb2RhbCB0aGUgY29tcG9uZW50IGlzIGRpc3BsYXllZCBpblxuICAgKi9cbiAgQElucHV0KCkgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBjb21tZW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gIH0pO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBpZiAoY2hhbmdlc1snYW5zd2VyJ10pIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnY29tbWVudCcpPy5zZXRWYWx1ZSh0aGlzLmFuc3dlcj8uYW5zd2VyX3RleHQgPz8gJycpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZENvbW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQgfHwgIXRoaXMubWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnBvbGw/LmFkZEFuc3dlcih0aGlzLmZvcm1Hcm91cC52YWx1ZS5jb21tZW50ISwgdGhpcy5tZXNzYWdlSWQpO1xuICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5GYWlsZWQgdG8gYWRkIGNvbW1lbnQnXG4gICAgICApO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0ZVN0b3JlU2VsZWN0b3IoXzogUG9sbCwgX186ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nIHN0ci1jaGF0X19kaWFsb2ctLWZvcm0gc3RyLWNoYXRfX3Byb21wdC1kaWFsb2cgc3RyLWNoYXRfX21vZGFsX19wb2xsLWFkZC1jb21tZW50XCJcbj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2JvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fdGl0bGVcIj5cbiAgICAgIHt7XG4gICAgICAgIChhbnN3ZXIgPyBcInN0cmVhbUNoYXQuVXBkYXRlIHlvdXIgY29tbWVudFwiIDogXCJzdHJlYW1DaGF0LkFkZCBhIGNvbW1lbnRcIilcbiAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJhZGRDb21tZW50KClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nX19maWVsZFwiPlxuICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudFwiIGlkPVwiY29tbWVudFwiIHR5cGU9XCJ0ZXh0XCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzLWJ1dHRvbiBzdHItY2hhdF9fZGlhbG9nX19jb250cm9scy1idXR0b24tLWNhbmNlbFwiXG4gICAgICAgICAgb25DbGljaz1cIntjbG9zZX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgXCJzdHJlYW1DaGF0LkNhbmNlbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nX19jb250cm9scy1idXR0b24gc3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uLS1zdWJtaXRcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuU2VuZFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|