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.
Files changed (106) hide show
  1. package/assets/i18n/en.d.ts +42 -0
  2. package/assets/version.d.ts +1 -1
  3. package/esm2020/assets/i18n/en.mjs +43 -1
  4. package/esm2020/assets/version.mjs +2 -2
  5. package/esm2020/lib/channel-list/channel-list.component.mjs +3 -3
  6. package/esm2020/lib/channel-preview/channel-preview.component.mjs +4 -1
  7. package/esm2020/lib/channel.service.mjs +6 -3
  8. package/esm2020/lib/custom-templates.service.mjs +9 -1
  9. package/esm2020/lib/icon/icon.component.mjs +1 -1
  10. package/esm2020/lib/message/message.component.mjs +21 -6
  11. package/esm2020/lib/message-actions.service.mjs +5 -1
  12. package/esm2020/lib/message-input/message-input.component.mjs +30 -5
  13. package/esm2020/lib/message-preview.mjs +3 -2
  14. package/esm2020/lib/modal/modal.component.mjs +3 -3
  15. package/esm2020/lib/modal/stream-modal.module.mjs +19 -0
  16. package/esm2020/lib/notification-list/stream-notification.module.mjs +20 -0
  17. package/esm2020/lib/paginated-list/stream-paginated-list.module.mjs +20 -0
  18. package/esm2020/lib/polls/base-poll.component.mjs +87 -0
  19. package/esm2020/lib/polls/poll/poll.component.mjs +34 -0
  20. package/esm2020/lib/polls/poll-actions/add-option/add-option.component.mjs +67 -0
  21. package/esm2020/lib/polls/poll-actions/poll-actions.component.mjs +137 -0
  22. package/esm2020/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.mjs +82 -0
  23. package/esm2020/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.mjs +63 -0
  24. package/esm2020/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.mjs +33 -0
  25. package/esm2020/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.mjs +82 -0
  26. package/esm2020/lib/polls/poll-actions/upsert-answer/upsert-answer.component.mjs +60 -0
  27. package/esm2020/lib/polls/poll-composer/poll-composer.component.mjs +134 -0
  28. package/esm2020/lib/polls/poll-composer/validators.mjs +18 -0
  29. package/esm2020/lib/polls/poll-header/poll-header.component.mjs +80 -0
  30. package/esm2020/lib/polls/poll-option-selector/poll-option-selector.component.mjs +137 -0
  31. package/esm2020/lib/polls/poll-options-list/poll-options-list.component.mjs +39 -0
  32. package/esm2020/lib/polls/poll-preview/poll-preview.component.mjs +31 -0
  33. package/esm2020/lib/polls/stream-polls.module.mjs +108 -0
  34. package/esm2020/lib/polls/unique.validator.mjs +13 -0
  35. package/esm2020/lib/stream-chat.module.mjs +26 -19
  36. package/esm2020/lib/types.mjs +1 -1
  37. package/esm2020/public-api.mjs +18 -1
  38. package/fesm2015/stream-chat-angular.mjs +1333 -61
  39. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  40. package/fesm2020/stream-chat-angular.mjs +1291 -59
  41. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  42. package/lib/channel.service.d.ts +2 -1
  43. package/lib/custom-templates.service.d.ts +14 -0
  44. package/lib/icon/icon.component.d.ts +1 -1
  45. package/lib/message/message.component.d.ts +1 -1
  46. package/lib/message-actions.service.d.ts +4 -0
  47. package/lib/message-input/message-input.component.d.ts +11 -1
  48. package/lib/message-preview.d.ts +1 -1
  49. package/lib/modal/stream-modal.module.d.ts +9 -0
  50. package/lib/notification-list/stream-notification.module.d.ts +10 -0
  51. package/lib/paginated-list/stream-paginated-list.module.d.ts +10 -0
  52. package/lib/polls/base-poll.component.d.ts +43 -0
  53. package/lib/polls/poll/poll.component.d.ts +12 -0
  54. package/lib/polls/poll-actions/add-option/add-option.component.d.ts +22 -0
  55. package/lib/polls/poll-actions/poll-actions.component.d.ts +50 -0
  56. package/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.d.ts +25 -0
  57. package/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.d.ts +22 -0
  58. package/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.d.ts +20 -0
  59. package/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.d.ts +24 -0
  60. package/lib/polls/poll-actions/upsert-answer/upsert-answer.component.d.ts +27 -0
  61. package/lib/polls/poll-composer/poll-composer.component.d.ts +43 -0
  62. package/lib/polls/poll-composer/validators.d.ts +3 -0
  63. package/lib/polls/poll-header/poll-header.component.d.ts +19 -0
  64. package/lib/polls/poll-option-selector/poll-option-selector.component.d.ts +27 -0
  65. package/lib/polls/poll-options-list/poll-options-list.component.d.ts +17 -0
  66. package/lib/polls/poll-preview/poll-preview.component.d.ts +13 -0
  67. package/lib/polls/stream-polls.module.d.ts +26 -0
  68. package/lib/polls/unique.validator.d.ts +2 -0
  69. package/lib/stream-chat.module.d.ts +20 -19
  70. package/lib/types.d.ts +2 -1
  71. package/package.json +6 -2
  72. package/public-api.d.ts +17 -0
  73. package/src/assets/i18n/en.ts +46 -0
  74. package/src/assets/styles/css/index.css +1 -1
  75. package/src/assets/styles/css/index.layout.css +1 -1
  76. package/src/assets/styles/scss/AttachmentList/AttachmentList-layout.scss +50 -0
  77. package/src/assets/styles/scss/AttachmentList/AttachmentList-theme.scss +56 -0
  78. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-layout.scss +4 -1
  79. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-theme.scss +11 -0
  80. package/src/assets/styles/scss/Autocomplete/Autocomplete-layout.scss +14 -0
  81. package/src/assets/styles/scss/Autocomplete/Autocomplete-theme.scss +11 -0
  82. package/src/assets/styles/scss/Dialog/Dialog-layout.scss +13 -5
  83. package/src/assets/styles/scss/DropzoneContainer/DropzoneContainer-layout.scss +14 -0
  84. package/src/assets/styles/scss/DropzoneContainer/DropzoneContainer-theme.scss +17 -0
  85. package/src/assets/styles/scss/Form/Form-layout.scss +40 -0
  86. package/src/assets/styles/scss/Form/Form-theme.scss +75 -10
  87. package/src/assets/styles/scss/Icon/Icon-layout.scss +6 -0
  88. package/src/assets/styles/scss/Icon/Icon-theme.scss +4 -0
  89. package/src/assets/styles/scss/LinkPreview/LinkPreview-layout.scss +18 -0
  90. package/src/assets/styles/scss/LinkPreview/LinkPreview-theme.scss +15 -0
  91. package/src/assets/styles/scss/Location/Location-layout.scss +52 -0
  92. package/src/assets/styles/scss/Location/Location-theme.scss +32 -0
  93. package/src/assets/styles/scss/Message/Message-layout.scss +37 -2
  94. package/src/assets/styles/scss/Message/Message-theme.scss +40 -1
  95. package/src/assets/styles/scss/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
  96. package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +32 -13
  97. package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +28 -20
  98. package/src/assets/styles/scss/Modal/Modal-layout.scss +2 -0
  99. package/src/assets/styles/scss/Modal/Modal-theme.scss +21 -6
  100. package/src/assets/styles/scss/Poll/Poll-layout.scss +45 -44
  101. package/src/assets/styles/scss/Poll/Poll-theme.scss +8 -36
  102. package/src/assets/styles/scss/_icons.scss +1 -0
  103. package/src/assets/styles/scss/index.layout.scss +3 -1
  104. package/src/assets/styles/scss/index.scss +2 -0
  105. package/src/assets/version.ts +1 -1
  106. /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