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,134 @@
|
|
|
1
|
+
import { Component, EventEmitter, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
|
|
3
|
+
import { VotingVisibility } from 'stream-chat';
|
|
4
|
+
import { atLeastOneOption, maximumNumberOfVotes } from './validators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../custom-templates.service";
|
|
7
|
+
import * as i2 from "../../chat-client.service";
|
|
8
|
+
import * as i3 from "../../notification.service";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "../../modal/modal.component";
|
|
11
|
+
import * as i6 from "../../notification-list/notification-list.component";
|
|
12
|
+
import * as i7 from "@angular/forms";
|
|
13
|
+
import * as i8 from "@ngx-translate/core";
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
export class PollComposerComponent {
|
|
18
|
+
constructor(customTemplatesService, chatService, notificationService) {
|
|
19
|
+
this.customTemplatesService = customTemplatesService;
|
|
20
|
+
this.chatService = chatService;
|
|
21
|
+
this.notificationService = notificationService;
|
|
22
|
+
/**
|
|
23
|
+
* Emitted when a poll is created, the poll id is emitted
|
|
24
|
+
*/
|
|
25
|
+
this.pollCompose = new EventEmitter();
|
|
26
|
+
/**
|
|
27
|
+
* Emitted when the poll composing is cancelled
|
|
28
|
+
*/
|
|
29
|
+
this.cancel = new EventEmitter();
|
|
30
|
+
this.formGroup = new FormGroup({
|
|
31
|
+
name: new FormControl('', [Validators.required]),
|
|
32
|
+
options: new FormArray([new FormControl('')], [atLeastOneOption()]),
|
|
33
|
+
multiple_answers: new FormControl(false),
|
|
34
|
+
maximum_number_of_votes: new FormControl(null, [
|
|
35
|
+
Validators.min(2),
|
|
36
|
+
Validators.max(10),
|
|
37
|
+
]),
|
|
38
|
+
is_anonymous: new FormControl(false),
|
|
39
|
+
allow_user_suggested_options: new FormControl(false),
|
|
40
|
+
allow_answers: new FormControl(false),
|
|
41
|
+
});
|
|
42
|
+
this.isModalOpen = true;
|
|
43
|
+
this.formGroup
|
|
44
|
+
.get('maximum_number_of_votes')
|
|
45
|
+
?.addValidators([
|
|
46
|
+
maximumNumberOfVotes(this.formGroup.get('multiple_answers')),
|
|
47
|
+
]);
|
|
48
|
+
this.formGroup.get('maximum_number_of_votes')?.disable();
|
|
49
|
+
this.formGroup.valueChanges.subscribe((value) => {
|
|
50
|
+
if (value.multiple_answers &&
|
|
51
|
+
this.formGroup.get('maximum_number_of_votes')?.disabled) {
|
|
52
|
+
this.formGroup.get('maximum_number_of_votes')?.enable();
|
|
53
|
+
}
|
|
54
|
+
else if (!value.multiple_answers &&
|
|
55
|
+
this.formGroup.get('maximum_number_of_votes')?.enabled) {
|
|
56
|
+
this.formGroup.get('maximum_number_of_votes')?.disable();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
optionChanged(index) {
|
|
61
|
+
const control = this.options.at(index);
|
|
62
|
+
const penultimateIndex = this.options.length - 2;
|
|
63
|
+
if (index === this.options.length - 1 && control.value?.length === 1) {
|
|
64
|
+
this.addOption();
|
|
65
|
+
}
|
|
66
|
+
else if (index === penultimateIndex &&
|
|
67
|
+
control.value?.length === 0 &&
|
|
68
|
+
this.options.at(this.options.length - 1).value?.length === 0) {
|
|
69
|
+
this.removeLastOption();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
get options() {
|
|
73
|
+
return this.formGroup.get('options');
|
|
74
|
+
}
|
|
75
|
+
addOption() {
|
|
76
|
+
const control = new FormControl('', []);
|
|
77
|
+
this.options.push(control);
|
|
78
|
+
}
|
|
79
|
+
removeLastOption() {
|
|
80
|
+
this.options.removeAt(this.options.length - 1);
|
|
81
|
+
}
|
|
82
|
+
getModalContext() {
|
|
83
|
+
return {
|
|
84
|
+
isOpen: this.isModalOpen,
|
|
85
|
+
isOpenChangeHandler: (isOpen) => {
|
|
86
|
+
if (!isOpen) {
|
|
87
|
+
this.cancel.emit();
|
|
88
|
+
}
|
|
89
|
+
this.isModalOpen = isOpen;
|
|
90
|
+
},
|
|
91
|
+
content: this.formContent,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async createPoll() {
|
|
95
|
+
try {
|
|
96
|
+
const maxVotesControl = this.formGroup.get('maximum_number_of_votes');
|
|
97
|
+
const response = await this.chatService.chatClient.polls.createPoll({
|
|
98
|
+
name: this.formGroup.get('name').value,
|
|
99
|
+
options: this.formGroup
|
|
100
|
+
.get('options')
|
|
101
|
+
.value.filter((v) => !!v)
|
|
102
|
+
.map((v) => ({ text: v })),
|
|
103
|
+
enforce_unique_vote: !this.formGroup.get('multiple_answers')?.value,
|
|
104
|
+
max_votes_allowed: maxVotesControl?.value
|
|
105
|
+
? +maxVotesControl.value
|
|
106
|
+
: undefined,
|
|
107
|
+
voting_visibility: this.formGroup.get('is_anonymous')?.value
|
|
108
|
+
? VotingVisibility.anonymous
|
|
109
|
+
: VotingVisibility.public,
|
|
110
|
+
allow_user_suggested_options: !!this.formGroup.get('allow_user_suggested_options')?.value,
|
|
111
|
+
allow_answers: !!this.formGroup.get('allow_answers')?.value,
|
|
112
|
+
});
|
|
113
|
+
this.pollCompose.emit(response?.id);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
this.notificationService.addTemporaryNotification('streamChat.Failed to create poll');
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
PollComposerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.ChatClientService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
122
|
+
PollComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollComposerComponent, selector: "stream-poll-composer", outputs: { pollCompose: "pollCompose", cancel: "cancel" }, viewQueries: [{ propertyName: "formContent", first: true, predicate: ["formContent"], descendants: true }], ngImport: i0, template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{ 'streamChat.Add an option' | translate }}\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: i6.NotificationListComponent, selector: "stream-notification-list" }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, decorators: [{
|
|
124
|
+
type: Component,
|
|
125
|
+
args: [{ selector: 'stream-poll-composer', template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{ 'streamChat.Add an option' | translate }}\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n" }]
|
|
126
|
+
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.ChatClientService }, { type: i3.NotificationService }]; }, propDecorators: { pollCompose: [{
|
|
127
|
+
type: Output
|
|
128
|
+
}], cancel: [{
|
|
129
|
+
type: Output
|
|
130
|
+
}], formContent: [{
|
|
131
|
+
type: ViewChild,
|
|
132
|
+
args: ['formContent']
|
|
133
|
+
}] } });
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1jb21wb3Nlci9wb2xsLWNvbXBvc2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWNvbXBvc2VyL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUV0RTs7R0FFRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUEyQmhDLFlBQ1csc0JBQThDLEVBQy9DLFdBQThCLEVBQzlCLG1CQUF3QztRQUZ2QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBN0JsRDs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRDs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN4QixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENB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QVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLO2dCQUNuRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsS0FBSztvQkFDdkMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUs7b0JBQ3hCLENBQUMsQ0FBQyxTQUFTO2dCQUNiLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUs7b0JBQzFELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO29CQUM1QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtnQkFDM0IsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNoRCw4QkFBOEIsQ0FDL0IsRUFBRSxLQUFLO2dCQUNSLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSzthQUM1RCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDckM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msa0NBQWtDLENBQ25DLENBQUM7WUFDRixNQUFNLEtBQUssQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7a0hBN0hVLHFCQUFxQjtzR0FBckIscUJBQXFCLG1PQ3ZCbEMsK2lRQTZOQTsyRkR0TWEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHNCQUFzQjsrS0FRdEIsV0FBVztzQkFBcEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBaUIyQixXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFZvdGluZ1Zpc2liaWxpdHkgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQ29udGV4dCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXRMZWFzdE9uZU9wdGlvbiwgbWF4aW11bU51bWJlck9mVm90ZXMgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1wb2xsLWNvbXBvc2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQb2xsQ29tcG9zZXJDb21wb25lbnQge1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcG9sbCBpcyBjcmVhdGVkLCB0aGUgcG9sbCBpZCBpcyBlbWl0dGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcG9sbENvbXBvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgcG9sbCBjb21wb3NpbmcgaXMgY2FuY2VsbGVkXG4gICAqL1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgb3B0aW9uczogbmV3IEZvcm1BcnJheTxGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPj4oXG4gICAgICBbbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KCcnKV0sXG4gICAgICBbYXRMZWFzdE9uZU9wdGlvbigpXVxuICAgICksXG4gICAgbXVsdGlwbGVfYW5zd2VyczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBtYXhpbXVtX251bWJlcl9vZl92b3RlczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtcbiAgICAgIFZhbGlkYXRvcnMubWluKDIpLFxuICAgICAgVmFsaWRhdG9ycy5tYXgoMTApLFxuICAgIF0pLFxuICAgIGlzX2Fub255bW91czogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGFsbG93X2Fuc3dlcnM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gIH0pO1xuICBpc01vZGFsT3BlbiA9IHRydWU7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db250ZW50JykgcHJpdmF0ZSBmb3JtQ29udGVudCE6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpXG4gICAgICA/LmFkZFZhbGlkYXRvcnMoW1xuICAgICAgICBtYXhpbXVtTnVtYmVyT2ZWb3RlcyhcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKSBhcyBGb3JtQ29udHJvbDxib29sZWFuPlxuICAgICAgICApLFxuICAgICAgXSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUubXVsdGlwbGVfYW5zd2VycyAmJlxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICF2YWx1ZS5tdWx0aXBsZV9hbnN3ZXJzICYmXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZW5hYmxlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3B0aW9uQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMub3B0aW9ucy5hdChpbmRleCk7XG4gICAgY29uc3QgcGVudWx0aW1hdGVJbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAyO1xuICAgIGlmIChpbmRleCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDEgJiYgY29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFkZE9wdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpbmRleCA9PT0gcGVudWx0aW1hdGVJbmRleCAmJlxuICAgICAgY29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAwICYmXG4gICAgICB0aGlzLm9wdGlvbnMuYXQodGhpcy5vcHRpb25zLmxlbmd0aCAtIDEpLnZhbHVlPy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk8XG4gICAgICBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPlxuICAgID47XG4gIH1cblxuICBhZGRPcHRpb24oKSB7XG4gICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPignJywgW10pO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKGNvbnRyb2wpO1xuICB9XG5cbiAgcmVtb3ZlTGFzdE9wdGlvbigpIHtcbiAgICB0aGlzLm9wdGlvbnMucmVtb3ZlQXQodGhpcy5vcHRpb25zLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZ2V0TW9kYWxDb250ZXh0KCk6IE1vZGFsQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pc01vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbiA9IGlzT3BlbjtcbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLmZvcm1Db250ZW50LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVQb2xsKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYXhWb3Rlc0NvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuY2hhdENsaWVudC5wb2xscy5jcmVhdGVQb2xsKHtcbiAgICAgICAgbmFtZTogdGhpcy5mb3JtR3JvdXAuZ2V0KCduYW1lJykhLnZhbHVlISxcbiAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KCdvcHRpb25zJykhXG4gICAgICAgICAgLnZhbHVlLmZpbHRlcigodikgPT4gISF2KVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7IHRleHQ6IHYhIH0pKSxcbiAgICAgICAgZW5mb3JjZV91bmlxdWVfdm90ZTogIXRoaXMuZm9ybUdyb3VwLmdldCgnbXVsdGlwbGVfYW5zd2VycycpPy52YWx1ZSxcbiAgICAgICAgbWF4X3ZvdGVzX2FsbG93ZWQ6IG1heFZvdGVzQ29udHJvbD8udmFsdWVcbiAgICAgICAgICA/ICttYXhWb3Rlc0NvbnRyb2wudmFsdWVcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgdm90aW5nX3Zpc2liaWxpdHk6IHRoaXMuZm9ybUdyb3VwLmdldCgnaXNfYW5vbnltb3VzJyk/LnZhbHVlXG4gICAgICAgICAgPyBWb3RpbmdWaXNpYmlsaXR5LmFub255bW91c1xuICAgICAgICAgIDogVm90aW5nVmlzaWJpbGl0eS5wdWJsaWMsXG4gICAgICAgIGFsbG93X3VzZXJfc3VnZ2VzdGVkX29wdGlvbnM6ICEhdGhpcy5mb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICdhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zJ1xuICAgICAgICApPy52YWx1ZSxcbiAgICAgICAgYWxsb3dfYW5zd2VyczogISF0aGlzLmZvcm1Hcm91cC5nZXQoJ2FsbG93X2Fuc3dlcnMnKT8udmFsdWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9sbENvbXBvc2UuZW1pdChyZXNwb25zZT8uaWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5GYWlsZWQgdG8gY3JlYXRlIHBvbGwnXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1vZGFsVGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRNb2RhbDtcbiAgICAgIGNvbnRleHQ6IGdldE1vZGFsQ29udGV4dCgpXG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgY2xhc3M9XCJzdHItY2hhdC1hbmd1bGFyX19jcmVhdGUtcG9sbC1tb2RhbCBzdHItY2hhdF9fY3JlYXRlLXBvbGwtbW9kYWxcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvcm1Db250ZW50PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nIHN0ci1jaGF0X19wb2xsLWNyZWF0aW9uLWRpYWxvZ1wiXG4gICAgZGF0YS10ZXN0aWQ9XCJwb2xsLWNyZWF0aW9uLWRpYWxvZ1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbC1oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DcmVhdGUgcG9sbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fYm9keVwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQtLXdpdGgtbGFiZWxcIlxuICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQtLWhhcy1lcnJvcl09XCJcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ25hbWUnKT8uZXJyb3JzICYmIGZvcm1Hcm91cC5nZXQoJ25hbWUnKT8udG91Y2hlZFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQtbGFiZWxcIiBodG1sRm9yPVwibmFtZVwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0LlF1ZXN0aW9uXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRfX3ZhbHVlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm0tZmllbGQtZXJyb3Igc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX19lcnJvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKGZvcm1Hcm91cC5nZXQoXCJuYW1lXCIpPy5lcnJvcnM/LnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcIm5hbWVcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0LlF1ZXN0aW9uIGlzIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibmFtZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3N0cmVhbUNoYXQuQXNrIGEgcXVlc3Rpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkc2V0XCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0Lk9wdGlvbnNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm0tZmllbGQtZXJyb3Igc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX19lcnJvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgKGZvcm1Hcm91cC5nZXQoXCJvcHRpb25zXCIpPy5lcnJvcnM/LmF0TGVhc3RPbmUgJiZcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcIm9wdGlvbnNcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5Qcm92aWRlIGF0IGxlYXN0IG9uZSBvcHRpb25cIlxuICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRzZXRfX3ZhbHVlc1wiPlxuICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kcmFnLWFuZC1kcm9wLWNvbnRhaW5lcl9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cIm9wdGlvbnt7IGkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJvcHRpb257eyBpIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9wdGlvbkNoYW5nZWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3N0cmVhbUNoYXQuQWRkIGFuIG9wdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc3dpdGNoO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBuYW1lOiAnbXVsdGlwbGVfYW5zd2VycycsXG4gICAgICAgICAgICAgIGNvbnRyb2w6IGZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0Lk11bHRpcGxlIGFuc3dlcnMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KCdtdWx0aXBsZV9hbnN3ZXJzJyk/LnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS13aXRoLWxhYmVsXCJcbiAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS1oYXMtZXJyb3JdPVwiXG4gICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lcnJvcnMgJiZcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LnRvdWNoZWRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkLWxhYmVsXCIgaHRtbEZvcj1cIm5hbWVcIj5cbiAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5NYXhpbXVtIG51bWJlciBvZiB2b3Rlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX192YWx1ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtLWZpZWxkLWVycm9yIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fZXJyb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChmb3JtR3JvdXAuZ2V0KFwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIik/LmVycm9ycyAmJlxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXCJtYXhpbXVtX251bWJlcl9vZl92b3Rlc1wiKT8udG91Y2hlZFxuICAgICAgICAgICAgICAgICAgPyBcInN0cmVhbUNoYXQuUHJvdmlkZSBhIHZhbHVlIGJldHdlZW4ge3sgbWluIH19XG4gICAgICAgICAgICAgIGFuZCB7eyBtYXggfX1cIiA6IFwiXCIgKSB8IHRyYW5zbGF0ZTogeyBtaW46IDIsIG1heDogMTAgfSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJtYXhpbXVtX251bWJlcl9vZl92b3Rlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzdHJlYW1DaGF0LlByb3ZpZGUgYSB2YWx1ZSBiZXR3ZWVuICcgXG4gICAgICAgICAgICAgICsgJ3t7IG1pbiB9fSBhbmQge3sgbWF4IH19JyB8IHRyYW5zbGF0ZTogeyBtaW46IDIsIG1heDogMTAgfSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpc19hbm9ueW1vdXMnLFxuICAgICAgICAgICAgICBjb250cm9sOiBmb3JtR3JvdXAuZ2V0KCdpc19hbm9ueW1vdXMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0LkFub255bW91cyBwb2xsJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnYWxsb3dfdXNlcl9zdWdnZXN0ZWRfb3B0aW9ucycpLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N0cmVhbUNoYXQuQWxsb3cgb3B0aW9uIHN1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGxvd19hbnN3ZXJzJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnYWxsb3dfYW5zd2VycycpLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N0cmVhbUNoYXQuQWxsb3cgY29tbWVudHMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+PC9zdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uIHN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzLWJ1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbC5lbWl0KClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LkNhbmNlbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nX19jb250cm9scy1idXR0b24gc3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uLS1zdWJtaXRcIlxuICAgICAgICAoY2xpY2spPVwiY3JlYXRlUG9sbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5pbnZhbGlkXCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DcmVhdGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzd2l0Y2ggbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtbmFtZT1cIm5hbWVcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkXCI+XG4gICAgPGxhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX190ZXh0XCI+XG4gICAgICAgICAge3sgbGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBbY2hlY2tlZF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lIH19XCJcbiAgICAgICAgbmFtZT1cInt7IG5hbWUgfX1cIlxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX19zd2l0Y2hcIlxuICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZF9fc3dpdGNoLS1vbl09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbnRyb2wuc2V0VmFsdWUoIWNvbnRyb2wudmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImNvbnRyb2wuc2V0VmFsdWUoIWNvbnRyb2wudmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19zd2l0Y2gtZmllbGRfX3N3aXRjaC1oYW5kbGVcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function atLeastOneOption() {
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3
|
+
return (control) => {
|
|
4
|
+
const formArray = control;
|
|
5
|
+
const hasAtLeastOne = formArray.value.some((item) => !!item);
|
|
6
|
+
return hasAtLeastOne ? null : { atLeastOne: true };
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function maximumNumberOfVotes(canHaveMultipleVotes) {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
return (control) => {
|
|
12
|
+
const formControl = control;
|
|
13
|
+
return canHaveMultipleVotes.value && !formControl.value
|
|
14
|
+
? { maximumNumberOfVotes: true }
|
|
15
|
+
: null;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWNvbXBvc2VyL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxVQUFVLGdCQUFnQjtJQUM5Qiw4REFBOEQ7SUFDOUQsT0FBTyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtRQUM1QyxNQUFNLFNBQVMsR0FBRyxPQUFnRCxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsb0JBQTBDO0lBRTFDLDhEQUE4RDtJQUM5RCxPQUFPLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzVDLE1BQU0sV0FBVyxHQUFHLE9BQXFDLENBQUM7UUFDMUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztZQUNyRCxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUU7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1BcnJheSxcbiAgRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdExlYXN0T25lT3B0aW9uKCk6IFZhbGlkYXRvckZuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk8Rm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4+O1xuICAgIGNvbnN0IGhhc0F0TGVhc3RPbmUgPSBmb3JtQXJyYXkudmFsdWUuc29tZSgoaXRlbSkgPT4gISFpdGVtKTtcbiAgICByZXR1cm4gaGFzQXRMZWFzdE9uZSA/IG51bGwgOiB7IGF0TGVhc3RPbmU6IHRydWUgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heGltdW1OdW1iZXJPZlZvdGVzKFxuICBjYW5IYXZlTXVsdGlwbGVWb3RlczogRm9ybUNvbnRyb2w8Ym9vbGVhbj5cbik6IFZhbGlkYXRvckZuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBjb250cm9sIGFzIEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+O1xuICAgIHJldHVybiBjYW5IYXZlTXVsdGlwbGVWb3Rlcy52YWx1ZSAmJiAhZm9ybUNvbnRyb2wudmFsdWVcbiAgICAgID8geyBtYXhpbXVtTnVtYmVyT2ZWb3RlczogdHJ1ZSB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { BasePollComponent } from '../base-poll.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@ngx-translate/core";
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
export class PollHeaderComponent extends BasePollComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.name = '';
|
|
12
|
+
this.selectionInstructions = {
|
|
13
|
+
text: '',
|
|
14
|
+
count: undefined,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
stateStoreSelector(poll, markForCheck) {
|
|
18
|
+
const unsubscribe = poll.state.subscribeWithSelector((state) => ({
|
|
19
|
+
name: state.name,
|
|
20
|
+
is_closed: state.is_closed,
|
|
21
|
+
enforce_unique_vote: state.enforce_unique_vote,
|
|
22
|
+
max_votes_allowed: state.max_votes_allowed,
|
|
23
|
+
options: state.options,
|
|
24
|
+
}), (state) => {
|
|
25
|
+
const name = state.name;
|
|
26
|
+
const selectionInstructions = this.getSelectionInstructions(state);
|
|
27
|
+
let changed = false;
|
|
28
|
+
if (name !== this.name) {
|
|
29
|
+
this.name = name;
|
|
30
|
+
changed = true;
|
|
31
|
+
}
|
|
32
|
+
if (selectionInstructions.text !== this.selectionInstructions.text ||
|
|
33
|
+
selectionInstructions.count !== this.selectionInstructions.count) {
|
|
34
|
+
this.selectionInstructions = selectionInstructions;
|
|
35
|
+
changed = true;
|
|
36
|
+
}
|
|
37
|
+
if (changed) {
|
|
38
|
+
markForCheck();
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return unsubscribe;
|
|
42
|
+
}
|
|
43
|
+
getSelectionInstructions(state) {
|
|
44
|
+
if (state.is_closed)
|
|
45
|
+
return {
|
|
46
|
+
text: 'streamChat.Vote ended',
|
|
47
|
+
count: undefined,
|
|
48
|
+
};
|
|
49
|
+
if (state.enforce_unique_vote || state.options.length === 1) {
|
|
50
|
+
return {
|
|
51
|
+
text: 'streamChat.Select one',
|
|
52
|
+
count: undefined,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (state.max_votes_allowed)
|
|
56
|
+
return {
|
|
57
|
+
text: 'streamChat.Select up to {{count}}',
|
|
58
|
+
count: state.max_votes_allowed > state.options.length
|
|
59
|
+
? state.options.length
|
|
60
|
+
: state.max_votes_allowed,
|
|
61
|
+
};
|
|
62
|
+
if (state.options.length > 1) {
|
|
63
|
+
return {
|
|
64
|
+
text: 'streamChat.Select one or more',
|
|
65
|
+
count: undefined,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
text: '',
|
|
70
|
+
count: undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
PollHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
PollHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollHeaderComponent, selector: "stream-poll-header", usesInheritance: true, ngImport: i0, template: "<div class=\"str-chat__poll-header\">\n <div class=\"str-chat__poll-title\">{{ name }}</div>\n <div class=\"str-chat__poll-subtitle\">\n {{ selectionInstructions.text | translate : selectionInstructions }}\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollHeaderComponent, decorators: [{
|
|
77
|
+
type: Component,
|
|
78
|
+
args: [{ selector: 'stream-poll-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"str-chat__poll-header\">\n <div class=\"str-chat__poll-title\">{{ name }}</div>\n <div class=\"str-chat__poll-subtitle\">\n {{ selectionInstructions.text | translate : selectionInstructions }}\n </div>\n</div>\n" }]
|
|
79
|
+
}] });
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtaGVhZGVyL3BvbGwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWhlYWRlci9wb2xsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFPM0Q7O0dBRUc7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBTjFEOztRQU9FLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDViwwQkFBcUIsR0FBMEI7WUFDN0MsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDO0tBNEVIO0lBMUVXLGtCQUFrQixDQUMxQixJQUFVLEVBQ1YsWUFBd0I7UUFFeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FDbEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7WUFDOUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxFQUNGLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3hCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5FLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtZQUNELElBQ0UscUJBQXFCLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO2dCQUM5RCxxQkFBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFDaEU7Z0JBQ0EsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO2dCQUNuRCxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFLENBQUM7YUFDaEI7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0IsQ0FDdEIsS0FHQztRQUVELElBQUksS0FBSyxDQUFDLFNBQVM7WUFDakIsT0FBTztnQkFDTCxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixLQUFLLEVBQUUsU0FBUzthQUNqQixDQUFDO1FBQ0osSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCO1lBQ3pCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLG1DQUFtQztnQkFDekMsS0FBSyxFQUNILEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCO2FBQzlCLENBQUM7UUFDSixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPO2dCQUNMLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUM7U0FDSDtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUM7SUFDSixDQUFDOztnSEFoRlUsbUJBQW1CO29HQUFuQixtQkFBbUIsaUZDbEJoQyx3T0FNQTsyRkRZYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb2xsLCBQb2xsU3RhdGUgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBCYXNlUG9sbENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtcG9sbC5jb21wb25lbnQnO1xuXG50eXBlIFNlbGVjdGlvbkluc3RydWN0aW9ucyA9IHtcbiAgdGV4dDogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VQb2xsQ29tcG9uZW50IHtcbiAgbmFtZSA9ICcnO1xuICBzZWxlY3Rpb25JbnN0cnVjdGlvbnM6IFNlbGVjdGlvbkluc3RydWN0aW9ucyA9IHtcbiAgICB0ZXh0OiAnJyxcbiAgICBjb3VudDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdGF0ZVN0b3JlU2VsZWN0b3IoXG4gICAgcG9sbDogUG9sbCxcbiAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBwb2xsLnN0YXRlLnN1YnNjcmliZVdpdGhTZWxlY3RvcihcbiAgICAgIChzdGF0ZSkgPT4gKHtcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcbiAgICAgICAgaXNfY2xvc2VkOiBzdGF0ZS5pc19jbG9zZWQsXG4gICAgICAgIGVuZm9yY2VfdW5pcXVlX3ZvdGU6IHN0YXRlLmVuZm9yY2VfdW5pcXVlX3ZvdGUsXG4gICAgICAgIG1heF92b3Rlc19hbGxvd2VkOiBzdGF0ZS5tYXhfdm90ZXNfYWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogc3RhdGUub3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzdGF0ZS5uYW1lO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25JbnN0cnVjdGlvbnMgPSB0aGlzLmdldFNlbGVjdGlvbkluc3RydWN0aW9ucyhzdGF0ZSk7XG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlbGVjdGlvbkluc3RydWN0aW9ucy50ZXh0ICE9PSB0aGlzLnNlbGVjdGlvbkluc3RydWN0aW9ucy50ZXh0IHx8XG4gICAgICAgICAgc2VsZWN0aW9uSW5zdHJ1Y3Rpb25zLmNvdW50ICE9PSB0aGlzLnNlbGVjdGlvbkluc3RydWN0aW9ucy5jb3VudFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkluc3RydWN0aW9ucyA9IHNlbGVjdGlvbkluc3RydWN0aW9ucztcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgbWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgZ2V0U2VsZWN0aW9uSW5zdHJ1Y3Rpb25zKFxuICAgIHN0YXRlOiBQaWNrPFxuICAgICAgUG9sbFN0YXRlLFxuICAgICAgJ2lzX2Nsb3NlZCcgfCAnZW5mb3JjZV91bmlxdWVfdm90ZScgfCAnbWF4X3ZvdGVzX2FsbG93ZWQnIHwgJ29wdGlvbnMnXG4gICAgPlxuICApOiBTZWxlY3Rpb25JbnN0cnVjdGlvbnMge1xuICAgIGlmIChzdGF0ZS5pc19jbG9zZWQpXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiAnc3RyZWFtQ2hhdC5Wb3RlIGVuZGVkJyxcbiAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgaWYgKHN0YXRlLmVuZm9yY2VfdW5pcXVlX3ZvdGUgfHwgc3RhdGUub3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6ICdzdHJlYW1DaGF0LlNlbGVjdCBvbmUnLFxuICAgICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1heF92b3Rlc19hbGxvd2VkKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogJ3N0cmVhbUNoYXQuU2VsZWN0IHVwIHRvIHt7Y291bnR9fScsXG4gICAgICAgIGNvdW50OlxuICAgICAgICAgIHN0YXRlLm1heF92b3Rlc19hbGxvd2VkID4gc3RhdGUub3B0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgID8gc3RhdGUub3B0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgIDogc3RhdGUubWF4X3ZvdGVzX2FsbG93ZWQsXG4gICAgICB9O1xuICAgIGlmIChzdGF0ZS5vcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6ICdzdHJlYW1DaGF0LlNlbGVjdCBvbmUgb3IgbW9yZScsXG4gICAgICAgIGNvdW50OiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogJycsXG4gICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLXRpdGxlXCI+e3sgbmFtZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtc3VidGl0bGVcIj5cbiAgICB7eyBzZWxlY3Rpb25JbnN0cnVjdGlvbnMudGV4dCB8IHRyYW5zbGF0ZSA6IHNlbGVjdGlvbkluc3RydWN0aW9ucyB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
|
|
2
|
+
import { BasePollComponent } from '../base-poll.component';
|
|
3
|
+
import { isVoteAnswer, } from 'stream-chat';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "../../avatar-placeholder/avatar-placeholder.component";
|
|
7
|
+
import * as i3 from "@ngx-translate/core";
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export class PollOptionSelectorComponent extends BasePollComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.displayAvatarCount = 3;
|
|
15
|
+
this.voteCountVerbose = false;
|
|
16
|
+
this.isClosed = false;
|
|
17
|
+
this.latestVotes = [];
|
|
18
|
+
this.isWinner = false;
|
|
19
|
+
this.voteCount = 0;
|
|
20
|
+
this.winningOptionCount = 0;
|
|
21
|
+
this.maxVoteAllowedCount = 0;
|
|
22
|
+
this.ownVoteCount = 0;
|
|
23
|
+
}
|
|
24
|
+
ngOnChanges(changes) {
|
|
25
|
+
super.ngOnChanges(changes);
|
|
26
|
+
if (changes['option']) {
|
|
27
|
+
this.setupStateStoreSelector();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async toggleVote() {
|
|
31
|
+
if (!this.canVote || !this.option?.id || !this.messageId || this.isClosed)
|
|
32
|
+
return;
|
|
33
|
+
const haveVotedForTheOption = !!this.ownVote;
|
|
34
|
+
if (!haveVotedForTheOption &&
|
|
35
|
+
this.maxVoteAllowedCount > 0 &&
|
|
36
|
+
this.ownVoteCount >= this.maxVoteAllowedCount) {
|
|
37
|
+
this.addNotification('streamChat.You have reached the maximum number of votes allowed');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
await (haveVotedForTheOption
|
|
42
|
+
? this.poll?.removeVote(this.ownVote.id, this.messageId)
|
|
43
|
+
: this.poll?.castVote(this.option?.id, this.messageId));
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
this.notificationService.addTemporaryNotification('streamChat.Failed to cast vote');
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
trackByVoteId(_, vote) {
|
|
51
|
+
return vote.id;
|
|
52
|
+
}
|
|
53
|
+
stateStoreSelector(poll, markForCheck) {
|
|
54
|
+
const unsubscribe = poll.state.subscribeWithSelector((nextValue) => {
|
|
55
|
+
return {
|
|
56
|
+
is_closed: nextValue.is_closed,
|
|
57
|
+
latest_votes_by_option: nextValue.latest_votes_by_option,
|
|
58
|
+
maxVotedOptionIds: nextValue.maxVotedOptionIds,
|
|
59
|
+
ownVotesByOptionId: nextValue.ownVotesByOptionId,
|
|
60
|
+
vote_counts_by_option: nextValue.vote_counts_by_option,
|
|
61
|
+
voting_visibility: nextValue.voting_visibility,
|
|
62
|
+
max_votes_allowed: nextValue.max_votes_allowed,
|
|
63
|
+
};
|
|
64
|
+
}, (state) => {
|
|
65
|
+
const isClosed = state.is_closed;
|
|
66
|
+
const latestVotes = state.latest_votes_by_option[this.option?.id ?? '']?.filter((vote) => !!vote.user && !isVoteAnswer(vote)) ?? [];
|
|
67
|
+
const isWinner = state.maxVotedOptionIds.includes(this.option?.id ?? '') &&
|
|
68
|
+
state.maxVotedOptionIds.length === 1;
|
|
69
|
+
const ownVote = state.ownVotesByOptionId[this.option?.id ?? ''];
|
|
70
|
+
const voteCount = state.vote_counts_by_option[this.option?.id ?? ''];
|
|
71
|
+
const votingVisibility = state.voting_visibility;
|
|
72
|
+
const winningOptionCount = state.vote_counts_by_option[state.maxVotedOptionIds?.[0] ?? ''];
|
|
73
|
+
const maxVoteAllowedCount = state.max_votes_allowed;
|
|
74
|
+
const ownVoteCount = Object.keys(state.ownVotesByOptionId).length;
|
|
75
|
+
let changed = false;
|
|
76
|
+
if (isClosed !== this.isClosed) {
|
|
77
|
+
this.isClosed = isClosed ?? false;
|
|
78
|
+
changed = true;
|
|
79
|
+
}
|
|
80
|
+
if (latestVotes !== this.latestVotes) {
|
|
81
|
+
this.latestVotes = latestVotes ?? [];
|
|
82
|
+
changed = true;
|
|
83
|
+
}
|
|
84
|
+
if (isWinner !== this.isWinner) {
|
|
85
|
+
this.isWinner = isWinner ?? false;
|
|
86
|
+
changed = true;
|
|
87
|
+
}
|
|
88
|
+
if (ownVote !== this.ownVote) {
|
|
89
|
+
this.ownVote = ownVote ?? undefined;
|
|
90
|
+
changed = true;
|
|
91
|
+
}
|
|
92
|
+
if (voteCount !== this.voteCount) {
|
|
93
|
+
this.voteCount = voteCount ?? 0;
|
|
94
|
+
changed = true;
|
|
95
|
+
}
|
|
96
|
+
if (votingVisibility !== this.votingVisibility) {
|
|
97
|
+
this.votingVisibility = votingVisibility ?? undefined;
|
|
98
|
+
changed = true;
|
|
99
|
+
}
|
|
100
|
+
if (winningOptionCount !== this.winningOptionCount) {
|
|
101
|
+
this.winningOptionCount = winningOptionCount ?? 0;
|
|
102
|
+
changed = true;
|
|
103
|
+
}
|
|
104
|
+
if (maxVoteAllowedCount !== this.maxVoteAllowedCount) {
|
|
105
|
+
this.maxVoteAllowedCount = maxVoteAllowedCount ?? 0;
|
|
106
|
+
changed = true;
|
|
107
|
+
}
|
|
108
|
+
if (ownVoteCount !== this.ownVoteCount) {
|
|
109
|
+
this.ownVoteCount = ownVoteCount ?? 0;
|
|
110
|
+
changed = true;
|
|
111
|
+
}
|
|
112
|
+
if (this.dismissNotificationFn &&
|
|
113
|
+
this.maxVoteAllowedCount > 0 &&
|
|
114
|
+
this.ownVoteCount <= this.maxVoteAllowedCount) {
|
|
115
|
+
this.dismissNotificationFn();
|
|
116
|
+
changed = true;
|
|
117
|
+
}
|
|
118
|
+
if (changed) {
|
|
119
|
+
markForCheck();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return unsubscribe;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
PollOptionSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionSelectorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
+
PollOptionSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollOptionSelectorComponent, selector: "stream-poll-option-selector", inputs: { option: "option", displayAvatarCount: "displayAvatarCount", voteCountVerbose: "voteCountVerbose" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__poll-option\"\n [class.str-chat__poll-option--votable]=\"\n !isClosed &&\n canVote &&\n maxVoteAllowedCount &&\n ownVoteCount < maxVoteAllowedCount &&\n !ownVote\n \"\n (click)=\"toggleVote()\"\n (keyup.enter)=\"toggleVote()\"\n>\n <ng-container *ngIf=\"canVote\">\n <ng-container *ngTemplateOutlet=\"checkmark\"></ng-container>\n </ng-container>\n <div class=\"str-chat__poll-option-data\">\n <p class=\"str-chat__poll-option-text\">{{ option?.text }}</p>\n <ng-container *ngIf=\"displayAvatarCount && votingVisibility === 'public'\">\n <div\n *ngFor=\"let vote of latestVotes; trackBy: trackByVoteId\"\n class=\"str-chat__poll-option-voters\"\n >\n <stream-avatar-placeholder\n location=\"poll-voter\"\n [user]=\"vote.user\"\n [imageUrl]=\"vote.user?.image\"\n [name]=\"vote.user?.name\"\n type=\"user\"\n ></stream-avatar-placeholder>\n </div>\n </ng-container>\n <div class=\"str-chat__poll-option-vote-count\">\n <ng-container *ngIf=\"voteCountVerbose; else count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount} }}\n </ng-container>\n <ng-template #count>\n {{ voteCount }}\n </ng-template>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"amountBar\"></ng-container>\n</div>\n\n<ng-template #checkmark>\n <div\n class=\"str-chat__checkmark\"\n [class.str-chat__checkmark--checked]=\"!!ownVote\"\n ></div>\n</ng-template>\n\n<ng-template #amountBar>\n <div\n class=\"str-chat__amount-bar str-chat__poll-option__votes-bar\"\n [class.str-chat__poll-option__votes-bar--winner]=\"isClosed && isWinner\"\n role=\"progressbar\"\n [ngStyle]=\"{\n '--str-chat__amount-bar-fulfillment':\n (winningOptionCount && voteCount / winningOptionCount) * 100 + '%'\n }\"\n ></div>\n</ng-template>\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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionSelectorComponent, decorators: [{
|
|
128
|
+
type: Component,
|
|
129
|
+
args: [{ selector: 'stream-poll-option-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__poll-option\"\n [class.str-chat__poll-option--votable]=\"\n !isClosed &&\n canVote &&\n maxVoteAllowedCount &&\n ownVoteCount < maxVoteAllowedCount &&\n !ownVote\n \"\n (click)=\"toggleVote()\"\n (keyup.enter)=\"toggleVote()\"\n>\n <ng-container *ngIf=\"canVote\">\n <ng-container *ngTemplateOutlet=\"checkmark\"></ng-container>\n </ng-container>\n <div class=\"str-chat__poll-option-data\">\n <p class=\"str-chat__poll-option-text\">{{ option?.text }}</p>\n <ng-container *ngIf=\"displayAvatarCount && votingVisibility === 'public'\">\n <div\n *ngFor=\"let vote of latestVotes; trackBy: trackByVoteId\"\n class=\"str-chat__poll-option-voters\"\n >\n <stream-avatar-placeholder\n location=\"poll-voter\"\n [user]=\"vote.user\"\n [imageUrl]=\"vote.user?.image\"\n [name]=\"vote.user?.name\"\n type=\"user\"\n ></stream-avatar-placeholder>\n </div>\n </ng-container>\n <div class=\"str-chat__poll-option-vote-count\">\n <ng-container *ngIf=\"voteCountVerbose; else count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount} }}\n </ng-container>\n <ng-template #count>\n {{ voteCount }}\n </ng-template>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"amountBar\"></ng-container>\n</div>\n\n<ng-template #checkmark>\n <div\n class=\"str-chat__checkmark\"\n [class.str-chat__checkmark--checked]=\"!!ownVote\"\n ></div>\n</ng-template>\n\n<ng-template #amountBar>\n <div\n class=\"str-chat__amount-bar str-chat__poll-option__votes-bar\"\n [class.str-chat__poll-option__votes-bar--winner]=\"isClosed && isWinner\"\n role=\"progressbar\"\n [ngStyle]=\"{\n '--str-chat__amount-bar-fulfillment':\n (winningOptionCount && voteCount / winningOptionCount) * 100 + '%'\n }\"\n ></div>\n</ng-template>\n" }]
|
|
130
|
+
}], propDecorators: { option: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], displayAvatarCount: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], voteCountVerbose: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}] } });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1vcHRpb24tc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtb3B0aW9uLXNlbGVjdG9yL3BvbGwtb3B0aW9uLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLW9wdGlvbi1zZWxlY3Rvci9wb2xsLW9wdGlvbi1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFlBQVksR0FLYixNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFFckI7O0dBRUc7QUFPSCxNQUFNLE9BQU8sMkJBQ1gsU0FBUSxpQkFBaUI7SUFQM0I7O1FBV1csdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQWUsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBRyxDQUFDLENBQUM7S0ErSGxCO0lBN0hDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lB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O3NCQUFkLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVBvbGxDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXBvbGwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGlzVm90ZUFuc3dlcixcbiAgUG9sbCxcbiAgUG9sbE9wdGlvbixcbiAgUG9sbFZvdGUsXG4gIFZvdGluZ1Zpc2liaWxpdHksXG59IGZyb20gJ3N0cmVhbS1jaGF0JztcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC1vcHRpb24tc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1vcHRpb24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbE9wdGlvblNlbGVjdG9yQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZVBvbGxDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgb3B0aW9uOiBQb2xsT3B0aW9uIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBkaXNwbGF5QXZhdGFyQ291bnQgPSAzO1xuICBASW5wdXQoKSB2b3RlQ291bnRWZXJib3NlID0gZmFsc2U7XG4gIGlzQ2xvc2VkID0gZmFsc2U7XG4gIGxhdGVzdFZvdGVzOiBQb2xsVm90ZVtdID0gW107XG4gIGlzV2lubmVyID0gZmFsc2U7XG4gIG93blZvdGU6IFBvbGxWb3RlIHwgdW5kZWZpbmVkO1xuICB2b3RlQ291bnQgPSAwO1xuICB2b3RpbmdWaXNpYmlsaXR5OiBWb3RpbmdWaXNpYmlsaXR5IHwgdW5kZWZpbmVkO1xuICB3aW5uaW5nT3B0aW9uQ291bnQgPSAwO1xuICBtYXhWb3RlQWxsb3dlZENvdW50ID0gMDtcbiAgb3duVm90ZUNvdW50ID0gMDtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgaWYgKGNoYW5nZXNbJ29wdGlvbiddKSB7XG4gICAgICB0aGlzLnNldHVwU3RhdGVTdG9yZVNlbGVjdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdG9nZ2xlVm90ZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVm90ZSB8fCAhdGhpcy5vcHRpb24/LmlkIHx8ICF0aGlzLm1lc3NhZ2VJZCB8fCB0aGlzLmlzQ2xvc2VkKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGhhdmVWb3RlZEZvclRoZU9wdGlvbiA9ICEhdGhpcy5vd25Wb3RlO1xuICAgIGlmIChcbiAgICAgICFoYXZlVm90ZWRGb3JUaGVPcHRpb24gJiZcbiAgICAgIHRoaXMubWF4Vm90ZUFsbG93ZWRDb3VudCA+IDAgJiZcbiAgICAgIHRoaXMub3duVm90ZUNvdW50ID49IHRoaXMubWF4Vm90ZUFsbG93ZWRDb3VudFxuICAgICkge1xuICAgICAgdGhpcy5hZGROb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LllvdSBoYXZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZvdGVzIGFsbG93ZWQnXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgKGhhdmVWb3RlZEZvclRoZU9wdGlvblxuICAgICAgICA/IHRoaXMucG9sbD8ucmVtb3ZlVm90ZSh0aGlzLm93blZvdGUhLmlkLCB0aGlzLm1lc3NhZ2VJZClcbiAgICAgICAgOiB0aGlzLnBvbGw/LmNhc3RWb3RlKHRoaXMub3B0aW9uPy5pZCwgdGhpcy5tZXNzYWdlSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgJ3N0cmVhbUNoYXQuRmFpbGVkIHRvIGNhc3Qgdm90ZSdcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5Vm90ZUlkKF86IG51bWJlciwgdm90ZTogUG9sbFZvdGUpIHtcbiAgICByZXR1cm4gdm90ZS5pZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0ZVN0b3JlU2VsZWN0b3IoXG4gICAgcG9sbDogUG9sbCxcbiAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBwb2xsLnN0YXRlLnN1YnNjcmliZVdpdGhTZWxlY3RvcihcbiAgICAgIChuZXh0VmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc19jbG9zZWQ6IG5leHRWYWx1ZS5pc19jbG9zZWQsXG4gICAgICAgICAgbGF0ZXN0X3ZvdGVzX2J5X29wdGlvbjogbmV4dFZhbHVlLmxhdGVzdF92b3Rlc19ieV9vcHRpb24sXG4gICAgICAgICAgbWF4Vm90ZWRPcHRpb25JZHM6IG5leHRWYWx1ZS5tYXhWb3RlZE9wdGlvbklkcyxcbiAgICAgICAgICBvd25Wb3Rlc0J5T3B0aW9uSWQ6IG5leHRWYWx1ZS5vd25Wb3Rlc0J5T3B0aW9uSWQsXG4gICAgICAgICAgdm90ZV9jb3VudHNfYnlfb3B0aW9uOiBuZXh0VmFsdWUudm90ZV9jb3VudHNfYnlfb3B0aW9uLFxuICAgICAgICAgIHZvdGluZ192aXNpYmlsaXR5OiBuZXh0VmFsdWUudm90aW5nX3Zpc2liaWxpdHksXG4gICAgICAgICAgbWF4X3ZvdGVzX2FsbG93ZWQ6IG5leHRWYWx1ZS5tYXhfdm90ZXNfYWxsb3dlZCxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgaXNDbG9zZWQgPSBzdGF0ZS5pc19jbG9zZWQ7XG4gICAgICAgIGNvbnN0IGxhdGVzdFZvdGVzID1cbiAgICAgICAgICBzdGF0ZS5sYXRlc3Rfdm90ZXNfYnlfb3B0aW9uW3RoaXMub3B0aW9uPy5pZCA/PyAnJ10/LmZpbHRlcihcbiAgICAgICAgICAgICh2b3RlKSA9PiAhIXZvdGUudXNlciAmJiAhaXNWb3RlQW5zd2VyKHZvdGUpXG4gICAgICAgICAgKSA/PyBbXTtcbiAgICAgICAgY29uc3QgaXNXaW5uZXIgPVxuICAgICAgICAgIHN0YXRlLm1heFZvdGVkT3B0aW9uSWRzLmluY2x1ZGVzKHRoaXMub3B0aW9uPy5pZCA/PyAnJykgJiZcbiAgICAgICAgICBzdGF0ZS5tYXhWb3RlZE9wdGlvbklkcy5sZW5ndGggPT09IDE7XG4gICAgICAgIGNvbnN0IG93blZvdGUgPSBzdGF0ZS5vd25Wb3Rlc0J5T3B0aW9uSWRbdGhpcy5vcHRpb24/LmlkID8/ICcnXTtcbiAgICAgICAgY29uc3Qgdm90ZUNvdW50ID0gc3RhdGUudm90ZV9jb3VudHNfYnlfb3B0aW9uW3RoaXMub3B0aW9uPy5pZCA/PyAnJ107XG4gICAgICAgIGNvbnN0IHZvdGluZ1Zpc2liaWxpdHkgPSBzdGF0ZS52b3RpbmdfdmlzaWJpbGl0eTtcbiAgICAgICAgY29uc3Qgd2lubmluZ09wdGlvbkNvdW50ID1cbiAgICAgICAgICBzdGF0ZS52b3RlX2NvdW50c19ieV9vcHRpb25bc3RhdGUubWF4Vm90ZWRPcHRpb25JZHM/LlswXSA/PyAnJ107XG4gICAgICAgIGNvbnN0IG1heFZvdGVBbGxvd2VkQ291bnQgPSBzdGF0ZS5tYXhfdm90ZXNfYWxsb3dlZDtcbiAgICAgICAgY29uc3Qgb3duVm90ZUNvdW50ID0gT2JqZWN0LmtleXMoc3RhdGUub3duVm90ZXNCeU9wdGlvbklkKS5sZW5ndGg7XG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlzQ2xvc2VkICE9PSB0aGlzLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5pc0Nsb3NlZCA9IGlzQ2xvc2VkID8/IGZhbHNlO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXRlc3RWb3RlcyAhPT0gdGhpcy5sYXRlc3RWb3Rlcykge1xuICAgICAgICAgIHRoaXMubGF0ZXN0Vm90ZXMgPSBsYXRlc3RWb3RlcyA/PyBbXTtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNXaW5uZXIgIT09IHRoaXMuaXNXaW5uZXIpIHtcbiAgICAgICAgICB0aGlzLmlzV2lubmVyID0gaXNXaW5uZXIgPz8gZmFsc2U7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZvdGUgIT09IHRoaXMub3duVm90ZSkge1xuICAgICAgICAgIHRoaXMub3duVm90ZSA9IG93blZvdGUgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2b3RlQ291bnQgIT09IHRoaXMudm90ZUNvdW50KSB7XG4gICAgICAgICAgdGhpcy52b3RlQ291bnQgPSB2b3RlQ291bnQgPz8gMDtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm90aW5nVmlzaWJpbGl0eSAhPT0gdGhpcy52b3RpbmdWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgdGhpcy52b3RpbmdWaXNpYmlsaXR5ID0gdm90aW5nVmlzaWJpbGl0eSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbm5pbmdPcHRpb25Db3VudCAhPT0gdGhpcy53aW5uaW5nT3B0aW9uQ291bnQpIHtcbiAgICAgICAgICB0aGlzLndpbm5pbmdPcHRpb25Db3VudCA9IHdpbm5pbmdPcHRpb25Db3VudCA/PyAwO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWb3RlQWxsb3dlZENvdW50ICE9PSB0aGlzLm1heFZvdGVBbGxvd2VkQ291bnQpIHtcbiAgICAgICAgICB0aGlzLm1heFZvdGVBbGxvd2VkQ291bnQgPSBtYXhWb3RlQWxsb3dlZENvdW50ID8/IDA7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZvdGVDb3VudCAhPT0gdGhpcy5vd25Wb3RlQ291bnQpIHtcbiAgICAgICAgICB0aGlzLm93blZvdGVDb3VudCA9IG93blZvdGVDb3VudCA/PyAwO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbkZuICYmXG4gICAgICAgICAgdGhpcy5tYXhWb3RlQWxsb3dlZENvdW50ID4gMCAmJlxuICAgICAgICAgIHRoaXMub3duVm90ZUNvdW50IDw9IHRoaXMubWF4Vm90ZUFsbG93ZWRDb3VudFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb25GbigpO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICBtYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1vcHRpb25cIlxuICBbY2xhc3Muc3RyLWNoYXRfX3BvbGwtb3B0aW9uLS12b3RhYmxlXT1cIlxuICAgICFpc0Nsb3NlZCAmJlxuICAgIGNhblZvdGUgJiZcbiAgICBtYXhWb3RlQWxsb3dlZENvdW50ICYmXG4gICAgb3duVm90ZUNvdW50IDwgbWF4Vm90ZUFsbG93ZWRDb3VudCAmJlxuICAgICFvd25Wb3RlXG4gIFwiXG4gIChjbGljayk9XCJ0b2dnbGVWb3RlKClcIlxuICAoa2V5dXAuZW50ZXIpPVwidG9nZ2xlVm90ZSgpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblZvdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hlY2ttYXJrXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uLWRhdGFcIj5cbiAgICA8cCBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbi10ZXh0XCI+e3sgb3B0aW9uPy50ZXh0IH19PC9wPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5QXZhdGFyQ291bnQgJiYgdm90aW5nVmlzaWJpbGl0eSA9PT0gJ3B1YmxpYydcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHZvdGUgb2YgbGF0ZXN0Vm90ZXM7IHRyYWNrQnk6IHRyYWNrQnlWb3RlSWRcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbi12b3RlcnNcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICAgIGxvY2F0aW9uPVwicG9sbC12b3RlclwiXG4gICAgICAgICAgW3VzZXJdPVwidm90ZS51c2VyXCJcbiAgICAgICAgICBbaW1hZ2VVcmxdPVwidm90ZS51c2VyPy5pbWFnZVwiXG4gICAgICAgICAgW25hbWVdPVwidm90ZS51c2VyPy5uYW1lXCJcbiAgICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uLXZvdGUtY291bnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2b3RlQ291bnRWZXJib3NlOyBlbHNlIGNvdW50XCI+XG4gICAgICAgIHt7ICdzdHJlYW1DaGF0Lnt7IGNvdW50IH19IHZvdGVzJyB8IHRyYW5zbGF0ZTp7Y291bnQ6IHZvdGVDb3VudH0gfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb3VudD5cbiAgICAgICAge3sgdm90ZUNvdW50IH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFtb3VudEJhclwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2hlY2ttYXJrPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fY2hlY2ttYXJrXCJcbiAgICBbY2xhc3Muc3RyLWNoYXRfX2NoZWNrbWFyay0tY2hlY2tlZF09XCIhIW93blZvdGVcIlxuICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Ftb3VudEJhcj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2Ftb3VudC1iYXIgc3RyLWNoYXRfX3BvbGwtb3B0aW9uX192b3Rlcy1iYXJcIlxuICAgIFtjbGFzcy5zdHItY2hhdF9fcG9sbC1vcHRpb25fX3ZvdGVzLWJhci0td2lubmVyXT1cImlzQ2xvc2VkICYmIGlzV2lubmVyXCJcbiAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICctLXN0ci1jaGF0X19hbW91bnQtYmFyLWZ1bGZpbGxtZW50JzpcbiAgICAgICAgKHdpbm5pbmdPcHRpb25Db3VudCAmJiB2b3RlQ291bnQgLyB3aW5uaW5nT3B0aW9uQ291bnQpICogMTAwICsgJyUnXG4gICAgfVwiXG4gID48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
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 "../poll-option-selector/poll-option-selector.component";
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export class PollOptionsListComponent extends BasePollComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
/**
|
|
13
|
+
* How many options should be displayed. If there are more options than this number, use the poll actions to display all options
|
|
14
|
+
*/
|
|
15
|
+
this.maxOptionsDisplayed = 10;
|
|
16
|
+
this.options = [];
|
|
17
|
+
}
|
|
18
|
+
stateStoreSelector(poll, markForCheck) {
|
|
19
|
+
const unsubscribe = poll.state.subscribeWithSelector((state) => ({
|
|
20
|
+
options: state.options,
|
|
21
|
+
}), (state) => {
|
|
22
|
+
this.options = state.options;
|
|
23
|
+
markForCheck();
|
|
24
|
+
});
|
|
25
|
+
return unsubscribe;
|
|
26
|
+
}
|
|
27
|
+
trackByOptionId(_, option) {
|
|
28
|
+
return option.id;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
PollOptionsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionsListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
+
PollOptionsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollOptionsListComponent, selector: "stream-poll-options-list", inputs: { maxOptionsDisplayed: "maxOptionsDisplayed" }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"str-chat__poll-option-list\"\n [class.str-chat__poll-option-list--full]=\"\n !maxOptionsDisplayed || maxOptionsDisplayed === options.length\n \"\n>\n <ng-container\n *ngFor=\"\n let option of options | slice : 0 : maxOptionsDisplayed;\n trackBy: trackByOptionId\n \"\n >\n <stream-poll-option-selector\n [option]=\"option\"\n [messageId]=\"messageId\"\n [pollId]=\"pollId\"\n ></stream-poll-option-selector>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.PollOptionSelectorComponent, selector: "stream-poll-option-selector", inputs: ["option", "displayAvatarCount", "voteCountVerbose"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionsListComponent, decorators: [{
|
|
34
|
+
type: Component,
|
|
35
|
+
args: [{ selector: 'stream-poll-options-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__poll-option-list\"\n [class.str-chat__poll-option-list--full]=\"\n !maxOptionsDisplayed || maxOptionsDisplayed === options.length\n \"\n>\n <ng-container\n *ngFor=\"\n let option of options | slice : 0 : maxOptionsDisplayed;\n trackBy: trackByOptionId\n \"\n >\n <stream-poll-option-selector\n [option]=\"option\"\n [messageId]=\"messageId\"\n [pollId]=\"pollId\"\n ></stream-poll-option-selector>\n </ng-container>\n</div>\n" }]
|
|
36
|
+
}], propDecorators: { maxOptionsDisplayed: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}] } });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1vcHRpb25zLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtb3B0aW9ucy1saXN0L3BvbGwtb3B0aW9ucy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLW9wdGlvbnMtbGlzdC9wb2xsLW9wdGlvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRDs7R0FFRztBQU9ILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBaUI7SUFOL0Q7O1FBT0U7O1dBRUc7UUFDTSx3QkFBbUIsR0FBdUIsRUFBRSxDQUFDO1FBQ3RELFlBQU8sR0FBaUIsRUFBRSxDQUFDO0tBc0I1QjtJQXBCVyxrQkFBa0IsQ0FDMUIsSUFBVSxFQUNWLFlBQXdCO1FBRXhCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQ2xELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsRUFDRixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzdCLFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFTLEVBQUUsTUFBa0I7UUFDM0MsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7O3FIQTFCVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwrSUNickMsa2ZBbUJBOzJGRE5hLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07OEJBTXRDLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlUG9sbENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtcG9sbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9sbCwgUG9sbE9wdGlvbiB9IGZyb20gJ3N0cmVhbS1jaGF0JztcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC1vcHRpb25zLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1vcHRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbE9wdGlvbnNMaXN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZVBvbGxDb21wb25lbnQge1xuICAvKipcbiAgICogSG93IG1hbnkgb3B0aW9ucyBzaG91bGQgYmUgZGlzcGxheWVkLiBJZiB0aGVyZSBhcmUgbW9yZSBvcHRpb25zIHRoYW4gdGhpcyBudW1iZXIsIHVzZSB0aGUgcG9sbCBhY3Rpb25zIHRvIGRpc3BsYXkgYWxsIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIG1heE9wdGlvbnNEaXNwbGF5ZWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDEwO1xuICBvcHRpb25zOiBQb2xsT3B0aW9uW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgc3RhdGVTdG9yZVNlbGVjdG9yKFxuICAgIHBvbGw6IFBvbGwsXG4gICAgbWFya0ZvckNoZWNrOiAoKSA9PiB2b2lkXG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gcG9sbC5zdGF0ZS5zdWJzY3JpYmVXaXRoU2VsZWN0b3IoXG4gICAgICAoc3RhdGUpID0+ICh7XG4gICAgICAgIG9wdGlvbnM6IHN0YXRlLm9wdGlvbnMsXG4gICAgICB9KSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBzdGF0ZS5vcHRpb25zO1xuICAgICAgICBtYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgdHJhY2tCeU9wdGlvbklkKF86IG51bWJlciwgb3B0aW9uOiBQb2xsT3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5pZDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbi1saXN0XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19wb2xsLW9wdGlvbi1saXN0LS1mdWxsXT1cIlxuICAgICFtYXhPcHRpb25zRGlzcGxheWVkIHx8IG1heE9wdGlvbnNEaXNwbGF5ZWQgPT09IG9wdGlvbnMubGVuZ3RoXG4gIFwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9XCJcbiAgICAgIGxldCBvcHRpb24gb2Ygb3B0aW9ucyB8IHNsaWNlIDogMCA6IG1heE9wdGlvbnNEaXNwbGF5ZWQ7XG4gICAgICB0cmFja0J5OiB0cmFja0J5T3B0aW9uSWRcbiAgICBcIlxuICA+XG4gICAgPHN0cmVhbS1wb2xsLW9wdGlvbi1zZWxlY3RvclxuICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgW3BvbGxJZF09XCJwb2xsSWRcIlxuICAgID48L3N0cmVhbS1wb2xsLW9wdGlvbi1zZWxlY3Rvcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { BasePollComponent } from '../base-poll.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
*/
|
|
7
|
+
export class PollPreviewComponent extends BasePollComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.name = '';
|
|
11
|
+
this.isClosed = false;
|
|
12
|
+
}
|
|
13
|
+
stateStoreSelector(poll, markForCheck) {
|
|
14
|
+
const unsubscribe = poll.state.subscribeWithSelector((state) => ({
|
|
15
|
+
name: state.name,
|
|
16
|
+
is_closed: state.is_closed,
|
|
17
|
+
}), (state) => {
|
|
18
|
+
this.name = state.name;
|
|
19
|
+
this.isClosed = state.is_closed ?? false;
|
|
20
|
+
markForCheck();
|
|
21
|
+
});
|
|
22
|
+
return unsubscribe;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
PollPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
PollPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollPreviewComponent, selector: "stream-poll-preview", usesInheritance: true, ngImport: i0, template: "<div\n class=\"str-chat__quoted-poll-preview\"\n [class.str-chat__quoted-poll-preview--closed]=\"isClosed\"\n>\n <div class=\"str-chat__quoted-poll-preview__icon\">\uD83D\uDCCA</div>\n <div class=\"str-chat__quoted-poll-preview__name\">{{ name }}</div>\n</div>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollPreviewComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'stream-poll-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__quoted-poll-preview\"\n [class.str-chat__quoted-poll-preview--closed]=\"isClosed\"\n>\n <div class=\"str-chat__quoted-poll-preview__icon\">\uD83D\uDCCA</div>\n <div class=\"str-chat__quoted-poll-preview__name\">{{ name }}</div>\n</div>\n" }]
|
|
30
|
+
}] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLXByZXZpZXcvcG9sbC1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLXByZXZpZXcvcG9sbC1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRzNEOztHQUVHO0FBT0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGlCQUFpQjtJQU4zRDs7UUFPRSxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEtBQUssQ0FBQztLQW9CbEI7SUFsQlcsa0JBQWtCLENBQzFCLElBQVUsRUFDVixZQUF3QjtRQUV4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUNsRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDM0IsQ0FBQyxFQUNGLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztZQUN6QyxZQUFZLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O2lIQXJCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixrRkNiakMsNFFBT0E7MkZETWEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVBvbGxDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXBvbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFBvbGwgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5cbi8qKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLXBvbGwtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb2xsLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbFByZXZpZXdDb21wb25lbnQgZXh0ZW5kcyBCYXNlUG9sbENvbXBvbmVudCB7XG4gIG5hbWUgPSAnJztcbiAgaXNDbG9zZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc3RhdGVTdG9yZVNlbGVjdG9yKFxuICAgIHBvbGw6IFBvbGwsXG4gICAgbWFya0ZvckNoZWNrOiAoKSA9PiB2b2lkXG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gcG9sbC5zdGF0ZS5zdWJzY3JpYmVXaXRoU2VsZWN0b3IoXG4gICAgICAoc3RhdGUpID0+ICh7XG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIGlzX2Nsb3NlZDogc3RhdGUuaXNfY2xvc2VkLFxuICAgICAgfSksXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5uYW1lID0gc3RhdGUubmFtZTtcbiAgICAgICAgdGhpcy5pc0Nsb3NlZCA9IHN0YXRlLmlzX2Nsb3NlZCA/PyBmYWxzZTtcbiAgICAgICAgbWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInN0ci1jaGF0X19xdW90ZWQtcG9sbC1wcmV2aWV3XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19xdW90ZWQtcG9sbC1wcmV2aWV3LS1jbG9zZWRdPVwiaXNDbG9zZWRcIlxuPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3F1b3RlZC1wb2xsLXByZXZpZXdfX2ljb25cIj7wn5OKPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcXVvdGVkLXBvbGwtcHJldmlld19fbmFtZVwiPnt7IG5hbWUgfX08L2Rpdj5cbjwvZGl2PlxuIl19
|