@rtsee/ngx 0.0.90 → 0.0.92
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/dist/ngx/fesm2022/rtsee-ngx.mjs +804 -513
- package/dist/ngx/fesm2022/rtsee-ngx.mjs.map +1 -1
- package/dist/ngx/index.d.ts +9 -4
- package/dist/ngx/src/lib/theme/common-components/rating.scss +8 -0
- package/dist/ngx/src/lib/theme/common-variables.scss +26 -0
- package/dist/ngx/src/lib/theme/messenger/chat.scss +2 -0
- package/dist/ngx/src/lib/theme/messenger/index.scss +1 -0
- package/dist/ngx/src/lib/theme/messenger/messages-list.scss +8 -0
- package/dist/ngx/src/lib/theme/messenger/rate-input.scss +31 -0
- package/dist/ngx/src/lib/theme/presentation/story-details.scss +368 -36
- package/dist/ngx/src/lib/theme/rates/index.scss +6 -0
- package/dist/ngx/src/lib/theme/rates/rate-input.scss +153 -0
- package/dist/ngx/src/lib/theme/rates/rate-item.scss +204 -0
- package/dist/ngx/src/lib/theme/rates/rater.scss +212 -0
- package/dist/ngx/src/lib/theme/rates/rates-list.scss +46 -0
- package/dist/ngx/src/lib/theme/rates/rating-section.scss +10 -0
- package/dist/ngx/src/lib/theme/rates/variables.scss +1 -0
- package/dist/ngx/src/lib/theme/styles.scss +1 -0
- package/package.json +11 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, Input, Component, ViewChild, Directive, DOCUMENT, HostListener, Inject, EventEmitter, Output, output, CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
|
3
3
|
import * as i2$1 from '@angular/common';
|
|
4
|
-
import { NgClass, NgIf, NgForOf, SlicePipe, NgStyle, NgOptimizedImage, CommonModule } from '@angular/common';
|
|
4
|
+
import { NgClass, NgIf, NgForOf, SlicePipe, NgStyle, DatePipe, NgOptimizedImage, CommonModule } from '@angular/common';
|
|
5
5
|
import * as i1 from '@angular/forms';
|
|
6
6
|
import { FormsModule, FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
7
7
|
import { Select } from 'primeng/select';
|
|
@@ -48,12 +48,12 @@ import { Slider } from 'primeng/slider';
|
|
|
48
48
|
import { Fieldset } from 'primeng/fieldset';
|
|
49
49
|
import { Tag } from 'primeng/tag';
|
|
50
50
|
import { Listbox } from 'primeng/listbox';
|
|
51
|
+
import { RTSeeRater, RecursiveSelect } from '@rtsee/utilities-ui';
|
|
51
52
|
import { RTSeeRoutesList } from '@rtsee/factory';
|
|
52
53
|
import { Avatar } from 'primeng/avatar';
|
|
53
54
|
import { Image } from 'primeng/image';
|
|
54
55
|
import { Tooltip } from 'primeng/tooltip';
|
|
55
56
|
import { PanelMenu } from 'primeng/panelmenu';
|
|
56
|
-
import { RecursiveSelect } from '@rtsee/utilities-ui';
|
|
57
57
|
import { Menu } from 'primeng/menu';
|
|
58
58
|
import { Password } from 'primeng/password';
|
|
59
59
|
import { Checkbox } from 'primeng/checkbox';
|
|
@@ -90,9 +90,7 @@ class RTSeeControlsComponent {
|
|
|
90
90
|
}
|
|
91
91
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeControlsComponent, decorators: [{
|
|
92
92
|
type: Component,
|
|
93
|
-
args: [{ selector: 'ngx-rtsee-controls', imports: [
|
|
94
|
-
NgClass
|
|
95
|
-
], standalone: true, template: "<div class=\"rtsee-controls\" [ngClass]=\"{'rtsee-full-screen-controls' : fullScreenMode }\">\n <div class=\"rtsee-bottom-panel\">\n <div class=\"mic rtsee-buttons-container\">\n @if (rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"this.rtsee.disableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_none</span>\n </button>\n }\n @if (!rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\" (click)=\"this.rtsee.enableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_off</span>\n </button>\n }\n </div>\n\n <div class=\"video-camera rtsee-buttons-container\">\n @if (rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.disableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam</span>\n </button>\n }\n @if (!rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.enableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam_off</span>\n </button>\n }\n </div>\n <div class=\"present rtsee-buttons-container\"\n [ngClass]=\"{'rtsee-present-button-container': rtsee.isPresenter}\"\n >\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"onPresentClicked()\"\n >\n <span class=\"material-icons-outlined\">present_to_all</span>\n </button>\n </div>\n <div class=\"call-end rtsee-buttons-container\">\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.end()\"\n >\n <span class=\"material-icons-outlined\">call_end</span>\n </button>\n </div>\n </div>\n</div>\n", styles: [".rtsee-controls{display:inline-block;height:100%}.rtsee-controls .rtsee-buttons-container{height:45px;width:45px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 9px;cursor:pointer;background-color:#fff}.rtsee-controls .rtsee-buttons-container .rtsee-ripple-button{border:none;outline:none;background-color:transparent;cursor:pointer}.rtsee-controls .rtsee-buttons-container:last-child{margin-right:0}.rtsee-controls .rtsee-buttons-container:first-child{margin-left:0}.rtsee-controls .rtsee-buttons-container .mdc-icon-button{background-color:#333;color:#fff}.rtsee-controls .rtsee-buttons-container.call-end{background-color:#ff3232}.rtsee-controls .rtsee-buttons-container.rtsee-present-button-container .mdc-icon-button{background-color:#090}.rtsee-controls .full-screen{align-self:flex-end;padding:12px;cursor:pointer}.rtsee-controls .rtsee-bottom-panel{padding:12px;display:flex;justify-content:center;align-items:center;border-radius:45px;background-color:#000000b3}.rtsee-controls.rtsee-full-screen-controls .rtsee-buttons-container{height:60px;width:60px}\n"] }]
|
|
93
|
+
args: [{ selector: 'ngx-rtsee-controls', imports: [NgClass], standalone: true, template: "<div class=\"rtsee-controls\" [ngClass]=\"{'rtsee-full-screen-controls' : fullScreenMode }\">\n <div class=\"rtsee-bottom-panel\">\n <div class=\"mic rtsee-buttons-container\">\n @if (rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"this.rtsee.disableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_none</span>\n </button>\n }\n @if (!rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\" (click)=\"this.rtsee.enableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_off</span>\n </button>\n }\n </div>\n\n <div class=\"video-camera rtsee-buttons-container\">\n @if (rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.disableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam</span>\n </button>\n }\n @if (!rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.enableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam_off</span>\n </button>\n }\n </div>\n <div class=\"present rtsee-buttons-container\"\n [ngClass]=\"{'rtsee-present-button-container': rtsee.isPresenter}\"\n >\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"onPresentClicked()\"\n >\n <span class=\"material-icons-outlined\">present_to_all</span>\n </button>\n </div>\n <div class=\"call-end rtsee-buttons-container\">\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.end()\"\n >\n <span class=\"material-icons-outlined\">call_end</span>\n </button>\n </div>\n </div>\n</div>\n", styles: [".rtsee-controls{display:inline-block;height:100%}.rtsee-controls .rtsee-buttons-container{height:45px;width:45px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 9px;cursor:pointer;background-color:#fff}.rtsee-controls .rtsee-buttons-container .rtsee-ripple-button{border:none;outline:none;background-color:transparent;cursor:pointer}.rtsee-controls .rtsee-buttons-container:last-child{margin-right:0}.rtsee-controls .rtsee-buttons-container:first-child{margin-left:0}.rtsee-controls .rtsee-buttons-container .mdc-icon-button{background-color:#333;color:#fff}.rtsee-controls .rtsee-buttons-container.call-end{background-color:#ff3232}.rtsee-controls .rtsee-buttons-container.rtsee-present-button-container .mdc-icon-button{background-color:#090}.rtsee-controls .full-screen{align-self:flex-end;padding:12px;cursor:pointer}.rtsee-controls .rtsee-bottom-panel{padding:12px;display:flex;justify-content:center;align-items:center;border-radius:45px;background-color:#000000b3}.rtsee-controls.rtsee-full-screen-controls .rtsee-buttons-container{height:60px;width:60px}\n"] }]
|
|
96
94
|
}], propDecorators: { rtsee: [{
|
|
97
95
|
type: Input
|
|
98
96
|
}], fullScreenMode: [{
|
|
@@ -121,13 +119,7 @@ class RtseeSettingsComponent {
|
|
|
121
119
|
}
|
|
122
120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeSettingsComponent, decorators: [{
|
|
123
121
|
type: Component,
|
|
124
|
-
args: [{ selector: 'ngx-rtsee-settings', imports: [
|
|
125
|
-
NgClass,
|
|
126
|
-
FormsModule,
|
|
127
|
-
Select,
|
|
128
|
-
FloatLabel,
|
|
129
|
-
Button
|
|
130
|
-
], standalone: true, template: "<div class=\"rtsee-settings\" [ngClass]=\"{'rtsee-full-screen-settings' : fullScreenMode}\">\n <div class=\"rtsee-devices rtsee-form-container\">\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioInputDevices\"\n [(ngModel)]=\"rtSee.audioInputDeviceId\"\n (ngModelChange)=\"audioInputChanged()\"\n inputId=\"mic_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"mic_input\">Microphone</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioOutputDevices\"\n [(ngModel)]=\"rtSee.audioOutputDeviceId\"\n (ngModelChange)=\"audioOutputChanged()\"\n inputId=\"audio_output\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"audio_output\">Speaker</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.videoInputDevices\"\n [(ngModel)]=\"rtSee.videoInputDeviceId\"\n (ngModelChange)=\"videoInputChanged()\"\n inputId=\"video_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"video_input\">Camera</label>\n </p-floatlabel>\n </div>\n </div>\n\n <div class=\"rtsee-settings-footer\">\n <p-button label=\"Close\"\n (click)=\"rtSee.toggleSettings()\"\n ></p-button>\n </div>\n</div>\n", styles: [".rtsee-settings{position:fixed;height:100%;width:100%;inset:0;overflow:auto;box-sizing:border-box;background-color:#404040;border-bottom:1px solid;padding:16px 8px;z-index:4}.rtsee-settings .rtsee-settings-footer{padding-top:16px}.rtsee-settings .rtsee-form-field-container:last-child{padding-bottom:0}.rtsee-settings .rtsee-form-field-container{padding-bottom:16px}.rtsee-settings .rtsee-device-select-field{width:100%}.rtsee-settings .rtsee-device-select-field.p-component.p-overlay{max-height:100%}.rtsee-settings.rtsee-full-screen-settings{max-height:unset;overflow:unset}\n"] }]
|
|
122
|
+
args: [{ selector: 'ngx-rtsee-settings', imports: [NgClass, FormsModule, Select, FloatLabel, Button], standalone: true, template: "<div class=\"rtsee-settings\" [ngClass]=\"{'rtsee-full-screen-settings' : fullScreenMode}\">\n <div class=\"rtsee-devices rtsee-form-container\">\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioInputDevices\"\n [(ngModel)]=\"rtSee.audioInputDeviceId\"\n (ngModelChange)=\"audioInputChanged()\"\n inputId=\"mic_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"mic_input\">Microphone</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioOutputDevices\"\n [(ngModel)]=\"rtSee.audioOutputDeviceId\"\n (ngModelChange)=\"audioOutputChanged()\"\n inputId=\"audio_output\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"audio_output\">Speaker</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.videoInputDevices\"\n [(ngModel)]=\"rtSee.videoInputDeviceId\"\n (ngModelChange)=\"videoInputChanged()\"\n inputId=\"video_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"video_input\">Camera</label>\n </p-floatlabel>\n </div>\n </div>\n\n <div class=\"rtsee-settings-footer\">\n <p-button label=\"Close\"\n (click)=\"rtSee.toggleSettings()\"\n ></p-button>\n </div>\n</div>\n", styles: [".rtsee-settings{position:fixed;height:100%;width:100%;inset:0;overflow:auto;box-sizing:border-box;background-color:#404040;border-bottom:1px solid;padding:16px 8px;z-index:4}.rtsee-settings .rtsee-settings-footer{padding-top:16px}.rtsee-settings .rtsee-form-field-container:last-child{padding-bottom:0}.rtsee-settings .rtsee-form-field-container{padding-bottom:16px}.rtsee-settings .rtsee-device-select-field{width:100%}.rtsee-settings .rtsee-device-select-field.p-component.p-overlay{max-height:100%}.rtsee-settings.rtsee-full-screen-settings{max-height:unset;overflow:unset}\n"] }]
|
|
131
123
|
}], ctorParameters: () => [], propDecorators: { rtSee: [{
|
|
132
124
|
type: Input
|
|
133
125
|
}], fullScreenMode: [{
|
|
@@ -200,11 +192,7 @@ class RtseePeerComponent {
|
|
|
200
192
|
}
|
|
201
193
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseePeerComponent, decorators: [{
|
|
202
194
|
type: Component,
|
|
203
|
-
args: [{ selector: 'ngx-rtsee-peer', imports: [
|
|
204
|
-
NgClass,
|
|
205
|
-
NgIf,
|
|
206
|
-
RtseeSoundbarComponent
|
|
207
|
-
], standalone: true, template: "<div class=\"rtsee-peer\" [ngClass]=\"{\n'rtsee-peer-video-disabled': !peer.remoteVideoStream || !peer.camera\n}\">\n <div class=\"rtsee-peer-content\">\n <div class=\"rtsee-peer-photo\" *ngIf=\"!peer.camera\">\n <div class=\"rtsee-peer-photo-wrapper\">\n <div *ngIf=\"peer.imageUrl\"\n [style.background-image]=\"'url(' + peer.imageUrl + ')'\"\n class=\"rtsee-peer-photo-image\"\n ></div>\n <img *ngIf=\"!peer.imageUrl\" [src]=\"\" alt=\"peer_photo\" class=\"rtsee-peer-photo-image\">\n </div>\n <div class=\"rtsee-peer-info\">\n <p class=\"rtsee-peer-name\" *ngIf=\"peer.name\">{{peer.name}}</p>\n </div>\n </div>\n <video #videoOutput\n class=\"rtsee-peer-video\"\n [autoplay]=\"true\"\n [srcObject]=\"peer.remoteVideoStream\"\n playsinline=\"true\"\n >\n </video>\n <div class=\"rtsee-peer-soundbar\">\n <ngx-rtsee-soundbar [peer]=\"peer\"></ngx-rtsee-soundbar>\n </div>\n </div>\n</div>\n" }]
|
|
195
|
+
args: [{ selector: 'ngx-rtsee-peer', imports: [NgClass, NgIf, RtseeSoundbarComponent], standalone: true, template: "<div class=\"rtsee-peer\" [ngClass]=\"{\n'rtsee-peer-video-disabled': !peer.remoteVideoStream || !peer.camera\n}\">\n <div class=\"rtsee-peer-content\">\n <div class=\"rtsee-peer-photo\" *ngIf=\"!peer.camera\">\n <div class=\"rtsee-peer-photo-wrapper\">\n <div *ngIf=\"peer.imageUrl\"\n [style.background-image]=\"'url(' + peer.imageUrl + ')'\"\n class=\"rtsee-peer-photo-image\"\n ></div>\n <img *ngIf=\"!peer.imageUrl\" [src]=\"\" alt=\"peer_photo\" class=\"rtsee-peer-photo-image\">\n </div>\n <div class=\"rtsee-peer-info\">\n <p class=\"rtsee-peer-name\" *ngIf=\"peer.name\">{{peer.name}}</p>\n </div>\n </div>\n <video #videoOutput\n class=\"rtsee-peer-video\"\n [autoplay]=\"true\"\n [srcObject]=\"peer.remoteVideoStream\"\n playsinline=\"true\"\n >\n </video>\n <div class=\"rtsee-peer-soundbar\">\n <ngx-rtsee-soundbar [peer]=\"peer\"></ngx-rtsee-soundbar>\n </div>\n </div>\n</div>\n" }]
|
|
208
196
|
}], ctorParameters: () => [], propDecorators: { audioOutput: [{
|
|
209
197
|
type: ViewChild,
|
|
210
198
|
args: ['audioOutput']
|
|
@@ -234,7 +222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
234
222
|
NgClass,
|
|
235
223
|
RtseeSettingsComponent,
|
|
236
224
|
RtseePeerComponent,
|
|
237
|
-
RTSeeControlsComponent
|
|
225
|
+
RTSeeControlsComponent,
|
|
238
226
|
], standalone: true, template: "<div class=\"rtsee-conference-shell\" [ngClass]=\"{\n'rtsee-conference-shell-expanded': rtSee.uiControls.isExpanded,\n'rtsee-conference-shell-no-companions': !rtSee.rtcPeerConnections.connections?.length\n}\">\n @if (rtSee.localStream && rtSee.camera) {\n <div class=\"rtsee-local-peer\">\n <video class=\"rtsee-local-video\"\n [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.localStream\"\n playsinline=\"true\"\n ></video>\n </div>\n }\n <div class=\"rtsee-window-controls\">\n <button type=\"button\"\n (click)=\"rtSee.toggleSettings()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">settings</span>\n </button>\n </div>\n @if (rtSee.settingsOpened) {\n <ngx-rtsee-settings [rtSee]=\"rtSee\" [fullScreenMode]=\"rtSee.uiControls.isExpanded\"></ngx-rtsee-settings>\n }\n @if (rtSee.screenSharePeer) {\n <div class=\"rtsee-screen-share\">\n <video [autoplay]=\"true\"\n [muted]=\"'true'\"\n [srcObject]=\"rtSee.screenSharePeer.remoteVideoStream\"\n playsinline=\"true\"\n class=\"rtsee-screen-share-video\"\n ></video>\n </div>\n }\n <div class=\"rtsee-peers\" [ngClass]=\"{\n 'rtsee-peers-alone': !rtSee.rtcPeerConnections.connections?.length,\n 'rtsee-peers-one': rtSee.rtcPeerConnections.connections?.length === 1,\n 'rtsee-peers-three-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 1\n && rtSee.rtcPeerConnections.connections.length < 4,\n 'rtsee-peers-six-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 3\n && rtSee.rtcPeerConnections.connections.length < 7,\n 'rtsee-peers-nine-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length >= 7\n }\">\n @for (peer of rtSee.rtcPeerConnections.connections; track peer.clientId) {\n <div class=\"rtsee-peer-wrapper\">\n <ngx-rtsee-peer [peer]=\"peer\"></ngx-rtsee-peer>\n </div>\n }\n </div>\n <div class=\"rtsee-peers-list\"></div>\n <div class=\"rtsee-controls-wrapper\">\n <ngx-rtsee-controls [rtsee]=\"rtSee\" [fullScreenMode]=\"rtSee.uiControls.isExpanded\"></ngx-rtsee-controls>\n </div>\n</div>\n\n" }]
|
|
239
227
|
}], ctorParameters: () => [], propDecorators: { rtSee: [{
|
|
240
228
|
type: Input
|
|
@@ -257,16 +245,13 @@ class RTSeeAuthService {
|
|
|
257
245
|
.pipe(tap((res) => this.rtseeAuth.authenticate(res)));
|
|
258
246
|
}
|
|
259
247
|
signUp(credentials) {
|
|
260
|
-
return this.http
|
|
261
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.SIGN_UP), credentials);
|
|
248
|
+
return this.http.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.SIGN_UP), credentials);
|
|
262
249
|
}
|
|
263
250
|
forgotPassword(credentials) {
|
|
264
|
-
return this.http
|
|
265
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.FORGOT_PASSWORD), credentials);
|
|
251
|
+
return this.http.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.FORGOT_PASSWORD), credentials);
|
|
266
252
|
}
|
|
267
253
|
resetPassword(credentials) {
|
|
268
|
-
return this.http
|
|
269
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.RESET_PASSWORD), credentials);
|
|
254
|
+
return this.http.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.RESET_PASSWORD), credentials);
|
|
270
255
|
}
|
|
271
256
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
272
257
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, providedIn: 'root' }); }
|
|
@@ -274,7 +259,7 @@ class RTSeeAuthService {
|
|
|
274
259
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, decorators: [{
|
|
275
260
|
type: Injectable,
|
|
276
261
|
args: [{
|
|
277
|
-
providedIn: 'root'
|
|
262
|
+
providedIn: 'root',
|
|
278
263
|
}]
|
|
279
264
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }] });
|
|
280
265
|
|
|
@@ -314,14 +299,7 @@ class ProfileComponent {
|
|
|
314
299
|
}
|
|
315
300
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ProfileComponent, decorators: [{
|
|
316
301
|
type: Component,
|
|
317
|
-
args: [{ selector: 'rtsee-profile', imports: [
|
|
318
|
-
Button,
|
|
319
|
-
Message,
|
|
320
|
-
RouterLink,
|
|
321
|
-
Select,
|
|
322
|
-
FormsModule,
|
|
323
|
-
Divider
|
|
324
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-profile\">\n @if (!messenger.ownProfileOpened) {\n <ul class=\"rtsee-messenger-profile-actions\">\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"call()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-phone\"\n />\n </li>\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"videoCall()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-video\"\n />\n </li>\n </ul>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer && !messenger.myPeer.isAnonymous) {\n <div class=\"rtsee-messenger-profile-info\">\n <p class=\"rtsee-messenger-profile-info-name\">{{messenger.myPeer.name}}</p>\n <div class=\"rtsee-messenger-profile-info-language\">\n <p class=\"rtsee-messenger-profile-info-language-label\">Language:</p>\n <p-select [options]=\"messenger.languageOptions\"\n [(ngModel)]=\"messenger.currentLanguage\"\n (ngModelChange)=\"setLanguage()\"\n optionLabel=\"key\"\n optionValue=\"key\"\n [placeholder]=\"messenger.labels[RTSeeTextLabelKeys.MESSANGER_LANGUAGE_PLACEHOLDER]\"\n class=\"rtsee-messenger-profile-info-language-select\"\n />\n </div>\n <div class=\"rtsee-messenger-profile-edit\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MESSENGER_EDIT_PROFILE_BTN_LABEL]\"\n (click)=\"messenger.openManageProfile()\"\n ></p-button>\n </div>\n <p-divider></p-divider>\n @if (messenger.myPeer.plan) {\n <p-message severity=\"success\">\n <span>{{messenger.myPeer.plan.productName}}</span>\n </p-message>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]\"\n (click)=\"messenger.openManagePlanPage()\"\n ></p-button>\n } @else {\n <div class=\"rtsee-subscribe-button\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SUBSCRIBE_LABEL]\"\n (click)=\"messenger.openPaymentPage()\"\n ></p-button>\n </div>\n }\n <p-divider></p-divider>\n </div>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer?.isAnonymous) {\n <div class=\"rtsee-messenger-profile-auth\">\n <div class=\"rtsee-messenger-profile-anon-message\">\n @if (!messenger.currentLanguage || messenger.currentLanguage === 'eng') {\n <p-message severity=\"warn\">\n <span>This is an anonymous identity we've generated for you.</span>\n <span> </span>\n <span>You can use it to play around.</span>\n <span> </span>\n <span>But we are guilty of erasing these time after time.</span>\n <span> </span>\n <span>So please Sign Up if you're looking for something more stable :)</span>\n </p-message>\n } @else if (messenger.currentLanguage === 'ua') {\n <p-message severity=\"warn\">\n <span>\u041C\u0438 \u0437\u0433\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u043B\u0438 \u0434\u043B\u044F \u0432\u0430\u0441 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u0443 \u043E\u0441\u043E\u0431\u0438\u0441\u0442\u0456\u0441\u0442\u044C.</span>\n <span> </span>\n <span>\u0421\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435\u0441\u044F \u043D\u0435\u044E \u0434\u043B\u044F \u043E\u0437\u043D\u0430\u0439\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0437 \u0441\u0430\u0439\u0442\u043E\u043C.</span>\n <span> </span>\n <span>\u0422\u0430, \u0447\u0430\u0441-\u0432\u0456\u0434-\u0447\u0430\u0441\u0443, \u043C\u0438 \u0457\u0445 \u0432\u0438\u0434\u0430\u043B\u044F\u0454\u043C\u043E.</span>\n <span> </span>\n <span>\u0422\u043E\u0436 \u043A\u0440\u0430\u0449\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0442\u0435\u0441\u044F, \u0430\u0431\u0438 \u043D\u0435 \u0432\u0442\u0440\u0430\u0442\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 :)</span>\n </p-message>\n }\n </div>\n\n <div class=\"rtsee-messenger-profile-auth-buttons\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_UP_BUTTON]\"\n severity=\"primary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_IN_BUTTON]\"\n severity=\"secondary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n </div>\n </div>\n } @else if (messenger.ownProfileOpened && !messenger.myPeer?.isAnonymous) {\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.LOGOUT_BUTTON]\"\n severity=\"danger\"\n (click)=\"logOut()\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n }\n</div>\n" }]
|
|
302
|
+
args: [{ selector: 'rtsee-profile', imports: [Button, Message, RouterLink, Select, FormsModule, Divider], standalone: true, template: "<div class=\"rtsee-messenger-profile\">\n @if (!messenger.ownProfileOpened) {\n <ul class=\"rtsee-messenger-profile-actions\">\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"call()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-phone\"\n />\n </li>\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"videoCall()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-video\"\n />\n </li>\n </ul>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer && !messenger.myPeer.isAnonymous) {\n <div class=\"rtsee-messenger-profile-info\">\n <p class=\"rtsee-messenger-profile-info-name\">{{messenger.myPeer.name}}</p>\n <div class=\"rtsee-messenger-profile-info-language\">\n <p class=\"rtsee-messenger-profile-info-language-label\">Language:</p>\n <p-select [options]=\"messenger.languageOptions\"\n [(ngModel)]=\"messenger.currentLanguage\"\n (ngModelChange)=\"setLanguage()\"\n optionLabel=\"key\"\n optionValue=\"key\"\n [placeholder]=\"messenger.labels[RTSeeTextLabelKeys.MESSANGER_LANGUAGE_PLACEHOLDER]\"\n class=\"rtsee-messenger-profile-info-language-select\"\n />\n </div>\n <div class=\"rtsee-messenger-profile-edit\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MESSENGER_EDIT_PROFILE_BTN_LABEL]\"\n (click)=\"messenger.openManageProfile()\"\n ></p-button>\n </div>\n <p-divider></p-divider>\n @if (messenger.myPeer.plan) {\n <p-message severity=\"success\">\n <span>{{messenger.myPeer.plan.productName}}</span>\n </p-message>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]\"\n (click)=\"messenger.openManagePlanPage()\"\n ></p-button>\n } @else {\n <div class=\"rtsee-subscribe-button\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SUBSCRIBE_LABEL]\"\n (click)=\"messenger.openPaymentPage()\"\n ></p-button>\n </div>\n }\n <p-divider></p-divider>\n </div>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer?.isAnonymous) {\n <div class=\"rtsee-messenger-profile-auth\">\n <div class=\"rtsee-messenger-profile-anon-message\">\n @if (!messenger.currentLanguage || messenger.currentLanguage === 'eng') {\n <p-message severity=\"warn\">\n <span>This is an anonymous identity we've generated for you.</span>\n <span> </span>\n <span>You can use it to play around.</span>\n <span> </span>\n <span>But we are guilty of erasing these time after time.</span>\n <span> </span>\n <span>So please Sign Up if you're looking for something more stable :)</span>\n </p-message>\n } @else if (messenger.currentLanguage === 'ua') {\n <p-message severity=\"warn\">\n <span>\u041C\u0438 \u0437\u0433\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u043B\u0438 \u0434\u043B\u044F \u0432\u0430\u0441 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u0443 \u043E\u0441\u043E\u0431\u0438\u0441\u0442\u0456\u0441\u0442\u044C.</span>\n <span> </span>\n <span>\u0421\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435\u0441\u044F \u043D\u0435\u044E \u0434\u043B\u044F \u043E\u0437\u043D\u0430\u0439\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0437 \u0441\u0430\u0439\u0442\u043E\u043C.</span>\n <span> </span>\n <span>\u0422\u0430, \u0447\u0430\u0441-\u0432\u0456\u0434-\u0447\u0430\u0441\u0443, \u043C\u0438 \u0457\u0445 \u0432\u0438\u0434\u0430\u043B\u044F\u0454\u043C\u043E.</span>\n <span> </span>\n <span>\u0422\u043E\u0436 \u043A\u0440\u0430\u0449\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0442\u0435\u0441\u044F, \u0430\u0431\u0438 \u043D\u0435 \u0432\u0442\u0440\u0430\u0442\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 :)</span>\n </p-message>\n }\n </div>\n\n <div class=\"rtsee-messenger-profile-auth-buttons\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_UP_BUTTON]\"\n severity=\"primary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_IN_BUTTON]\"\n severity=\"secondary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n </div>\n </div>\n } @else if (messenger.ownProfileOpened && !messenger.myPeer?.isAnonymous) {\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.LOGOUT_BUTTON]\"\n severity=\"danger\"\n (click)=\"logOut()\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n }\n</div>\n" }]
|
|
325
303
|
}], ctorParameters: () => [{ type: RTSeeAuthService }, { type: i2.Router }], propDecorators: { messenger: [{
|
|
326
304
|
type: Input
|
|
327
305
|
}], peer: [{
|
|
@@ -358,10 +336,7 @@ class MessengerHeaderComponent {
|
|
|
358
336
|
}
|
|
359
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerHeaderComponent, decorators: [{
|
|
360
338
|
type: Component,
|
|
361
|
-
args: [{ selector: 'rtsee-messenger-header', imports: [
|
|
362
|
-
NgClass,
|
|
363
|
-
ProfileComponent
|
|
364
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{\n 'rtsee-messenger-header-chat-opened': messenger.openedChat,\n 'rtsee-chat-header-unread': messenger.openedChat && !messenger.unreadMessagesCount,\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-header-my-profile-mode': messenger.ownProfileOpened,\n 'rtsee-messenger-header-chat-info-mode': (messenger.openedProfile || messenger.openedChatDetails) && !messenger.ownProfileOpened\n }\"\n>\n <span class=\"rtsee-messenger-header-collapse-button\"\n (click)=\"messenger.collapseInfo()\"\n >\n <span class=\"pi pi-arrow-left\"></span>\n </span>\n <div class=\"rtsee-messenger-header-left\">\n @if (!messenger.openedChat && messenger.myPeer) {\n <div class=\"rtsee-messenger-header-avatar\"\n (click)=\"openProfile(messenger.myPeer.clientId)\"\n >\n <div [style.background-image]=\"'url(' + messenger.myPeer.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rtsee-messenger-header-avatar-image\">\n </div>\n </div>\n } @else if (messenger.openedChat) {\n <button class=\"rtsee-messenger-close-chat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">arrow_back</span>\n @if (messenger.unreadMessagesCount) {\n <span class=\"unread-count\">{{messenger.unreadMessagesCount}}</span>\n }\n </button>\n }\n </div>\n <div class=\"rtsee-messenger-header-right\">\n @if (messenger.openedChat) {\n <div class=\"rtsee-messenger-chat-image-container rtsee-messenger-header-avatar\"\n (click)=\"messenger.openChatInfo()\"\n >\n <div class=\"rtsee-messenger-chat-image rtsee-messenger-header-avatar-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n }\n </div>\n <div class=\"rtsee-messenger-header-center\">\n @if (messenger.openedChat) {\n <div [ngClass]=\"{'rtsee-messenger-header-opened-chat-info-expanded': messenger.openedProfile || messenger.openedChatDetails}\"\n class=\"rtsee-messenger-header-opened-chat-info\">\n <div class=\"rtsee-messenger-profile-header-placeholder\">\n <p class=\"rtsee-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <div class=\"rtsee-messenger-profile-data-container\">\n @if (messenger.openedChatDetails) {\n <rtsee-profile [messenger]=\"messenger\"\n ></rtsee-profile>\n }\n </div>\n </div>\n } @else if (!messenger.openedChat) {\n <p class=\"rtsee-messenger-header-title\"\n >{{messenger.labels[RTSeeTextLabelKeys.MESSANGER_TITLE]}}</p>\n <rtsee-profile [messenger]=\"messenger\"\n [peer]=\"messenger.myPeer\"\n ></rtsee-profile>\n }\n </div>\n</div>\n" }]
|
|
339
|
+
args: [{ selector: 'rtsee-messenger-header', imports: [NgClass, ProfileComponent], standalone: true, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{\n 'rtsee-messenger-header-chat-opened': messenger.openedChat,\n 'rtsee-chat-header-unread': messenger.openedChat && !messenger.unreadMessagesCount,\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-header-my-profile-mode': messenger.ownProfileOpened,\n 'rtsee-messenger-header-chat-info-mode': (messenger.openedProfile || messenger.openedChatDetails) && !messenger.ownProfileOpened\n }\"\n>\n <span class=\"rtsee-messenger-header-collapse-button\"\n (click)=\"messenger.collapseInfo()\"\n >\n <span class=\"pi pi-arrow-left\"></span>\n </span>\n <div class=\"rtsee-messenger-header-left\">\n @if (!messenger.openedChat && messenger.myPeer) {\n <div class=\"rtsee-messenger-header-avatar\"\n (click)=\"openProfile(messenger.myPeer.clientId)\"\n >\n <div [style.background-image]=\"'url(' + messenger.myPeer.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rtsee-messenger-header-avatar-image\">\n </div>\n </div>\n } @else if (messenger.openedChat) {\n <button class=\"rtsee-messenger-close-chat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">arrow_back</span>\n @if (messenger.unreadMessagesCount) {\n <span class=\"unread-count\">{{messenger.unreadMessagesCount}}</span>\n }\n </button>\n }\n </div>\n <div class=\"rtsee-messenger-header-right\">\n @if (messenger.openedChat) {\n <div class=\"rtsee-messenger-chat-image-container rtsee-messenger-header-avatar\"\n (click)=\"messenger.openChatInfo()\"\n >\n <div class=\"rtsee-messenger-chat-image rtsee-messenger-header-avatar-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n }\n </div>\n <div class=\"rtsee-messenger-header-center\">\n @if (messenger.openedChat) {\n <div [ngClass]=\"{'rtsee-messenger-header-opened-chat-info-expanded': messenger.openedProfile || messenger.openedChatDetails}\"\n class=\"rtsee-messenger-header-opened-chat-info\">\n <div class=\"rtsee-messenger-profile-header-placeholder\">\n <p class=\"rtsee-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <div class=\"rtsee-messenger-profile-data-container\">\n @if (messenger.openedChatDetails) {\n <rtsee-profile [messenger]=\"messenger\"\n ></rtsee-profile>\n }\n </div>\n </div>\n } @else if (!messenger.openedChat) {\n <p class=\"rtsee-messenger-header-title\"\n >{{messenger.labels[RTSeeTextLabelKeys.MESSANGER_TITLE]}}</p>\n <rtsee-profile [messenger]=\"messenger\"\n [peer]=\"messenger.myPeer\"\n ></rtsee-profile>\n }\n </div>\n</div>\n" }]
|
|
365
340
|
}], ctorParameters: () => [{ type: DefaultImagesService }], propDecorators: { messenger: [{
|
|
366
341
|
type: Input
|
|
367
342
|
}] } });
|
|
@@ -492,11 +467,7 @@ class MessageTimeAndStatusComponent {
|
|
|
492
467
|
}
|
|
493
468
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessageTimeAndStatusComponent, decorators: [{
|
|
494
469
|
type: Component,
|
|
495
|
-
args: [{ selector: 'rtsee-message-time-and-status', imports: [
|
|
496
|
-
NgIf,
|
|
497
|
-
NgClass,
|
|
498
|
-
PreloaderComponent
|
|
499
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-message-time-and-status\">\n <span class=\"rtsee-messenger-message-status\" *ngIf=\"!hideStatus\" [ngClass]=\"{'showing-status-inside-chat': inChat }\">\n <span *ngIf=\"message.status === 'pending'\"><rtsee-preloader [diameter]=\"5\"></rtsee-preloader></span>\n <span *ngIf=\"message.status === 'sent'\" class=\"material-icons-outlined rtsee-message-sent-status\">check</span>\n <span *ngIf=\"message.status === 'delivered'\" class=\"material-icons-outlined rtsee-message-delivered-status\">check</span>\n <span *ngIf=\"message.status === 'seen'\" class=\"material-icons-outlined rtsee-message-seen-status\">done_all</span>\n </span>\n <span class=\"rtsee-messenger-message-time\">{{timeFormatService.formatTimeOrDate(message.createdAt)}}</span>\n</div>\n" }]
|
|
470
|
+
args: [{ selector: 'rtsee-message-time-and-status', imports: [NgIf, NgClass, PreloaderComponent], standalone: true, template: "<div class=\"rtsee-messenger-message-time-and-status\">\n <span class=\"rtsee-messenger-message-status\" *ngIf=\"!hideStatus\" [ngClass]=\"{'showing-status-inside-chat': inChat }\">\n <span *ngIf=\"message.status === 'pending'\"><rtsee-preloader [diameter]=\"5\"></rtsee-preloader></span>\n <span *ngIf=\"message.status === 'sent'\" class=\"material-icons-outlined rtsee-message-sent-status\">check</span>\n <span *ngIf=\"message.status === 'delivered'\" class=\"material-icons-outlined rtsee-message-delivered-status\">check</span>\n <span *ngIf=\"message.status === 'seen'\" class=\"material-icons-outlined rtsee-message-seen-status\">done_all</span>\n </span>\n <span class=\"rtsee-messenger-message-time\">{{timeFormatService.formatTimeOrDate(message.createdAt)}}</span>\n</div>\n" }]
|
|
500
471
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }], propDecorators: { message: [{
|
|
501
472
|
type: Input
|
|
502
473
|
}], hideStatus: [{
|
|
@@ -513,7 +484,7 @@ const COMMON_CONSTANTS = {
|
|
|
513
484
|
customDateFormatDaysJs: 'DD/MM/YYYY',
|
|
514
485
|
customDateTimeFormat: 'dd/MM/YYYY HH:mm',
|
|
515
486
|
defaultProfileImgUrl: 'https://werf.co/assets/images/default-profile.png',
|
|
516
|
-
mobileBreakpoint: 800
|
|
487
|
+
mobileBreakpoint: 800,
|
|
517
488
|
};
|
|
518
489
|
|
|
519
490
|
class ChatThumbnailComponent {
|
|
@@ -527,11 +498,7 @@ class ChatThumbnailComponent {
|
|
|
527
498
|
}
|
|
528
499
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatThumbnailComponent, decorators: [{
|
|
529
500
|
type: Component,
|
|
530
|
-
args: [{ selector: 'rtsee-chat-thumbnail', imports: [
|
|
531
|
-
MessageTimeAndStatusComponent,
|
|
532
|
-
NgClass,
|
|
533
|
-
NgIf
|
|
534
|
-
], standalone: true, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
501
|
+
args: [{ selector: 'rtsee-chat-thumbnail', imports: [MessageTimeAndStatusComponent, NgClass, NgIf], standalone: true, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
535
502
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }], propDecorators: { chat: [{
|
|
536
503
|
type: Input
|
|
537
504
|
}], messenger: [{
|
|
@@ -547,10 +514,7 @@ class ChatsListComponent {
|
|
|
547
514
|
}
|
|
548
515
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatsListComponent, decorators: [{
|
|
549
516
|
type: Component,
|
|
550
|
-
args: [{ selector: 'rtsee-chats-list', imports: [
|
|
551
|
-
NgForOf,
|
|
552
|
-
ChatThumbnailComponent
|
|
553
|
-
], standalone: true, template: "<div class=\"rtsee-chats-list\">\n <div class=\"rtsee-chat-thumbnail-container\" *ngFor=\"let chat of chats; let last = last;\">\n <rtsee-chat-thumbnail [chat]=\"chat.thumbnail\" [messenger]=\"messenger\"></rtsee-chat-thumbnail>\n<!-- <div class=\"rtsee-chat-thumbnail-separator\" *ngIf=\"!last\"></div>-->\n </div>\n</div>\n" }]
|
|
517
|
+
args: [{ selector: 'rtsee-chats-list', imports: [NgForOf, ChatThumbnailComponent], standalone: true, template: "<div class=\"rtsee-chats-list\">\n <div class=\"rtsee-chat-thumbnail-container\" *ngFor=\"let chat of chats; let last = last;\">\n <rtsee-chat-thumbnail [chat]=\"chat.thumbnail\" [messenger]=\"messenger\"></rtsee-chat-thumbnail>\n<!-- <div class=\"rtsee-chat-thumbnail-separator\" *ngIf=\"!last\"></div>-->\n </div>\n</div>\n" }]
|
|
554
518
|
}], propDecorators: { messenger: [{
|
|
555
519
|
type: Input
|
|
556
520
|
}], chats: [{
|
|
@@ -568,15 +532,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
568
532
|
type: Directive,
|
|
569
533
|
args: [{
|
|
570
534
|
selector: '[widgetHost]',
|
|
571
|
-
standalone: true
|
|
535
|
+
standalone: true,
|
|
572
536
|
}]
|
|
573
537
|
}], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
|
|
574
538
|
|
|
539
|
+
class RatingComponent {
|
|
540
|
+
constructor() {
|
|
541
|
+
this.stars = [];
|
|
542
|
+
this.mutable = false;
|
|
543
|
+
this.rateValue = 0;
|
|
544
|
+
}
|
|
545
|
+
ngOnInit() {
|
|
546
|
+
this.init();
|
|
547
|
+
}
|
|
548
|
+
init() {
|
|
549
|
+
if (this.rate) {
|
|
550
|
+
this.initStars(this.rate.value, this.rate.maxValue);
|
|
551
|
+
this.rateValue = this.rate.value;
|
|
552
|
+
}
|
|
553
|
+
else if (this.config) {
|
|
554
|
+
this.mutable = true;
|
|
555
|
+
this.initStars(this.config.rate?.value || 0, this.config.maxRateValue);
|
|
556
|
+
this.rateValue = this.config.rate?.value || 0;
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
throw new Error(`Neither rate nor vote config provided!`);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
initStars(value, maxValue) {
|
|
563
|
+
const stars = [];
|
|
564
|
+
const full = Math.floor(value);
|
|
565
|
+
const hasHalf = value - full >= 0.25;
|
|
566
|
+
for (let i = 0; i < full; i++) {
|
|
567
|
+
stars.push('full');
|
|
568
|
+
}
|
|
569
|
+
if (hasHalf) {
|
|
570
|
+
stars.push('half');
|
|
571
|
+
}
|
|
572
|
+
while (stars.length < maxValue) {
|
|
573
|
+
stars.push('empty');
|
|
574
|
+
}
|
|
575
|
+
this.stars = stars;
|
|
576
|
+
}
|
|
577
|
+
onStarClicked(index) {
|
|
578
|
+
if (!this.config || !this.config.rate) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
this.config.rate.value = index + 1;
|
|
582
|
+
this.init();
|
|
583
|
+
}
|
|
584
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
585
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RatingComponent, isStandalone: true, selector: "rtsee-rating", inputs: { config: "config", rate: "rate" }, ngImport: i0, template: "<div class=\"rtsee-rating\">\n @for (star of stars; track $index) {\n <span class=\"rtsee-rating-star\"\n [ngClass]=\"{\n 'rtsee-rating-star-full': star === 'full',\n 'rtsee-rating-star-half': star === 'half',\n 'rtsee-rating-star-empty': star === 'empty',\n 'rtsee-rating-star-clickable': mutable\n }\"\n (click)=\"onStarClicked($index)\"\n >\u2605</span>\n }\n @if (rateValue) {\n <span class=\"rtsee-rating-number\">{{ rateValue }}</span>\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
586
|
+
}
|
|
587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingComponent, decorators: [{
|
|
588
|
+
type: Component,
|
|
589
|
+
args: [{ selector: 'rtsee-rating', imports: [NgClass], template: "<div class=\"rtsee-rating\">\n @for (star of stars; track $index) {\n <span class=\"rtsee-rating-star\"\n [ngClass]=\"{\n 'rtsee-rating-star-full': star === 'full',\n 'rtsee-rating-star-half': star === 'half',\n 'rtsee-rating-star-empty': star === 'empty',\n 'rtsee-rating-star-clickable': mutable\n }\"\n (click)=\"onStarClicked($index)\"\n >\u2605</span>\n }\n @if (rateValue) {\n <span class=\"rtsee-rating-number\">{{ rateValue }}</span>\n }\n</div>\n" }]
|
|
590
|
+
}], propDecorators: { config: [{
|
|
591
|
+
type: Input
|
|
592
|
+
}], rate: [{
|
|
593
|
+
type: Input
|
|
594
|
+
}] } });
|
|
595
|
+
|
|
575
596
|
class CallWidgetComponent {
|
|
576
597
|
ngOnInit() { }
|
|
577
598
|
joinCall() {
|
|
578
599
|
console.log('message data: ', this.message.data);
|
|
579
|
-
if (!this.messenger ||
|
|
600
|
+
if (!this.messenger ||
|
|
601
|
+
(!this.message.data?.roomId && !this.chat.conferenceRoom)) {
|
|
580
602
|
console.log('No Room Id specified or no messenger!');
|
|
581
603
|
return;
|
|
582
604
|
}
|
|
@@ -592,9 +614,7 @@ class CallWidgetComponent {
|
|
|
592
614
|
}
|
|
593
615
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CallWidgetComponent, decorators: [{
|
|
594
616
|
type: Component,
|
|
595
|
-
args: [{ selector: 'ngx-call-widget', imports: [
|
|
596
|
-
NgClass
|
|
597
|
-
], standalone: true, template: "<div class=\"rtsee-call-widget\">\n <p> The call has started</p>\n <button class=\"rtsee-join-call-btn\"\n (click)=\"joinCall()\">\n Join Call\n </button>\n</div>\n" }]
|
|
617
|
+
args: [{ selector: 'ngx-call-widget', imports: [NgClass], standalone: true, template: "<div class=\"rtsee-call-widget\">\n <p> The call has started</p>\n <button class=\"rtsee-join-call-btn\"\n (click)=\"joinCall()\">\n Join Call\n </button>\n</div>\n" }]
|
|
598
618
|
}], propDecorators: { message: [{
|
|
599
619
|
type: Input
|
|
600
620
|
}], messenger: [{
|
|
@@ -634,6 +654,7 @@ class MessageComponent {
|
|
|
634
654
|
this.componentFactoryResolver = componentFactoryResolver;
|
|
635
655
|
this.timeFormatService = timeFormatService;
|
|
636
656
|
}
|
|
657
|
+
ngOnInit() { }
|
|
637
658
|
ngAfterViewInit() {
|
|
638
659
|
/* eslint-disable */
|
|
639
660
|
if (this.message.widget) {
|
|
@@ -660,7 +681,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
660
681
|
args: [{ selector: 'rtsee-message', imports: [
|
|
661
682
|
NgClass,
|
|
662
683
|
MessageTimeAndStatusComponent,
|
|
663
|
-
WidgetDirective
|
|
684
|
+
WidgetDirective,
|
|
685
|
+
RatingComponent,
|
|
664
686
|
], standalone: true, template: "<div class=\"rtsee-messenger-message-container\" #rtsMessageContainer\n [ngClass]=\"{'rtsee-message-from-me': message.from.id === messenger.clientId}\"\n>\n <div class=\"rtsee-messenger-message\">\n @if (message.widget) {\n <ng-template widgetHost></ng-template>\n }\n @if (!message.widget) {\n <p class=\"rtsee-messenger-message-text\"\n >{{ message.text }}</p>\n }\n <div class=\"rtsee-messenger-message-info\" #rtsMessageInfo>\n <rtsee-message-time-and-status [message]=\"message\"\n [inChat]=\"true\"\n [hideStatus]=\"message.from.id !== messenger.clientId\"\n ></rtsee-message-time-and-status>\n </div>\n </div>\n</div>\n" }]
|
|
665
687
|
}], ctorParameters: () => [{ type: MessageWidgetsService }, { type: i0.ComponentFactoryResolver }, { type: TimeFormatHelperService }], propDecorators: { chat: [{
|
|
666
688
|
type: Input
|
|
@@ -689,20 +711,17 @@ class MessagesListComponent {
|
|
|
689
711
|
}
|
|
690
712
|
onWindowScroll(event) {
|
|
691
713
|
// Get the vertical scroll position
|
|
692
|
-
const verticalOffset = window.pageYOffset ||
|
|
714
|
+
const verticalOffset = window.pageYOffset ||
|
|
715
|
+
this.document.documentElement.scrollTop ||
|
|
716
|
+
this.document.body.scrollTop ||
|
|
717
|
+
0;
|
|
693
718
|
if (window.innerWidth >= COMMON_CONSTANTS.mobileBreakpoint) {
|
|
694
719
|
return;
|
|
695
720
|
}
|
|
696
721
|
// You can add logic here, e.g., show a 'scroll to top' button
|
|
697
722
|
if (verticalOffset < 300) {
|
|
698
|
-
// Logic to show button
|
|
699
|
-
console.log('scrolled to top');
|
|
700
723
|
this.onScrolledToTop();
|
|
701
724
|
}
|
|
702
|
-
else {
|
|
703
|
-
console.log('scrolled to bottom');
|
|
704
|
-
// Logic to hide button
|
|
705
|
-
}
|
|
706
725
|
}
|
|
707
726
|
ngOnInit() {
|
|
708
727
|
this.chat.on(RTSeeChatEvents.MESSAGES_LIST_CHANGED, this.bindedGroupFunction);
|
|
@@ -730,10 +749,6 @@ class MessagesListComponent {
|
|
|
730
749
|
this.chat.loadRemoteMessages('back');
|
|
731
750
|
}
|
|
732
751
|
onScroll() {
|
|
733
|
-
// if (this.scrollContainer.nativeElement.scrollTop < 1) {
|
|
734
|
-
// this.scrollContainer.nativeElement.scrollTop = 1;
|
|
735
|
-
// }
|
|
736
|
-
console.log('scroll down');
|
|
737
752
|
if (this.chat.messagesLoadInProgress) {
|
|
738
753
|
return;
|
|
739
754
|
}
|
|
@@ -749,7 +764,6 @@ class MessagesListComponent {
|
|
|
749
764
|
this.scroller.scrollToPosition([0, document.body.scrollHeight]);
|
|
750
765
|
}
|
|
751
766
|
if (!this.scrollContainer?.nativeElement?.scrollHeight) {
|
|
752
|
-
console.log('scrollToBottom early return');
|
|
753
767
|
return;
|
|
754
768
|
}
|
|
755
769
|
try {
|
|
@@ -801,14 +815,14 @@ class MessagesListComponent {
|
|
|
801
815
|
throw new Error('Either m.id or m.temporary id is required');
|
|
802
816
|
}
|
|
803
817
|
const isFromMe = message.from.id === this.messenger.clientId;
|
|
804
|
-
const isSenderVisible = (this.chat.type !== RTSeeChatTypes.INDIVIDUAL && !isFromMe)
|
|
805
|
-
|
|
806
|
-
|
|
818
|
+
const isSenderVisible = (this.chat.type !== RTSeeChatTypes.INDIVIDUAL && !isFromMe) ||
|
|
819
|
+
this.chat.type === RTSeeChatTypes.COMMENTS ||
|
|
820
|
+
this.chat.type === RTSeeChatTypes.RATINGS;
|
|
807
821
|
currentGroup = {
|
|
808
822
|
id: message.id || message.temporaryId,
|
|
809
823
|
sender: message.from,
|
|
810
824
|
senderVisible: isSenderVisible,
|
|
811
|
-
messages: [message]
|
|
825
|
+
messages: [message],
|
|
812
826
|
};
|
|
813
827
|
}
|
|
814
828
|
}
|
|
@@ -880,18 +894,17 @@ class MessagesListComponent {
|
|
|
880
894
|
if (!this.chat.messages.length) {
|
|
881
895
|
return null;
|
|
882
896
|
}
|
|
883
|
-
return [
|
|
897
|
+
return [
|
|
898
|
+
this.chat.messages[0],
|
|
899
|
+
this.chat.messages[this.chat.messages.length - 1],
|
|
900
|
+
];
|
|
884
901
|
}
|
|
885
902
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessagesListComponent, deps: [{ token: TimeFormatHelperService }, { token: i2$1.ViewportScroller }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
886
903
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessagesListComponent, isStandalone: true, selector: "rtsee-messages-list", inputs: { chat: "chat", messenger: "messenger" }, host: { listeners: { "window:scroll": "onWindowScroll($event)" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollBlock"], descendants: true }], ngImport: i0, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (messageGroup of messagesGroups; track messageGroup.id) {\n <div class=\"rtsee-messenger-message-wrapper\" [ngClass]=\"{\n 'rtsee-messenger-message-wrapper-with-sender': messageGroup.senderVisible\n }\">\n <div class=\"rtsee-messenger-message-inset\">\n <img [src]=\"messageGroup.sender.imageUrl\"\n class=\"rtsee-messenger-message-sender-image\"\n >\n </div>\n\n <div class=\"rtsee-messenger-message-sender-name\">\n <p>{{messageGroup.sender.name}}</p>\n </div>\n\n @for (message of messageGroup.messages; track message.id) {\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: MessageComponent, selector: "rtsee-message", inputs: ["chat", "message", "member", "messenger"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
887
904
|
}
|
|
888
905
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessagesListComponent, decorators: [{
|
|
889
906
|
type: Component,
|
|
890
|
-
args: [{ selector: 'rtsee-messages-list', imports: [
|
|
891
|
-
InfiniteScrollDirective,
|
|
892
|
-
MessageComponent,
|
|
893
|
-
NgClass
|
|
894
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (messageGroup of messagesGroups; track messageGroup.id) {\n <div class=\"rtsee-messenger-message-wrapper\" [ngClass]=\"{\n 'rtsee-messenger-message-wrapper-with-sender': messageGroup.senderVisible\n }\">\n <div class=\"rtsee-messenger-message-inset\">\n <img [src]=\"messageGroup.sender.imageUrl\"\n class=\"rtsee-messenger-message-sender-image\"\n >\n </div>\n\n <div class=\"rtsee-messenger-message-sender-name\">\n <p>{{messageGroup.sender.name}}</p>\n </div>\n\n @for (message of messageGroup.messages; track message.id) {\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n }\n </div>\n }\n</div>\n" }]
|
|
907
|
+
args: [{ selector: 'rtsee-messages-list', imports: [InfiniteScrollDirective, MessageComponent, NgClass], standalone: true, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (messageGroup of messagesGroups; track messageGroup.id) {\n <div class=\"rtsee-messenger-message-wrapper\" [ngClass]=\"{\n 'rtsee-messenger-message-wrapper-with-sender': messageGroup.senderVisible\n }\">\n <div class=\"rtsee-messenger-message-inset\">\n <img [src]=\"messageGroup.sender.imageUrl\"\n class=\"rtsee-messenger-message-sender-image\"\n >\n </div>\n\n <div class=\"rtsee-messenger-message-sender-name\">\n <p>{{messageGroup.sender.name}}</p>\n </div>\n\n @for (message of messageGroup.messages; track message.id) {\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n }\n </div>\n }\n</div>\n" }]
|
|
895
908
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }, { type: i2$1.ViewportScroller }, { type: Document, decorators: [{
|
|
896
909
|
type: Inject,
|
|
897
910
|
args: [DOCUMENT]
|
|
@@ -941,10 +954,7 @@ class ChatInputComponent {
|
|
|
941
954
|
}
|
|
942
955
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatInputComponent, decorators: [{
|
|
943
956
|
type: Component,
|
|
944
|
-
args: [{ selector: 'rtsee-chat-input', imports: [
|
|
945
|
-
ReactiveFormsModule,
|
|
946
|
-
Textarea
|
|
947
|
-
], standalone: true, template: "<div #chatInput\n class=\"rtsee-chat-input\"\n xmlns=\"http://www.w3.org/1999/html\"\n>\n <div class=\"rtsee-send-message\">\n <form [formGroup]=\"sendMessageForm\" class=\"rtsee-chat-input-form\">\n <textarea [invalid]=\"false\"\n [autoResize]=\"true\"\n (keyup)=\"onKeyUp($event)\"\n formControlName=\"message\"\n pTextarea\n placeholder=\"Type a message...\"\n class=\"rtsee-chat-input-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <button (click)=\"sendMessage()\"\n class=\"rtsee-send-message-button\"\n type=\"submit\"\n >\n <span class=\"pi pi-send\"></span>\n </button>\n</div>\n" }]
|
|
957
|
+
args: [{ selector: 'rtsee-chat-input', imports: [ReactiveFormsModule, Textarea], standalone: true, template: "<div #chatInput\n class=\"rtsee-chat-input\"\n xmlns=\"http://www.w3.org/1999/html\"\n>\n <div class=\"rtsee-send-message\">\n <form [formGroup]=\"sendMessageForm\" class=\"rtsee-chat-input-form\">\n <textarea [invalid]=\"false\"\n [autoResize]=\"true\"\n (keyup)=\"onKeyUp($event)\"\n formControlName=\"message\"\n pTextarea\n placeholder=\"Type a message...\"\n class=\"rtsee-chat-input-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <button (click)=\"sendMessage()\"\n class=\"rtsee-send-message-button\"\n type=\"submit\"\n >\n <span class=\"pi pi-send\"></span>\n </button>\n</div>\n" }]
|
|
948
958
|
}], propDecorators: { messenger: [{
|
|
949
959
|
type: Input
|
|
950
960
|
}], chat: [{
|
|
@@ -965,10 +975,10 @@ class ViewportObserverDirective {
|
|
|
965
975
|
const options = {
|
|
966
976
|
root: null, // observing relative to the document's viewport
|
|
967
977
|
rootMargin: '0px',
|
|
968
|
-
threshold: 0
|
|
978
|
+
threshold: 0,
|
|
969
979
|
};
|
|
970
980
|
this.observer = new IntersectionObserver((entries) => {
|
|
971
|
-
entries.forEach(entry => {
|
|
981
|
+
entries.forEach((entry) => {
|
|
972
982
|
// entry.isIntersecting is true if the element is in the viewport
|
|
973
983
|
this.inViewport.emit(entry.isIntersecting);
|
|
974
984
|
});
|
|
@@ -987,7 +997,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
987
997
|
type: Directive,
|
|
988
998
|
args: [{
|
|
989
999
|
selector: '[rtseeViewportObserver]',
|
|
990
|
-
standalone: true // Use `standalone: true` in modern Angular
|
|
1000
|
+
standalone: true, // Use `standalone: true` in modern Angular
|
|
991
1001
|
}]
|
|
992
1002
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { inViewport: [{
|
|
993
1003
|
type: Output
|
|
@@ -1003,7 +1013,10 @@ class ChatComponent {
|
|
|
1003
1013
|
console.log(`Either chat ot chatData is required!`);
|
|
1004
1014
|
}
|
|
1005
1015
|
if (!this.chat && this.chatData) {
|
|
1006
|
-
this.chat = this.messenger.addStandaloneChat(
|
|
1016
|
+
this.chat = this.messenger.addStandaloneChat({
|
|
1017
|
+
...this.chatData,
|
|
1018
|
+
utilitiesSignalingClient: this.entity?.signalingClient,
|
|
1019
|
+
});
|
|
1007
1020
|
this.chat.loadRemoteMessages('back');
|
|
1008
1021
|
}
|
|
1009
1022
|
}
|
|
@@ -1013,7 +1026,7 @@ class ChatComponent {
|
|
|
1013
1026
|
}
|
|
1014
1027
|
}
|
|
1015
1028
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1016
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChatComponent, isStandalone: true, selector: "rtsee-chat", inputs: { chat: "chat", chatData: "chatData", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-chat\"\n [ngClass]=\"{\n 'rtsee-chat-standalone': chat.isStandalone,\n 'rtsee-chat-in-viewport': chat.isInViewPort\n }\"\n rtseeViewportObserver\n (inViewport)=\"onInViewPortChange($event)\"\n>\n <div class=\"rtsee-chat-footer-container\">\n <div class=\"rtsee-chat-footer-container-inner\">\n <rtsee-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-chat-input>\n </div>\n </div>\n <div class=\"rtsee-chat-body-container\">\n <rtsee-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-messages-list>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MessagesListComponent, selector: "rtsee-messages-list", inputs: ["chat", "messenger"] }, { kind: "component", type: ChatInputComponent, selector: "rtsee-chat-input", inputs: ["messenger", "chat"] }, { kind: "directive", type: ViewportObserverDirective, selector: "[rtseeViewportObserver]", outputs: ["inViewport"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
1029
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChatComponent, isStandalone: true, selector: "rtsee-chat", inputs: { chat: "chat", chatData: "chatData", entity: "entity", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-chat\"\n [ngClass]=\"{\n 'rtsee-chat-standalone': chat.isStandalone,\n 'rtsee-chat-in-viewport': chat.isInViewPort\n }\"\n rtseeViewportObserver\n (inViewport)=\"onInViewPortChange($event)\"\n>\n <div class=\"rtsee-chat-footer-container\">\n <div class=\"rtsee-chat-footer-container-inner\">\n <rtsee-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-chat-input>\n </div>\n </div>\n <div class=\"rtsee-chat-body-container\">\n <rtsee-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-messages-list>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MessagesListComponent, selector: "rtsee-messages-list", inputs: ["chat", "messenger"] }, { kind: "component", type: ChatInputComponent, selector: "rtsee-chat-input", inputs: ["messenger", "chat"] }, { kind: "directive", type: ViewportObserverDirective, selector: "[rtseeViewportObserver]", outputs: ["inViewport"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
1017
1030
|
}
|
|
1018
1031
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatComponent, decorators: [{
|
|
1019
1032
|
type: Component,
|
|
@@ -1021,12 +1034,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1021
1034
|
MessagesListComponent,
|
|
1022
1035
|
ChatInputComponent,
|
|
1023
1036
|
ViewportObserverDirective,
|
|
1024
|
-
NgClass
|
|
1037
|
+
NgClass,
|
|
1025
1038
|
], standalone: true, template: "<div class=\"rtsee-chat\"\n [ngClass]=\"{\n 'rtsee-chat-standalone': chat.isStandalone,\n 'rtsee-chat-in-viewport': chat.isInViewPort\n }\"\n rtseeViewportObserver\n (inViewport)=\"onInViewPortChange($event)\"\n>\n <div class=\"rtsee-chat-footer-container\">\n <div class=\"rtsee-chat-footer-container-inner\">\n <rtsee-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-chat-input>\n </div>\n </div>\n <div class=\"rtsee-chat-body-container\">\n <rtsee-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-messages-list>\n </div>\n</div>\n" }]
|
|
1026
1039
|
}], propDecorators: { chat: [{
|
|
1027
1040
|
type: Input
|
|
1028
1041
|
}], chatData: [{
|
|
1029
1042
|
type: Input
|
|
1043
|
+
}], entity: [{
|
|
1044
|
+
type: Input
|
|
1030
1045
|
}], messenger: [{
|
|
1031
1046
|
type: Input
|
|
1032
1047
|
}] } });
|
|
@@ -1036,8 +1051,7 @@ class RTSeeCropperComponent {
|
|
|
1036
1051
|
this.loadInProgress = true;
|
|
1037
1052
|
this.nextClicked = new EventEmitter();
|
|
1038
1053
|
}
|
|
1039
|
-
ngOnInit() {
|
|
1040
|
-
}
|
|
1054
|
+
ngOnInit() { }
|
|
1041
1055
|
onCropperReady() {
|
|
1042
1056
|
this.loadInProgress = false;
|
|
1043
1057
|
this.cropper.setCropperElem(this.imageCropper);
|
|
@@ -1059,7 +1073,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1059
1073
|
NgClass,
|
|
1060
1074
|
RadioButton,
|
|
1061
1075
|
PreloaderComponent,
|
|
1062
|
-
Button
|
|
1076
|
+
Button,
|
|
1063
1077
|
], standalone: true, template: "<div class=\"rtsee-image-cropper-container\"\n [ngClass]=\"{'rtsee-image-cropper-loading': loadInProgress}\"\n>\n @if (cropper.activeImage) {\n <div class=\"rtsee-image-cropper-container-inner\">\n <image-cropper style=\"visibility: hidden\"\n [imageFile]=\"cropper.activeImage.file\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"cropper.aspectRatio\"\n [resizeToWidth]=\"cropper.resizeToWidth\"\n [autoCrop]=\"false\"\n (imageCropped)=\"onImageCropped($event)\"\n (cropperReady)=\"onCropperReady()\"\n [imageQuality]=\"70\"\n format='jpeg'\n ></image-cropper>\n </div>\n }\n @if (cropper.aspectRatioConfigurable) {\n <div class=\"rtsee-select-aspect-ratio-container\">\n <span class=\"radio-btn title-text\">Aspect Ratio:</span>\n\n <p-radio-button name=\"pizza\" value=\"Cheese\" inputId=\"ingredient1\" />\n <label for=\"ingredient1\" class=\"ml-2\">Cheese</label>\n </div>\n }\n\n @if (!loadInProgress) {\n <div class=\"image-cropper-actions\">\n <p-button label=\"Next\"\n severity=\"primary\"\n (click)=\"cropper.onNextButtonClicked()\"\n ></p-button>\n </div>\n }\n\n <rtsee-preloader [diameter]=\"5\"></rtsee-preloader>\n</div>\n" }]
|
|
1064
1078
|
}], ctorParameters: () => [], propDecorators: { cropper: [{
|
|
1065
1079
|
type: Input
|
|
@@ -1102,11 +1116,7 @@ class RTSeeImageUploaderComponent {
|
|
|
1102
1116
|
}
|
|
1103
1117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeImageUploaderComponent, decorators: [{
|
|
1104
1118
|
type: Component,
|
|
1105
|
-
args: [{ selector: 'rtsee-image-uploader', imports: [
|
|
1106
|
-
RTSeeUploaderComponent,
|
|
1107
|
-
RTSeeCropperComponent,
|
|
1108
|
-
Button
|
|
1109
|
-
], template: "<div class=\"rtsee-image-uploader\">\n @if (!imageUploader.awaitsUploadOrCrop) {\n <div class=\"rtsee-image-uploader-image\"\n (click)=\"imageUploader.init()\"\n >\n @if (imageUploader.uploadedPhotoPreview) {\n <img [src]=\"imageUploader.uploadedPhotoPreview\"\n class=\"rtsee-image-uploader-preview-image\"\n alt=\"uploaded_photo\"\n >\n }\n @if (!imageUploader.uploadedPhotoPreview) {\n <div class=\"rtsee-preloader-image-placeholder\"></div>\n }\n <div class=\"rtsee-image-uploader-image-change-btn\">\n <p-button icon=\"pi pi-pencil\" severity=\"info\"></p-button>\n </div>\n </div>\n }\n\n @if (imageUploader.awaitsUploadOrCrop) {\n <rtsee-uploader [uploader]=\"imageUploader.uploader\"\n [hidden]=\"imageUploader.cropper?.activeImage\"\n ></rtsee-uploader>\n\n @if (imageUploader.cropper?.activeImage) {\n <rtsee-cropper [cropper]=\"imageUploader.cropper\"\n (nextClicked)=\"onNextButtonClicked()\"\n ></rtsee-cropper>\n }\n }\n</div>\n" }]
|
|
1119
|
+
args: [{ selector: 'rtsee-image-uploader', imports: [RTSeeUploaderComponent, RTSeeCropperComponent, Button], template: "<div class=\"rtsee-image-uploader\">\n @if (!imageUploader.awaitsUploadOrCrop) {\n <div class=\"rtsee-image-uploader-image\"\n (click)=\"imageUploader.init()\"\n >\n @if (imageUploader.uploadedPhotoPreview) {\n <img [src]=\"imageUploader.uploadedPhotoPreview\"\n class=\"rtsee-image-uploader-preview-image\"\n alt=\"uploaded_photo\"\n >\n }\n @if (!imageUploader.uploadedPhotoPreview) {\n <div class=\"rtsee-preloader-image-placeholder\"></div>\n }\n <div class=\"rtsee-image-uploader-image-change-btn\">\n <p-button icon=\"pi pi-pencil\" severity=\"info\"></p-button>\n </div>\n </div>\n }\n\n @if (imageUploader.awaitsUploadOrCrop) {\n <rtsee-uploader [uploader]=\"imageUploader.uploader\"\n [hidden]=\"imageUploader.cropper?.activeImage\"\n ></rtsee-uploader>\n\n @if (imageUploader.cropper?.activeImage) {\n <rtsee-cropper [cropper]=\"imageUploader.cropper\"\n (nextClicked)=\"onNextButtonClicked()\"\n ></rtsee-cropper>\n }\n }\n</div>\n" }]
|
|
1110
1120
|
}], propDecorators: { cropperComponent: [{
|
|
1111
1121
|
type: ViewChild,
|
|
1112
1122
|
args: [RTSeeCropperComponent]
|
|
@@ -1122,16 +1132,16 @@ class ManageProfileComponent {
|
|
|
1122
1132
|
validators: [
|
|
1123
1133
|
Validators.required,
|
|
1124
1134
|
Validators.minLength(3),
|
|
1125
|
-
Validators.maxLength(141)
|
|
1126
|
-
]
|
|
1135
|
+
Validators.maxLength(141),
|
|
1136
|
+
],
|
|
1127
1137
|
}),
|
|
1128
1138
|
lastName: this.formBuilder.control('', {
|
|
1129
1139
|
validators: [
|
|
1130
1140
|
Validators.required,
|
|
1131
1141
|
Validators.minLength(3),
|
|
1132
|
-
Validators.maxLength(141)
|
|
1133
|
-
]
|
|
1134
|
-
})
|
|
1142
|
+
Validators.maxLength(141),
|
|
1143
|
+
],
|
|
1144
|
+
}),
|
|
1135
1145
|
});
|
|
1136
1146
|
}
|
|
1137
1147
|
ngOnInit() {
|
|
@@ -1150,7 +1160,7 @@ class ManageProfileComponent {
|
|
|
1150
1160
|
}
|
|
1151
1161
|
await this.manageProfile.save({
|
|
1152
1162
|
firstName: this.firstNameField.getRawValue(),
|
|
1153
|
-
lastName: this.lastNameField.getRawValue()
|
|
1163
|
+
lastName: this.lastNameField.getRawValue(),
|
|
1154
1164
|
});
|
|
1155
1165
|
}
|
|
1156
1166
|
get firstNameField() {
|
|
@@ -1171,7 +1181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1171
1181
|
Message,
|
|
1172
1182
|
RTSeeImageUploaderComponent,
|
|
1173
1183
|
ReactiveFormsModule,
|
|
1174
|
-
InputText
|
|
1184
|
+
InputText,
|
|
1175
1185
|
], template: "<div class=\"rtsee-messenger-manage-profile\">\n <div class=\"rtsee-messenger-manage-profile-info rtsee-form-container\">\n <div class=\"rtsee-messenger-manage-profile-image\">\n <rtsee-image-uploader [imageUploader]=\"manageProfile.imageUploader\"\n ></rtsee-image-uploader>\n </div>\n\n <form class=\"rtsee-manage-profile-form rtsee-form\"\n [formGroup]=\"profileForm\"\n (ngSubmit)=\"submit()\"\n >\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"firstNameField\"\n [class.p-invalid]=\"firstNameField.invalid && firstNameField.touched\"\n />\n <label for=\"sign-up-email\">First Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (firstNameField.hasError('required') && firstNameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >First Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"lastNameField\"\n [class.p-invalid]=\"lastNameField.invalid && lastNameField.touched\"\n />\n <label for=\"sign-up-email\">Last Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (lastNameField.hasError('required') && lastNameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Last Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-manage-profile-buttons\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageProfile.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageProfile.cancel()\"\n [disabled]=\"manageProfile.saveInProgress\"\n />\n </div>\n </form>\n </div>\n</div>\n" }]
|
|
1176
1186
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { messenger: [{
|
|
1177
1187
|
type: Input
|
|
@@ -1191,10 +1201,7 @@ class PaymentProductSnippetComponent {
|
|
|
1191
1201
|
}
|
|
1192
1202
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentProductSnippetComponent, decorators: [{
|
|
1193
1203
|
type: Component,
|
|
1194
|
-
args: [{ selector: 'rtsee-payment-product-snippet', imports: [
|
|
1195
|
-
Card,
|
|
1196
|
-
Button
|
|
1197
|
-
], template: "<div class=\"rtsee-payment-product-snippet\">\n <p-card [header]=\"product.name\">\n <p class=\"rtsee-payment-product-snippet-description\">{{product.description}}</p>\n <div class=\"rtsee-payment-product-prices\">\n @for (price of product.prices; track price.id) {\n <div class=\"rtsee-payment-product-price\">\n <p-card [header]=\"price.label\" >\n <p>{{price.description}}</p>\n <p-button label=\"Select Plan\"\n (click)=\"selectPrice(price)\"\n ></p-button>\n </p-card>\n </div>\n }\n </div>\n </p-card>\n</div>\n" }]
|
|
1204
|
+
args: [{ selector: 'rtsee-payment-product-snippet', imports: [Card, Button], template: "<div class=\"rtsee-payment-product-snippet\">\n <p-card [header]=\"product.name\">\n <p class=\"rtsee-payment-product-snippet-description\">{{product.description}}</p>\n <div class=\"rtsee-payment-product-prices\">\n @for (price of product.prices; track price.id) {\n <div class=\"rtsee-payment-product-price\">\n <p-card [header]=\"price.label\" >\n <p>{{price.description}}</p>\n <p-button label=\"Select Plan\"\n (click)=\"selectPrice(price)\"\n ></p-button>\n </p-card>\n </div>\n }\n </div>\n </p-card>\n</div>\n" }]
|
|
1198
1205
|
}], propDecorators: { product: [{
|
|
1199
1206
|
type: Input
|
|
1200
1207
|
}], priceSelected: [{
|
|
@@ -1213,17 +1220,16 @@ class PaymentsService {
|
|
|
1213
1220
|
}
|
|
1214
1221
|
createSession(options) {
|
|
1215
1222
|
if (!this.paymentsConfig) {
|
|
1216
|
-
throw new Error(
|
|
1223
|
+
throw new Error('Payments not configured');
|
|
1217
1224
|
}
|
|
1218
|
-
return this.http
|
|
1219
|
-
.post(this.paymentsConfig.createSessionEndpoint, options);
|
|
1225
|
+
return this.http.post(this.paymentsConfig.createSessionEndpoint, options);
|
|
1220
1226
|
}
|
|
1221
1227
|
getSession() {
|
|
1222
1228
|
if (!this.paymentsConfig) {
|
|
1223
|
-
throw new Error(
|
|
1229
|
+
throw new Error('Payments not configured');
|
|
1224
1230
|
}
|
|
1225
1231
|
if (!this.paymentsConfig.sessionId) {
|
|
1226
|
-
throw new Error(
|
|
1232
|
+
throw new Error('No SessionId provided');
|
|
1227
1233
|
}
|
|
1228
1234
|
return this.http
|
|
1229
1235
|
.get(`${this.paymentsConfig.getSessionEndpoint}/?sessionId=${this.paymentsConfig.sessionId}`)
|
|
@@ -1234,7 +1240,7 @@ class PaymentsService {
|
|
|
1234
1240
|
}
|
|
1235
1241
|
getProducts() {
|
|
1236
1242
|
if (!this.paymentsConfig || !this.paymentsConfig.appId) {
|
|
1237
|
-
throw new Error(
|
|
1243
|
+
throw new Error('Payments Config not initialized!');
|
|
1238
1244
|
}
|
|
1239
1245
|
this.paymentsConfig.setProductsLoadInProgress(true);
|
|
1240
1246
|
return this.http
|
|
@@ -1243,11 +1249,10 @@ class PaymentsService {
|
|
|
1243
1249
|
}
|
|
1244
1250
|
unsubscribe(subscriptionId) {
|
|
1245
1251
|
if (!this.paymentsConfig || !this.paymentsConfig.appId) {
|
|
1246
|
-
throw new Error(
|
|
1252
|
+
throw new Error('Payments Config not initialized!');
|
|
1247
1253
|
}
|
|
1248
|
-
return this.http
|
|
1249
|
-
|
|
1250
|
-
subscriptionId
|
|
1254
|
+
return this.http.post(`${this.paymentsConfig?.unsubscribeEndpoint}`, {
|
|
1255
|
+
subscriptionId,
|
|
1251
1256
|
});
|
|
1252
1257
|
}
|
|
1253
1258
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentsService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -1256,7 +1261,7 @@ class PaymentsService {
|
|
|
1256
1261
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentsService, decorators: [{
|
|
1257
1262
|
type: Injectable,
|
|
1258
1263
|
args: [{
|
|
1259
|
-
providedIn: 'root'
|
|
1264
|
+
providedIn: 'root',
|
|
1260
1265
|
}]
|
|
1261
1266
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }] });
|
|
1262
1267
|
|
|
@@ -1271,7 +1276,9 @@ class PaymentPageComponent {
|
|
|
1271
1276
|
if (!this.paymentsService.paymentsConfig?.publicKey) {
|
|
1272
1277
|
return;
|
|
1273
1278
|
}
|
|
1274
|
-
this.stripe =
|
|
1279
|
+
this.stripe =
|
|
1280
|
+
(await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||
|
|
1281
|
+
undefined;
|
|
1275
1282
|
this.getProducts();
|
|
1276
1283
|
}
|
|
1277
1284
|
getProducts() {
|
|
@@ -1279,7 +1286,8 @@ class PaymentPageComponent {
|
|
|
1279
1286
|
}
|
|
1280
1287
|
selectPlan(price) {
|
|
1281
1288
|
const priceId = price.priceId;
|
|
1282
|
-
if (!this.messenger.payments ||
|
|
1289
|
+
if (!this.messenger.payments ||
|
|
1290
|
+
!this.messenger.payments.createSessionEndpoint) {
|
|
1283
1291
|
console.log('No payments config.');
|
|
1284
1292
|
return;
|
|
1285
1293
|
}
|
|
@@ -1289,12 +1297,14 @@ class PaymentPageComponent {
|
|
|
1289
1297
|
}
|
|
1290
1298
|
this.planSelected = true;
|
|
1291
1299
|
this.loadInProgress = true;
|
|
1292
|
-
this.paymentsService
|
|
1300
|
+
this.paymentsService
|
|
1301
|
+
.createSession({
|
|
1293
1302
|
priceId: priceId,
|
|
1294
1303
|
userId: this.messenger.myPeer.clientId,
|
|
1295
1304
|
route: `/profile/${this.messenger.myPeer.clientId}`,
|
|
1296
|
-
applicationId: this.messenger.myPeer.rtseeAppId
|
|
1297
|
-
})
|
|
1305
|
+
applicationId: this.messenger.myPeer.rtseeAppId,
|
|
1306
|
+
})
|
|
1307
|
+
.subscribe((response) => {
|
|
1298
1308
|
void this.initCheckout(response.clientSecret);
|
|
1299
1309
|
});
|
|
1300
1310
|
}
|
|
@@ -1304,7 +1314,7 @@ class PaymentPageComponent {
|
|
|
1304
1314
|
return;
|
|
1305
1315
|
}
|
|
1306
1316
|
const checkout = await this.stripe.initEmbeddedCheckout({
|
|
1307
|
-
clientSecret: secret
|
|
1317
|
+
clientSecret: secret,
|
|
1308
1318
|
});
|
|
1309
1319
|
if (!checkout) {
|
|
1310
1320
|
return;
|
|
@@ -1327,7 +1337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1327
1337
|
ReactiveFormsModule,
|
|
1328
1338
|
ProgressSpinner,
|
|
1329
1339
|
PaymentProductSnippetComponent,
|
|
1330
|
-
Button
|
|
1340
|
+
Button,
|
|
1331
1341
|
], template: "<div class=\"rtsee-payment-page rtsee-form-container\">\n @if (messenger.payments && !planSelected) {\n @if (messenger.payments.products) {\n <div class=\"rtsee-payment-page-products\">\n @for (product of messenger.payments.products ; track product.id) {\n <rtsee-payment-product-snippet [product]=\"product\"\n (priceSelected)=\"selectPlan($event)\"\n ></rtsee-payment-product-snippet>\n }\n </div>\n } @else {\n <p-progress-spinner strokeWidth=\"8\"></p-progress-spinner>\n }\n }\n @if (loadInProgress) {\n <p-progress-spinner strokeWidth=\"8\"></p-progress-spinner>\n }\n <div #checkoutContainer class=\"stripe-checkout-container\"></div>\n <div class=\"rtsee-payment-page-footer\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]\"\n (click)=\"messenger.closePaymentPage()\"\n severity=\"warn\"\n ></p-button>\n </div>\n</div>\n" }]
|
|
1332
1342
|
}], ctorParameters: () => [{ type: PaymentsService }], propDecorators: { messenger: [{
|
|
1333
1343
|
type: Input
|
|
@@ -1346,7 +1356,9 @@ class PaymentValidationPageComponent {
|
|
|
1346
1356
|
if (!this.paymentsService.paymentsConfig?.publicKey) {
|
|
1347
1357
|
return;
|
|
1348
1358
|
}
|
|
1349
|
-
this.stripe =
|
|
1359
|
+
this.stripe =
|
|
1360
|
+
(await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||
|
|
1361
|
+
undefined;
|
|
1350
1362
|
this.validatePayment();
|
|
1351
1363
|
}
|
|
1352
1364
|
validatePayment() {
|
|
@@ -1365,11 +1377,7 @@ class PaymentValidationPageComponent {
|
|
|
1365
1377
|
}
|
|
1366
1378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentValidationPageComponent, decorators: [{
|
|
1367
1379
|
type: Component,
|
|
1368
|
-
args: [{ selector: 'rtsee-payment-validation-page', imports: [
|
|
1369
|
-
ReactiveFormsModule,
|
|
1370
|
-
ProgressSpinner,
|
|
1371
|
-
Button
|
|
1372
|
-
], template: "<div class=\"rtsee-payment-page rtsee-form-container\">\n @if (messenger.payments?.validationInProgress) {\n <p-progress-spinner strokeWidth=\"8\"></p-progress-spinner>\n }\n <div class=\"rtsee-payment-page-footer\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]\"\n (click)=\"messenger.closePaymentPage()\"\n severity=\"warn\"\n ></p-button>\n </div>\n</div>\n" }]
|
|
1380
|
+
args: [{ selector: 'rtsee-payment-validation-page', imports: [ReactiveFormsModule, ProgressSpinner, Button], template: "<div class=\"rtsee-payment-page rtsee-form-container\">\n @if (messenger.payments?.validationInProgress) {\n <p-progress-spinner strokeWidth=\"8\"></p-progress-spinner>\n }\n <div class=\"rtsee-payment-page-footer\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]\"\n (click)=\"messenger.closePaymentPage()\"\n severity=\"warn\"\n ></p-button>\n </div>\n</div>\n" }]
|
|
1373
1381
|
}], ctorParameters: () => [{ type: PaymentsService }], propDecorators: { messenger: [{
|
|
1374
1382
|
type: Input
|
|
1375
1383
|
}], checkoutContainer: [{
|
|
@@ -1400,11 +1408,7 @@ class ManagePlanComponent {
|
|
|
1400
1408
|
}
|
|
1401
1409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManagePlanComponent, decorators: [{
|
|
1402
1410
|
type: Component,
|
|
1403
|
-
args: [{ selector: 'rtsee-manage-plan', imports: [
|
|
1404
|
-
Card,
|
|
1405
|
-
Divider,
|
|
1406
|
-
Button
|
|
1407
|
-
], template: "<div class=\"rtsee-manage-plan\">\n <h2>{{messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]}}</h2>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.BACK_LABEL]\"\n severity=\"secondary\"\n (click)=\"messenger.closeManagePlanPage()\"\n ></p-button>\n @if (plan) {\n <p-card [header]=\"plan.productName\">\n <p>{{plan.productDescription}}</p>\n <p-divider></p-divider>\n <div class=\"rtsee-manage-plan-info\">\n <p>Active From: {{activeFromFormated}}</p>\n <p>Active To: {{activeToFormated}}</p>\n </div>\n <p-button [label]=\"'Unsubscribe'\"\n (click)=\"onUnsubscribeClicked()\"\n ></p-button>\n </p-card>\n }\n</div>\n" }]
|
|
1411
|
+
args: [{ selector: 'rtsee-manage-plan', imports: [Card, Divider, Button], template: "<div class=\"rtsee-manage-plan\">\n <h2>{{messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]}}</h2>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.BACK_LABEL]\"\n severity=\"secondary\"\n (click)=\"messenger.closeManagePlanPage()\"\n ></p-button>\n @if (plan) {\n <p-card [header]=\"plan.productName\">\n <p>{{plan.productDescription}}</p>\n <p-divider></p-divider>\n <div class=\"rtsee-manage-plan-info\">\n <p>Active From: {{activeFromFormated}}</p>\n <p>Active To: {{activeToFormated}}</p>\n </div>\n <p-button [label]=\"'Unsubscribe'\"\n (click)=\"onUnsubscribeClicked()\"\n ></p-button>\n </p-card>\n }\n</div>\n" }]
|
|
1408
1412
|
}], ctorParameters: () => [{ type: PaymentsService }], propDecorators: { messenger: [{
|
|
1409
1413
|
type: Input
|
|
1410
1414
|
}] } });
|
|
@@ -1414,7 +1418,7 @@ class MessengerComponent {
|
|
|
1414
1418
|
this.messenger.loadChats();
|
|
1415
1419
|
}
|
|
1416
1420
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1417
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessengerComponent, isStandalone: true, selector: "rtsee-messenger", inputs: { messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-folded': messenger.folded,\n 'rtsee-messenger-overlay-window': messenger.isOverlayPageOpened\n}\">\n @if (messenger.manageProfile) {\n <div class=\"rtsee-manage-profile\">\n <rtsee-manage-profile [manageProfile]=\"messenger.manageProfile\"\n [messenger]=\"messenger\"\n ></rtsee-manage-profile>\n </div>\n }\n\n @if (messenger.isPaymentPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-payment-page [messenger]=\"messenger\"></rtsee-payment-page>\n </div>\n }\n\n @if (messenger.isPaymentValidationPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-payment-validation-page [messenger]=\"messenger\"></rtsee-payment-validation-page>\n </div>\n }\n\n @if (messenger.isManagePlanPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-manage-plan [messenger]=\"messenger\"></rtsee-manage-plan>\n </div>\n }\n\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n\n\n", dependencies: [{ kind: "component", type: MessengerHeaderComponent, selector: "rtsee-messenger-header", inputs: ["messenger"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChatsListComponent, selector: "rtsee-chats-list", inputs: ["messenger", "chats"] }, { kind: "component", type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "chatData", "messenger"] }, { kind: "component", type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { kind: "component", type: ProfileComponent, selector: "rtsee-profile", inputs: ["messenger", "peer"] }, { kind: "component", type: ManageProfileComponent, selector: "rtsee-manage-profile", inputs: ["messenger", "manageProfile"] }, { kind: "component", type: PaymentPageComponent, selector: "rtsee-payment-page", inputs: ["messenger"] }, { kind: "component", type: PaymentValidationPageComponent, selector: "rtsee-payment-validation-page", inputs: ["messenger"] }, { kind: "component", type: ManagePlanComponent, selector: "rtsee-manage-plan", inputs: ["messenger"] }] }); }
|
|
1421
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessengerComponent, isStandalone: true, selector: "rtsee-messenger", inputs: { messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-folded': messenger.folded,\n 'rtsee-messenger-overlay-window': messenger.isOverlayPageOpened\n}\">\n @if (messenger.manageProfile) {\n <div class=\"rtsee-manage-profile\">\n <rtsee-manage-profile [manageProfile]=\"messenger.manageProfile\"\n [messenger]=\"messenger\"\n ></rtsee-manage-profile>\n </div>\n }\n\n @if (messenger.isPaymentPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-payment-page [messenger]=\"messenger\"></rtsee-payment-page>\n </div>\n }\n\n @if (messenger.isPaymentValidationPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-payment-validation-page [messenger]=\"messenger\"></rtsee-payment-validation-page>\n </div>\n }\n\n @if (messenger.isManagePlanPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-manage-plan [messenger]=\"messenger\"></rtsee-manage-plan>\n </div>\n }\n\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n\n\n", dependencies: [{ kind: "component", type: MessengerHeaderComponent, selector: "rtsee-messenger-header", inputs: ["messenger"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChatsListComponent, selector: "rtsee-chats-list", inputs: ["messenger", "chats"] }, { kind: "component", type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "chatData", "entity", "messenger"] }, { kind: "component", type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { kind: "component", type: ProfileComponent, selector: "rtsee-profile", inputs: ["messenger", "peer"] }, { kind: "component", type: ManageProfileComponent, selector: "rtsee-manage-profile", inputs: ["messenger", "manageProfile"] }, { kind: "component", type: PaymentPageComponent, selector: "rtsee-payment-page", inputs: ["messenger"] }, { kind: "component", type: PaymentValidationPageComponent, selector: "rtsee-payment-validation-page", inputs: ["messenger"] }, { kind: "component", type: ManagePlanComponent, selector: "rtsee-manage-plan", inputs: ["messenger"] }] }); }
|
|
1418
1422
|
}
|
|
1419
1423
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerComponent, decorators: [{
|
|
1420
1424
|
type: Component,
|
|
@@ -1429,7 +1433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1429
1433
|
ManageProfileComponent,
|
|
1430
1434
|
PaymentPageComponent,
|
|
1431
1435
|
PaymentValidationPageComponent,
|
|
1432
|
-
ManagePlanComponent
|
|
1436
|
+
ManagePlanComponent,
|
|
1433
1437
|
], standalone: true, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-folded': messenger.folded,\n 'rtsee-messenger-overlay-window': messenger.isOverlayPageOpened\n}\">\n @if (messenger.manageProfile) {\n <div class=\"rtsee-manage-profile\">\n <rtsee-manage-profile [manageProfile]=\"messenger.manageProfile\"\n [messenger]=\"messenger\"\n ></rtsee-manage-profile>\n </div>\n }\n\n @if (messenger.isPaymentPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-payment-page [messenger]=\"messenger\"></rtsee-payment-page>\n </div>\n }\n\n @if (messenger.isPaymentValidationPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-payment-validation-page [messenger]=\"messenger\"></rtsee-payment-validation-page>\n </div>\n }\n\n @if (messenger.isManagePlanPageOpened) {\n <div class=\"rtsee-payment-page-container\">\n <rtsee-manage-plan [messenger]=\"messenger\"></rtsee-manage-plan>\n </div>\n }\n\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n\n\n" }]
|
|
1434
1438
|
}], propDecorators: { messenger: [{
|
|
1435
1439
|
type: Input
|
|
@@ -1520,10 +1524,7 @@ class EventThumbnailComponent {
|
|
|
1520
1524
|
}
|
|
1521
1525
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EventThumbnailComponent, decorators: [{
|
|
1522
1526
|
type: Component,
|
|
1523
|
-
args: [{ selector: 'rtsee-event-thumbnail', imports: [
|
|
1524
|
-
WidgetDirective,
|
|
1525
|
-
NgClass
|
|
1526
|
-
], standalone: true, template: "<div class=\"rtsee-events-dashboard-event-thumbnail\">\n @if (event.widget) {\n <ng-template widgetHost></ng-template>\n } @else if (!event.widget) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n @if (event.data) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n }\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeInAgoFormat }}</span>\n </div>\n </div>\n </div>\n }\n</div>\n" }]
|
|
1527
|
+
args: [{ selector: 'rtsee-event-thumbnail', imports: [WidgetDirective, NgClass], standalone: true, template: "<div class=\"rtsee-events-dashboard-event-thumbnail\">\n @if (event.widget) {\n <ng-template widgetHost></ng-template>\n } @else if (!event.widget) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n @if (event.data) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n }\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeInAgoFormat }}</span>\n </div>\n </div>\n </div>\n }\n</div>\n" }]
|
|
1527
1528
|
}], ctorParameters: () => [{ type: EventsWidgetsService }, { type: i0.ComponentFactoryResolver }, { type: TimeFormatHelperService }, { type: i0.ChangeDetectorRef }], propDecorators: { event: [{
|
|
1528
1529
|
type: Input
|
|
1529
1530
|
}], widgetHost: [{
|
|
@@ -1540,11 +1541,7 @@ class RtseeEventsDashboardSessionComponent {
|
|
|
1540
1541
|
}
|
|
1541
1542
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardSessionComponent, decorators: [{
|
|
1542
1543
|
type: Component,
|
|
1543
|
-
args: [{ selector: 'rtsee-rtsee-events-dashboard-session', imports: [
|
|
1544
|
-
NgIf,
|
|
1545
|
-
EventThumbnailComponent,
|
|
1546
|
-
SlicePipe
|
|
1547
|
-
], standalone: true, template: "<div class=\"rtsee-events-dashboard-session\">\n <div class=\"rtsee-events-dashboard-session-header\" *ngIf=\"session.info\">\n <p class=\"rtsee-events-dashboard-session-client-info\">{{session.info.clientThumbnail}}</p>\n <p class=\"rtsee-events-dashboard-session-os-info\">{{session.info.osThumbnail}}</p>\n <div class=\"rtsee-events-dashboard-session-device-info\" [title]=\"session.info.deviceThumbnail\">\n <span *ngIf=\"session.info.deviceType === 'smartphone' && !session.info.botName\"\n class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >phone_iphone</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.deviceType === 'tablet' && !session.info.botName\"\n >tablet_mac</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.deviceType === 'desktop' && !session.info.botName\"\n >computer</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.botName\"\n >smart_toy</span>\n </div>\n </div>\n <ul *ngIf=\"session.events && session.events.length\"\n class=\"rtsee-events-dashboard-session-events-list\"\n >\n @for (event of session.events | slice:0:5; track event.id) {\n <li class=\"rtsee-events-dashboard-session-event\">\n <rtsee-event-thumbnail [event]=\"event\"></rtsee-event-thumbnail>\n </li>\n }\n </ul>\n <div class=\"rtsee-events-dashboard-session-footer\">\n <button *ngIf=\"session.events.length > 5\">{{session.events.length - 5}} more</button>\n </div>\n</div>\n" }]
|
|
1544
|
+
args: [{ selector: 'rtsee-rtsee-events-dashboard-session', imports: [NgIf, EventThumbnailComponent, SlicePipe], standalone: true, template: "<div class=\"rtsee-events-dashboard-session\">\n <div class=\"rtsee-events-dashboard-session-header\" *ngIf=\"session.info\">\n <p class=\"rtsee-events-dashboard-session-client-info\">{{session.info.clientThumbnail}}</p>\n <p class=\"rtsee-events-dashboard-session-os-info\">{{session.info.osThumbnail}}</p>\n <div class=\"rtsee-events-dashboard-session-device-info\" [title]=\"session.info.deviceThumbnail\">\n <span *ngIf=\"session.info.deviceType === 'smartphone' && !session.info.botName\"\n class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >phone_iphone</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.deviceType === 'tablet' && !session.info.botName\"\n >tablet_mac</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.deviceType === 'desktop' && !session.info.botName\"\n >computer</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.botName\"\n >smart_toy</span>\n </div>\n </div>\n <ul *ngIf=\"session.events && session.events.length\"\n class=\"rtsee-events-dashboard-session-events-list\"\n >\n @for (event of session.events | slice:0:5; track event.id) {\n <li class=\"rtsee-events-dashboard-session-event\">\n <rtsee-event-thumbnail [event]=\"event\"></rtsee-event-thumbnail>\n </li>\n }\n </ul>\n <div class=\"rtsee-events-dashboard-session-footer\">\n <button *ngIf=\"session.events.length > 5\">{{session.events.length - 5}} more</button>\n </div>\n</div>\n" }]
|
|
1548
1545
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }], propDecorators: { session: [{
|
|
1549
1546
|
type: Input
|
|
1550
1547
|
}] } });
|
|
@@ -1563,9 +1560,7 @@ class RtseeEventsDashboardClientThumbnailComponent {
|
|
|
1563
1560
|
}
|
|
1564
1561
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardClientThumbnailComponent, decorators: [{
|
|
1565
1562
|
type: Component,
|
|
1566
|
-
args: [{ selector: 'ngx-rtsee-events-dashboard-client-thumbnail', imports: [
|
|
1567
|
-
RtseeEventsDashboardSessionComponent
|
|
1568
|
-
], standalone: true, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if (client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n" }]
|
|
1563
|
+
args: [{ selector: 'ngx-rtsee-events-dashboard-client-thumbnail', imports: [RtseeEventsDashboardSessionComponent], standalone: true, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if (client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n" }]
|
|
1569
1564
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }, { type: DefaultImagesService }], propDecorators: { dashboard: [{
|
|
1570
1565
|
type: Input
|
|
1571
1566
|
}], client: [{
|
|
@@ -1578,9 +1573,7 @@ class RtseeEventsDashboardComponent {
|
|
|
1578
1573
|
}
|
|
1579
1574
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardComponent, decorators: [{
|
|
1580
1575
|
type: Component,
|
|
1581
|
-
args: [{ selector: 'rtsee-events-dashboard', imports: [
|
|
1582
|
-
RtseeEventsDashboardClientThumbnailComponent
|
|
1583
|
-
], standalone: true, template: "<div class=\"rtsee-events-dashboard\">\n <div class=\"rtsee-events-dashboard-client-thumbnails\">\n @for (client of eventsDashboard.clients; track client.id) {\n <div class=\"rtsee-events-dashboard-client-thumbnail-wrapper\">\n <ngx-rtsee-events-dashboard-client-thumbnail\n [client]=\"client\"\n [dashboard]=\"eventsDashboard\"\n ></ngx-rtsee-events-dashboard-client-thumbnail>\n </div>\n }\n </div>\n</div>\n" }]
|
|
1576
|
+
args: [{ selector: 'rtsee-events-dashboard', imports: [RtseeEventsDashboardClientThumbnailComponent], standalone: true, template: "<div class=\"rtsee-events-dashboard\">\n <div class=\"rtsee-events-dashboard-client-thumbnails\">\n @for (client of eventsDashboard.clients; track client.id) {\n <div class=\"rtsee-events-dashboard-client-thumbnail-wrapper\">\n <ngx-rtsee-events-dashboard-client-thumbnail\n [client]=\"client\"\n [dashboard]=\"eventsDashboard\"\n ></ngx-rtsee-events-dashboard-client-thumbnail>\n </div>\n }\n </div>\n</div>\n" }]
|
|
1584
1577
|
}], propDecorators: { eventsDashboard: [{
|
|
1585
1578
|
type: Input
|
|
1586
1579
|
}] } });
|
|
@@ -1596,7 +1589,7 @@ class JoinCallComponent {
|
|
|
1596
1589
|
this.messageService.add({
|
|
1597
1590
|
severity: 'success',
|
|
1598
1591
|
summary: 'Link Copied!',
|
|
1599
|
-
detail: 'The link was copied to clipboard!'
|
|
1592
|
+
detail: 'The link was copied to clipboard!',
|
|
1600
1593
|
});
|
|
1601
1594
|
this.recentlyCopied = true;
|
|
1602
1595
|
setTimeout(() => {
|
|
@@ -1608,12 +1601,7 @@ class JoinCallComponent {
|
|
|
1608
1601
|
}
|
|
1609
1602
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: JoinCallComponent, decorators: [{
|
|
1610
1603
|
type: Component,
|
|
1611
|
-
args: [{ selector: 'rtsee-join-call', imports: [
|
|
1612
|
-
Button,
|
|
1613
|
-
CdkCopyToClipboard,
|
|
1614
|
-
Message,
|
|
1615
|
-
Toast
|
|
1616
|
-
], providers: [MessageService], template: "<div class=\"rtsee-join-call\">\n <div class=\"rtsee-join-call-button\">\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.START_A_CALL_BUTTON]\"\n (click)=\"presentation.emitJoinRoomCallEvent()\"\n ></p-button>\n </div>\n <div class=\"rtsee-share-call-link\">\n <div class=\"rtsee-share-call-explain-section\">\n <div class=\"rtsee-share-call-explain-section-icon\">\n <span class=\"pi pi-link rtsee-link-icon\"></span>\n </div>\n <div class=\"rtsee-share-call-explain-section-text\">\n <span>Anyone can join your storytelling session using this link.</span>\n </div>\n </div>\n <div class=\"rtsee-share-call-link-section\">\n <p-toast position=\"bottom-center\" />\n <p-button [icon]=\"recentlyCopied ? 'pi pi-check' : 'pi pi-copy'\"\n severity=\"secondary\"\n class=\"rtsee-share-call-link-copy-btn\"\n [cdkCopyToClipboard]=\"window.location.origin + '?room_id=' + room.id\"\n (cdkCopyToClipboardCopied)=\"copyClicked()\"\n ></p-button>\n <p-message severity=\"info\"\n class=\"rtsee-share-call-link-text\"\n >{{ window.location.origin + '?room_id=' + room.id }}</p-message>\n </div>\n </div>\n</div>\n" }]
|
|
1604
|
+
args: [{ selector: 'rtsee-join-call', imports: [Button, CdkCopyToClipboard, Message, Toast], providers: [MessageService], template: "<div class=\"rtsee-join-call\">\n <div class=\"rtsee-join-call-button\">\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.START_A_CALL_BUTTON]\"\n (click)=\"presentation.emitJoinRoomCallEvent()\"\n ></p-button>\n </div>\n <div class=\"rtsee-share-call-link\">\n <div class=\"rtsee-share-call-explain-section\">\n <div class=\"rtsee-share-call-explain-section-icon\">\n <span class=\"pi pi-link rtsee-link-icon\"></span>\n </div>\n <div class=\"rtsee-share-call-explain-section-text\">\n <span>Anyone can join your storytelling session using this link.</span>\n </div>\n </div>\n <div class=\"rtsee-share-call-link-section\">\n <p-toast position=\"bottom-center\" />\n <p-button [icon]=\"recentlyCopied ? 'pi pi-check' : 'pi pi-copy'\"\n severity=\"secondary\"\n class=\"rtsee-share-call-link-copy-btn\"\n [cdkCopyToClipboard]=\"window.location.origin + '?room_id=' + room.id\"\n (cdkCopyToClipboardCopied)=\"copyClicked()\"\n ></p-button>\n <p-message severity=\"info\"\n class=\"rtsee-share-call-link-text\"\n >{{ window.location.origin + '?room_id=' + room.id }}</p-message>\n </div>\n </div>\n</div>\n" }]
|
|
1617
1605
|
}], ctorParameters: () => [{ type: i1$2.MessageService }], propDecorators: { presentation: [{
|
|
1618
1606
|
type: Input
|
|
1619
1607
|
}], room: [{
|
|
@@ -1629,50 +1617,11 @@ class PresentationHeaderComponent {
|
|
|
1629
1617
|
}
|
|
1630
1618
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationHeaderComponent, decorators: [{
|
|
1631
1619
|
type: Component,
|
|
1632
|
-
args: [{ selector: 'rtsee-presentation-header', imports: [
|
|
1633
|
-
Button,
|
|
1634
|
-
NgClass,
|
|
1635
|
-
Chip,
|
|
1636
|
-
JoinCallComponent
|
|
1637
|
-
], standalone: true, template: "<header class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n @if (!presentation.activeStory) {\n <div class=\"rtsee-presentations-header-title\">\n <div class=\"rtsee-presentations-header-title-overlay\"></div>\n <div class=\"rtsee-presentations-header-title-content\">\n <h1>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_TITLE_LABEL]}}</h1>\n <p class=\"rtsee-presentations-header-title-subtitle\">\n <span>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_SUBTITLE_LABEL]}}</span>\n </p>\n </div>\n </div>\n }\n\n\n @if (presentation.activeRoom && !presentation.activeStory) {\n <div class=\"rtsee-presentation-room-block\">\n <rtsee-join-call [room]=\"presentation.activeRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n </div>\n }\n\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-header-active-story-info\">\n <div class=\"rtsee-presentation-header-active-story-info-close\"\n (click)=\"presentation.disableActiveStory()\"\n >\n <i class=\"pi pi-arrow-left rtsee-presentation-header-active-story-info-close-icon\"></i>\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-details\">\n <p-chip [label]=\"presentation.activeStory.name\"\n [image]=\"presentation.activeStory.imageUrl\"\n class=\"rtsee-presentation-header-active-story-name\"\n alt=\"Story image\" />\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-settings\"\n (click)=\"presentation.settings.expand()\"\n >\n <i class=\"pi pi-ellipsis-h rtsee-presentation-header-active-story-info-settings-icon\"></i>\n </div>\n </div>\n }\n @if (presentation.dashboard && !presentation.activeStory && !presentation.isDashboardOpen) {\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.DASHBOARD_BUTTON]\"\n (click)=\"presentation.toggleDashboardState()\"\n ></p-button>\n }\n</header>\n" }]
|
|
1620
|
+
args: [{ selector: 'rtsee-presentation-header', imports: [Button, NgClass, Chip, JoinCallComponent], standalone: true, template: "<header class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n @if (!presentation.activeStory) {\n <div class=\"rtsee-presentations-header-title\">\n <div class=\"rtsee-presentations-header-title-overlay\"></div>\n <div class=\"rtsee-presentations-header-title-content\">\n <h1>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_TITLE_LABEL]}}</h1>\n <p class=\"rtsee-presentations-header-title-subtitle\">\n <span>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_SUBTITLE_LABEL]}}</span>\n </p>\n </div>\n </div>\n }\n\n\n @if (presentation.activeRoom && !presentation.activeStory) {\n <div class=\"rtsee-presentation-room-block\">\n <rtsee-join-call [room]=\"presentation.activeRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n </div>\n }\n\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-header-active-story-info\">\n <div class=\"rtsee-presentation-header-active-story-info-close\"\n (click)=\"presentation.disableActiveStory()\"\n >\n <i class=\"pi pi-arrow-left rtsee-presentation-header-active-story-info-close-icon\"></i>\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-details\">\n <p-chip [label]=\"presentation.activeStory.name\"\n [image]=\"presentation.activeStory.imageUrl\"\n class=\"rtsee-presentation-header-active-story-name\"\n alt=\"Story image\" />\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-settings\"\n (click)=\"presentation.settings.expand()\"\n >\n <i class=\"pi pi-ellipsis-h rtsee-presentation-header-active-story-info-settings-icon\"></i>\n </div>\n </div>\n }\n @if (presentation.dashboard && !presentation.activeStory && !presentation.isDashboardOpen) {\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.DASHBOARD_BUTTON]\"\n (click)=\"presentation.toggleDashboardState()\"\n ></p-button>\n }\n</header>\n" }]
|
|
1638
1621
|
}], propDecorators: { presentation: [{
|
|
1639
1622
|
type: Input
|
|
1640
1623
|
}] } });
|
|
1641
1624
|
|
|
1642
|
-
class RatingComponent {
|
|
1643
|
-
constructor() {
|
|
1644
|
-
this.stars = [];
|
|
1645
|
-
}
|
|
1646
|
-
ngOnInit() {
|
|
1647
|
-
this.initStars();
|
|
1648
|
-
}
|
|
1649
|
-
initStars() {
|
|
1650
|
-
const stars = [];
|
|
1651
|
-
const full = Math.floor(this.rating.value);
|
|
1652
|
-
const hasHalf = this.rating.value - full >= 0.25;
|
|
1653
|
-
for (let i = 0; i < full; i++) {
|
|
1654
|
-
stars.push('full');
|
|
1655
|
-
}
|
|
1656
|
-
if (hasHalf) {
|
|
1657
|
-
stars.push('half');
|
|
1658
|
-
}
|
|
1659
|
-
while (stars.length < this.rating.max) {
|
|
1660
|
-
stars.push('empty');
|
|
1661
|
-
}
|
|
1662
|
-
this.stars = stars;
|
|
1663
|
-
}
|
|
1664
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1665
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RatingComponent, isStandalone: true, selector: "rtsee-rating", inputs: { rating: "rating" }, ngImport: i0, template: "<div class=\"rtsee-rating\">\n @for (star of stars; track $index) {\n <span class=\"rtsee-rating-star\" [ngClass]=\"{\n 'rtsee-rating-star-full': star === 'full',\n 'rtsee-rating-star-half': star === 'half',\n 'rtsee-rating-star-empty': star === 'empty',\n }\">\u2605</span>\n }\n <span class=\"rtsee-rating-number\">{{ rating.value }}</span>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
1666
|
-
}
|
|
1667
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingComponent, decorators: [{
|
|
1668
|
-
type: Component,
|
|
1669
|
-
args: [{ selector: 'rtsee-rating', imports: [
|
|
1670
|
-
NgClass
|
|
1671
|
-
], template: "<div class=\"rtsee-rating\">\n @for (star of stars; track $index) {\n <span class=\"rtsee-rating-star\" [ngClass]=\"{\n 'rtsee-rating-star-full': star === 'full',\n 'rtsee-rating-star-half': star === 'half',\n 'rtsee-rating-star-empty': star === 'empty',\n }\">\u2605</span>\n }\n <span class=\"rtsee-rating-number\">{{ rating.value }}</span>\n</div>\n" }]
|
|
1672
|
-
}], propDecorators: { rating: [{
|
|
1673
|
-
type: Input
|
|
1674
|
-
}] } });
|
|
1675
|
-
|
|
1676
1625
|
class StoryThumbnailComponent {
|
|
1677
1626
|
constructor() {
|
|
1678
1627
|
this.progressPercent = 0;
|
|
@@ -1680,18 +1629,15 @@ class StoryThumbnailComponent {
|
|
|
1680
1629
|
}
|
|
1681
1630
|
ngOnInit() {
|
|
1682
1631
|
if (this.story.preselectedSlideNumber) {
|
|
1683
|
-
this.progressPercent = Math
|
|
1684
|
-
.round((this.story.preselectedSlideNumber / this.story.totalSlides) * 100);
|
|
1632
|
+
this.progressPercent = Math.round((this.story.preselectedSlideNumber / this.story.totalSlides) * 100);
|
|
1685
1633
|
}
|
|
1686
1634
|
}
|
|
1687
1635
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryThumbnailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1688
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: StoryThumbnailComponent, isStandalone: true, selector: "rtsee-story-thumbnail", inputs: { story: "story" }, ngImport: i0, template: "<div class=\"rtsee-story-thumbnail\">\n <div class=\"rtsee-story-thumbnail-image-container\">\n <div class=\"rtsee-story-thumbnail-image\">\n <img [src]=\"story.imageUrl\"\n [alt]=\"story.name\"\n class=\"rtsee-story-thumbnail-image\"\n />\n </div>\n @if (story.preselectedSlideNumber) {\n <div class=\"rtsee-story-thumbnail-progress-bar-container\">\n <div class=\"rtsee-story-thumbnail-progress-bar\">\n <div class=\"rtsee-story-thumbnail-progress-bar-inner\"\n [style.width]=\"progressPercent + '%'\"\n ></div>\n </div>\n </div>\n }\n </div>\n <div class=\"rtsee-story-thumbnail-body-container\">\n <h4 class=\"rtsee-story-thumbnail-title\">{{story.name}}</h4>\n <div class=\"rtsee-story-thumbnail-body-meta\">\n <rtsee-rating [
|
|
1636
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: StoryThumbnailComponent, isStandalone: true, selector: "rtsee-story-thumbnail", inputs: { story: "story" }, ngImport: i0, template: "<div class=\"rtsee-story-thumbnail\">\n <div class=\"rtsee-story-thumbnail-image-container\">\n <div class=\"rtsee-story-thumbnail-image\">\n <img [src]=\"story.imageUrl\"\n [alt]=\"story.name\"\n class=\"rtsee-story-thumbnail-image\"\n />\n </div>\n @if (story.preselectedSlideNumber) {\n <div class=\"rtsee-story-thumbnail-progress-bar-container\">\n <div class=\"rtsee-story-thumbnail-progress-bar\">\n <div class=\"rtsee-story-thumbnail-progress-bar-inner\"\n [style.width]=\"progressPercent + '%'\"\n ></div>\n </div>\n </div>\n }\n </div>\n <div class=\"rtsee-story-thumbnail-body-container\">\n <h4 class=\"rtsee-story-thumbnail-title\">{{story.name}}</h4>\n <div class=\"rtsee-story-thumbnail-body-meta\">\n @if (story.rating) {\n <rtsee-rating [rate]=\"{maxValue: 5, value: story.rating}\"></rtsee-rating>\n }\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-thumbnail-time-container\">\n <span class=\"rtsee-story-thumbnail-info-time-icon material-icons-outlined\">schedule</span>\n <span class=\"rtsee-story-thumbnail-info-read-time\">{{ Math.ceil(story.averageReadTime / 60) }} \u0445\u0432</span>\n </span>\n <span class=\"rtsee-story-thumbnail-label-container\">{{\"7\"}}+</span>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: RatingComponent, selector: "rtsee-rating", inputs: ["config", "rate"] }] }); }
|
|
1689
1637
|
}
|
|
1690
1638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryThumbnailComponent, decorators: [{
|
|
1691
1639
|
type: Component,
|
|
1692
|
-
args: [{ selector: 'rtsee-story-thumbnail', imports: [
|
|
1693
|
-
RatingComponent
|
|
1694
|
-
], standalone: true, template: "<div class=\"rtsee-story-thumbnail\">\n <div class=\"rtsee-story-thumbnail-image-container\">\n <div class=\"rtsee-story-thumbnail-image\">\n <img [src]=\"story.imageUrl\"\n [alt]=\"story.name\"\n class=\"rtsee-story-thumbnail-image\"\n />\n </div>\n @if (story.preselectedSlideNumber) {\n <div class=\"rtsee-story-thumbnail-progress-bar-container\">\n <div class=\"rtsee-story-thumbnail-progress-bar\">\n <div class=\"rtsee-story-thumbnail-progress-bar-inner\"\n [style.width]=\"progressPercent + '%'\"\n ></div>\n </div>\n </div>\n }\n </div>\n <div class=\"rtsee-story-thumbnail-body-container\">\n <h4 class=\"rtsee-story-thumbnail-title\">{{story.name}}</h4>\n <div class=\"rtsee-story-thumbnail-body-meta\">\n <rtsee-rating [rating]=\"{max: 5, value: 3.5}\"></rtsee-rating>\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-thumbnail-time-container\">\n <span class=\"rtsee-story-thumbnail-info-time-icon material-icons-outlined\">schedule</span>\n <span class=\"rtsee-story-thumbnail-info-read-time\">{{ Math.ceil(story.averageReadTime / 60) }} \u0445\u0432</span>\n </span>\n <span class=\"rtsee-story-thumbnail-label-container\">{{\"7\"}}+</span>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1640
|
+
args: [{ selector: 'rtsee-story-thumbnail', imports: [RatingComponent], standalone: true, template: "<div class=\"rtsee-story-thumbnail\">\n <div class=\"rtsee-story-thumbnail-image-container\">\n <div class=\"rtsee-story-thumbnail-image\">\n <img [src]=\"story.imageUrl\"\n [alt]=\"story.name\"\n class=\"rtsee-story-thumbnail-image\"\n />\n </div>\n @if (story.preselectedSlideNumber) {\n <div class=\"rtsee-story-thumbnail-progress-bar-container\">\n <div class=\"rtsee-story-thumbnail-progress-bar\">\n <div class=\"rtsee-story-thumbnail-progress-bar-inner\"\n [style.width]=\"progressPercent + '%'\"\n ></div>\n </div>\n </div>\n }\n </div>\n <div class=\"rtsee-story-thumbnail-body-container\">\n <h4 class=\"rtsee-story-thumbnail-title\">{{story.name}}</h4>\n <div class=\"rtsee-story-thumbnail-body-meta\">\n @if (story.rating) {\n <rtsee-rating [rate]=\"{maxValue: 5, value: story.rating}\"></rtsee-rating>\n }\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-thumbnail-time-container\">\n <span class=\"rtsee-story-thumbnail-info-time-icon material-icons-outlined\">schedule</span>\n <span class=\"rtsee-story-thumbnail-info-read-time\">{{ Math.ceil(story.averageReadTime / 60) }} \u0445\u0432</span>\n </span>\n <span class=\"rtsee-story-thumbnail-label-container\">{{\"7\"}}+</span>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1695
1641
|
}], propDecorators: { story: [{
|
|
1696
1642
|
type: Input
|
|
1697
1643
|
}] } });
|
|
@@ -1712,8 +1658,7 @@ class SlideComponent {
|
|
|
1712
1658
|
}
|
|
1713
1659
|
}
|
|
1714
1660
|
ngAfterViewInit() {
|
|
1715
|
-
const parentSlideEl = this.elementRef.nativeElement
|
|
1716
|
-
.closest('.story-player-slide-container');
|
|
1661
|
+
const parentSlideEl = this.elementRef.nativeElement.closest('.story-player-slide-container');
|
|
1717
1662
|
if (!parentSlideEl) {
|
|
1718
1663
|
return;
|
|
1719
1664
|
}
|
|
@@ -1730,7 +1675,7 @@ class SlideComponent {
|
|
|
1730
1675
|
}
|
|
1731
1676
|
handleScroll(position, scrollHeight, clientHeight) {
|
|
1732
1677
|
const BUFFER = 50;
|
|
1733
|
-
const isAtBottom = Math.abs(
|
|
1678
|
+
const isAtBottom = Math.abs(scrollHeight - position - clientHeight) < 10;
|
|
1734
1679
|
if (position > this.lastScrollPosition + BUFFER) {
|
|
1735
1680
|
if (!this.scrollingDown) {
|
|
1736
1681
|
this.scrollingDown = true;
|
|
@@ -1757,12 +1702,7 @@ class SlideComponent {
|
|
|
1757
1702
|
}
|
|
1758
1703
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SlideComponent, decorators: [{
|
|
1759
1704
|
type: Component,
|
|
1760
|
-
args: [{ selector: 'rtsee-slide', imports: [
|
|
1761
|
-
NgStyle,
|
|
1762
|
-
WidgetDirective,
|
|
1763
|
-
Button,
|
|
1764
|
-
NgClass
|
|
1765
|
-
], standalone: true, template: "<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p [style.font-size]=\"settings.fontSize + 'rem'\">{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n label=\"Previous Page\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n label=\"Next Page\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1705
|
+
args: [{ selector: 'rtsee-slide', imports: [NgStyle, WidgetDirective, Button, NgClass], standalone: true, template: "<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p [style.font-size]=\"settings.fontSize + 'rem'\">{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n label=\"Previous Page\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n label=\"Next Page\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1766
1706
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { story: [{
|
|
1767
1707
|
type: Input
|
|
1768
1708
|
}], slide: [{
|
|
@@ -1781,7 +1721,7 @@ class StoryPlayerComponent {
|
|
|
1781
1721
|
ngAfterViewInit() {
|
|
1782
1722
|
const swiper = new Swiper(this.swiperEl.nativeElement, {
|
|
1783
1723
|
effect: 'cards',
|
|
1784
|
-
grabCursor: true
|
|
1724
|
+
grabCursor: true,
|
|
1785
1725
|
});
|
|
1786
1726
|
this.story.initSwiper(swiper);
|
|
1787
1727
|
}
|
|
@@ -1790,10 +1730,7 @@ class StoryPlayerComponent {
|
|
|
1790
1730
|
}
|
|
1791
1731
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryPlayerComponent, decorators: [{
|
|
1792
1732
|
type: Component,
|
|
1793
|
-
args: [{ selector: 'rtsee-story-player', imports: [
|
|
1794
|
-
NgClass,
|
|
1795
|
-
SlideComponent
|
|
1796
|
-
], standalone: true, template: "<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track slide.id) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"\n [story]=\"story\"\n [settings]=\"settings\"\n ></rtsee-slide>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1733
|
+
args: [{ selector: 'rtsee-story-player', imports: [NgClass, SlideComponent], standalone: true, template: "<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track slide.id) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"\n [story]=\"story\"\n [settings]=\"settings\"\n ></rtsee-slide>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1797
1734
|
}], ctorParameters: () => [], propDecorators: { story: [{
|
|
1798
1735
|
type: Input
|
|
1799
1736
|
}], settings: [{
|
|
@@ -1809,12 +1746,7 @@ class AutocompleteComponent {
|
|
|
1809
1746
|
}
|
|
1810
1747
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
1811
1748
|
type: Component,
|
|
1812
|
-
args: [{ selector: 'rtsee-autocomplete', imports: [
|
|
1813
|
-
AutoCompleteModule,
|
|
1814
|
-
FloatLabel,
|
|
1815
|
-
InputGroup,
|
|
1816
|
-
FormsModule
|
|
1817
|
-
], template: "<div class=\"rtsee-autocomplete rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-autoComplete [(ngModel)]=\"config.selectedSuggestions\"\n [inputId]=\"config.inputId\"\n [multiple]=\"config.allowMultipleSelections\"\n [fluid]=\"config.fluid\"\n [suggestions]=\"config.visibleSuggestions\"\n [optionLabel]=\"config.suggestionLabel\"\n (completeMethod)=\"config.onQueryChanged($event)\"\n (onSelect)=\"config.onSelect($event)\"\n ></p-autoComplete>\n <label [for]=\"config.inputId\">{{config.inputName}}</label>\n </p-floatlabel>\n </p-inputgroup>\n</div>\n" }]
|
|
1749
|
+
args: [{ selector: 'rtsee-autocomplete', imports: [AutoCompleteModule, FloatLabel, InputGroup, FormsModule], template: "<div class=\"rtsee-autocomplete rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-autoComplete [(ngModel)]=\"config.selectedSuggestions\"\n [inputId]=\"config.inputId\"\n [multiple]=\"config.allowMultipleSelections\"\n [fluid]=\"config.fluid\"\n [suggestions]=\"config.visibleSuggestions\"\n [optionLabel]=\"config.suggestionLabel\"\n (completeMethod)=\"config.onQueryChanged($event)\"\n (onSelect)=\"config.onSelect($event)\"\n ></p-autoComplete>\n <label [for]=\"config.inputId\">{{config.inputName}}</label>\n </p-floatlabel>\n </p-inputgroup>\n</div>\n" }]
|
|
1818
1750
|
}], propDecorators: { config: [{
|
|
1819
1751
|
type: Input
|
|
1820
1752
|
}] } });
|
|
@@ -1825,11 +1757,7 @@ class ManageSlidesComponent {
|
|
|
1825
1757
|
}
|
|
1826
1758
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageSlidesComponent, decorators: [{
|
|
1827
1759
|
type: Component,
|
|
1828
|
-
args: [{ selector: 'rtsee-manage-slides', imports: [
|
|
1829
|
-
OrderList,
|
|
1830
|
-
Button,
|
|
1831
|
-
NgClass
|
|
1832
|
-
], template: "<div class=\"rtsee-presentation-manage-slides\">\n <div class=\"rtsee-presentation-manage-slides-header\">\n <p-button (click)=\"manageSlides.selectNewSlide()\"\n label=\"Create A New Slide\"\n ></p-button>\n </div>\n <div class=\"rtsee-presentation-manage-slides-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageSlides.slides\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageSlides.onReorder($event)\"\n [disabled]=\"manageSlides.loadInProgress\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-slides-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-slides-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-slides-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n class=\"rtsee-ordered-list-item-info-label\"\n >{{ option.slideNumber }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageSlides.selectSlide(option.slideNumber)\"\n ></p-button>\n <p-button label=\"Delete\"\n severity=\"warn\"\n class=\"rtsee-ordered-list-item-info-button\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n</div>\n" }]
|
|
1760
|
+
args: [{ selector: 'rtsee-manage-slides', imports: [OrderList, Button, NgClass], template: "<div class=\"rtsee-presentation-manage-slides\">\n <div class=\"rtsee-presentation-manage-slides-header\">\n <p-button (click)=\"manageSlides.selectNewSlide()\"\n label=\"Create A New Slide\"\n ></p-button>\n </div>\n <div class=\"rtsee-presentation-manage-slides-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageSlides.slides\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageSlides.onReorder($event)\"\n [disabled]=\"manageSlides.loadInProgress\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-slides-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-slides-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-slides-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n class=\"rtsee-ordered-list-item-info-label\"\n >{{ option.slideNumber }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageSlides.selectSlide(option.slideNumber)\"\n ></p-button>\n <p-button label=\"Delete\"\n severity=\"warn\"\n class=\"rtsee-ordered-list-item-info-button\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n</div>\n" }]
|
|
1833
1761
|
}], propDecorators: { manageSlides: [{
|
|
1834
1762
|
type: Input
|
|
1835
1763
|
}] } });
|
|
@@ -1842,9 +1770,9 @@ class ManageSlideComponent {
|
|
|
1842
1770
|
validators: [
|
|
1843
1771
|
Validators.required,
|
|
1844
1772
|
Validators.minLength(3),
|
|
1845
|
-
Validators.maxLength(131000)
|
|
1846
|
-
]
|
|
1847
|
-
})
|
|
1773
|
+
Validators.maxLength(131000),
|
|
1774
|
+
],
|
|
1775
|
+
}),
|
|
1848
1776
|
});
|
|
1849
1777
|
}
|
|
1850
1778
|
ngOnInit() {
|
|
@@ -1876,7 +1804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1876
1804
|
InputGroup,
|
|
1877
1805
|
Message,
|
|
1878
1806
|
Textarea,
|
|
1879
|
-
Button
|
|
1807
|
+
Button,
|
|
1880
1808
|
], template: "<div class=\"rtsee-presentation-manage-story-slide\">\n <div class=\"rtsee-manage-story-slide-info rtsee-form-container\">\n <div class=\"rtsee-manage-story-image\">\n <rtsee-image-uploader [imageUploader]=\"manageSlide.imageUploader\"\n ></rtsee-image-uploader>\n </div>\n\n <form class=\"rtsee-story-form rtsee-form\"\n [formGroup]=\"slideForm\"\n (ngSubmit)=\"submit()\"\n >\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"textField\"\n id=\"rtsee-story-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"textField.invalid && textField.touched\"\n ></textarea>\n <label for=\"rtsee-story-description-field\">Text</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (textField.hasError('required') && textField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageSlide.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageSlide.cancel()\"\n [disabled]=\"manageSlide.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
1881
1809
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageSlide: [{
|
|
1882
1810
|
type: Input
|
|
@@ -1890,19 +1818,19 @@ class ManageStoryComponent {
|
|
|
1890
1818
|
validators: [
|
|
1891
1819
|
Validators.required,
|
|
1892
1820
|
Validators.minLength(3),
|
|
1893
|
-
Validators.maxLength(131)
|
|
1894
|
-
]
|
|
1821
|
+
Validators.maxLength(131),
|
|
1822
|
+
],
|
|
1895
1823
|
}),
|
|
1896
1824
|
description: this.formBuilder.control('', {
|
|
1897
1825
|
validators: [
|
|
1898
1826
|
Validators.required,
|
|
1899
1827
|
Validators.minLength(6),
|
|
1900
|
-
Validators.maxLength(244)
|
|
1901
|
-
]
|
|
1828
|
+
Validators.maxLength(244),
|
|
1829
|
+
],
|
|
1902
1830
|
}),
|
|
1903
1831
|
averageReadTime: this.formBuilder.control(0),
|
|
1904
1832
|
isPublished: this.formBuilder.control(false),
|
|
1905
|
-
isDiscussable: this.formBuilder.control(false)
|
|
1833
|
+
isDiscussable: this.formBuilder.control(false),
|
|
1906
1834
|
});
|
|
1907
1835
|
}
|
|
1908
1836
|
submit() {
|
|
@@ -1912,7 +1840,7 @@ class ManageStoryComponent {
|
|
|
1912
1840
|
description: this.descriptionField.value,
|
|
1913
1841
|
averageReadTime: this.averageReadTimeField.value,
|
|
1914
1842
|
commentsEnabled: this.isDiscussableField.value,
|
|
1915
|
-
isPublished: this.isPublishedField.value
|
|
1843
|
+
isPublished: this.isPublishedField.value,
|
|
1916
1844
|
});
|
|
1917
1845
|
}
|
|
1918
1846
|
else {
|
|
@@ -1971,7 +1899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1971
1899
|
ManageSlidesComponent,
|
|
1972
1900
|
ManageSlideComponent,
|
|
1973
1901
|
Divider,
|
|
1974
|
-
ToggleSwitch
|
|
1902
|
+
ToggleSwitch,
|
|
1975
1903
|
], template: "<div class=\"rtsee-manage-story\">\n @if (!manageStory.manageSlides.selectedSlide) {\n <div class=\"rtsee-manage-story-info rtsee-form-container\">\n <div class=\"rtsee-manage-story-image\">\n <rtsee-image-uploader [imageUploader]=\"manageStory.imageUploader\"\n ></rtsee-image-uploader>\n </div>\n <form class=\"rtsee-story-form rtsee-form\"\n [formGroup]=\"storyForm\"\n (ngSubmit)=\"submit()\"\n >\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"sign-up-email\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <rtsee-autocomplete [config]=\"manageStory.categoriesMultiselect\"></rtsee-autocomplete>\n <rtsee-autocomplete [config]=\"manageStory.labelsMultiselect\"></rtsee-autocomplete>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-input-number [formControl]=\"averageReadTimeField\"\n id=\"rtsee-story-average-read-time\"\n mode=\"decimal\"\n [min]=\"2\"\n [max]=\"10000\"\n />\n <label for=\"rtsee-story-average-read-time\">Average Read Time</label>\n </p-floatlabel>\n </p-inputgroup>\n <div class=\"rtsee-form-field-container\">\n <p>Published</p>\n <p-toggleswitch name=\"publishing\" formControlName=\"isPublished\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Enable Comments</p>\n <p-toggleswitch name=\"publishing\" formControlName=\"isDiscussable\"/>\n </div>\n </div>\n <p-divider />\n <div class=\"rtsee-story-slides-wrapper\">\n <rtsee-manage-slides [manageSlides]=\"manageStory.manageSlides\"></rtsee-manage-slides>\n </div>\n <p-divider />\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageStory.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageStory.cancel()\"\n [disabled]=\"manageStory.saveInProgress\"\n />\n </form>\n </div>\n }\n @if (manageStory.manageSlides.selectedSlide) {\n <div class=\"rtsee-manage-story-slide-wrapper\">\n <rtsee-manage-slide [manageSlide]=\"manageStory.manageSlides.selectedSlide\"\n ></rtsee-manage-slide>\n </div>\n }\n</div>\n" }]
|
|
1976
1904
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageStory: [{
|
|
1977
1905
|
type: Input
|
|
@@ -1986,12 +1914,7 @@ class ManageStoriesComponent {
|
|
|
1986
1914
|
}
|
|
1987
1915
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageStoriesComponent, decorators: [{
|
|
1988
1916
|
type: Component,
|
|
1989
|
-
args: [{ selector: 'rtsee-manage-stories', imports: [
|
|
1990
|
-
ManageStoryComponent,
|
|
1991
|
-
Button,
|
|
1992
|
-
OrderList,
|
|
1993
|
-
NgClass
|
|
1994
|
-
], template: "<div class=\"rtsee-manage-stories\">\n <div class=\"rtsee-manage-stories-header\">\n @if (!manageStories.selectedStory) {\n <p-button (click)=\"manageStories.selectNewStory()\"\n label=\"Create A New Story\"\n ></p-button>\n }\n </div>\n @if (manageStories.selectedStory) {\n <div class=\"rtsee-manage-story-container\">\n <rtsee-manage-story [manageStory]=\"manageStories.selectedStory\"\n ></rtsee-manage-story>\n </div>\n }\n @if (!manageStories.selectedStory) {\n <div class=\"rtsee-manage-stories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageStories.stories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n [scrollHeight]=\"'40rem'\"\n class=\"rtsee-ordered-list-inner\"\n (onReorder)=\"manageStories.onReorder()\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-stories-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-stories-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-stories-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n >{{ option.name }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n <p-button label=\"Delete\"\n [severity]=\"'warn'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n }\n</div>\n" }]
|
|
1917
|
+
args: [{ selector: 'rtsee-manage-stories', imports: [ManageStoryComponent, Button, OrderList, NgClass], template: "<div class=\"rtsee-manage-stories\">\n <div class=\"rtsee-manage-stories-header\">\n @if (!manageStories.selectedStory) {\n <p-button (click)=\"manageStories.selectNewStory()\"\n label=\"Create A New Story\"\n ></p-button>\n }\n </div>\n @if (manageStories.selectedStory) {\n <div class=\"rtsee-manage-story-container\">\n <rtsee-manage-story [manageStory]=\"manageStories.selectedStory\"\n ></rtsee-manage-story>\n </div>\n }\n @if (!manageStories.selectedStory) {\n <div class=\"rtsee-manage-stories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageStories.stories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n [scrollHeight]=\"'40rem'\"\n class=\"rtsee-ordered-list-inner\"\n (onReorder)=\"manageStories.onReorder()\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-stories-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-stories-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-stories-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n >{{ option.name }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n <p-button label=\"Delete\"\n [severity]=\"'warn'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n }\n</div>\n" }]
|
|
1995
1918
|
}], propDecorators: { manageStories: [{
|
|
1996
1919
|
type: Input
|
|
1997
1920
|
}] } });
|
|
@@ -2004,16 +1927,16 @@ class ManageCategoryComponent {
|
|
|
2004
1927
|
validators: [
|
|
2005
1928
|
Validators.required,
|
|
2006
1929
|
Validators.minLength(3),
|
|
2007
|
-
Validators.maxLength(131)
|
|
2008
|
-
]
|
|
1930
|
+
Validators.maxLength(131),
|
|
1931
|
+
],
|
|
2009
1932
|
}),
|
|
2010
1933
|
description: this.formBuilder.control('', {
|
|
2011
1934
|
validators: [
|
|
2012
1935
|
Validators.required,
|
|
2013
1936
|
Validators.minLength(6),
|
|
2014
|
-
Validators.maxLength(244)
|
|
2015
|
-
]
|
|
2016
|
-
})
|
|
1937
|
+
Validators.maxLength(244),
|
|
1938
|
+
],
|
|
1939
|
+
}),
|
|
2017
1940
|
});
|
|
2018
1941
|
}
|
|
2019
1942
|
ngOnInit() {
|
|
@@ -2024,7 +1947,7 @@ class ManageCategoryComponent {
|
|
|
2024
1947
|
if (this.categoryForm.valid) {
|
|
2025
1948
|
void this.manageCategory.save({
|
|
2026
1949
|
name: this.nameField.value,
|
|
2027
|
-
description: this.descriptionField.value
|
|
1950
|
+
description: this.descriptionField.value,
|
|
2028
1951
|
});
|
|
2029
1952
|
}
|
|
2030
1953
|
else {
|
|
@@ -2050,7 +1973,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2050
1973
|
InputText,
|
|
2051
1974
|
Message,
|
|
2052
1975
|
Textarea,
|
|
2053
|
-
ReactiveFormsModule
|
|
1976
|
+
ReactiveFormsModule,
|
|
2054
1977
|
], template: "<div class=\"rtsee-manage-story-category\">\n <div class=\"rtsee-manage-category-info rtsee-form-container\">\n <form class=\"rtsee-story-form rtsee-form\"\n [formGroup]=\"categoryForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"sign-up-email\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageCategory.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageCategory.cancel()\"\n [disabled]=\"manageCategory.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
2055
1978
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageCategory: [{
|
|
2056
1979
|
type: Input
|
|
@@ -2065,10 +1988,7 @@ class ManageCategoriesComponent {
|
|
|
2065
1988
|
}
|
|
2066
1989
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageCategoriesComponent, decorators: [{
|
|
2067
1990
|
type: Component,
|
|
2068
|
-
args: [{ selector: 'rtsee-manage-categories', imports: [
|
|
2069
|
-
Button,
|
|
2070
|
-
ManageCategoryComponent
|
|
2071
|
-
], template: "<div class=\"rtsee-manage-stories-categories\">\n <div class=\"rtsee-manage-stories-categories-header\">\n @if (!manageCategories.selectedCategory) {\n <p-button (click)=\"manageCategories.selectNewCategory()\"\n label=\"Create A New Category\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-categories-body\">\n @if (manageCategories.selectedCategory) {\n <rtsee-manage-category [manageCategory]=\"manageCategories.selectedCategory\"\n ></rtsee-manage-category>\n }\n @if (!manageCategories.selectedCategory) {\n @for (category of manageCategories.categories; track category.id) {\n <p (click)=\"manageCategories.selectCategory(category.id)\">{{category.name}}</p>\n }\n }\n </div>\n</div>\n" }]
|
|
1991
|
+
args: [{ selector: 'rtsee-manage-categories', imports: [Button, ManageCategoryComponent], template: "<div class=\"rtsee-manage-stories-categories\">\n <div class=\"rtsee-manage-stories-categories-header\">\n @if (!manageCategories.selectedCategory) {\n <p-button (click)=\"manageCategories.selectNewCategory()\"\n label=\"Create A New Category\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-categories-body\">\n @if (manageCategories.selectedCategory) {\n <rtsee-manage-category [manageCategory]=\"manageCategories.selectedCategory\"\n ></rtsee-manage-category>\n }\n @if (!manageCategories.selectedCategory) {\n @for (category of manageCategories.categories; track category.id) {\n <p (click)=\"manageCategories.selectCategory(category.id)\">{{category.name}}</p>\n }\n }\n </div>\n</div>\n" }]
|
|
2072
1992
|
}], propDecorators: { manageCategories: [{
|
|
2073
1993
|
type: Input
|
|
2074
1994
|
}] } });
|
|
@@ -2081,23 +2001,23 @@ class ManageLabelComponent {
|
|
|
2081
2001
|
validators: [
|
|
2082
2002
|
Validators.required,
|
|
2083
2003
|
Validators.minLength(3),
|
|
2084
|
-
Validators.maxLength(131)
|
|
2085
|
-
]
|
|
2004
|
+
Validators.maxLength(131),
|
|
2005
|
+
],
|
|
2086
2006
|
}),
|
|
2087
2007
|
description: this.formBuilder.control('', {
|
|
2088
2008
|
validators: [
|
|
2089
2009
|
Validators.required,
|
|
2090
2010
|
Validators.minLength(6),
|
|
2091
|
-
Validators.maxLength(244)
|
|
2092
|
-
]
|
|
2011
|
+
Validators.maxLength(244),
|
|
2012
|
+
],
|
|
2093
2013
|
}),
|
|
2094
2014
|
symbol: this.formBuilder.control('', {
|
|
2095
2015
|
validators: [
|
|
2096
2016
|
Validators.required,
|
|
2097
2017
|
Validators.minLength(1),
|
|
2098
|
-
Validators.maxLength(244)
|
|
2099
|
-
]
|
|
2100
|
-
})
|
|
2018
|
+
Validators.maxLength(244),
|
|
2019
|
+
],
|
|
2020
|
+
}),
|
|
2101
2021
|
});
|
|
2102
2022
|
}
|
|
2103
2023
|
ngOnInit() {
|
|
@@ -2140,7 +2060,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2140
2060
|
Message,
|
|
2141
2061
|
Textarea,
|
|
2142
2062
|
ReactiveFormsModule,
|
|
2143
|
-
ColorPicker
|
|
2063
|
+
ColorPicker,
|
|
2144
2064
|
], template: "<div class=\"rtsee-manage-story-label\">\n <div class=\"rtsee-manage-story-label-info rtsee-form-container\">\n <form class=\"rtsee-story-label-form rtsee-form\"\n [formGroup]=\"labelForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-symbol-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"symbolField\"\n [class.p-invalid]=\"symbolField.invalid && symbolField.touched\"\n />\n <label for=\"rtsee-story-label-symbol-field\">Symbol</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (symbolField.hasError('required') && symbolField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Symbol is required, pick a smile, dummy</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-colorPicker [(ngModel)]=\"manageLabel.label.color\"/>\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageLabel.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageLabel.cancel()\"\n [disabled]=\"manageLabel.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
2145
2065
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageLabel: [{
|
|
2146
2066
|
type: Input
|
|
@@ -2155,10 +2075,7 @@ class ManageLabelsComponent {
|
|
|
2155
2075
|
}
|
|
2156
2076
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageLabelsComponent, decorators: [{
|
|
2157
2077
|
type: Component,
|
|
2158
|
-
args: [{ selector: 'rtsee-manage-labels', imports: [
|
|
2159
|
-
Button,
|
|
2160
|
-
ManageLabelComponent
|
|
2161
|
-
], template: "<div class=\"rtsee-manage-stories-labels\">\n <div class=\"rtsee-manage-stories-labels-header\">\n @if (!manageLabels.selectedLabel) {\n <p-button (click)=\"manageLabels.selectNewLabel()\"\n label=\"Create A New Label\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-labels-body\">\n @if (manageLabels.selectedLabel) {\n <rtsee-manage-label [manageLabel]=\"manageLabels.selectedLabel\"\n ></rtsee-manage-label>\n }\n @if (!manageLabels.selectedLabel) {\n @for (label of manageLabels.labels; track label.id) {\n <p (click)=\"manageLabels.selectLabel(label.id)\">{{label.name}}</p>\n }\n }\n </div>\n</div>\n" }]
|
|
2078
|
+
args: [{ selector: 'rtsee-manage-labels', imports: [Button, ManageLabelComponent], template: "<div class=\"rtsee-manage-stories-labels\">\n <div class=\"rtsee-manage-stories-labels-header\">\n @if (!manageLabels.selectedLabel) {\n <p-button (click)=\"manageLabels.selectNewLabel()\"\n label=\"Create A New Label\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-labels-body\">\n @if (manageLabels.selectedLabel) {\n <rtsee-manage-label [manageLabel]=\"manageLabels.selectedLabel\"\n ></rtsee-manage-label>\n }\n @if (!manageLabels.selectedLabel) {\n @for (label of manageLabels.labels; track label.id) {\n <p (click)=\"manageLabels.selectLabel(label.id)\">{{label.name}}</p>\n }\n }\n </div>\n</div>\n" }]
|
|
2162
2079
|
}], propDecorators: { manageLabels: [{
|
|
2163
2080
|
type: Input
|
|
2164
2081
|
}] } });
|
|
@@ -2171,23 +2088,23 @@ class ManageTopicComponent {
|
|
|
2171
2088
|
validators: [
|
|
2172
2089
|
Validators.required,
|
|
2173
2090
|
Validators.minLength(3),
|
|
2174
|
-
Validators.maxLength(131)
|
|
2175
|
-
]
|
|
2091
|
+
Validators.maxLength(131),
|
|
2092
|
+
],
|
|
2176
2093
|
}),
|
|
2177
2094
|
key: this.formBuilder.control('', {
|
|
2178
2095
|
validators: [
|
|
2179
2096
|
Validators.required,
|
|
2180
2097
|
Validators.minLength(1),
|
|
2181
|
-
Validators.maxLength(244)
|
|
2182
|
-
]
|
|
2098
|
+
Validators.maxLength(244),
|
|
2099
|
+
],
|
|
2183
2100
|
}),
|
|
2184
2101
|
description: this.formBuilder.control('', {
|
|
2185
2102
|
validators: [
|
|
2186
2103
|
Validators.required,
|
|
2187
2104
|
Validators.minLength(6),
|
|
2188
|
-
Validators.maxLength(244)
|
|
2189
|
-
]
|
|
2190
|
-
})
|
|
2105
|
+
Validators.maxLength(244),
|
|
2106
|
+
],
|
|
2107
|
+
}),
|
|
2191
2108
|
});
|
|
2192
2109
|
}
|
|
2193
2110
|
ngOnInit() {
|
|
@@ -2230,7 +2147,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2230
2147
|
ReactiveFormsModule,
|
|
2231
2148
|
Textarea,
|
|
2232
2149
|
AutocompleteComponent,
|
|
2233
|
-
OrderList
|
|
2150
|
+
OrderList,
|
|
2234
2151
|
], template: "<div class=\"rtsee-manage-story-topic\">\n <div class=\"rtsee-manage-story-topic-info rtsee-form-container\">\n <form class=\"rtsee-story-topic-form rtsee-form\"\n [formGroup]=\"topicForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-topic-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-topic-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-topic-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-topic-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-topic-key-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"keyField\"\n [class.p-invalid]=\"keyField.invalid && keyField.touched\"\n />\n <label for=\"rtsee-story-topic-key-field\">Key</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (keyField.hasError('required') && keyField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Key is required, pick a smile, dummy</p-message>\n }\n </div>\n <rtsee-autocomplete [config]=\"manageTopic.categoriesMultiselect\"></rtsee-autocomplete>\n <div class=\"rtsee-manage-story-topic-categories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageTopic.topic.categories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageTopic.onReorder($event)\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <p>{{option.name}}</p>\n <p-button label=\"Delete\" (click)=\"manageTopic.removeCategory(option.id)\"></p-button>\n </ng-template>\n </p-orderList>\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTopic.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageTopic.cancel()\"\n [disabled]=\"manageTopic.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
2235
2152
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageTopic: [{
|
|
2236
2153
|
type: Input
|
|
@@ -2245,10 +2162,7 @@ class ManageTopicsComponent {
|
|
|
2245
2162
|
}
|
|
2246
2163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageTopicsComponent, decorators: [{
|
|
2247
2164
|
type: Component,
|
|
2248
|
-
args: [{ selector: 'rtsee-manage-topics', imports: [
|
|
2249
|
-
Button,
|
|
2250
|
-
ManageTopicComponent
|
|
2251
|
-
], template: "<div class=\"rtsee-manage-stories-topics\">\n <div class=\"rtsee-manage-stories-topics-header\">\n @if (!manageTopics.selectedTopic) {\n <p-button (click)=\"manageTopics.selectNewTopic()\"\n label=\"Create A New Topic\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-topics-body\">\n @if (manageTopics.selectedTopic) {\n <rtsee-manage-topic [manageTopic]=\"manageTopics.selectedTopic\"\n ></rtsee-manage-topic>\n }\n @if (!manageTopics.selectedTopic) {\n @for (topic of manageTopics.topics; track topic.id) {\n <p (click)=\"manageTopics.selectTopic(topic.id)\">{{topic.name}}</p>\n }\n }\n </div>\n</div>\n" }]
|
|
2165
|
+
args: [{ selector: 'rtsee-manage-topics', imports: [Button, ManageTopicComponent], template: "<div class=\"rtsee-manage-stories-topics\">\n <div class=\"rtsee-manage-stories-topics-header\">\n @if (!manageTopics.selectedTopic) {\n <p-button (click)=\"manageTopics.selectNewTopic()\"\n label=\"Create A New Topic\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-topics-body\">\n @if (manageTopics.selectedTopic) {\n <rtsee-manage-topic [manageTopic]=\"manageTopics.selectedTopic\"\n ></rtsee-manage-topic>\n }\n @if (!manageTopics.selectedTopic) {\n @for (topic of manageTopics.topics; track topic.id) {\n <p (click)=\"manageTopics.selectTopic(topic.id)\">{{topic.name}}</p>\n }\n }\n </div>\n</div>\n" }]
|
|
2252
2166
|
}], propDecorators: { manageTopics: [{
|
|
2253
2167
|
type: Input
|
|
2254
2168
|
}] } });
|
|
@@ -2270,7 +2184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2270
2184
|
Button,
|
|
2271
2185
|
Chip,
|
|
2272
2186
|
ManageLabelsComponent,
|
|
2273
|
-
ManageTopicsComponent
|
|
2187
|
+
ManageTopicsComponent,
|
|
2274
2188
|
], template: "<div class=\"rtsee-presentations-dashboard\">\n <div class=\"rtsee-presentations-dashboard-header\">\n <p-chip label=\"Presentation Dashboard\" />\n <p-button label=\"Close\"\n (click)=\"dashboard.onCloseDashboardClicked()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"manage-stories-container\">\n <p-tabs lazy value=\"stories\">\n <p-tablist>\n <p-tab value=\"stories\">Stories</p-tab>\n <p-tab value=\"categories\">Categories</p-tab>\n <p-tab value=\"labels\">Labels</p-tab>\n <p-tab value=\"topics\">Topics</p-tab>\n </p-tablist>\n <p-tabpanels>\n <p-tabpanel value=\"stories\">\n <ng-template #content>\n <rtsee-manage-stories [manageStories]=\"dashboard.manageStories\"></rtsee-manage-stories>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"categories\">\n <ng-template #content>\n <rtsee-manage-categories [manageCategories]=\"dashboard.manageCategories\"></rtsee-manage-categories>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"labels\">\n <ng-template #content>\n <rtsee-manage-labels [manageLabels]=\"dashboard.manageLabels\"></rtsee-manage-labels>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"topics\">\n <ng-template #content>\n <rtsee-manage-topics [manageTopics]=\"dashboard.manageTopics\"></rtsee-manage-topics>\n </ng-template>\n </p-tabpanel>\n </p-tabpanels>\n </p-tabs>\n </div>\n</div>\n" }]
|
|
2275
2189
|
}], propDecorators: { dashboard: [{
|
|
2276
2190
|
type: Input
|
|
@@ -2295,7 +2209,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2295
2209
|
Message,
|
|
2296
2210
|
Tag,
|
|
2297
2211
|
Listbox,
|
|
2298
|
-
JoinCallComponent
|
|
2212
|
+
JoinCallComponent,
|
|
2299
2213
|
], template: "<div class=\"rtsee-presentation-settings\">\n <div class=\"rtsee-presentation-settings-header\">\n <p-chip label=\"Settings\" />\n <p-button label=\"Close\"\n (click)=\"settings.collapse()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"rtsee-presentation-rooms\">\n <p-fieldset legend=\"Rooms\">\n <p-listbox [options]=\"presentation.rooms\"\n [(ngModel)]=\"presentation.selectedRoom\"\n (onChange)=\"presentation.setActiveRoom()\"\n class=\"rtsee-presentation-settings-rooms-list\"\n >\n <ng-template #item let-room>\n <div class=\"rtsee-presentation-settings-rooms-list-item\">\n\n <img [src]=\"room.imageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\"\n class=\"rtsee-presentation-settings-rooms-list-item-image\" />\n <div>{{ room.name }}</div>\n </div>\n </ng-template>\n </p-listbox>\n @if (presentation.selectedRoom) {\n <rtsee-join-call [room]=\"presentation.selectedRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n }\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-sound-settings\">\n <p-fieldset legend=\"Volume\" class=\"rtsee-presentation-sound-settings-fieldset\">\n <div class=\"rtsee-presentation-sound-settings-inner\">\n <div class=\"rtsee-presentation-sound-settings-inner-left\">\n <p-slider [(ngModel)]=\"settings.volume\"\n (onChange)=\"settings.setVolume(settings.volume)\"\n />\n </div>\n <div class=\"rtsee-presentation-sound-settings-inner-right\">\n <p-tag severity=\"info\"\n class=\"rtsee-presentation-sound-value-label\"\n [icon]=\"settings.volume ? 'pi pi-volume-up' : 'pi pi-volume-off'\"\n [value]=\"settings.volume.toString()\"\n [rounded]=\"true\" />\n </div>\n </div>\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-font-size-settings\">\n <p-fieldset legend=\"Font Size\">\n <div class=\"rtsee-presentation-font-size-range\">\n <p-slider [(ngModel)]=\"settings.fontSizeOption\"\n (onChange)=\"settings.setFontSize(settings.fontSizeOption)\"\n [min]=\"1\"\n [max]=\"10\"\n />\n </div>\n <p-message severity=\"secondary\" class=\"rtsee-presentation-font-size-example\">\n <span [style.font-size]=\"settings.fontSize + 'rem'\">A long time ago in a galaxy far, far away...</span>\n </p-message>\n </p-fieldset>\n </div>\n</div>\n" }]
|
|
2300
2214
|
}], propDecorators: { settings: [{
|
|
2301
2215
|
type: Input
|
|
@@ -2303,18 +2217,282 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2303
2217
|
type: Input
|
|
2304
2218
|
}] } });
|
|
2305
2219
|
|
|
2220
|
+
class RtseeEntityCommentsComponent {
|
|
2221
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityCommentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2222
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEntityCommentsComponent, isStandalone: true, selector: "rtsee-entity-comments", inputs: { messenger: "messenger", chat: "chat", entity: "entity" }, ngImport: i0, template: "<div class=\"rtsee-entity-comments\">\n @if (messenger && chat) {\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"chat\"\n [entity]=\"entity\"\n ></rtsee-chat>\n }\n</div>\n", dependencies: [{ kind: "component", type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "chatData", "entity", "messenger"] }] }); }
|
|
2223
|
+
}
|
|
2224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityCommentsComponent, decorators: [{
|
|
2225
|
+
type: Component,
|
|
2226
|
+
args: [{ selector: 'rtsee-entity-comments', imports: [ChatComponent], template: "<div class=\"rtsee-entity-comments\">\n @if (messenger && chat) {\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"chat\"\n [entity]=\"entity\"\n ></rtsee-chat>\n }\n</div>\n" }]
|
|
2227
|
+
}], propDecorators: { messenger: [{
|
|
2228
|
+
type: Input
|
|
2229
|
+
}], chat: [{
|
|
2230
|
+
type: Input
|
|
2231
|
+
}], entity: [{
|
|
2232
|
+
type: Input
|
|
2233
|
+
}] } });
|
|
2234
|
+
|
|
2235
|
+
class RtseeEntityTagsComponent {
|
|
2236
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityTagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2237
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEntityTagsComponent, isStandalone: true, selector: "rtsee-entity-tags", inputs: { entity: "entity" }, ngImport: i0, template: "<div class=\"rtsee-entity-tags\">\n @if (entity && entity.tags?.length) {\n <div class=\"rtsee-entity-tags-list\">\n @for (tag of entity.tags; track tag.id) {\n <p-chip class=\"rtsee-entity-tag\">\n <span class=\"rtsee-entity-tag-right\"\n >{{tag.name}}</span>\n </p-chip>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "disabled", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }] }); }
|
|
2238
|
+
}
|
|
2239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityTagsComponent, decorators: [{
|
|
2240
|
+
type: Component,
|
|
2241
|
+
args: [{ selector: 'rtsee-entity-tags', imports: [Chip], template: "<div class=\"rtsee-entity-tags\">\n @if (entity && entity.tags?.length) {\n <div class=\"rtsee-entity-tags-list\">\n @for (tag of entity.tags; track tag.id) {\n <p-chip class=\"rtsee-entity-tag\">\n <span class=\"rtsee-entity-tag-right\"\n >{{tag.name}}</span>\n </p-chip>\n }\n </div>\n }\n</div>\n" }]
|
|
2242
|
+
}], propDecorators: { entity: [{
|
|
2243
|
+
type: Input
|
|
2244
|
+
}] } });
|
|
2245
|
+
|
|
2246
|
+
class RateInputComponent {
|
|
2247
|
+
constructor() {
|
|
2248
|
+
this.sendRateForm = new FormGroup({
|
|
2249
|
+
comment: new FormControl(''),
|
|
2250
|
+
});
|
|
2251
|
+
this.showMissingRateError = false;
|
|
2252
|
+
}
|
|
2253
|
+
set config(value) {
|
|
2254
|
+
this._config = value;
|
|
2255
|
+
this.updateCommentControl();
|
|
2256
|
+
}
|
|
2257
|
+
get config() {
|
|
2258
|
+
return this._config;
|
|
2259
|
+
}
|
|
2260
|
+
ngOnInit() {
|
|
2261
|
+
this.updateCommentControl();
|
|
2262
|
+
}
|
|
2263
|
+
ngOnDestroy() {
|
|
2264
|
+
this.commentSubscription?.unsubscribe();
|
|
2265
|
+
}
|
|
2266
|
+
updateCommentControl() {
|
|
2267
|
+
this.commentSubscription?.unsubscribe();
|
|
2268
|
+
if (this._config && this._config.rate) {
|
|
2269
|
+
this.sendRateForm
|
|
2270
|
+
.get('comment')
|
|
2271
|
+
?.setValue(this._config.rate.text || '', { emitEvent: false });
|
|
2272
|
+
this.commentSubscription = this.sendRateForm
|
|
2273
|
+
.get('comment')
|
|
2274
|
+
?.valueChanges.subscribe((value) => {
|
|
2275
|
+
if (this._config.rate) {
|
|
2276
|
+
this._config.rate.text = value || '';
|
|
2277
|
+
}
|
|
2278
|
+
});
|
|
2279
|
+
}
|
|
2280
|
+
}
|
|
2281
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2282
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RateInputComponent, isStandalone: true, selector: "rtsee-rate-input", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"rtsee-rate-input\">\n <div class=\"rtsee-rate-input-header\">\n <h3 class=\"rtsee-rate-input-name\">{{ config.name }}</h3>\n @if (config.description) {\n <p class=\"rtsee-rate-input-description\">{{ config.description }}</p>\n }\n </div>\n <div class=\"rtsee-rate-form-container\">\n <form [formGroup]=\"sendRateForm\" class=\"rtsee-rate-form\">\n <textarea\n [invalid]=\"false\"\n [autoResize]=\"true\"\n formControlName=\"comment\"\n pTextarea\n placeholder=\"Your comment here...\"\n class=\"rtsee-rate-comment-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <div class=\"rtsee-rate-select-container\">\n <rtsee-rating [config]=\"config\"></rtsee-rating>\n @if (!config.rate?.value && showMissingRateError) {\n <p-message severity=\"error\">Please add your rate!</p-message>\n }\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "component", type: RatingComponent, selector: "rtsee-rating", inputs: ["config", "rate"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }] }); }
|
|
2283
|
+
}
|
|
2284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RateInputComponent, decorators: [{
|
|
2285
|
+
type: Component,
|
|
2286
|
+
args: [{ selector: 'rtsee-rate-input', imports: [ReactiveFormsModule, Textarea, RatingComponent, Message], standalone: true, template: "<div class=\"rtsee-rate-input\">\n <div class=\"rtsee-rate-input-header\">\n <h3 class=\"rtsee-rate-input-name\">{{ config.name }}</h3>\n @if (config.description) {\n <p class=\"rtsee-rate-input-description\">{{ config.description }}</p>\n }\n </div>\n <div class=\"rtsee-rate-form-container\">\n <form [formGroup]=\"sendRateForm\" class=\"rtsee-rate-form\">\n <textarea\n [invalid]=\"false\"\n [autoResize]=\"true\"\n formControlName=\"comment\"\n pTextarea\n placeholder=\"Your comment here...\"\n class=\"rtsee-rate-comment-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <div class=\"rtsee-rate-select-container\">\n <rtsee-rating [config]=\"config\"></rtsee-rating>\n @if (!config.rate?.value && showMissingRateError) {\n <p-message severity=\"error\">Please add your rate!</p-message>\n }\n </div>\n</div>\n" }]
|
|
2287
|
+
}], propDecorators: { config: [{
|
|
2288
|
+
type: Input
|
|
2289
|
+
}] } });
|
|
2290
|
+
|
|
2291
|
+
class RateItemComponent {
|
|
2292
|
+
constructor() {
|
|
2293
|
+
this.showActions = false;
|
|
2294
|
+
this.edit = new EventEmitter();
|
|
2295
|
+
this.delete = new EventEmitter();
|
|
2296
|
+
}
|
|
2297
|
+
onEdit(event) {
|
|
2298
|
+
event.stopPropagation();
|
|
2299
|
+
this.edit.emit();
|
|
2300
|
+
}
|
|
2301
|
+
onDelete(event) {
|
|
2302
|
+
event.stopPropagation();
|
|
2303
|
+
this.delete.emit();
|
|
2304
|
+
}
|
|
2305
|
+
getRatingConfigName(configId) {
|
|
2306
|
+
if (!this.rater) {
|
|
2307
|
+
return '';
|
|
2308
|
+
}
|
|
2309
|
+
const config = this.rater.ratingConfigurations.find((c) => c.id === configId);
|
|
2310
|
+
return config ? config.name : '';
|
|
2311
|
+
}
|
|
2312
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RateItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2313
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RateItemComponent, isStandalone: true, selector: "rtsee-rate-item", inputs: { group: "group", rater: "rater", showActions: "showActions" }, outputs: { edit: "edit", delete: "delete" }, ngImport: i0, template: "<div class=\"rtsee-rates-group-item\">\n <div class=\"rtsee-rates-group-header\">\n <div class=\"rtsee-rates-group-user-info\">\n @if (group.peer?.imageUrl) {\n <img\n class=\"rtsee-rates-group-avatar\"\n [src]=\"group.peer.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rates-group-avatar-fallback\">\n {{ (group.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <span class=\"rtsee-rates-group-peer-name\">{{\n group.peer?.name || group.peerId\n }}</span>\n </div>\n\n <div class=\"rtsee-rates-group-right-header\">\n <span class=\"rtsee-rates-group-date\">{{\n group.createdAt | date: \"short\"\n }}</span>\n\n @if (showActions) {\n <div class=\"rtsee-rates-group-actions\">\n <p-button\n (click)=\"onEdit($event)\"\n [severity]=\"'secondary'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-edit\"\n >\n <span class=\"pi pi-pencil\"></span>\n </p-button>\n <p-button\n (click)=\"onDelete($event)\"\n [severity]=\"'danger'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-delete\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n </div>\n }\n </div>\n </div>\n <div class=\"rtsee-rates-group-body\">\n @for (rate of group.rates; track rate.id) {\n <div class=\"rtsee-rates-group-rate-item-container\">\n <div class=\"rtsee-rates-group-rate-item\">\n <span class=\"rtsee-rates-group-rate-config-name\">{{\n getRatingConfigName(rate.configurationId)\n }}</span>\n <rtsee-rating [rate]=\"rate\"></rtsee-rating>\n </div>\n @if (rate.text) {\n <p class=\"rtsee-rates-group-rate-comment\">\"{{ rate.text }}\"</p>\n }\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: RatingComponent, selector: "rtsee-rating", inputs: ["config", "rate"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: DatePipe, name: "date" }] }); }
|
|
2314
|
+
}
|
|
2315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RateItemComponent, decorators: [{
|
|
2316
|
+
type: Component,
|
|
2317
|
+
args: [{ selector: 'rtsee-rate-item', imports: [RatingComponent, DatePipe, Button], template: "<div class=\"rtsee-rates-group-item\">\n <div class=\"rtsee-rates-group-header\">\n <div class=\"rtsee-rates-group-user-info\">\n @if (group.peer?.imageUrl) {\n <img\n class=\"rtsee-rates-group-avatar\"\n [src]=\"group.peer.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rates-group-avatar-fallback\">\n {{ (group.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <span class=\"rtsee-rates-group-peer-name\">{{\n group.peer?.name || group.peerId\n }}</span>\n </div>\n\n <div class=\"rtsee-rates-group-right-header\">\n <span class=\"rtsee-rates-group-date\">{{\n group.createdAt | date: \"short\"\n }}</span>\n\n @if (showActions) {\n <div class=\"rtsee-rates-group-actions\">\n <p-button\n (click)=\"onEdit($event)\"\n [severity]=\"'secondary'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-edit\"\n >\n <span class=\"pi pi-pencil\"></span>\n </p-button>\n <p-button\n (click)=\"onDelete($event)\"\n [severity]=\"'danger'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-delete\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n </div>\n }\n </div>\n </div>\n <div class=\"rtsee-rates-group-body\">\n @for (rate of group.rates; track rate.id) {\n <div class=\"rtsee-rates-group-rate-item-container\">\n <div class=\"rtsee-rates-group-rate-item\">\n <span class=\"rtsee-rates-group-rate-config-name\">{{\n getRatingConfigName(rate.configurationId)\n }}</span>\n <rtsee-rating [rate]=\"rate\"></rtsee-rating>\n </div>\n @if (rate.text) {\n <p class=\"rtsee-rates-group-rate-comment\">\"{{ rate.text }}\"</p>\n }\n </div>\n }\n </div>\n</div>\n" }]
|
|
2318
|
+
}], propDecorators: { group: [{
|
|
2319
|
+
type: Input
|
|
2320
|
+
}], rater: [{
|
|
2321
|
+
type: Input
|
|
2322
|
+
}], showActions: [{
|
|
2323
|
+
type: Input
|
|
2324
|
+
}], edit: [{
|
|
2325
|
+
type: Output
|
|
2326
|
+
}], delete: [{
|
|
2327
|
+
type: Output
|
|
2328
|
+
}] } });
|
|
2329
|
+
|
|
2330
|
+
class RaterComponent {
|
|
2331
|
+
constructor() {
|
|
2332
|
+
this.isEditing = false;
|
|
2333
|
+
}
|
|
2334
|
+
ngOnInit() {
|
|
2335
|
+
this.getRatingConfigurations()
|
|
2336
|
+
.then(() => {
|
|
2337
|
+
console.log('Getting rating configurations...');
|
|
2338
|
+
})
|
|
2339
|
+
.catch((error) => {
|
|
2340
|
+
console.error(error);
|
|
2341
|
+
});
|
|
2342
|
+
}
|
|
2343
|
+
async sendRate() {
|
|
2344
|
+
const rates = this.rater.configsWithRates
|
|
2345
|
+
.map((config) => config.rate)
|
|
2346
|
+
.filter((r) => !!r);
|
|
2347
|
+
if (this.rater.userRateGroup) {
|
|
2348
|
+
await this.rater.editRateGroup({
|
|
2349
|
+
...this.rater.userRateGroup,
|
|
2350
|
+
rates,
|
|
2351
|
+
});
|
|
2352
|
+
}
|
|
2353
|
+
else {
|
|
2354
|
+
await this.rater.createRateGroup({
|
|
2355
|
+
entityId: this.rater.entityId,
|
|
2356
|
+
peerId: this.rater.peer.clientId,
|
|
2357
|
+
rates,
|
|
2358
|
+
applicationId: this.rater.applicationId,
|
|
2359
|
+
createdAt: new Date(),
|
|
2360
|
+
peer: this.rater.peer,
|
|
2361
|
+
});
|
|
2362
|
+
}
|
|
2363
|
+
this.isEditing = false;
|
|
2364
|
+
}
|
|
2365
|
+
async deleteRate() {
|
|
2366
|
+
if (this.rater.userRateGroup) {
|
|
2367
|
+
await this.rater.deleteRateGroup(this.rater.userRateGroup.id);
|
|
2368
|
+
}
|
|
2369
|
+
}
|
|
2370
|
+
startEdit() {
|
|
2371
|
+
this.isEditing = true;
|
|
2372
|
+
}
|
|
2373
|
+
async getRatingConfigurations() {
|
|
2374
|
+
if (!this.rater || !this.entity) {
|
|
2375
|
+
console.log('No rater or entity found.');
|
|
2376
|
+
return [];
|
|
2377
|
+
}
|
|
2378
|
+
const rates = await this.rater.getRates();
|
|
2379
|
+
console.log('Rates found.', rates);
|
|
2380
|
+
return rates;
|
|
2381
|
+
}
|
|
2382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RaterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2383
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RaterComponent, isStandalone: true, selector: "rtsee-rater", inputs: { entity: "entity", rater: "rater" }, ngImport: i0, template: "<div class=\"rtsee-rater\" [ngClass]=\"{'rtsee-rater-view-mode': rater.userRateGroup && !isEditing}\">\n @if (rater.userRateGroup && !isEditing) {\n <rtsee-rate-item\n [group]=\"rater.userRateGroup\"\n [rater]=\"rater\"\n [showActions]=\"true\"\n (edit)=\"startEdit()\"\n (delete)=\"deleteRate()\"\n ></rtsee-rate-item>\n } @else {\n <div class=\"rtsee-rater-user-header\">\n @if (rater.peer?.imageUrl) {\n <img\n class=\"rtsee-rater-avatar\"\n [src]=\"rater.peer?.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rater-avatar-fallback\">\n {{ (rater.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <div class=\"rtsee-rater-user-info\">\n <span class=\"rtsee-rater-user-name\">{{\n rater.peer?.name || \"Anonymous\"\n }}</span>\n <span class=\"rtsee-rater-user-status\">Rating publicly</span>\n </div>\n </div>\n <hr class=\"rtsee-rater-divider\" />\n @for (config of rater.configsWithRates; track config.id) {\n <rtsee-rate-input [config]=\"config\"></rtsee-rate-input>\n }\n <div class=\"rtsee-rater-actions\">\n @if (rater.userRateGroup) {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'success'\"\n [label]=\"'Update'\"\n type=\"submit\"\n class=\"rtsee-rater-btn-update\"\n >\n <span class=\"pi pi-check\"></span>\n </p-button>\n <p-button\n (click)=\"deleteRate()\"\n [severity]=\"'danger'\"\n [label]=\"'Delete'\"\n class=\"rtsee-rater-btn-delete\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n } @else {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'primary'\"\n [label]=\"'Send'\"\n type=\"submit\"\n class=\"rtsee-rater-btn-send\"\n >\n <span class=\"pi pi-send\"></span>\n </p-button>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: RateInputComponent, selector: "rtsee-rate-input", inputs: ["config"] }, { kind: "component", type: RateItemComponent, selector: "rtsee-rate-item", inputs: ["group", "rater", "showActions"], outputs: ["edit", "delete"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
2384
|
+
}
|
|
2385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RaterComponent, decorators: [{
|
|
2386
|
+
type: Component,
|
|
2387
|
+
args: [{ selector: 'rtsee-rater', imports: [Button, RateInputComponent, RateItemComponent, NgClass], template: "<div class=\"rtsee-rater\" [ngClass]=\"{'rtsee-rater-view-mode': rater.userRateGroup && !isEditing}\">\n @if (rater.userRateGroup && !isEditing) {\n <rtsee-rate-item\n [group]=\"rater.userRateGroup\"\n [rater]=\"rater\"\n [showActions]=\"true\"\n (edit)=\"startEdit()\"\n (delete)=\"deleteRate()\"\n ></rtsee-rate-item>\n } @else {\n <div class=\"rtsee-rater-user-header\">\n @if (rater.peer?.imageUrl) {\n <img\n class=\"rtsee-rater-avatar\"\n [src]=\"rater.peer?.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rater-avatar-fallback\">\n {{ (rater.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <div class=\"rtsee-rater-user-info\">\n <span class=\"rtsee-rater-user-name\">{{\n rater.peer?.name || \"Anonymous\"\n }}</span>\n <span class=\"rtsee-rater-user-status\">Rating publicly</span>\n </div>\n </div>\n <hr class=\"rtsee-rater-divider\" />\n @for (config of rater.configsWithRates; track config.id) {\n <rtsee-rate-input [config]=\"config\"></rtsee-rate-input>\n }\n <div class=\"rtsee-rater-actions\">\n @if (rater.userRateGroup) {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'success'\"\n [label]=\"'Update'\"\n type=\"submit\"\n class=\"rtsee-rater-btn-update\"\n >\n <span class=\"pi pi-check\"></span>\n </p-button>\n <p-button\n (click)=\"deleteRate()\"\n [severity]=\"'danger'\"\n [label]=\"'Delete'\"\n class=\"rtsee-rater-btn-delete\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n } @else {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'primary'\"\n [label]=\"'Send'\"\n type=\"submit\"\n class=\"rtsee-rater-btn-send\"\n >\n <span class=\"pi pi-send\"></span>\n </p-button>\n }\n </div>\n }\n</div>\n" }]
|
|
2388
|
+
}], propDecorators: { entity: [{
|
|
2389
|
+
type: Input
|
|
2390
|
+
}], rater: [{
|
|
2391
|
+
type: Input
|
|
2392
|
+
}] } });
|
|
2393
|
+
|
|
2394
|
+
class RatesListComponent {
|
|
2395
|
+
ngOnInit() {
|
|
2396
|
+
if (this.rater) {
|
|
2397
|
+
this.rater
|
|
2398
|
+
.loadOtherUsersRateGroups(true)
|
|
2399
|
+
.then(() => {
|
|
2400
|
+
console.log('Other users rate groups loaded.');
|
|
2401
|
+
})
|
|
2402
|
+
.catch((err) => {
|
|
2403
|
+
console.error(err);
|
|
2404
|
+
});
|
|
2405
|
+
}
|
|
2406
|
+
}
|
|
2407
|
+
onScroll() {
|
|
2408
|
+
if (this.rater) {
|
|
2409
|
+
this.rater
|
|
2410
|
+
.loadOtherUsersRateGroups()
|
|
2411
|
+
.then(() => {
|
|
2412
|
+
console.log('More other users rate groups loaded.');
|
|
2413
|
+
})
|
|
2414
|
+
.catch((err) => {
|
|
2415
|
+
console.error(err);
|
|
2416
|
+
});
|
|
2417
|
+
}
|
|
2418
|
+
}
|
|
2419
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatesListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2420
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RatesListComponent, isStandalone: true, selector: "rtsee-rates-list", inputs: { rater: "rater", entity: "entity" }, ngImport: i0, template: "<div\n class=\"rtsee-rates-list\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n>\n @for (group of rater.otherUsersRateGroups; track group.id) {\n <rtsee-rate-item\n [group]=\"group\"\n [rater]=\"rater\"\n [showActions]=\"false\"\n ></rtsee-rate-item>\n }\n @if (rater.loadingRatesGroups) {\n <div class=\"rtsee-rates-list-loading\">Loading more...</div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: RateItemComponent, selector: "rtsee-rate-item", inputs: ["group", "rater", "showActions"], outputs: ["edit", "delete"] }] }); }
|
|
2421
|
+
}
|
|
2422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatesListComponent, decorators: [{
|
|
2423
|
+
type: Component,
|
|
2424
|
+
args: [{ selector: 'rtsee-rates-list', imports: [InfiniteScrollDirective, RateItemComponent], template: "<div\n class=\"rtsee-rates-list\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n>\n @for (group of rater.otherUsersRateGroups; track group.id) {\n <rtsee-rate-item\n [group]=\"group\"\n [rater]=\"rater\"\n [showActions]=\"false\"\n ></rtsee-rate-item>\n }\n @if (rater.loadingRatesGroups) {\n <div class=\"rtsee-rates-list-loading\">Loading more...</div>\n }\n</div>\n" }]
|
|
2425
|
+
}], propDecorators: { rater: [{
|
|
2426
|
+
type: Input
|
|
2427
|
+
}], entity: [{
|
|
2428
|
+
type: Input
|
|
2429
|
+
}] } });
|
|
2430
|
+
|
|
2431
|
+
class RatingSectionComponent {
|
|
2432
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2433
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: RatingSectionComponent, isStandalone: true, selector: "rtsee-rating-section", inputs: { rater: "rater", entity: "entity" }, ngImport: i0, template: "<div class=\"rtsee-rating-section\">\n <rtsee-rater [rater]=\"rater\"\n [entity]=\"entity\"\n ></rtsee-rater>\n <rtsee-rates-list [rater]=\"rater\" [entity]=\"entity\"></rtsee-rates-list>\n</div>\n", dependencies: [{ kind: "component", type: RaterComponent, selector: "rtsee-rater", inputs: ["entity", "rater"] }, { kind: "component", type: RatesListComponent, selector: "rtsee-rates-list", inputs: ["rater", "entity"] }] }); }
|
|
2434
|
+
}
|
|
2435
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingSectionComponent, decorators: [{
|
|
2436
|
+
type: Component,
|
|
2437
|
+
args: [{ selector: 'rtsee-rating-section', imports: [RaterComponent, RatesListComponent], template: "<div class=\"rtsee-rating-section\">\n <rtsee-rater [rater]=\"rater\"\n [entity]=\"entity\"\n ></rtsee-rater>\n <rtsee-rates-list [rater]=\"rater\" [entity]=\"entity\"></rtsee-rates-list>\n</div>\n" }]
|
|
2438
|
+
}], propDecorators: { rater: [{
|
|
2439
|
+
type: Input
|
|
2440
|
+
}], entity: [{
|
|
2441
|
+
type: Input
|
|
2442
|
+
}] } });
|
|
2443
|
+
|
|
2444
|
+
class RtseeEntityPreviewComponent {
|
|
2445
|
+
constructor() {
|
|
2446
|
+
this.rater = null;
|
|
2447
|
+
this.showRating = true;
|
|
2448
|
+
}
|
|
2449
|
+
ngOnInit() {
|
|
2450
|
+
void this.entity.reload();
|
|
2451
|
+
this.rater = new RTSeeRater({
|
|
2452
|
+
entityId: this.entity.id,
|
|
2453
|
+
entityConfigurationId: this.entity.configurationId,
|
|
2454
|
+
...this.entity.getHandlerCommonOptions(),
|
|
2455
|
+
});
|
|
2456
|
+
}
|
|
2457
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2458
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEntityPreviewComponent, isStandalone: true, selector: "rtsee-entity-preview", inputs: { entity: "entity", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-entity-preview\">\n <div class=\"rtsee-entity-preview-tags\">\n <rtsee-entity-tags [entity]=\"entity\"></rtsee-entity-tags>\n </div>\n\n @if (showRating && rater) {\n <rtsee-rating-section [entity]=\"entity\"\n [rater]=\"rater\"\n ></rtsee-rating-section>\n } @else if (!showRating && entity.comments && messenger) {\n <div class=\"rtsee-entity-preview-comments\">\n <rtsee-entity-comments [messenger]=\"messenger\"\n [chat]=\"entity.comments\"\n [entity]=\"entity\"\n ></rtsee-entity-comments>\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: RtseeEntityCommentsComponent, selector: "rtsee-entity-comments", inputs: ["messenger", "chat", "entity"] }, { kind: "component", type: RtseeEntityTagsComponent, selector: "rtsee-entity-tags", inputs: ["entity"] }, { kind: "component", type: RatingSectionComponent, selector: "rtsee-rating-section", inputs: ["rater", "entity"] }] }); }
|
|
2459
|
+
}
|
|
2460
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityPreviewComponent, decorators: [{
|
|
2461
|
+
type: Component,
|
|
2462
|
+
args: [{ selector: 'rtsee-entity-preview', imports: [
|
|
2463
|
+
RtseeEntityCommentsComponent,
|
|
2464
|
+
RtseeEntityTagsComponent,
|
|
2465
|
+
RatingSectionComponent,
|
|
2466
|
+
], template: "<div class=\"rtsee-entity-preview\">\n <div class=\"rtsee-entity-preview-tags\">\n <rtsee-entity-tags [entity]=\"entity\"></rtsee-entity-tags>\n </div>\n\n @if (showRating && rater) {\n <rtsee-rating-section [entity]=\"entity\"\n [rater]=\"rater\"\n ></rtsee-rating-section>\n } @else if (!showRating && entity.comments && messenger) {\n <div class=\"rtsee-entity-preview-comments\">\n <rtsee-entity-comments [messenger]=\"messenger\"\n [chat]=\"entity.comments\"\n [entity]=\"entity\"\n ></rtsee-entity-comments>\n </div>\n }\n</div>\n" }]
|
|
2467
|
+
}], propDecorators: { entity: [{
|
|
2468
|
+
type: Input
|
|
2469
|
+
}], messenger: [{
|
|
2470
|
+
type: Input
|
|
2471
|
+
}] } });
|
|
2472
|
+
|
|
2306
2473
|
class StoryDetailsComponent {
|
|
2474
|
+
getStarArray(rating) {
|
|
2475
|
+
const stars = [];
|
|
2476
|
+
const val = rating || 0;
|
|
2477
|
+
for (let i = 1; i <= 5; i++) {
|
|
2478
|
+
if (val >= i) {
|
|
2479
|
+
stars.push('full');
|
|
2480
|
+
}
|
|
2481
|
+
else if (val + 0.5 >= i) {
|
|
2482
|
+
stars.push('half');
|
|
2483
|
+
}
|
|
2484
|
+
else {
|
|
2485
|
+
stars.push('empty');
|
|
2486
|
+
}
|
|
2487
|
+
}
|
|
2488
|
+
return stars;
|
|
2489
|
+
}
|
|
2307
2490
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2308
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: StoryDetailsComponent, isStandalone: true, selector: "rtsee-story-details", inputs: { story: "story", presentation: "presentation", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-story-details\">\n <div class=\"rtsee-story-details-
|
|
2491
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: StoryDetailsComponent, isStandalone: true, selector: "rtsee-story-details", inputs: { story: "story", presentation: "presentation", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-story-details\">\n <section\n class=\"rtsee-story-details-cover\"\n [style.background-image]=\"'url(' + story.imageUrl + ')'\"\n >\n <div class=\"rtsee-story-details-cover-overlay\"></div>\n <div class=\"rtsee-story-details-cover-content\">\n <div class=\"rtsee-story-details-cover-badges\">\n @if (story.categories?.length) {\n @for (category of story.categories; track category.id) {\n <span class=\"rtsee-story-details-tag-pill\">\n {{ category.name }}\n </span>\n }\n }\n @if (story.labels?.length) {\n @for (label of story.labels; track label.id) {\n <span\n class=\"rtsee-story-details-tag-pill rtsee-story-details-tag-pill-label\"\n >\n <span class=\"symbol\">{{ label.symbol }}</span> {{ label.name }}\n </span>\n }\n }\n </div>\n\n <h1 class=\"rtsee-story-details-cover-title\">{{ story.name }}</h1>\n\n <div class=\"rtsee-story-details-cover-meta\">\n @if (story.rating !== null) {\n <div class=\"rtsee-story-details-cover-rating\">\n <span class=\"rtsee-story-details-stars\">\n @for (star of getStarArray(story.rating); track $index) {\n <span\n class=\"rtsee-story-details-star\"\n [class.rtsee-story-details-star-full]=\"star === 'full'\"\n [class.rtsee-story-details-star-half]=\"star === 'half'\"\n [class.rtsee-story-details-star-empty]=\"star === 'empty'\"\n >\n @if (star === \"full\") {\n \u2605\n } @else if (star === \"half\") {\n \u2605\n } @else {\n \u2606\n }\n </span>\n }\n </span>\n <span class=\"rtsee-story-details-rating-number\">{{\n story.rating\n }}</span>\n @if (story.ratesCount !== null) {\n <span class=\"rtsee-story-details-rating-count\"\n >({{ story.ratesCount }} ratings)</span\n >\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-cover-info-chips\">\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n {{ story.averageReadTime }} min\n </span>\n }\n @if (story.totalSlides) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n {{ story.totalSlides }} slides\n </span>\n }\n </div>\n </div>\n\n <div class=\"rtsee-story-details-cover-actions\">\n <p-button\n [label]=\"\n story.preselectedSlideNumber ? 'Continue Reading' : 'Start Reading'\n \"\n class=\"rtsee-story-details-start-reading\"\n (click)=\"presentation.setActiveStory(story)\"\n ></p-button>\n <p-button\n label=\"Close\"\n class=\"rtsee-story-details-close\"\n severity=\"secondary\"\n (click)=\"presentation.closeStoryDetails()\"\n ></p-button>\n </div>\n </div>\n </section>\n\n <!-- CONTENT AREA -->\n <div class=\"rtsee-story-details-content-wrapper\">\n <div class=\"rtsee-story-details-content-grid\">\n <!-- Description Card -->\n <article class=\"rtsee-story-details-glass-card\">\n <div class=\"rtsee-story-details-glass-card-header\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n <h2>About This Story</h2>\n </div>\n <p class=\"rtsee-story-details-glass-card-text\">\n {{ story.description }}\n </p>\n </article>\n </div>\n\n <!-- Keep Comments/Preview Sections completely intact below -->\n @if (story.entity && messenger) {\n <rtsee-entity-preview\n [entity]=\"story.entity\"\n [messenger]=\"messenger\"\n ></rtsee-entity-preview>\n }\n\n @if (story.categories?.length && false) {\n <div class=\"rtsee-story-details-categories\">\n @for (category of story.categories; track category.id) {\n <p-tag [value]=\"category.name\"></p-tag>\n }\n </div>\n }\n\n @if (story.labels?.length && false) {\n <div class=\"rtsee-story-details-labels\">\n @for (label of story.labels; track label.id) {\n <p-chip class=\"rtsee-story-details-label\">\n <span class=\"rtsee-story-details-label-left\">{{\n label.symbol\n }}</span>\n <span class=\"rtsee-story-details-label-right\">{{\n label.name\n }}</span>\n </p-chip>\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-description-history\"></div>\n @if (story.isPublished && false) {\n <div class=\"rtsee-story-details-feedback\">\n <p>feedback here</p>\n </div>\n } @else if (messenger && story.discussion && false) {\n <div class=\"rtsee-story-details-votes\">\n <p class=\"rtsee-story-details-comments-label\">Comments</p>\n <rtsee-chat\n [messenger]=\"messenger\"\n [chatData]=\"story.discussion\"\n ></rtsee-chat>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "disabled", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "chatData", "entity", "messenger"] }, { kind: "component", type: RtseeEntityPreviewComponent, selector: "rtsee-entity-preview", inputs: ["entity", "messenger"] }] }); }
|
|
2309
2492
|
}
|
|
2310
2493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryDetailsComponent, decorators: [{
|
|
2311
2494
|
type: Component,
|
|
2312
|
-
args: [{ selector: 'rtsee-story-details', imports: [
|
|
2313
|
-
Chip,
|
|
2314
|
-
Tag,
|
|
2315
|
-
Button,
|
|
2316
|
-
ChatComponent
|
|
2317
|
-
], template: "<div class=\"rtsee-story-details\">\n <div class=\"rtsee-story-details-image-container\" (click)=\"presentation.setActiveStory(story)\">\n <img [src]=\"story.imageUrl\" alt=\"story_image\" class=\"rtsee-story-details-image\">\n <p-button [label]=\"story.preselectedSlideNumber ? 'Continue Reading' : 'Start Reading'\"\n class=\"rtsee-story-details-start-reading\"\n ></p-button>\n <p-button label=\"Close\"\n class=\"rtsee-story-details-close\"\n severity=\"secondary\"\n (click)=\"presentation.closeStoryDetails()\"\n ></p-button>\n </div>\n <div class=\"rtsee-story-details-title-container\">\n <h1 class=\"rtsee-story-details-title\">{{story.name}}</h1>\n </div>\n @if (story.categories?.length && false) {\n <div class=\"rtsee-story-details-categories\">\n @for (category of story.categories; track category.id) {\n <p-tag [value]=\"category.name\"></p-tag>\n }\n </div>\n }\n\n @if (story.labels?.length) {\n <div class=\"rtsee-story-details-labels\">\n @for (label of story.labels; track label .id) {\n <p-chip class=\"rtsee-story-details-label\">\n <span class=\"rtsee-story-details-label-left\"\n >{{label.symbol}}</span>\n <span class=\"rtsee-story-details-label-right\"\n >{{label.name}}</span>\n </p-chip>\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-description-container\">\n <p class=\"rtsee-story-details-description\">{{story.description}}</p>\n </div>\n <div class=\"rtsee-story-details-description-history\">\n </div>\n @if (story.isPublished) {\n <div class=\"rtsee-story-details-feedback\">\n <p>feedback here</p>\n </div>\n } @else if (messenger && story.discussion) {\n\n <div class=\"rtsee-story-details-votes\">\n <p class=\"rtsee-story-details-comments-label\">Comments</p>\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"story.discussion\"\n ></rtsee-chat>\n </div>\n }\n</div>\n" }]
|
|
2495
|
+
args: [{ selector: 'rtsee-story-details', imports: [Chip, Tag, Button, ChatComponent, RtseeEntityPreviewComponent], template: "<div class=\"rtsee-story-details\">\n <section\n class=\"rtsee-story-details-cover\"\n [style.background-image]=\"'url(' + story.imageUrl + ')'\"\n >\n <div class=\"rtsee-story-details-cover-overlay\"></div>\n <div class=\"rtsee-story-details-cover-content\">\n <div class=\"rtsee-story-details-cover-badges\">\n @if (story.categories?.length) {\n @for (category of story.categories; track category.id) {\n <span class=\"rtsee-story-details-tag-pill\">\n {{ category.name }}\n </span>\n }\n }\n @if (story.labels?.length) {\n @for (label of story.labels; track label.id) {\n <span\n class=\"rtsee-story-details-tag-pill rtsee-story-details-tag-pill-label\"\n >\n <span class=\"symbol\">{{ label.symbol }}</span> {{ label.name }}\n </span>\n }\n }\n </div>\n\n <h1 class=\"rtsee-story-details-cover-title\">{{ story.name }}</h1>\n\n <div class=\"rtsee-story-details-cover-meta\">\n @if (story.rating !== null) {\n <div class=\"rtsee-story-details-cover-rating\">\n <span class=\"rtsee-story-details-stars\">\n @for (star of getStarArray(story.rating); track $index) {\n <span\n class=\"rtsee-story-details-star\"\n [class.rtsee-story-details-star-full]=\"star === 'full'\"\n [class.rtsee-story-details-star-half]=\"star === 'half'\"\n [class.rtsee-story-details-star-empty]=\"star === 'empty'\"\n >\n @if (star === \"full\") {\n \u2605\n } @else if (star === \"half\") {\n \u2605\n } @else {\n \u2606\n }\n </span>\n }\n </span>\n <span class=\"rtsee-story-details-rating-number\">{{\n story.rating\n }}</span>\n @if (story.ratesCount !== null) {\n <span class=\"rtsee-story-details-rating-count\"\n >({{ story.ratesCount }} ratings)</span\n >\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-cover-info-chips\">\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n {{ story.averageReadTime }} min\n </span>\n }\n @if (story.totalSlides) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n {{ story.totalSlides }} slides\n </span>\n }\n </div>\n </div>\n\n <div class=\"rtsee-story-details-cover-actions\">\n <p-button\n [label]=\"\n story.preselectedSlideNumber ? 'Continue Reading' : 'Start Reading'\n \"\n class=\"rtsee-story-details-start-reading\"\n (click)=\"presentation.setActiveStory(story)\"\n ></p-button>\n <p-button\n label=\"Close\"\n class=\"rtsee-story-details-close\"\n severity=\"secondary\"\n (click)=\"presentation.closeStoryDetails()\"\n ></p-button>\n </div>\n </div>\n </section>\n\n <!-- CONTENT AREA -->\n <div class=\"rtsee-story-details-content-wrapper\">\n <div class=\"rtsee-story-details-content-grid\">\n <!-- Description Card -->\n <article class=\"rtsee-story-details-glass-card\">\n <div class=\"rtsee-story-details-glass-card-header\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n <h2>About This Story</h2>\n </div>\n <p class=\"rtsee-story-details-glass-card-text\">\n {{ story.description }}\n </p>\n </article>\n </div>\n\n <!-- Keep Comments/Preview Sections completely intact below -->\n @if (story.entity && messenger) {\n <rtsee-entity-preview\n [entity]=\"story.entity\"\n [messenger]=\"messenger\"\n ></rtsee-entity-preview>\n }\n\n @if (story.categories?.length && false) {\n <div class=\"rtsee-story-details-categories\">\n @for (category of story.categories; track category.id) {\n <p-tag [value]=\"category.name\"></p-tag>\n }\n </div>\n }\n\n @if (story.labels?.length && false) {\n <div class=\"rtsee-story-details-labels\">\n @for (label of story.labels; track label.id) {\n <p-chip class=\"rtsee-story-details-label\">\n <span class=\"rtsee-story-details-label-left\">{{\n label.symbol\n }}</span>\n <span class=\"rtsee-story-details-label-right\">{{\n label.name\n }}</span>\n </p-chip>\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-description-history\"></div>\n @if (story.isPublished && false) {\n <div class=\"rtsee-story-details-feedback\">\n <p>feedback here</p>\n </div>\n } @else if (messenger && story.discussion && false) {\n <div class=\"rtsee-story-details-votes\">\n <p class=\"rtsee-story-details-comments-label\">Comments</p>\n <rtsee-chat\n [messenger]=\"messenger\"\n [chatData]=\"story.discussion\"\n ></rtsee-chat>\n </div>\n }\n </div>\n</div>\n" }]
|
|
2318
2496
|
}], propDecorators: { story: [{
|
|
2319
2497
|
type: Input
|
|
2320
2498
|
}], presentation: [{
|
|
@@ -2340,7 +2518,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2340
2518
|
PreloaderComponent,
|
|
2341
2519
|
PresentationsDashboardComponent,
|
|
2342
2520
|
PresentationSettingsComponent,
|
|
2343
|
-
StoryDetailsComponent
|
|
2521
|
+
StoryDetailsComponent,
|
|
2344
2522
|
], standalone: true, template: "<div class=\"rtsee-presentation\">\n <div class=\"rtsee-presentation-header-block\">\n <rtsee-presentation-header [presentation]=\"presentation\"\n ></rtsee-presentation-header>\n </div>\n\n @if (presentation.storyLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if(presentation.isDashboardOpen && presentation.dashboard) {\n <rtsee-presentations-dashboard [dashboard]=\"presentation.dashboard\"\n ></rtsee-presentations-dashboard>\n }\n\n @if (presentation.settings.isExpanded) {\n <rtsee-presentation-settings [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-presentation-settings>\n }\n\n @if (presentation.isCategoriesListVisible && !presentation.storyLoadInProgress) {\n <div class=\"rtsee-presentation-categories-list\">\n @if (presentation.categoriesLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if (presentation.activeSessionsStories.length) {\n <div class=\"rtsee-presentation-category-header\">\n <h2 class=\"rtsee-presentation-category-name\">{{presentation.labels[RTSeeTextLabelKeys.CONTINUE_SESSIONS_LABEL]}}</h2>\n </div>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of presentation.activeSessionsStories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"presentation.openStoryDetails(story.id, story.preselectedSlideNumber || undefined)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n\n @for (category of presentation.categories; track category.id) {\n <div class=\"rtsee-presentation-category-header\">\n <h2 class=\"rtsee-presentation-category-name\">{{ category.name }}</h2>\n <span class=\"rtsee-presentation-category-description\">{{ category.description }}</span>\n </div>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of category.stories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"presentation.openStoryDetails(story.id)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (presentation.activeStory && !presentation.isDashboardOpen) {\n <div class=\"rtsee-presentation-story-viewer-container\">\n <rtsee-story-player [story]=\"presentation.activeStory\"\n [settings]=\"presentation.settings\"\n ></rtsee-story-player>\n </div>\n } @else if (presentation.openedStoryDetails && !presentation.isDashboardOpen) {\n <rtsee-story-details [story]=\"presentation.openedStoryDetails\"\n [presentation]=\"presentation\"\n [messenger]=\"messenger\"\n ></rtsee-story-details>\n }\n</div>\n" }]
|
|
2345
2523
|
}], ctorParameters: () => [], propDecorators: { presentation: [{
|
|
2346
2524
|
type: Input
|
|
@@ -2371,12 +2549,9 @@ class RtseeNavComponent {
|
|
|
2371
2549
|
console.log('RTSeeContainer: user peer not found');
|
|
2372
2550
|
return false;
|
|
2373
2551
|
}
|
|
2374
|
-
const profileRoute = this.config.routes
|
|
2375
|
-
|
|
2376
|
-
const
|
|
2377
|
-
.find((r) => r.rtseeRoute === RTSeeRoutesList.EVENTS_DASHBOARD) || null;
|
|
2378
|
-
const messengerRoute = this.config.routes
|
|
2379
|
-
.find((r) => r.rtseeRoute === RTSeeRoutesList.MESSENGER) || null;
|
|
2552
|
+
const profileRoute = this.config.routes.find((r) => r.rtseeRoute === RTSeeRoutesList.PROFILE) || null;
|
|
2553
|
+
const dashboardRoute = this.config.routes.find((r) => r.rtseeRoute === RTSeeRoutesList.EVENTS_DASHBOARD) || null;
|
|
2554
|
+
const messengerRoute = this.config.routes.find((r) => r.rtseeRoute === RTSeeRoutesList.MESSENGER) || null;
|
|
2380
2555
|
if (dashboardRoute) {
|
|
2381
2556
|
dashboardRoute.isEnabled = hasPermission(peer, RTSeePeerPermissions.ACCESS_EVENTS_DASHBOARD);
|
|
2382
2557
|
}
|
|
@@ -2403,7 +2578,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2403
2578
|
Avatar,
|
|
2404
2579
|
Image,
|
|
2405
2580
|
Divider,
|
|
2406
|
-
Tooltip
|
|
2581
|
+
Tooltip,
|
|
2407
2582
|
], standalone: true, template: "<div class=\"rtsee-nav\">\n @if (config.siteLogo) {\n <div class=\"rtsee-site-logo\">\n <p-image [src]=\"config.siteLogo.src\" class=\"rtsee-site-logo-image\"></p-image>\n <p-divider class=\"rtsee-site-logo-divider\" />\n </div>\n }\n <div class=\"rtsee-nav-bar\">\n @for (route of config.routes; track route.name) {\n <a [routerLink]=\"route.link\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [ngClass]=\"{'rtsee-nav-item-hidden': !route.isEnabled || !route.iconClassName}\"\n [routerLinkActiveOptions]=\"{ exact: route.exactActiveLinkMatcher || false }\"\n class=\"rtsee-nav-item\"\n [pTooltip]=\"route.name\"\n >\n <span [ngClass]=\"route.iconClassName\"\n class=\"rtsee-nav-item-icon\" >\n </span>\n </a>\n }\n <p-avatar [image]=\"rtsee.socketConnection?.myPeer?.imageUrl\"\n class=\"rtsee-nav-item rtsee-nav-image rtsee-nav-profile\"\n [routerLink]=\"profileLink\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n [queryParams]=\"queryParams\"\n ></p-avatar>\n </div>\n</div>\n" }]
|
|
2408
2583
|
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { config: [{
|
|
2409
2584
|
type: Input
|
|
@@ -2421,9 +2596,11 @@ class RTSeeContainerComponent {
|
|
|
2421
2596
|
}
|
|
2422
2597
|
ngOnInit() {
|
|
2423
2598
|
this.authService.init(this.auth);
|
|
2424
|
-
this.routeSubscription = this.router.events
|
|
2599
|
+
this.routeSubscription = this.router.events
|
|
2600
|
+
.pipe(
|
|
2425
2601
|
// Filter for the NavigationEnd event to know when navigation is complete
|
|
2426
|
-
filter((event) => event instanceof NavigationEnd))
|
|
2602
|
+
filter((event) => event instanceof NavigationEnd))
|
|
2603
|
+
.subscribe((event) => {
|
|
2427
2604
|
this.defineSideNavState(event.url);
|
|
2428
2605
|
});
|
|
2429
2606
|
}
|
|
@@ -2433,12 +2610,12 @@ class RTSeeContainerComponent {
|
|
|
2433
2610
|
defineSideNavState(url) {
|
|
2434
2611
|
const isBase = url === '/' || url.startsWith('/?');
|
|
2435
2612
|
const routeUrlSplit = url.split('/');
|
|
2436
|
-
const rootRoutePath = isBase ? '' :
|
|
2613
|
+
const rootRoutePath = isBase ? '' : routeUrlSplit[1] || null;
|
|
2437
2614
|
if (!rootRoutePath && !isBase) {
|
|
2438
2615
|
return;
|
|
2439
2616
|
}
|
|
2440
|
-
const rtseeRoute = this.navigationConfig.routes
|
|
2441
|
-
|
|
2617
|
+
const rtseeRoute = this.navigationConfig.routes.find((rn) => rn.link === rootRoutePath) ||
|
|
2618
|
+
null;
|
|
2442
2619
|
if (!rtseeRoute) {
|
|
2443
2620
|
return;
|
|
2444
2621
|
}
|
|
@@ -2456,7 +2633,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2456
2633
|
MessengerComponent,
|
|
2457
2634
|
RtseeEventsDashboardComponent,
|
|
2458
2635
|
PresentationComponent,
|
|
2459
|
-
RtseeNavComponent
|
|
2636
|
+
RtseeNavComponent,
|
|
2460
2637
|
], standalone: true, template: "<div class=\"rtsee-shell\"\n [ngClass]=\"{\n 'rtsee-shell-conference-mode': rtsee.conference && rtsee.conference.isInActiveCall,\n 'rtsee-shell-messenger-active': rtsee.messenger && rtsee.activeTab === 'messenger',\n 'rtsee-shell-dashboard-active': rtsee.eventsDashboard && rtsee.activeTab === 'events-dashboard',\n 'rtsee-shell-presentation-active': rtsee.presentation && rtsee.activeTab === 'presentation',\n 'rtsee-shell-side-nav-expanded': isSidenavExpanded,\n 'rtsee-shell-side-nav-is-content': isSidenavContent,\n 'rtsee-shell-side-nav-full-screen': isSidenavFullScreen\n }\"\n>\n <div class=\"rtsee-nav-block\">\n <rtsee-nav [config]=\"navigationConfig\" [rtsee]=\"rtsee\"></rtsee-nav>\n </div>\n\n <div class=\"rtsee-shell-panel\">\n <div class=\"rtsee-shell-panel-inner\">\n @if (rtsee.conference && rtsee.conference.isInActiveCall) {\n <div class=\"rtsee-conference-container\">\n <rtsee-conference [rtSee]=\"rtsee.conference\"\n ></rtsee-conference>\n </div>\n }\n\n @if (rtsee.messenger) {\n <div class=\"rtsee-messenger-container\">\n <rtsee-messenger [messenger]=\"rtsee.messenger\"\n ></rtsee-messenger>\n </div>\n }\n\n @if (rtsee.eventsDashboard && rtsee.eventsDashboard.isReady) {\n <div class=\"rtsee-events-dashboard-container\">\n <rtsee-events-dashboard [eventsDashboard]=\"rtsee.eventsDashboard\"\n ></rtsee-events-dashboard>\n </div>\n }\n\n @if (rtsee.presentation && rtsee.presentation.isActive) {\n <div class=\"rtsee-presentation-container\">\n <rtsee-presentation [presentation]=\"rtsee.presentation\"\n [messenger]=\"rtsee.messenger\"\n ></rtsee-presentation>\n </div>\n }\n </div>\n </div>\n\n <div class=\"rtsee-content\">\n <ng-content></ng-content>\n </div>\n</div>\n" }]
|
|
2461
2638
|
}], ctorParameters: () => [{ type: RTSeeAuthService }, { type: i2.Router }], propDecorators: { rtsee: [{
|
|
2462
2639
|
type: Input
|
|
@@ -2472,11 +2649,13 @@ class RtseeTagsAccordionMenuComponent {
|
|
|
2472
2649
|
this.onTagClicked = output();
|
|
2473
2650
|
}
|
|
2474
2651
|
ngOnInit() {
|
|
2475
|
-
this.manageTags
|
|
2652
|
+
this.manageTags
|
|
2653
|
+
.loadTags()
|
|
2476
2654
|
.then(() => {
|
|
2477
2655
|
this.items = this.tagsToItems(this.manageTags.tags);
|
|
2478
2656
|
console.log(this.items);
|
|
2479
|
-
})
|
|
2657
|
+
})
|
|
2658
|
+
.catch((err) => {
|
|
2480
2659
|
console.log(err);
|
|
2481
2660
|
});
|
|
2482
2661
|
}
|
|
@@ -2489,7 +2668,7 @@ class RtseeTagsAccordionMenuComponent {
|
|
|
2489
2668
|
isSelected: false,
|
|
2490
2669
|
command: () => {
|
|
2491
2670
|
this.onTagClicked.emit(t);
|
|
2492
|
-
}
|
|
2671
|
+
},
|
|
2493
2672
|
};
|
|
2494
2673
|
});
|
|
2495
2674
|
}
|
|
@@ -2498,9 +2677,7 @@ class RtseeTagsAccordionMenuComponent {
|
|
|
2498
2677
|
}
|
|
2499
2678
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeTagsAccordionMenuComponent, decorators: [{
|
|
2500
2679
|
type: Component,
|
|
2501
|
-
args: [{ selector: 'rtsee-tags-accordion', imports: [
|
|
2502
|
-
PanelMenu
|
|
2503
|
-
], template: "<div class=\"rtsee-tags-accordion\">\n <p-panel-menu [model]=\"items\"/>\n</div>\n" }]
|
|
2680
|
+
args: [{ selector: 'rtsee-tags-accordion', imports: [PanelMenu], template: "<div class=\"rtsee-tags-accordion\">\n <p-panel-menu [model]=\"items\"/>\n</div>\n" }]
|
|
2504
2681
|
}], propDecorators: { manageTags: [{
|
|
2505
2682
|
type: Input
|
|
2506
2683
|
}] } });
|
|
@@ -2517,10 +2694,7 @@ class RecursiveSelectComponent {
|
|
|
2517
2694
|
}
|
|
2518
2695
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RecursiveSelectComponent, decorators: [{
|
|
2519
2696
|
type: Component,
|
|
2520
|
-
args: [{ selector: 'rtsee-recursive-select', imports: [
|
|
2521
|
-
Select,
|
|
2522
|
-
FormsModule
|
|
2523
|
-
], template: "<div class=\"rtsee-recursive-select\">\n @for (item of selectModel.selectionHierarchy; track item.level) {\n <div class=\"rtsee-form-field-container\">\n <p-select [options]=\"item.children\"\n [(ngModel)]=\"item.selected\"\n [optionLabel]=\"'label'\"\n [placeholder]=\"selectModel.placeholderValue\"\n (onChange)=\"selectModel.onSelectionChanged(item.selected, item.level)\"\n class=\"rtsee-form-field\"\n />\n </div>\n }\n</div>\n" }]
|
|
2697
|
+
args: [{ selector: 'rtsee-recursive-select', imports: [Select, FormsModule], template: "<div class=\"rtsee-recursive-select\">\n @for (item of selectModel.selectionHierarchy; track item.level) {\n <div class=\"rtsee-form-field-container\">\n <p-select [options]=\"item.children\"\n [(ngModel)]=\"item.selected\"\n [optionLabel]=\"'label'\"\n [placeholder]=\"selectModel.placeholderValue\"\n (onChange)=\"selectModel.onSelectionChanged(item.selected, item.level)\"\n class=\"rtsee-form-field\"\n />\n </div>\n }\n</div>\n" }]
|
|
2524
2698
|
}], propDecorators: { selectModel: [{
|
|
2525
2699
|
type: Input
|
|
2526
2700
|
}] } });
|
|
@@ -2541,7 +2715,7 @@ class RtseeTagManageComponent {
|
|
|
2541
2715
|
this.presetFields(this.manageTags.activeTag);
|
|
2542
2716
|
}
|
|
2543
2717
|
async presetParent() {
|
|
2544
|
-
console.log(
|
|
2718
|
+
console.log('presetParent', this.manageTags.activeTag);
|
|
2545
2719
|
if (!this.manageTags.activeTag) {
|
|
2546
2720
|
return;
|
|
2547
2721
|
}
|
|
@@ -2559,7 +2733,7 @@ class RtseeTagManageComponent {
|
|
|
2559
2733
|
return Promise.resolve(null);
|
|
2560
2734
|
}
|
|
2561
2735
|
return this.manageTags.getTag(tag.parentId);
|
|
2562
|
-
}
|
|
2736
|
+
},
|
|
2563
2737
|
};
|
|
2564
2738
|
console.log('active tag', this.manageTags.activeTag);
|
|
2565
2739
|
if (this.manageTags.activeTag.parentId) {
|
|
@@ -2568,7 +2742,9 @@ class RtseeTagManageComponent {
|
|
|
2568
2742
|
this.tagsRecursiveSelect = new RecursiveSelect(selectOptions);
|
|
2569
2743
|
}
|
|
2570
2744
|
async submit() {
|
|
2571
|
-
if (this.tagForm.invalid ||
|
|
2745
|
+
if (this.tagForm.invalid ||
|
|
2746
|
+
!this.manageTags.peer.rtseeAppId ||
|
|
2747
|
+
!this.manageTags.activeTag) {
|
|
2572
2748
|
console.log('Form Invalid!');
|
|
2573
2749
|
return;
|
|
2574
2750
|
}
|
|
@@ -2577,12 +2753,12 @@ class RtseeTagManageComponent {
|
|
|
2577
2753
|
name: this.nameField.getRawValue(),
|
|
2578
2754
|
description: this.descriptionField.getRawValue(),
|
|
2579
2755
|
applicationId: this.manageTags.applicationId,
|
|
2580
|
-
parentId
|
|
2756
|
+
parentId,
|
|
2581
2757
|
};
|
|
2582
2758
|
if (this.manageTags.activeTag.id) {
|
|
2583
2759
|
const options = {
|
|
2584
2760
|
id: this.manageTags.activeTag.id,
|
|
2585
|
-
...tagParams
|
|
2761
|
+
...tagParams,
|
|
2586
2762
|
};
|
|
2587
2763
|
await this.manageTags.updateTag(options);
|
|
2588
2764
|
}
|
|
@@ -2606,28 +2782,22 @@ class RtseeTagManageComponent {
|
|
|
2606
2782
|
validators: [
|
|
2607
2783
|
Validators.required,
|
|
2608
2784
|
Validators.minLength(3),
|
|
2609
|
-
Validators.maxLength(131)
|
|
2610
|
-
]
|
|
2785
|
+
Validators.maxLength(131),
|
|
2786
|
+
],
|
|
2611
2787
|
}),
|
|
2612
2788
|
description: this.formBuilder.control('', {
|
|
2613
2789
|
validators: [
|
|
2614
2790
|
Validators.required,
|
|
2615
2791
|
Validators.minLength(6),
|
|
2616
|
-
Validators.maxLength(244)
|
|
2617
|
-
]
|
|
2792
|
+
Validators.maxLength(244),
|
|
2793
|
+
],
|
|
2618
2794
|
}),
|
|
2619
2795
|
iconClass: this.formBuilder.control('', {
|
|
2620
|
-
validators: [
|
|
2621
|
-
Validators.minLength(1),
|
|
2622
|
-
Validators.maxLength(244)
|
|
2623
|
-
]
|
|
2796
|
+
validators: [Validators.minLength(1), Validators.maxLength(244)],
|
|
2624
2797
|
}),
|
|
2625
2798
|
value: this.formBuilder.control('', {
|
|
2626
|
-
validators: [
|
|
2627
|
-
|
|
2628
|
-
Validators.maxLength(244)
|
|
2629
|
-
]
|
|
2630
|
-
})
|
|
2799
|
+
validators: [Validators.minLength(1), Validators.maxLength(244)],
|
|
2800
|
+
}),
|
|
2631
2801
|
});
|
|
2632
2802
|
}
|
|
2633
2803
|
get nameField() {
|
|
@@ -2657,7 +2827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2657
2827
|
Textarea,
|
|
2658
2828
|
ReactiveFormsModule,
|
|
2659
2829
|
RecursiveSelectComponent,
|
|
2660
|
-
Divider
|
|
2830
|
+
Divider,
|
|
2661
2831
|
], template: "<div class=\"rtsee-manage-tag\">\n <div class=\"rtsee-manage-tag-info rtsee-form-container\">\n <form class=\"rtsee-tag-form rtsee-form\"\n [formGroup]=\"tagForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n @if (tagsRecursiveSelect && manageTags.activeTag) {\n <div class=\"rtsee-select-tag-container\">\n <p-divider></p-divider>\n <p>Parent Tag</p>\n <rtsee-recursive-select [selectModel]=\"tagsRecursiveSelect\"\n ></rtsee-recursive-select>\n <p-divider></p-divider>\n </div>\n }\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-symbol-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"iconClassField\"\n [class.p-invalid]=\"iconClassField.invalid && iconClassField.touched\"\n />\n <label for=\"rtsee-story-label-symbol-field\">Symbol</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (iconClassField.hasError('required') && iconClassField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Symbol is required, pick a smile, dummy</p-message>\n }\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTags.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageTags.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
2662
2832
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageTags: [{
|
|
2663
2833
|
type: Input
|
|
@@ -2670,15 +2840,17 @@ class RtseeTagGroupsManageComponent {
|
|
|
2670
2840
|
this.onTagGroupClicked = output();
|
|
2671
2841
|
}
|
|
2672
2842
|
ngOnInit() {
|
|
2673
|
-
this.manageTagGroups
|
|
2843
|
+
this.manageTagGroups
|
|
2844
|
+
.loadTagGroups()
|
|
2674
2845
|
.then(() => {
|
|
2675
2846
|
this.items = this.tagGroupsToItems(this.manageTagGroups.tagGroups);
|
|
2676
|
-
})
|
|
2847
|
+
})
|
|
2848
|
+
.catch((err) => {
|
|
2677
2849
|
console.log(err);
|
|
2678
2850
|
});
|
|
2679
2851
|
}
|
|
2680
2852
|
tagGroupsToItems(tagGroups) {
|
|
2681
|
-
console.log(
|
|
2853
|
+
console.log('tagGroupsToItems', tagGroups);
|
|
2682
2854
|
return tagGroups.map((tg) => {
|
|
2683
2855
|
return {
|
|
2684
2856
|
label: tg.name,
|
|
@@ -2686,7 +2858,7 @@ class RtseeTagGroupsManageComponent {
|
|
|
2686
2858
|
command: () => {
|
|
2687
2859
|
this.selectedTagGroup = tg;
|
|
2688
2860
|
this.onTagGroupClicked.emit(tg);
|
|
2689
|
-
}
|
|
2861
|
+
},
|
|
2690
2862
|
};
|
|
2691
2863
|
});
|
|
2692
2864
|
}
|
|
@@ -2695,9 +2867,7 @@ class RtseeTagGroupsManageComponent {
|
|
|
2695
2867
|
}
|
|
2696
2868
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeTagGroupsManageComponent, decorators: [{
|
|
2697
2869
|
type: Component,
|
|
2698
|
-
args: [{ selector: 'rtsee-rtsee-tag-groups-manage', imports: [
|
|
2699
|
-
Menu
|
|
2700
|
-
], template: "<div class=\"rtsee-manage-tag-groups\">\n <p-menu [model]=\"items\" />\n</div>\n" }]
|
|
2870
|
+
args: [{ selector: 'rtsee-rtsee-tag-groups-manage', imports: [Menu], template: "<div class=\"rtsee-manage-tag-groups\">\n <p-menu [model]=\"items\" />\n</div>\n" }]
|
|
2701
2871
|
}], propDecorators: { manageTagGroups: [{
|
|
2702
2872
|
type: Input
|
|
2703
2873
|
}] } });
|
|
@@ -2728,12 +2898,12 @@ class RtseeTagGroupManageComponent {
|
|
|
2728
2898
|
const tagGroupParams = {
|
|
2729
2899
|
name: this.nameField.getRawValue(),
|
|
2730
2900
|
description: this.descriptionField.getRawValue(),
|
|
2731
|
-
applicationId: this.manageTagGroups.peer.rtseeAppId
|
|
2901
|
+
applicationId: this.manageTagGroups.peer.rtseeAppId,
|
|
2732
2902
|
};
|
|
2733
2903
|
if (this.manageTagGroups.activeTagGroup.id) {
|
|
2734
2904
|
await this.manageTagGroups.updateTagGroup({
|
|
2735
2905
|
...tagGroupParams,
|
|
2736
|
-
id: this.manageTagGroups.activeTagGroup.id
|
|
2906
|
+
id: this.manageTagGroups.activeTagGroup.id,
|
|
2737
2907
|
});
|
|
2738
2908
|
}
|
|
2739
2909
|
else {
|
|
@@ -2753,16 +2923,16 @@ class RtseeTagGroupManageComponent {
|
|
|
2753
2923
|
validators: [
|
|
2754
2924
|
Validators.required,
|
|
2755
2925
|
Validators.minLength(3),
|
|
2756
|
-
Validators.maxLength(131)
|
|
2757
|
-
]
|
|
2926
|
+
Validators.maxLength(131),
|
|
2927
|
+
],
|
|
2758
2928
|
}),
|
|
2759
2929
|
description: this.formBuilder.control('', {
|
|
2760
2930
|
validators: [
|
|
2761
2931
|
Validators.required,
|
|
2762
2932
|
Validators.minLength(6),
|
|
2763
|
-
Validators.maxLength(244)
|
|
2764
|
-
]
|
|
2765
|
-
})
|
|
2933
|
+
Validators.maxLength(244),
|
|
2934
|
+
],
|
|
2935
|
+
}),
|
|
2766
2936
|
});
|
|
2767
2937
|
}
|
|
2768
2938
|
get nameField() {
|
|
@@ -2784,7 +2954,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2784
2954
|
Message,
|
|
2785
2955
|
ReactiveFormsModule,
|
|
2786
2956
|
Textarea,
|
|
2787
|
-
AutocompleteComponent
|
|
2957
|
+
AutocompleteComponent,
|
|
2788
2958
|
], template: "<div class=\"rtsee-manage-tag-group\">\n <div class=\"rtsee-manage-tag-group-info rtsee-form-container\">\n <form class=\"rtsee-tag-form rtsee-form\"\n [formGroup]=\"tagGroupForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n\n @if (manageTagGroups && manageTagGroups.tagsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageTagGroups.tagsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTagGroups.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageTagGroups.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
2789
2959
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageTagGroups: [{
|
|
2790
2960
|
type: Input
|
|
@@ -2796,15 +2966,17 @@ class EntitiesConfigurationsListComponent {
|
|
|
2796
2966
|
this.onConfigurationClicked = output();
|
|
2797
2967
|
}
|
|
2798
2968
|
ngOnInit() {
|
|
2799
|
-
this.manageEntityConfigurations
|
|
2969
|
+
this.manageEntityConfigurations
|
|
2970
|
+
.loadEntityConfigurations()
|
|
2800
2971
|
.then(() => {
|
|
2801
2972
|
this.items = this.configurationsToItems(this.manageEntityConfigurations.entityConfigurations);
|
|
2802
|
-
})
|
|
2973
|
+
})
|
|
2974
|
+
.catch((err) => {
|
|
2803
2975
|
console.log(err);
|
|
2804
2976
|
});
|
|
2805
2977
|
}
|
|
2806
2978
|
configurationsToItems(entityConfigurations) {
|
|
2807
|
-
console.log(
|
|
2979
|
+
console.log('entityConfigsToItems', entityConfigurations);
|
|
2808
2980
|
return entityConfigurations.map((ec) => {
|
|
2809
2981
|
return {
|
|
2810
2982
|
label: ec.name,
|
|
@@ -2812,7 +2984,7 @@ class EntitiesConfigurationsListComponent {
|
|
|
2812
2984
|
command: () => {
|
|
2813
2985
|
this.selectedEntityConfiguration = ec;
|
|
2814
2986
|
this.onConfigurationClicked.emit(ec);
|
|
2815
|
-
}
|
|
2987
|
+
},
|
|
2816
2988
|
};
|
|
2817
2989
|
});
|
|
2818
2990
|
}
|
|
@@ -2821,13 +2993,160 @@ class EntitiesConfigurationsListComponent {
|
|
|
2821
2993
|
}
|
|
2822
2994
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EntitiesConfigurationsListComponent, decorators: [{
|
|
2823
2995
|
type: Component,
|
|
2824
|
-
args: [{ selector: 'rtsee-entities-configurations-list', imports: [
|
|
2825
|
-
Menu
|
|
2826
|
-
], template: "<div class=\"rtsee-entities-configurations-list\">\n <p-menu [model]=\"items\" />\n</div>\n" }]
|
|
2996
|
+
args: [{ selector: 'rtsee-entities-configurations-list', imports: [Menu], template: "<div class=\"rtsee-entities-configurations-list\">\n <p-menu [model]=\"items\" />\n</div>\n" }]
|
|
2827
2997
|
}], propDecorators: { manageEntityConfigurations: [{
|
|
2828
2998
|
type: Input
|
|
2829
2999
|
}] } });
|
|
2830
3000
|
|
|
3001
|
+
class ManageRatingConfigurationComponent {
|
|
3002
|
+
constructor(formBuilder) {
|
|
3003
|
+
this.formBuilder = formBuilder;
|
|
3004
|
+
this.ratingConfigurationForm = this.getRatingConfigurationForm();
|
|
3005
|
+
}
|
|
3006
|
+
ngOnInit() {
|
|
3007
|
+
this.presetFields();
|
|
3008
|
+
}
|
|
3009
|
+
presetFields() {
|
|
3010
|
+
if (!this.ratingConfiguration) {
|
|
3011
|
+
return;
|
|
3012
|
+
}
|
|
3013
|
+
this.nameField.setValue(this.ratingConfiguration.name);
|
|
3014
|
+
this.descriptionField.setValue(this.ratingConfiguration.description || '');
|
|
3015
|
+
this.maxRateField.setValue(this.ratingConfiguration.maxRateValue || 5);
|
|
3016
|
+
this.stepField.setValue(this.ratingConfiguration.stepValue || 1);
|
|
3017
|
+
}
|
|
3018
|
+
async submit() {
|
|
3019
|
+
if (!this.manageRatingConfigurations.entityConfigurationId) {
|
|
3020
|
+
throw new Error(`No entity config id found`);
|
|
3021
|
+
}
|
|
3022
|
+
if (this.ratingConfigurationForm.invalid ||
|
|
3023
|
+
!this.manageRatingConfigurations.applicationId) {
|
|
3024
|
+
console.log('Form Invalid!');
|
|
3025
|
+
return;
|
|
3026
|
+
}
|
|
3027
|
+
const configurationParams = {
|
|
3028
|
+
name: this.nameField.getRawValue(),
|
|
3029
|
+
description: this.descriptionField.getRawValue(),
|
|
3030
|
+
entityConfigurationId: this.manageRatingConfigurations.entityConfigurationId,
|
|
3031
|
+
applicationId: this.manageRatingConfigurations.applicationId,
|
|
3032
|
+
maxRateValue: this.maxRateField.getRawValue(),
|
|
3033
|
+
stepValue: this.stepField.getRawValue(),
|
|
3034
|
+
};
|
|
3035
|
+
if (this.ratingConfiguration?.id) {
|
|
3036
|
+
await this.manageRatingConfigurations.updateRatingConfiguration({
|
|
3037
|
+
...configurationParams,
|
|
3038
|
+
id: this.ratingConfiguration.id,
|
|
3039
|
+
});
|
|
3040
|
+
}
|
|
3041
|
+
else {
|
|
3042
|
+
await this.manageRatingConfigurations.createRatingConfiguration(configurationParams);
|
|
3043
|
+
}
|
|
3044
|
+
}
|
|
3045
|
+
cancel() {
|
|
3046
|
+
console.log('cancel');
|
|
3047
|
+
}
|
|
3048
|
+
getRatingConfigurationForm() {
|
|
3049
|
+
return this.formBuilder.group({
|
|
3050
|
+
name: this.formBuilder.control('', {
|
|
3051
|
+
validators: [
|
|
3052
|
+
Validators.required,
|
|
3053
|
+
Validators.minLength(3),
|
|
3054
|
+
Validators.maxLength(131),
|
|
3055
|
+
],
|
|
3056
|
+
}),
|
|
3057
|
+
description: this.formBuilder.control('', {
|
|
3058
|
+
validators: [
|
|
3059
|
+
Validators.required,
|
|
3060
|
+
Validators.minLength(6),
|
|
3061
|
+
Validators.maxLength(244),
|
|
3062
|
+
],
|
|
3063
|
+
}),
|
|
3064
|
+
maxRate: this.formBuilder.control(5, {
|
|
3065
|
+
validators: [Validators.required, Validators.min(4)],
|
|
3066
|
+
}),
|
|
3067
|
+
step: this.formBuilder.control(1, {
|
|
3068
|
+
validators: [Validators.required, Validators.min(1)],
|
|
3069
|
+
}),
|
|
3070
|
+
});
|
|
3071
|
+
}
|
|
3072
|
+
get nameField() {
|
|
3073
|
+
return this.ratingConfigurationForm.get('name');
|
|
3074
|
+
}
|
|
3075
|
+
get descriptionField() {
|
|
3076
|
+
return this.ratingConfigurationForm.get('description');
|
|
3077
|
+
}
|
|
3078
|
+
get maxRateField() {
|
|
3079
|
+
return this.ratingConfigurationForm.get('maxRate');
|
|
3080
|
+
}
|
|
3081
|
+
get stepField() {
|
|
3082
|
+
return this.ratingConfigurationForm.get('step');
|
|
3083
|
+
}
|
|
3084
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageRatingConfigurationComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3085
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: ManageRatingConfigurationComponent, isStandalone: true, selector: "rtsee-manage-rating-configuration", inputs: { manageRatingConfigurations: "manageRatingConfigurations", ratingConfiguration: "ratingConfiguration" }, ngImport: i0, template: "<div class=\"rtsee-manage-rating-configuration\">\n <div class=\"rtsee-form-container\">\n <form class=\"rtsee-rating-configuration-form rtsee-form\"\n [formGroup]=\"ratingConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-rating-configuration-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-rating-configuration-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-rating-configuration-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-rating-configuration-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"maxRateField\"\n [min]=\"1\"\n [max]=\"10\"\n id=\"rtsee-rating-configuration-max-rate-field\"\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n />\n <label for=\"rtsee-rating-configuration-max-rate-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Max rate is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"stepField\"\n [min]=\"1\"\n [max]=\"2\"\n id=\"rtsee-rating-configuration-step-field\"\n [class.p-invalid]=\"stepField.invalid && stepField.touched\"\n />\n <label for=\"rtsee-rating-configuration-step-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Step is required</p-message>\n }\n </div>\n\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }] }); }
|
|
3086
|
+
}
|
|
3087
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageRatingConfigurationComponent, decorators: [{
|
|
3088
|
+
type: Component,
|
|
3089
|
+
args: [{ selector: 'rtsee-manage-rating-configuration', imports: [
|
|
3090
|
+
Button,
|
|
3091
|
+
FloatLabel,
|
|
3092
|
+
FormsModule,
|
|
3093
|
+
InputGroup,
|
|
3094
|
+
InputText,
|
|
3095
|
+
Message,
|
|
3096
|
+
ReactiveFormsModule,
|
|
3097
|
+
Textarea,
|
|
3098
|
+
InputNumber,
|
|
3099
|
+
], template: "<div class=\"rtsee-manage-rating-configuration\">\n <div class=\"rtsee-form-container\">\n <form class=\"rtsee-rating-configuration-form rtsee-form\"\n [formGroup]=\"ratingConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-rating-configuration-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-rating-configuration-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-rating-configuration-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-rating-configuration-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"maxRateField\"\n [min]=\"1\"\n [max]=\"10\"\n id=\"rtsee-rating-configuration-max-rate-field\"\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n />\n <label for=\"rtsee-rating-configuration-max-rate-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Max rate is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"stepField\"\n [min]=\"1\"\n [max]=\"2\"\n id=\"rtsee-rating-configuration-step-field\"\n [class.p-invalid]=\"stepField.invalid && stepField.touched\"\n />\n <label for=\"rtsee-rating-configuration-step-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Step is required</p-message>\n }\n </div>\n\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
3100
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageRatingConfigurations: [{
|
|
3101
|
+
type: Input
|
|
3102
|
+
}], ratingConfiguration: [{
|
|
3103
|
+
type: Input
|
|
3104
|
+
}] } });
|
|
3105
|
+
|
|
3106
|
+
class RatingConfigurationsListComponent {
|
|
3107
|
+
constructor() {
|
|
3108
|
+
this.items = [];
|
|
3109
|
+
this.onRatingConfigurationClicked = output();
|
|
3110
|
+
}
|
|
3111
|
+
ngOnInit() {
|
|
3112
|
+
this.manageRatingConfigurations
|
|
3113
|
+
.loadRatingConfigurations(this.entityConfiguration.id)
|
|
3114
|
+
.then(() => {
|
|
3115
|
+
this.items = this.ratingConfigurationsToItems(this.manageRatingConfigurations.ratingConfigurations);
|
|
3116
|
+
})
|
|
3117
|
+
.catch((err) => {
|
|
3118
|
+
console.log(err);
|
|
3119
|
+
});
|
|
3120
|
+
}
|
|
3121
|
+
onCreateClicked() {
|
|
3122
|
+
this.manageRatingConfigurations.setBlankActiveConfiguration();
|
|
3123
|
+
this.selectedRatingConfiguration =
|
|
3124
|
+
this.manageRatingConfigurations.activeRatingConfiguration || undefined;
|
|
3125
|
+
}
|
|
3126
|
+
ratingConfigurationsToItems(ratingConfigurations) {
|
|
3127
|
+
return ratingConfigurations.map((rc) => {
|
|
3128
|
+
return {
|
|
3129
|
+
label: rc.name,
|
|
3130
|
+
isSelected: false,
|
|
3131
|
+
command: () => {
|
|
3132
|
+
this.selectedRatingConfiguration = rc;
|
|
3133
|
+
this.onRatingConfigurationClicked.emit(rc);
|
|
3134
|
+
},
|
|
3135
|
+
};
|
|
3136
|
+
});
|
|
3137
|
+
}
|
|
3138
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingConfigurationsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3139
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RatingConfigurationsListComponent, isStandalone: true, selector: "rtsee-rating-configurations-list", inputs: { entityConfiguration: "entityConfiguration", manageRatingConfigurations: "manageRatingConfigurations" }, outputs: { onRatingConfigurationClicked: "onRatingConfigurationClicked" }, ngImport: i0, template: "<div class=\"rtsee-rating-configurations-list\">\n <p-divider></p-divider>\n <p>Rating Configurations</p>\n @if (selectedRatingConfiguration) {\n <rtsee-manage-rating-configuration [manageRatingConfigurations]=\"manageRatingConfigurations\"\n [ratingConfiguration]=\"selectedRatingConfiguration\"\n ></rtsee-manage-rating-configuration>\n } @else {\n <div class=\"rtsee-rating-configurations-controls\">\n <p-button label=\"Create\" (click)=\"onCreateClicked()\"></p-button>\n </div>\n <div class=\"rtsee-rating-configurations-list-items\">\n <p-menu [model]=\"items\" />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }, { kind: "component", type: ManageRatingConfigurationComponent, selector: "rtsee-manage-rating-configuration", inputs: ["manageRatingConfigurations", "ratingConfiguration"] }] }); }
|
|
3140
|
+
}
|
|
3141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingConfigurationsListComponent, decorators: [{
|
|
3142
|
+
type: Component,
|
|
3143
|
+
args: [{ selector: 'rtsee-rating-configurations-list', imports: [Menu, Button, Divider, ManageRatingConfigurationComponent], template: "<div class=\"rtsee-rating-configurations-list\">\n <p-divider></p-divider>\n <p>Rating Configurations</p>\n @if (selectedRatingConfiguration) {\n <rtsee-manage-rating-configuration [manageRatingConfigurations]=\"manageRatingConfigurations\"\n [ratingConfiguration]=\"selectedRatingConfiguration\"\n ></rtsee-manage-rating-configuration>\n } @else {\n <div class=\"rtsee-rating-configurations-controls\">\n <p-button label=\"Create\" (click)=\"onCreateClicked()\"></p-button>\n </div>\n <div class=\"rtsee-rating-configurations-list-items\">\n <p-menu [model]=\"items\" />\n </div>\n }\n</div>\n" }]
|
|
3144
|
+
}], propDecorators: { entityConfiguration: [{
|
|
3145
|
+
type: Input
|
|
3146
|
+
}], manageRatingConfigurations: [{
|
|
3147
|
+
type: Input
|
|
3148
|
+
}] } });
|
|
3149
|
+
|
|
2831
3150
|
class ManageEntityConfigurationComponent {
|
|
2832
3151
|
constructor(formBuilder) {
|
|
2833
3152
|
this.formBuilder = formBuilder;
|
|
@@ -2847,7 +3166,8 @@ class ManageEntityConfigurationComponent {
|
|
|
2847
3166
|
if (!this.manageEntityConfigurations.activeEntityConfiguration) {
|
|
2848
3167
|
throw new Error(`Active entityConfiguration should be selected`);
|
|
2849
3168
|
}
|
|
2850
|
-
if (this.entityConfigurationForm.invalid ||
|
|
3169
|
+
if (this.entityConfigurationForm.invalid ||
|
|
3170
|
+
!this.manageEntityConfigurations.peer.rtseeAppId) {
|
|
2851
3171
|
console.log('Form Invalid!');
|
|
2852
3172
|
return;
|
|
2853
3173
|
}
|
|
@@ -2862,7 +3182,7 @@ class ManageEntityConfigurationComponent {
|
|
|
2862
3182
|
if (this.manageEntityConfigurations.activeEntityConfiguration.id) {
|
|
2863
3183
|
await this.manageEntityConfigurations.updateEntityConfiguration({
|
|
2864
3184
|
...configurationParams,
|
|
2865
|
-
id: this.manageEntityConfigurations.activeEntityConfiguration.id
|
|
3185
|
+
id: this.manageEntityConfigurations.activeEntityConfiguration.id,
|
|
2866
3186
|
});
|
|
2867
3187
|
}
|
|
2868
3188
|
else {
|
|
@@ -2885,19 +3205,19 @@ class ManageEntityConfigurationComponent {
|
|
|
2885
3205
|
validators: [
|
|
2886
3206
|
Validators.required,
|
|
2887
3207
|
Validators.minLength(3),
|
|
2888
|
-
Validators.maxLength(131)
|
|
2889
|
-
]
|
|
3208
|
+
Validators.maxLength(131),
|
|
3209
|
+
],
|
|
2890
3210
|
}),
|
|
2891
3211
|
description: this.formBuilder.control('', {
|
|
2892
3212
|
validators: [
|
|
2893
3213
|
Validators.required,
|
|
2894
3214
|
Validators.minLength(6),
|
|
2895
|
-
Validators.maxLength(244)
|
|
2896
|
-
]
|
|
3215
|
+
Validators.maxLength(244),
|
|
3216
|
+
],
|
|
2897
3217
|
}),
|
|
2898
3218
|
taggingEnabled: this.formBuilder.control(false),
|
|
2899
3219
|
commentsEnabled: this.formBuilder.control(false),
|
|
2900
|
-
ratingEnabled: this.formBuilder.control(false)
|
|
3220
|
+
ratingEnabled: this.formBuilder.control(false),
|
|
2901
3221
|
});
|
|
2902
3222
|
}
|
|
2903
3223
|
get nameField() {
|
|
@@ -2916,7 +3236,7 @@ class ManageEntityConfigurationComponent {
|
|
|
2916
3236
|
return this.entityConfigurationForm.get('ratingEnabled');
|
|
2917
3237
|
}
|
|
2918
3238
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageEntityConfigurationComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2919
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: ManageEntityConfigurationComponent, isStandalone: true, selector: "rtsee-manage-entity-configuration", inputs: { manageEntityConfigurations: "manageEntityConfigurations" }, ngImport: i0, template: "<div class=\"rtsee-manage-entity-configuration\">\n <div class=\"rtsee-manage-entity-configuration-info rtsee-form-container\">\n <form class=\"rtsee-entity-configuration-form rtsee-form\"\n [formGroup]=\"entityConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-entity-config-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-entity-config-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-entity-config-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-entity-config-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n\n @if (manageEntityConfigurations && manageEntityConfigurations.tagGroupsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageEntityConfigurations.tagGroupsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n <div class=\"rtsee-form-field-container\">\n <p>Tagging Enabled</p>\n <p-toggleswitch name=\"tagging-enabled\" formControlName=\"taggingEnabled\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Comments Enabled</p>\n <p-toggleswitch name=\"comments-enabled\" formControlName=\"commentsEnabled\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Rating Enabled</p>\n <p-toggleswitch name=\"ratings-enabled\" formControlName=\"ratingEnabled\"/>\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "rtsee-autocomplete", inputs: ["config"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }] }); }
|
|
3239
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: ManageEntityConfigurationComponent, isStandalone: true, selector: "rtsee-manage-entity-configuration", inputs: { manageEntityConfigurations: "manageEntityConfigurations" }, ngImport: i0, template: "<div class=\"rtsee-manage-entity-configuration\">\n <div class=\"rtsee-manage-entity-configuration-info rtsee-form-container\">\n <form class=\"rtsee-entity-configuration-form rtsee-form\"\n [formGroup]=\"entityConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-entity-config-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-entity-config-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-entity-config-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-entity-config-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n\n @if (manageEntityConfigurations && manageEntityConfigurations.tagGroupsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageEntityConfigurations.tagGroupsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n @if (manageEntityConfigurations.activeEntityConfiguration) {\n <rtsee-rating-configurations-list [entityConfiguration]=\"manageEntityConfigurations.activeEntityConfiguration\"\n [manageRatingConfigurations]=\"manageEntityConfigurations.activeEntityConfiguration.manageRatingConfigurations\"\n ></rtsee-rating-configurations-list>\n }\n\n <div class=\"rtsee-form-field-container\">\n <p>Tagging Enabled</p>\n <p-toggleswitch name=\"tagging-enabled\" formControlName=\"taggingEnabled\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Comments Enabled</p>\n <p-toggleswitch name=\"comments-enabled\" formControlName=\"commentsEnabled\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Rating Enabled</p>\n <p-toggleswitch name=\"ratings-enabled\" formControlName=\"ratingEnabled\"/>\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "rtsee-autocomplete", inputs: ["config"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "component", type: RatingConfigurationsListComponent, selector: "rtsee-rating-configurations-list", inputs: ["entityConfiguration", "manageRatingConfigurations"], outputs: ["onRatingConfigurationClicked"] }] }); }
|
|
2920
3240
|
}
|
|
2921
3241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageEntityConfigurationComponent, decorators: [{
|
|
2922
3242
|
type: Component,
|
|
@@ -2930,8 +3250,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2930
3250
|
Message,
|
|
2931
3251
|
Textarea,
|
|
2932
3252
|
ReactiveFormsModule,
|
|
2933
|
-
ToggleSwitch
|
|
2934
|
-
|
|
3253
|
+
ToggleSwitch,
|
|
3254
|
+
RatingConfigurationsListComponent,
|
|
3255
|
+
], template: "<div class=\"rtsee-manage-entity-configuration\">\n <div class=\"rtsee-manage-entity-configuration-info rtsee-form-container\">\n <form class=\"rtsee-entity-configuration-form rtsee-form\"\n [formGroup]=\"entityConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-entity-config-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-entity-config-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-entity-config-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-entity-config-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n\n @if (manageEntityConfigurations && manageEntityConfigurations.tagGroupsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageEntityConfigurations.tagGroupsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n @if (manageEntityConfigurations.activeEntityConfiguration) {\n <rtsee-rating-configurations-list [entityConfiguration]=\"manageEntityConfigurations.activeEntityConfiguration\"\n [manageRatingConfigurations]=\"manageEntityConfigurations.activeEntityConfiguration.manageRatingConfigurations\"\n ></rtsee-rating-configurations-list>\n }\n\n <div class=\"rtsee-form-field-container\">\n <p>Tagging Enabled</p>\n <p-toggleswitch name=\"tagging-enabled\" formControlName=\"taggingEnabled\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Comments Enabled</p>\n <p-toggleswitch name=\"comments-enabled\" formControlName=\"commentsEnabled\"/>\n </div>\n <div class=\"rtsee-form-field-container\">\n <p>Rating Enabled</p>\n <p-toggleswitch name=\"ratings-enabled\" formControlName=\"ratingEnabled\"/>\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
2935
3256
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageEntityConfigurations: [{
|
|
2936
3257
|
type: Input
|
|
2937
3258
|
}] } });
|
|
@@ -2942,15 +3263,17 @@ class EntitiesListComponent {
|
|
|
2942
3263
|
this.onEntityClicked = output();
|
|
2943
3264
|
}
|
|
2944
3265
|
ngOnInit() {
|
|
2945
|
-
this.manageEntities
|
|
3266
|
+
this.manageEntities
|
|
3267
|
+
.loadEntities()
|
|
2946
3268
|
.then(() => {
|
|
2947
3269
|
this.items = this.entitiesToItems(this.manageEntities.entities);
|
|
2948
|
-
})
|
|
3270
|
+
})
|
|
3271
|
+
.catch((err) => {
|
|
2949
3272
|
console.log(err);
|
|
2950
3273
|
});
|
|
2951
3274
|
}
|
|
2952
3275
|
entitiesToItems(entityConfigurations) {
|
|
2953
|
-
console.log(
|
|
3276
|
+
console.log('entityConfigsToItems', entityConfigurations);
|
|
2954
3277
|
return entityConfigurations.map((et) => {
|
|
2955
3278
|
return {
|
|
2956
3279
|
label: et.name,
|
|
@@ -2958,7 +3281,7 @@ class EntitiesListComponent {
|
|
|
2958
3281
|
command: () => {
|
|
2959
3282
|
this.selectedEntity = et;
|
|
2960
3283
|
this.onEntityClicked.emit(et);
|
|
2961
|
-
}
|
|
3284
|
+
},
|
|
2962
3285
|
};
|
|
2963
3286
|
});
|
|
2964
3287
|
}
|
|
@@ -2967,9 +3290,7 @@ class EntitiesListComponent {
|
|
|
2967
3290
|
}
|
|
2968
3291
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EntitiesListComponent, decorators: [{
|
|
2969
3292
|
type: Component,
|
|
2970
|
-
args: [{ selector: 'rtsee-entities-list', imports: [
|
|
2971
|
-
Menu
|
|
2972
|
-
], template: "<div class=\"rtsee-entities-list\">\n <p-menu [model]=\"items\" />\n</div>\n" }]
|
|
3293
|
+
args: [{ selector: 'rtsee-entities-list', imports: [Menu], template: "<div class=\"rtsee-entities-list\">\n <p-menu [model]=\"items\" />\n</div>\n" }]
|
|
2973
3294
|
}], propDecorators: { manageEntities: [{
|
|
2974
3295
|
type: Input
|
|
2975
3296
|
}] } });
|
|
@@ -3003,12 +3324,12 @@ class ManageEntityComponent {
|
|
|
3003
3324
|
configurationId: this.configurationIdField.getRawValue(),
|
|
3004
3325
|
imageUrl: this.imageUrlField.getRawValue(),
|
|
3005
3326
|
tags: [],
|
|
3006
|
-
tagIds: []
|
|
3327
|
+
tagIds: [],
|
|
3007
3328
|
};
|
|
3008
3329
|
if (this.manageEntities.activeEntity.id) {
|
|
3009
3330
|
await this.manageEntities.updateEntity({
|
|
3010
3331
|
...entityParams,
|
|
3011
|
-
id: this.manageEntities.activeEntity.id
|
|
3332
|
+
id: this.manageEntities.activeEntity.id,
|
|
3012
3333
|
});
|
|
3013
3334
|
}
|
|
3014
3335
|
else {
|
|
@@ -3032,20 +3353,15 @@ class ManageEntityComponent {
|
|
|
3032
3353
|
validators: [
|
|
3033
3354
|
Validators.required,
|
|
3034
3355
|
Validators.minLength(3),
|
|
3035
|
-
Validators.maxLength(131)
|
|
3036
|
-
]
|
|
3356
|
+
Validators.maxLength(131),
|
|
3357
|
+
],
|
|
3037
3358
|
}),
|
|
3038
3359
|
configurationId: this.formBuilder.control('', {
|
|
3039
|
-
validators: [
|
|
3040
|
-
Validators.required,
|
|
3041
|
-
]
|
|
3360
|
+
validators: [Validators.required],
|
|
3042
3361
|
}),
|
|
3043
3362
|
imageUrl: this.formBuilder.control('', {
|
|
3044
|
-
validators: [
|
|
3045
|
-
|
|
3046
|
-
Validators.maxLength(244)
|
|
3047
|
-
]
|
|
3048
|
-
})
|
|
3363
|
+
validators: [Validators.minLength(6), Validators.maxLength(244)],
|
|
3364
|
+
}),
|
|
3049
3365
|
});
|
|
3050
3366
|
}
|
|
3051
3367
|
get nameField() {
|
|
@@ -3071,59 +3387,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3071
3387
|
Message,
|
|
3072
3388
|
ReactiveFormsModule,
|
|
3073
3389
|
Select,
|
|
3074
|
-
FormsModule
|
|
3390
|
+
FormsModule,
|
|
3075
3391
|
], template: "<div class=\"rtsee-manage-entity\">\n <div class=\"rtsee-manage-entity-info rtsee-form-container\">\n <form class=\"rtsee-entity-form rtsee-form\"\n [formGroup]=\"entityForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-entity-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-entity-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n @if (manageEntities.activeEntity) {\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"manageEntities.configurations\"\n [formControl]=\"configurationIdField\"\n inputId=\"configuration_input\"\n optionLabel=\"name\"\n optionValue=\"id\"\n class=\"rtsee-entity-configuration-input\" />\n <label for=\"configuration_input\">Entity Configuration</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (configurationIdField.hasError('required') && configurationIdField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Entity Configuration is required</p-message>\n }\n </div>\n }\n\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-entity-image-url-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"imageUrlField\"\n [class.p-invalid]=\"imageUrlField.invalid && imageUrlField.touched\"\n />\n <label for=\"rtsee-entity-image-url-field\">ImageUrl</label>\n </p-floatlabel>\n </p-inputgroup>\n </div>\n\n @if (manageEntities && manageEntities.tagsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageEntities.tagsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageEntities.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntities.saveInProgress\"\n />\n </form>\n </div>\n</div>\n" }]
|
|
3076
3392
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageEntities: [{
|
|
3077
3393
|
type: Input
|
|
3078
3394
|
}] } });
|
|
3079
3395
|
|
|
3080
|
-
class RtseeEntityCommentsComponent {
|
|
3081
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityCommentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3082
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEntityCommentsComponent, isStandalone: true, selector: "rtsee-entity-comments", inputs: { messenger: "messenger", chat: "chat" }, ngImport: i0, template: "<div class=\"rtsee-entity-comments\">\n @if (messenger && chat) {\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"chat\"\n ></rtsee-chat>\n }\n</div>\n", dependencies: [{ kind: "component", type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "chatData", "messenger"] }] }); }
|
|
3083
|
-
}
|
|
3084
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityCommentsComponent, decorators: [{
|
|
3085
|
-
type: Component,
|
|
3086
|
-
args: [{ selector: 'rtsee-entity-comments', imports: [
|
|
3087
|
-
ChatComponent
|
|
3088
|
-
], template: "<div class=\"rtsee-entity-comments\">\n @if (messenger && chat) {\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"chat\"\n ></rtsee-chat>\n }\n</div>\n" }]
|
|
3089
|
-
}], propDecorators: { messenger: [{
|
|
3090
|
-
type: Input
|
|
3091
|
-
}], chat: [{
|
|
3092
|
-
type: Input
|
|
3093
|
-
}] } });
|
|
3094
|
-
|
|
3095
|
-
class RtseeEntityTagsComponent {
|
|
3096
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityTagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3097
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEntityTagsComponent, isStandalone: true, selector: "rtsee-entity-tags", inputs: { entity: "entity" }, ngImport: i0, template: "<div class=\"rtsee-entity-tags\">\n @if (entity && entity.tags?.length) {\n <div class=\"rtsee-entity-tags-list\">\n @for (tag of entity.tags; track tag.id) {\n <p-chip class=\"rtsee-entity-tag\">\n <span class=\"rtsee-entity-tag-right\"\n >{{tag.name}}</span>\n </p-chip>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "disabled", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }] }); }
|
|
3098
|
-
}
|
|
3099
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityTagsComponent, decorators: [{
|
|
3100
|
-
type: Component,
|
|
3101
|
-
args: [{ selector: 'rtsee-entity-tags', imports: [
|
|
3102
|
-
Chip
|
|
3103
|
-
], template: "<div class=\"rtsee-entity-tags\">\n @if (entity && entity.tags?.length) {\n <div class=\"rtsee-entity-tags-list\">\n @for (tag of entity.tags; track tag.id) {\n <p-chip class=\"rtsee-entity-tag\">\n <span class=\"rtsee-entity-tag-right\"\n >{{tag.name}}</span>\n </p-chip>\n }\n </div>\n }\n</div>\n" }]
|
|
3104
|
-
}], propDecorators: { entity: [{
|
|
3105
|
-
type: Input
|
|
3106
|
-
}] } });
|
|
3107
|
-
|
|
3108
|
-
class RtseeEntityPreviewComponent {
|
|
3109
|
-
ngOnInit() {
|
|
3110
|
-
void this.entity.reload();
|
|
3111
|
-
}
|
|
3112
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3113
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEntityPreviewComponent, isStandalone: true, selector: "rtsee-entity-preview", inputs: { entity: "entity", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-entity-preview\">\n <div class=\"rtsee-entity-preview-tags\">\n <rtsee-entity-tags [entity]=\"entity\"></rtsee-entity-tags>\n </div>\n <div class=\"rtsee-entity-preview-comments\">\n @if (entity.comments && messenger) {\n <rtsee-entity-comments [messenger]=\"messenger\"\n [chat]=\"entity.comments\"\n ></rtsee-entity-comments>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: RtseeEntityCommentsComponent, selector: "rtsee-entity-comments", inputs: ["messenger", "chat"] }, { kind: "component", type: RtseeEntityTagsComponent, selector: "rtsee-entity-tags", inputs: ["entity"] }] }); }
|
|
3114
|
-
}
|
|
3115
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityPreviewComponent, decorators: [{
|
|
3116
|
-
type: Component,
|
|
3117
|
-
args: [{ selector: 'rtsee-entity-preview', imports: [
|
|
3118
|
-
RtseeEntityCommentsComponent,
|
|
3119
|
-
RtseeEntityTagsComponent
|
|
3120
|
-
], template: "<div class=\"rtsee-entity-preview\">\n <div class=\"rtsee-entity-preview-tags\">\n <rtsee-entity-tags [entity]=\"entity\"></rtsee-entity-tags>\n </div>\n <div class=\"rtsee-entity-preview-comments\">\n @if (entity.comments && messenger) {\n <rtsee-entity-comments [messenger]=\"messenger\"\n [chat]=\"entity.comments\"\n ></rtsee-entity-comments>\n }\n </div>\n</div>\n" }]
|
|
3121
|
-
}], propDecorators: { entity: [{
|
|
3122
|
-
type: Input
|
|
3123
|
-
}], messenger: [{
|
|
3124
|
-
type: Input
|
|
3125
|
-
}] } });
|
|
3126
|
-
|
|
3127
3396
|
class SignInComponent {
|
|
3128
3397
|
constructor(formBuilder, router, authService) {
|
|
3129
3398
|
this.formBuilder = formBuilder;
|
|
@@ -3132,13 +3401,13 @@ class SignInComponent {
|
|
|
3132
3401
|
this.signInForm = this.formBuilder.group({
|
|
3133
3402
|
username: this.formBuilder.nonNullable.control({
|
|
3134
3403
|
value: '',
|
|
3135
|
-
disabled: false
|
|
3404
|
+
disabled: false,
|
|
3136
3405
|
}, {
|
|
3137
|
-
validators: [Validators.required, Validators.email]
|
|
3406
|
+
validators: [Validators.required, Validators.email],
|
|
3138
3407
|
}),
|
|
3139
3408
|
password: this.formBuilder.nonNullable.control({
|
|
3140
3409
|
value: '',
|
|
3141
|
-
disabled: false
|
|
3410
|
+
disabled: false,
|
|
3142
3411
|
}, { validators: [Validators.required] }),
|
|
3143
3412
|
remember: this.formBuilder.nonNullable.control(false),
|
|
3144
3413
|
});
|
|
@@ -3160,23 +3429,22 @@ class SignInComponent {
|
|
|
3160
3429
|
login() {
|
|
3161
3430
|
if (this.signInForm.valid) {
|
|
3162
3431
|
this.disableFormFields();
|
|
3163
|
-
this.authService.signIn(this.signInForm.getRawValue())
|
|
3164
|
-
|
|
3165
|
-
next: (() => {
|
|
3432
|
+
this.authService.signIn(this.signInForm.getRawValue()).subscribe({
|
|
3433
|
+
next: () => {
|
|
3166
3434
|
void this.router.navigate(this.authService.rtseeAuth.authConfiguration.defaultPostLoginRoute);
|
|
3167
3435
|
this.enableFormFields();
|
|
3168
3436
|
setTimeout(() => {
|
|
3169
3437
|
window.location.reload();
|
|
3170
3438
|
}, 100);
|
|
3171
|
-
}
|
|
3172
|
-
error: (
|
|
3439
|
+
},
|
|
3440
|
+
error: (error) => {
|
|
3173
3441
|
console.log(error);
|
|
3174
3442
|
this.showServerSideErrorForXSeconds(error.error.message);
|
|
3175
3443
|
this.enableFormFields();
|
|
3176
|
-
}
|
|
3177
|
-
complete: (
|
|
3444
|
+
},
|
|
3445
|
+
complete: () => {
|
|
3178
3446
|
this.enableFormFields();
|
|
3179
|
-
}
|
|
3447
|
+
},
|
|
3180
3448
|
});
|
|
3181
3449
|
}
|
|
3182
3450
|
else {
|
|
@@ -3217,14 +3485,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3217
3485
|
FloatLabel,
|
|
3218
3486
|
Checkbox,
|
|
3219
3487
|
Message,
|
|
3220
|
-
ProgressSpinner
|
|
3488
|
+
ProgressSpinner,
|
|
3221
3489
|
], standalone: true, template: "<div class=\"auth-container rtsee-form-container\" >\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">{{ authService.rtseeAuth.labels[RTSeeTextLabelKeys.SIGN_IN_FORM_HEADER] }}</h2>\n <p class=\"auth-title-description\">{{ authService.rtseeAuth.labels[RTSeeTextLabelKeys.SIGN_IN_TEXT_SUBHEADER] }}</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"signInForm\" (ngSubmit)=\"login()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup >\n <p-floatlabel variant=\"on\">\n <input id=\"user-email\"\n pInputText\n [formControl]=\"usernameField\"\n />\n <label for=\"user-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!usernameField.valid && usernameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is invalid</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"user-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n />\n <label for=\"user-password\">Password</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (!passwordField.valid && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n @if (serverSideError) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{serverSideError}}</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-checkbox inputId=\"remember\" [binary]=\"true\" [formControl]=\"rememberField\" />\n <label for=\"remember\" class=\"ml-2\">\n <span>\n {{authService.rtseeAuth.labels[RTSeeTextLabelKeys.REMEMBER_ME_CHECKBOX_LABEL] }}\n </span>\n </label>\n </div>\n <div class=\"rtsee-form-field-container\">\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.FORGOT_PASSWORD)\"\n class=\"auth-deep-blue-sm-medium\"\n >Forgot password?</a>\n </div>\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Sign In\"\n [disabled]=\"loadInProgress\"\n />\n @if (loadInProgress) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n <p class=\"rtsee-form-label\">\n <span>Don't have an account?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"auth-deep-blue-sm-medium\"\n >Create one!</a>\n </p>\n</div>\n" }]
|
|
3222
3490
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3223
3491
|
|
|
3224
3492
|
class UtilsService {
|
|
3225
|
-
constructor() {
|
|
3226
|
-
}
|
|
3493
|
+
constructor() { }
|
|
3227
3494
|
static getKeysAsValueObject(obj) {
|
|
3495
|
+
// object was {}
|
|
3228
3496
|
if (obj) {
|
|
3229
3497
|
return Object.keys(obj).reduce((result, value) => {
|
|
3230
3498
|
result[value] = value;
|
|
@@ -3239,7 +3507,7 @@ class UtilsService {
|
|
|
3239
3507
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: UtilsService, decorators: [{
|
|
3240
3508
|
type: Injectable,
|
|
3241
3509
|
args: [{
|
|
3242
|
-
providedIn: 'root'
|
|
3510
|
+
providedIn: 'root',
|
|
3243
3511
|
}]
|
|
3244
3512
|
}], ctorParameters: () => [] });
|
|
3245
3513
|
|
|
@@ -3258,7 +3526,7 @@ class ConfirmPasswordValidator {
|
|
|
3258
3526
|
const passwordConfirmation = passwordConfirmationField.getRawValue();
|
|
3259
3527
|
if (password !== passwordConfirmation) {
|
|
3260
3528
|
return {
|
|
3261
|
-
confirmPassword: true
|
|
3529
|
+
confirmPassword: true,
|
|
3262
3530
|
};
|
|
3263
3531
|
}
|
|
3264
3532
|
return null;
|
|
@@ -3275,16 +3543,18 @@ class SignUpComponent {
|
|
|
3275
3543
|
this.errorMessage = '';
|
|
3276
3544
|
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
3277
3545
|
this.signUpForm = this.formBuilder.group({
|
|
3278
|
-
email: this.formBuilder.control('', {
|
|
3279
|
-
|
|
3546
|
+
email: this.formBuilder.control('', {
|
|
3547
|
+
validators: [Validators.required, Validators.email],
|
|
3548
|
+
}),
|
|
3549
|
+
password: this.formBuilder.control('', {
|
|
3550
|
+
validators: [Validators.required, Validators.minLength(6)],
|
|
3551
|
+
}),
|
|
3280
3552
|
passwordConfirmation: this.formBuilder.control('', {
|
|
3281
|
-
validators: [
|
|
3282
|
-
Validators.required,
|
|
3283
|
-
Validators.minLength(6)
|
|
3284
|
-
]
|
|
3553
|
+
validators: [Validators.required, Validators.minLength(6)],
|
|
3285
3554
|
}),
|
|
3286
|
-
terms: this.formBuilder.control(false, {
|
|
3287
|
-
|
|
3555
|
+
terms: this.formBuilder.control(false, {
|
|
3556
|
+
nonNullable: true,
|
|
3557
|
+
validators: [Validators.requiredTrue],
|
|
3288
3558
|
}),
|
|
3289
3559
|
}, { validators: [ConfirmPasswordValidator.MatchFields] });
|
|
3290
3560
|
this.signUpFormKeys = UtilsService.getKeysAsValueObject(this.signUpForm.getRawValue());
|
|
@@ -3309,22 +3579,27 @@ class SignUpComponent {
|
|
|
3309
3579
|
this.errorMessage = '';
|
|
3310
3580
|
this.successMessage = '';
|
|
3311
3581
|
const formValues = this.signUpForm.getRawValue();
|
|
3312
|
-
this.authService
|
|
3582
|
+
this.authService
|
|
3583
|
+
.signUp({
|
|
3313
3584
|
email: formValues.email,
|
|
3314
3585
|
password: formValues.password,
|
|
3315
|
-
terms: formValues.terms
|
|
3316
|
-
})
|
|
3586
|
+
terms: formValues.terms,
|
|
3587
|
+
})
|
|
3588
|
+
.subscribe({
|
|
3317
3589
|
next: (response) => {
|
|
3318
3590
|
this.loadInProgress = false;
|
|
3319
|
-
this.successMessage =
|
|
3591
|
+
this.successMessage =
|
|
3592
|
+
'Registration successful! You can now sign in.';
|
|
3320
3593
|
void this.router.navigate(this.authConfiguration.getRoutePathSplit(this.AuthEndpointsKeys.SIGN_IN));
|
|
3321
3594
|
console.log('User registered successfully', response);
|
|
3322
3595
|
},
|
|
3323
3596
|
error: (error) => {
|
|
3324
3597
|
this.loadInProgress = false;
|
|
3325
|
-
this.errorMessage =
|
|
3598
|
+
this.errorMessage =
|
|
3599
|
+
error.error?.message ||
|
|
3600
|
+
'Error during registration. Please try again.';
|
|
3326
3601
|
console.error('Error during registration', error);
|
|
3327
|
-
}
|
|
3602
|
+
},
|
|
3328
3603
|
});
|
|
3329
3604
|
}
|
|
3330
3605
|
}
|
|
@@ -3344,7 +3619,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3344
3619
|
FloatLabel,
|
|
3345
3620
|
Checkbox,
|
|
3346
3621
|
Message,
|
|
3347
|
-
ProgressSpinner
|
|
3622
|
+
ProgressSpinner,
|
|
3348
3623
|
], standalone: true, template: "<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Personal Account Registration</h2>\n <p class=\"auth-title-description\">Create your personal account to view stories</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"sign-up-email\"\n pInputText\n [formControl]=\"emailField\"\n [class.p-invalid]=\"emailField.invalid && emailField.touched\"\n />\n <label for=\"sign-up-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (emailField.hasError('required') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is required</p-message>\n }\n @if (emailField.hasError('email') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Please enter a valid email address</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"sign-up-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n [styleClass]=\"(passwordField.invalid && passwordField.touched) || (signUpForm.hasError('confirmPassword') && passwordField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"sign-up-password\">Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (passwordField.hasError('required') && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n @if (passwordField.hasError('minlength') && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password must be at least 6 characters long</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"confirm-password\"\n [formControl]=\"passwordConfirmationField\"\n [feedback]=\"false\"\n [styleClass]=\"(passwordConfirmationField.invalid && passwordConfirmationField.touched) || (signUpForm.hasError('confirmPassword') && passwordConfirmationField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"confirm-password\">Confirm Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (passwordConfirmationField.hasError('required') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation is required</p-message>\n }\n @if (passwordConfirmationField.hasError('minlength') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation must be at least 6 characters long</p-message>\n }\n @if (signUpForm.hasError('confirmPassword') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Passwords do not match</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n <div class=\"rtsee-form-field-container\">\n <p-checkbox inputId=\"terms\" [binary]=\"true\" [formControl]=\"termsField\" />\n <label for=\"terms\" class=\"ml-2\">I agree to the <a href=\"#\" [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.PRIVACY_POLICY)\" class=\"auth-deep-blue-sm-medium\">terms of use</a></label>\n @if (termsField.hasError('required') && termsField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >You must accept the terms and conditions</p-message>\n }\n </div>\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Sign Up\"\n [disabled]=\"loadInProgress\"\n />\n @if (loadInProgress) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Already have an account?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"auth-deep-blue-sm-medium\"\n >Sign In</a>\n </p>\n</div>\n" }]
|
|
3349
3624
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3350
3625
|
|
|
@@ -3358,7 +3633,9 @@ class ForgotPasswordComponent {
|
|
|
3358
3633
|
this.errorMessage = '';
|
|
3359
3634
|
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
3360
3635
|
this.emailForm = this.formBuilder.group({
|
|
3361
|
-
email: this.formBuilder.nonNullable.control('', {
|
|
3636
|
+
email: this.formBuilder.nonNullable.control('', {
|
|
3637
|
+
validators: [Validators.required, Validators.email],
|
|
3638
|
+
}),
|
|
3362
3639
|
});
|
|
3363
3640
|
this.forgotPasswordFormKeys = UtilsService.getKeysAsValueObject(this.emailForm.getRawValue());
|
|
3364
3641
|
this.authConfiguration = this.authService.rtseeAuth.authConfiguration;
|
|
@@ -3373,18 +3650,23 @@ class ForgotPasswordComponent {
|
|
|
3373
3650
|
this.errorMessage = '';
|
|
3374
3651
|
this.successMessage = '';
|
|
3375
3652
|
const email = this.emailForm.getRawValue().email;
|
|
3376
|
-
this.authService
|
|
3653
|
+
this.authService
|
|
3654
|
+
.forgotPassword({ email })
|
|
3655
|
+
.subscribe({
|
|
3377
3656
|
next: (response) => {
|
|
3378
3657
|
this.isLoading = false;
|
|
3379
|
-
this.successMessage =
|
|
3658
|
+
this.successMessage =
|
|
3659
|
+
response.message || 'Password reset email sent successfully!';
|
|
3380
3660
|
console.log('Password reset email sent successfully', response);
|
|
3381
3661
|
void this.router.navigate(this.authConfiguration.getRoutePathSplit(this.AuthEndpointsKeys.SIGN_IN));
|
|
3382
3662
|
},
|
|
3383
3663
|
error: (error) => {
|
|
3384
3664
|
this.isLoading = false;
|
|
3385
|
-
this.errorMessage =
|
|
3665
|
+
this.errorMessage =
|
|
3666
|
+
error.error?.message ||
|
|
3667
|
+
'Error sending password reset email. Please try again.';
|
|
3386
3668
|
console.error('Error sending password reset email', error);
|
|
3387
|
-
}
|
|
3669
|
+
},
|
|
3388
3670
|
});
|
|
3389
3671
|
}
|
|
3390
3672
|
}
|
|
@@ -3402,7 +3684,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3402
3684
|
InputText,
|
|
3403
3685
|
FloatLabel,
|
|
3404
3686
|
Message,
|
|
3405
|
-
ProgressSpinner
|
|
3687
|
+
ProgressSpinner,
|
|
3406
3688
|
], standalone: true, template: "<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Password Recovery</h2>\n <p class=\"auth-title-description\">Enter your email address to receive password reset instructions</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"emailForm\" (ngSubmit)=\"submitEmail()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"forgot-password-email\"\n pInputText\n [formControl]=\"emailField\"\n [class.p-invalid]=\"emailField.invalid && emailField.touched\"\n />\n <label for=\"forgot-password-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (emailField.hasError('required') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is required</p-message>\n }\n @if (emailField.hasError('email') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Please enter a valid email address</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Send\"\n [disabled]=\"isLoading\"\n />\n @if (isLoading) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Remember your password?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"auth-deep-blue-sm-medium\"\n >Sign In</a>\n </p>\n</div>\n" }]
|
|
3407
3689
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3408
3690
|
|
|
@@ -3427,13 +3709,25 @@ class ResetPasswordComponent {
|
|
|
3427
3709
|
this.errorMessage = '';
|
|
3428
3710
|
this.hidePassword = {
|
|
3429
3711
|
password: true,
|
|
3430
|
-
passwordConfirm: true
|
|
3712
|
+
passwordConfirm: true,
|
|
3431
3713
|
};
|
|
3432
3714
|
this.FormErrorKey = FormErrorKey;
|
|
3433
3715
|
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
3434
3716
|
this.resetPasswordForm = this.formBuilder.group({
|
|
3435
|
-
password: this.formBuilder.control('', {
|
|
3436
|
-
|
|
3717
|
+
password: this.formBuilder.control('', {
|
|
3718
|
+
validators: [
|
|
3719
|
+
Validators.required,
|
|
3720
|
+
Validators.minLength(COMMON_CONSTANTS.minPasswordLength),
|
|
3721
|
+
],
|
|
3722
|
+
nonNullable: true,
|
|
3723
|
+
}),
|
|
3724
|
+
passwordConfirm: this.formBuilder.control('', {
|
|
3725
|
+
validators: [
|
|
3726
|
+
Validators.required,
|
|
3727
|
+
Validators.minLength(COMMON_CONSTANTS.minPasswordLength),
|
|
3728
|
+
],
|
|
3729
|
+
nonNullable: true,
|
|
3730
|
+
}),
|
|
3437
3731
|
}, { validators: [this.passwordMatchValidator()] });
|
|
3438
3732
|
this.passwordFormKeys = UtilsService.getKeysAsValueObject(this.resetPasswordForm.value);
|
|
3439
3733
|
this.authConfiguration = this.authService.authConfiguration;
|
|
@@ -3454,22 +3748,27 @@ class ResetPasswordComponent {
|
|
|
3454
3748
|
this.errorMessage = '';
|
|
3455
3749
|
this.successMessage = '';
|
|
3456
3750
|
const formValues = this.resetPasswordForm.getRawValue();
|
|
3457
|
-
this.authService
|
|
3751
|
+
this.authService
|
|
3752
|
+
.resetPassword({
|
|
3458
3753
|
password: formValues.password,
|
|
3459
3754
|
passwordConfirm: formValues.passwordConfirm,
|
|
3460
|
-
token: this.token
|
|
3461
|
-
})
|
|
3755
|
+
token: this.token,
|
|
3756
|
+
})
|
|
3757
|
+
.subscribe({
|
|
3462
3758
|
next: (response) => {
|
|
3463
3759
|
this.isLoading = false;
|
|
3464
|
-
this.successMessage =
|
|
3760
|
+
this.successMessage =
|
|
3761
|
+
response.message || 'Password reset successfully!';
|
|
3465
3762
|
console.log('Password reset successfully', response);
|
|
3466
3763
|
void this.router.navigate(this.authConfiguration.getRoutePathSplit(this.AuthEndpointsKeys.SIGN_IN));
|
|
3467
3764
|
},
|
|
3468
3765
|
error: (error) => {
|
|
3469
3766
|
this.isLoading = false;
|
|
3470
|
-
this.errorMessage =
|
|
3767
|
+
this.errorMessage =
|
|
3768
|
+
error.error?.message ||
|
|
3769
|
+
'Error resetting password. Please try again.';
|
|
3471
3770
|
console.error('Error resetting password', error);
|
|
3472
|
-
}
|
|
3771
|
+
},
|
|
3473
3772
|
});
|
|
3474
3773
|
}
|
|
3475
3774
|
}
|
|
@@ -3480,10 +3779,14 @@ class ResetPasswordComponent {
|
|
|
3480
3779
|
const passwordConfirm = form.value.passwordConfirm;
|
|
3481
3780
|
if (password !== passwordConfirm) {
|
|
3482
3781
|
if (form.controls.password.valid) {
|
|
3483
|
-
form.controls.password.setErrors({
|
|
3782
|
+
form.controls.password.setErrors({
|
|
3783
|
+
[FormErrorKey.passwordsMismatch]: true,
|
|
3784
|
+
});
|
|
3484
3785
|
}
|
|
3485
3786
|
if (form.controls.passwordConfirm.valid) {
|
|
3486
|
-
form.controls.passwordConfirm.setErrors({
|
|
3787
|
+
form.controls.passwordConfirm.setErrors({
|
|
3788
|
+
[FormErrorKey.passwordsMismatch]: true,
|
|
3789
|
+
});
|
|
3487
3790
|
}
|
|
3488
3791
|
return { [FormErrorKey.passwordsMismatch]: true };
|
|
3489
3792
|
}
|
|
@@ -3509,7 +3812,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3509
3812
|
Password,
|
|
3510
3813
|
FloatLabel,
|
|
3511
3814
|
Message,
|
|
3512
|
-
ProgressSpinner
|
|
3815
|
+
ProgressSpinner,
|
|
3513
3816
|
], standalone: true, template: "<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Password Reset</h2>\n <p class=\"auth-title-description\">Please enter a new password for your account.</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"resetPasswordForm\" (ngSubmit)=\"resetPassword()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"new-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n [class]=\"(passwordField.invalid && passwordField.touched) || (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"new-password\">New Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!passwordField.valid && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"confirm-password\"\n [formControl]=\"passwordConfirmField\"\n [feedback]=\"false\"\n [class]=\"(passwordConfirmField.invalid && passwordConfirmField.touched) || (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordConfirmField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"confirm-password\">Confirm Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!passwordConfirmField.valid && passwordConfirmField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation is required</p-message>\n }\n @if (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordConfirmField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Passwords do not match</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Reset Password\"\n [disabled]=\"isLoading\"\n />\n @if (isLoading) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Remember your password?</span>\n <span> </span>\n <a href=\"#\" class=\"auth-deep-blue-sm-medium\">Sign In</a>\n </p>\n</div>\n" }]
|
|
3514
3817
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3515
3818
|
|
|
@@ -3519,10 +3822,7 @@ class PrivacyPolicyComponent {
|
|
|
3519
3822
|
}
|
|
3520
3823
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PrivacyPolicyComponent, decorators: [{
|
|
3521
3824
|
type: Component,
|
|
3522
|
-
args: [{ selector: 'rtsee-privacy-policy', imports: [
|
|
3523
|
-
ButtonModule,
|
|
3524
|
-
MessageModule
|
|
3525
|
-
], standalone: true, template: "<div class=\"privacy-policy-container\">\n <div class=\"policy-card\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"flex justify-content-center align-items-center\">\n <h1>Terms of Use & Privacy Policy</h1>\n </div>\n </div>\n </div>\n\n <div class=\"content-section\">\n <p-message severity=\"info\" [closable]=\"false\" class=\"info-banner\">\n <ng-template pTemplate>\n <div class=\"p-message-content\">\n <p class=\"last-updated\"><strong>Last Updated:</strong> December 2024</p>\n <p>By using our services, you agree to the terms and conditions outlined in this document. Please read this Privacy Policy and Terms of Use carefully before using our platform.</p>\n </div>\n </ng-template>\n </p-message>\n\n <h2>1. Acceptance of Terms</h2>\n <p>By accessing and using this service, you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.</p>\n\n <h2>2. Privacy Policy</h2>\n\n <h3>2.1 Information We Collect</h3>\n <p>We collect information you provide directly to us, such as when you create an account, use our services, or contact us for support. This may include:</p>\n <ul>\n <li><strong>Personal Information:</strong> Name, email address, phone number, and other contact details</li>\n <li><strong>Account Information:</strong> Username, password, and profile information</li>\n <li><strong>Usage Data:</strong> Information about how you use our services, including pages visited, time spent, and features used</li>\n <li><strong>Device Information:</strong> IP address, browser type, operating system, and device identifiers</li>\n <li><strong>Cookies and Tracking:</strong> We use cookies and similar technologies to enhance your experience</li>\n </ul>\n\n <h3>2.2 How We Use Your Information</h3>\n <p>We use the information we collect to:</p>\n <ul>\n <li>Provide, maintain, and improve our services</li>\n <li>Process transactions and send related information</li>\n <li>Send technical notices, updates, security alerts, and support messages</li>\n <li>Respond to your comments, questions, and requests</li>\n <li>Monitor and analyze trends, usage, and activities</li>\n <li>Personalize and improve your experience</li>\n <li>Detect, investigate, and prevent fraudulent transactions and other illegal activities</li>\n </ul>\n\n <h3>2.3 Information Sharing and Disclosure</h3>\n <p>We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:</p>\n <ul>\n <li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our platform</li>\n <li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety</li>\n <li><strong>Business Transfers:</strong> In connection with any merger, sale of assets, or acquisition of all or a portion of our business</li>\n <li><strong>Consent:</strong> We may share information with your explicit consent</li>\n </ul>\n\n <h3>2.4 Data Security</h3>\n <p>We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.</p>\n\n <h3>2.5 Data Retention</h3>\n <p>We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this privacy policy, unless a longer retention period is required or permitted by law.</p>\n\n <h3>2.6 Your Rights</h3>\n <p>Depending on your location, you may have certain rights regarding your personal information, including:</p>\n <ul>\n <li>The right to access and receive a copy of your personal information</li>\n <li>The right to rectify or update your personal information</li>\n <li>The right to erase your personal information</li>\n <li>The right to restrict or object to the processing of your personal information</li>\n <li>The right to data portability</li>\n <li>The right to withdraw consent at any time</li>\n </ul>\n\n <h2>3. Terms of Service</h2>\n\n <h3>3.1 User Accounts</h3>\n <p>To access certain features of our service, you may be required to create an account. You are responsible for:</p>\n <ul>\n <li>Maintaining the confidentiality of your account credentials</li>\n <li>All activities that occur under your account</li>\n <li>Notifying us immediately of any unauthorized use of your account</li>\n <li>Providing accurate and up-to-date information</li>\n </ul>\n\n <h3>3.2 Acceptable Use</h3>\n <p>You agree not to use our service for any unlawful purpose or any purpose prohibited under this clause. You may not use our service in any manner that could damage, disable, overburden, or impair our servers or networks.</p>\n\n <h3>3.3 Prohibited Activities</h3>\n <p>The following activities are prohibited:</p>\n <ul>\n <li>Violating any applicable laws or regulations</li>\n <li>Transmitting or procuring the sending of any unsolicited or unauthorized advertising</li>\n <li>Attempting to gain unauthorized access to any portion of our service</li>\n <li>Interfering with or disrupting the service or servers connected to the service</li>\n <li>Using any automated system to access the service for any purpose</li>\n <li>Impersonating any person or entity or misrepresenting your affiliation with a person or entity</li>\n </ul>\n\n <h3>3.4 Intellectual Property</h3>\n <p>The service and its original content, features, and functionality are and will remain the exclusive property of our company and its licensors. The service is protected by copyright, trademark, and other laws.</p>\n\n <h3>3.5 Termination</h3>\n <p>We may terminate or suspend your account and bar access to the service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever, including without limitation if you breach the Terms.</p>\n\n <h3>3.6 Disclaimer</h3>\n <p>The information on this service is provided on an \"as is\" basis. To the fullest extent permitted by law, this company excludes all representations, warranties, conditions and terms relating to our service and the use of this service.</p>\n\n <h3>3.7 Limitation of Liability</h3>\n <p>In no event shall our company, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of the service.</p>\n\n <h2>4. Cookies and Tracking Technologies</h2>\n <p>We use cookies and similar tracking technologies to track activity on our service and hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent.</p>\n\n <h2>5. Third-Party Services</h2>\n <p>Our service may contain links to third-party websites or services that are not owned or controlled by us. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party websites or services.</p>\n\n <h2>6. Children's Privacy</h2>\n <p>Our service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us.</p>\n\n <h2>7. International Data Transfers</h2>\n <p>Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your personal information.</p>\n\n <h2>8. Changes to This Policy</h2>\n <p>We reserve the right to update or change our Privacy Policy and Terms of Use at any time. We will notify you of any changes by posting the new Privacy Policy and Terms of Use on this page and updating the \"Last Updated\" date.</p>\n\n <div class=\"contact-section\">\n <h2>9. Contact Information</h2>\n <p>If you have any questions about this Privacy Policy and Terms of Use, please contact us:</p>\n <ul>\n <li><strong>Email:</strong> [Your Email Address]</li>\n <li><strong>Address:</strong> [Your Company Address]</li>\n <li><strong>Phone:</strong> [Your Contact Number]</li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <p>This document was last updated on December 2024</p>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";.privacy-policy-container{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:2rem 1rem}.privacy-policy-container .policy-card{max-width:1000px;margin:0 auto;background:#fffffff2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:20px;box-shadow:0 20px 40px #0000001a;border:1px solid rgba(255,255,255,.2);overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.privacy-policy-container .policy-card:hover{transform:translateY(-5px);box-shadow:0 25px 50px #00000026}.privacy-policy-container .header-section{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:2rem;position:relative;overflow:hidden}.privacy-policy-container .header-section:before{content:\"\";position:absolute;inset:0;background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><defs><pattern id=\"grain\" width=\"100\" height=\"100\" patternUnits=\"userSpaceOnUse\"><circle cx=\"25\" cy=\"25\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"75\" cy=\"75\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"50\" cy=\"10\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"10\" cy=\"60\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"90\" cy=\"40\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/></pattern></defs><rect width=\"100\" height=\"100\" fill=\"url(%23grain)\"/></svg>');opacity:.3}.privacy-policy-container .header-section .header-content{position:relative;z-index:1}.privacy-policy-container .header-section h1{font-size:2.5rem;font-weight:700;margin:0;text-shadow:0 2px 4px rgba(0,0,0,.3);background:linear-gradient(45deg,#fff,#f0f0f0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.privacy-policy-container .content-section{padding:3rem}.privacy-policy-container .content-section .info-banner{background:linear-gradient(135deg,#e3f2fd,#bbdefb);border:none;border-radius:15px;box-shadow:0 5px 15px #2196f31a;margin-bottom:2rem}.privacy-policy-container .content-section .info-banner .p-message-content{padding:1.5rem}.privacy-policy-container .content-section .info-banner .p-message-content .last-updated{font-size:1.1rem;font-weight:600;color:#1976d2;margin-bottom:1rem}.privacy-policy-container .content-section .info-banner .p-message-content p{color:#424242;line-height:1.6;margin:0}.privacy-policy-container .content-section h2{color:#2c3e50;font-size:1.8rem;font-weight:600;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:3px solid #667eea;position:relative}.privacy-policy-container .content-section h2:before{content:\"\";position:absolute;bottom:-3px;left:0;width:50px;height:3px;background:linear-gradient(90deg,#667eea,#764ba2);border-radius:2px}.privacy-policy-container .content-section h3{color:#34495e;font-size:1.3rem;font-weight:600;margin:2rem 0 1rem;padding-left:1rem;border-left:4px solid #667eea;background:linear-gradient(90deg,rgba(102,126,234,.1),transparent);padding:.75rem 1rem;border-radius:0 8px 8px 0}.privacy-policy-container .content-section p{color:#555;line-height:1.7;margin-bottom:1.5rem;font-size:1rem}.privacy-policy-container .content-section ul{margin:1rem 0 2rem;padding-left:0}.privacy-policy-container .content-section ul li{color:#555;line-height:1.6;margin-bottom:.75rem;padding-left:2rem;position:relative;font-size:1rem}.privacy-policy-container .content-section ul li:before{content:\"\\25b6\";position:absolute;left:0;color:#667eea;font-size:.8rem;top:.2rem}.privacy-policy-container .content-section ul li strong{color:#2c3e50;font-weight:600}.privacy-policy-container .content-section .contact-section{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:15px;padding:2rem;margin-top:3rem;border:1px solid #dee2e6;box-shadow:0 5px 15px #0000000d}.privacy-policy-container .content-section .contact-section h2{color:#2c3e50;margin-top:0;border-bottom:3px solid #28a745}.privacy-policy-container .content-section .contact-section h2:before{background:linear-gradient(90deg,#28a745,#20c997)}.privacy-policy-container .content-section .contact-section ul li:before{color:#28a745}.privacy-policy-container .content-section .footer-section{text-align:center;margin-top:3rem;padding-top:2rem;border-top:2px solid #e9ecef}.privacy-policy-container .content-section .footer-section p{color:#6c757d;font-style:italic;font-size:.9rem;margin:0}@media (max-width: 768px){.privacy-policy-container{padding:1rem .5rem}.privacy-policy-container .policy-card{border-radius:15px}.privacy-policy-container .header-section{padding:1.5rem}.privacy-policy-container .header-section h1{font-size:2rem}.privacy-policy-container .content-section{padding:2rem 1.5rem}.privacy-policy-container .content-section h2{font-size:1.5rem}.privacy-policy-container .content-section h3{font-size:1.2rem}}@media (max-width: 480px){.privacy-policy-container .header-section h1{font-size:1.8rem}.privacy-policy-container .content-section{padding:1.5rem 1rem}.privacy-policy-container .content-section h2{font-size:1.3rem}.privacy-policy-container .content-section h3{font-size:1.1rem}}html{scroll-behavior:smooth}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#5a6fd8,#6a4190)}\n"] }]
|
|
3825
|
+
args: [{ selector: 'rtsee-privacy-policy', imports: [ButtonModule, MessageModule], standalone: true, template: "<div class=\"privacy-policy-container\">\n <div class=\"policy-card\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"flex justify-content-center align-items-center\">\n <h1>Terms of Use & Privacy Policy</h1>\n </div>\n </div>\n </div>\n\n <div class=\"content-section\">\n <p-message severity=\"info\" [closable]=\"false\" class=\"info-banner\">\n <ng-template pTemplate>\n <div class=\"p-message-content\">\n <p class=\"last-updated\"><strong>Last Updated:</strong> December 2024</p>\n <p>By using our services, you agree to the terms and conditions outlined in this document. Please read this Privacy Policy and Terms of Use carefully before using our platform.</p>\n </div>\n </ng-template>\n </p-message>\n\n <h2>1. Acceptance of Terms</h2>\n <p>By accessing and using this service, you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.</p>\n\n <h2>2. Privacy Policy</h2>\n\n <h3>2.1 Information We Collect</h3>\n <p>We collect information you provide directly to us, such as when you create an account, use our services, or contact us for support. This may include:</p>\n <ul>\n <li><strong>Personal Information:</strong> Name, email address, phone number, and other contact details</li>\n <li><strong>Account Information:</strong> Username, password, and profile information</li>\n <li><strong>Usage Data:</strong> Information about how you use our services, including pages visited, time spent, and features used</li>\n <li><strong>Device Information:</strong> IP address, browser type, operating system, and device identifiers</li>\n <li><strong>Cookies and Tracking:</strong> We use cookies and similar technologies to enhance your experience</li>\n </ul>\n\n <h3>2.2 How We Use Your Information</h3>\n <p>We use the information we collect to:</p>\n <ul>\n <li>Provide, maintain, and improve our services</li>\n <li>Process transactions and send related information</li>\n <li>Send technical notices, updates, security alerts, and support messages</li>\n <li>Respond to your comments, questions, and requests</li>\n <li>Monitor and analyze trends, usage, and activities</li>\n <li>Personalize and improve your experience</li>\n <li>Detect, investigate, and prevent fraudulent transactions and other illegal activities</li>\n </ul>\n\n <h3>2.3 Information Sharing and Disclosure</h3>\n <p>We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:</p>\n <ul>\n <li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our platform</li>\n <li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety</li>\n <li><strong>Business Transfers:</strong> In connection with any merger, sale of assets, or acquisition of all or a portion of our business</li>\n <li><strong>Consent:</strong> We may share information with your explicit consent</li>\n </ul>\n\n <h3>2.4 Data Security</h3>\n <p>We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.</p>\n\n <h3>2.5 Data Retention</h3>\n <p>We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this privacy policy, unless a longer retention period is required or permitted by law.</p>\n\n <h3>2.6 Your Rights</h3>\n <p>Depending on your location, you may have certain rights regarding your personal information, including:</p>\n <ul>\n <li>The right to access and receive a copy of your personal information</li>\n <li>The right to rectify or update your personal information</li>\n <li>The right to erase your personal information</li>\n <li>The right to restrict or object to the processing of your personal information</li>\n <li>The right to data portability</li>\n <li>The right to withdraw consent at any time</li>\n </ul>\n\n <h2>3. Terms of Service</h2>\n\n <h3>3.1 User Accounts</h3>\n <p>To access certain features of our service, you may be required to create an account. You are responsible for:</p>\n <ul>\n <li>Maintaining the confidentiality of your account credentials</li>\n <li>All activities that occur under your account</li>\n <li>Notifying us immediately of any unauthorized use of your account</li>\n <li>Providing accurate and up-to-date information</li>\n </ul>\n\n <h3>3.2 Acceptable Use</h3>\n <p>You agree not to use our service for any unlawful purpose or any purpose prohibited under this clause. You may not use our service in any manner that could damage, disable, overburden, or impair our servers or networks.</p>\n\n <h3>3.3 Prohibited Activities</h3>\n <p>The following activities are prohibited:</p>\n <ul>\n <li>Violating any applicable laws or regulations</li>\n <li>Transmitting or procuring the sending of any unsolicited or unauthorized advertising</li>\n <li>Attempting to gain unauthorized access to any portion of our service</li>\n <li>Interfering with or disrupting the service or servers connected to the service</li>\n <li>Using any automated system to access the service for any purpose</li>\n <li>Impersonating any person or entity or misrepresenting your affiliation with a person or entity</li>\n </ul>\n\n <h3>3.4 Intellectual Property</h3>\n <p>The service and its original content, features, and functionality are and will remain the exclusive property of our company and its licensors. The service is protected by copyright, trademark, and other laws.</p>\n\n <h3>3.5 Termination</h3>\n <p>We may terminate or suspend your account and bar access to the service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever, including without limitation if you breach the Terms.</p>\n\n <h3>3.6 Disclaimer</h3>\n <p>The information on this service is provided on an \"as is\" basis. To the fullest extent permitted by law, this company excludes all representations, warranties, conditions and terms relating to our service and the use of this service.</p>\n\n <h3>3.7 Limitation of Liability</h3>\n <p>In no event shall our company, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of the service.</p>\n\n <h2>4. Cookies and Tracking Technologies</h2>\n <p>We use cookies and similar tracking technologies to track activity on our service and hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent.</p>\n\n <h2>5. Third-Party Services</h2>\n <p>Our service may contain links to third-party websites or services that are not owned or controlled by us. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party websites or services.</p>\n\n <h2>6. Children's Privacy</h2>\n <p>Our service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us.</p>\n\n <h2>7. International Data Transfers</h2>\n <p>Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your personal information.</p>\n\n <h2>8. Changes to This Policy</h2>\n <p>We reserve the right to update or change our Privacy Policy and Terms of Use at any time. We will notify you of any changes by posting the new Privacy Policy and Terms of Use on this page and updating the \"Last Updated\" date.</p>\n\n <div class=\"contact-section\">\n <h2>9. Contact Information</h2>\n <p>If you have any questions about this Privacy Policy and Terms of Use, please contact us:</p>\n <ul>\n <li><strong>Email:</strong> [Your Email Address]</li>\n <li><strong>Address:</strong> [Your Company Address]</li>\n <li><strong>Phone:</strong> [Your Contact Number]</li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <p>This document was last updated on December 2024</p>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";.privacy-policy-container{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:2rem 1rem}.privacy-policy-container .policy-card{max-width:1000px;margin:0 auto;background:#fffffff2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:20px;box-shadow:0 20px 40px #0000001a;border:1px solid rgba(255,255,255,.2);overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.privacy-policy-container .policy-card:hover{transform:translateY(-5px);box-shadow:0 25px 50px #00000026}.privacy-policy-container .header-section{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:2rem;position:relative;overflow:hidden}.privacy-policy-container .header-section:before{content:\"\";position:absolute;inset:0;background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><defs><pattern id=\"grain\" width=\"100\" height=\"100\" patternUnits=\"userSpaceOnUse\"><circle cx=\"25\" cy=\"25\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"75\" cy=\"75\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"50\" cy=\"10\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"10\" cy=\"60\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"90\" cy=\"40\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/></pattern></defs><rect width=\"100\" height=\"100\" fill=\"url(%23grain)\"/></svg>');opacity:.3}.privacy-policy-container .header-section .header-content{position:relative;z-index:1}.privacy-policy-container .header-section h1{font-size:2.5rem;font-weight:700;margin:0;text-shadow:0 2px 4px rgba(0,0,0,.3);background:linear-gradient(45deg,#fff,#f0f0f0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.privacy-policy-container .content-section{padding:3rem}.privacy-policy-container .content-section .info-banner{background:linear-gradient(135deg,#e3f2fd,#bbdefb);border:none;border-radius:15px;box-shadow:0 5px 15px #2196f31a;margin-bottom:2rem}.privacy-policy-container .content-section .info-banner .p-message-content{padding:1.5rem}.privacy-policy-container .content-section .info-banner .p-message-content .last-updated{font-size:1.1rem;font-weight:600;color:#1976d2;margin-bottom:1rem}.privacy-policy-container .content-section .info-banner .p-message-content p{color:#424242;line-height:1.6;margin:0}.privacy-policy-container .content-section h2{color:#2c3e50;font-size:1.8rem;font-weight:600;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:3px solid #667eea;position:relative}.privacy-policy-container .content-section h2:before{content:\"\";position:absolute;bottom:-3px;left:0;width:50px;height:3px;background:linear-gradient(90deg,#667eea,#764ba2);border-radius:2px}.privacy-policy-container .content-section h3{color:#34495e;font-size:1.3rem;font-weight:600;margin:2rem 0 1rem;padding-left:1rem;border-left:4px solid #667eea;background:linear-gradient(90deg,rgba(102,126,234,.1),transparent);padding:.75rem 1rem;border-radius:0 8px 8px 0}.privacy-policy-container .content-section p{color:#555;line-height:1.7;margin-bottom:1.5rem;font-size:1rem}.privacy-policy-container .content-section ul{margin:1rem 0 2rem;padding-left:0}.privacy-policy-container .content-section ul li{color:#555;line-height:1.6;margin-bottom:.75rem;padding-left:2rem;position:relative;font-size:1rem}.privacy-policy-container .content-section ul li:before{content:\"\\25b6\";position:absolute;left:0;color:#667eea;font-size:.8rem;top:.2rem}.privacy-policy-container .content-section ul li strong{color:#2c3e50;font-weight:600}.privacy-policy-container .content-section .contact-section{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:15px;padding:2rem;margin-top:3rem;border:1px solid #dee2e6;box-shadow:0 5px 15px #0000000d}.privacy-policy-container .content-section .contact-section h2{color:#2c3e50;margin-top:0;border-bottom:3px solid #28a745}.privacy-policy-container .content-section .contact-section h2:before{background:linear-gradient(90deg,#28a745,#20c997)}.privacy-policy-container .content-section .contact-section ul li:before{color:#28a745}.privacy-policy-container .content-section .footer-section{text-align:center;margin-top:3rem;padding-top:2rem;border-top:2px solid #e9ecef}.privacy-policy-container .content-section .footer-section p{color:#6c757d;font-style:italic;font-size:.9rem;margin:0}@media (max-width: 768px){.privacy-policy-container{padding:1rem .5rem}.privacy-policy-container .policy-card{border-radius:15px}.privacy-policy-container .header-section{padding:1.5rem}.privacy-policy-container .header-section h1{font-size:2rem}.privacy-policy-container .content-section{padding:2rem 1.5rem}.privacy-policy-container .content-section h2{font-size:1.5rem}.privacy-policy-container .content-section h3{font-size:1.2rem}}@media (max-width: 480px){.privacy-policy-container .header-section h1{font-size:1.8rem}.privacy-policy-container .content-section{padding:1.5rem 1rem}.privacy-policy-container .content-section h2{font-size:1.3rem}.privacy-policy-container .content-section h3{font-size:1.1rem}}html{scroll-behavior:smooth}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#5a6fd8,#6a4190)}\n"] }]
|
|
3526
3826
|
}] });
|
|
3527
3827
|
|
|
3528
3828
|
class RTSeeAuthComponent {
|
|
@@ -3538,8 +3838,7 @@ class RTSeeAuthComponent {
|
|
|
3538
3838
|
else if (window.location.pathname.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.FORGOT_PASSWORD])) {
|
|
3539
3839
|
this.activeComponent = 'forgot-password';
|
|
3540
3840
|
}
|
|
3541
|
-
else if (window.location.pathname
|
|
3542
|
-
.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.RESET_PASSWORD].split('/')[0])) {
|
|
3841
|
+
else if (window.location.pathname.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.RESET_PASSWORD].split('/')[0])) {
|
|
3543
3842
|
this.activeComponent = 'reset-password';
|
|
3544
3843
|
}
|
|
3545
3844
|
else if (window.location.pathname.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.PRIVACY_POLICY])) {
|
|
@@ -3559,7 +3858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3559
3858
|
SignUpComponent,
|
|
3560
3859
|
ForgotPasswordComponent,
|
|
3561
3860
|
ResetPasswordComponent,
|
|
3562
|
-
PrivacyPolicyComponent
|
|
3861
|
+
PrivacyPolicyComponent,
|
|
3563
3862
|
], standalone: true, template: "<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password></rtsee-reset-password>\n }\n @if (activeComponent === 'privacy-policy') {\n <rtsee-privacy-policy></rtsee-privacy-policy>\n }\n }\n</div>\n" }]
|
|
3564
3863
|
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { auth: [{
|
|
3565
3864
|
type: Input
|
|
@@ -3610,11 +3909,7 @@ class SearchComponent {
|
|
|
3610
3909
|
}
|
|
3611
3910
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchComponent, decorators: [{
|
|
3612
3911
|
type: Component,
|
|
3613
|
-
args: [{ selector: 'rtsee-search', imports: [
|
|
3614
|
-
ReactiveFormsModule,
|
|
3615
|
-
PreloaderComponent,
|
|
3616
|
-
NgForOf
|
|
3617
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n" }]
|
|
3912
|
+
args: [{ selector: 'rtsee-search', imports: [ReactiveFormsModule, PreloaderComponent, NgForOf], standalone: true, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n" }]
|
|
3618
3913
|
}], propDecorators: { search: [{
|
|
3619
3914
|
type: Input
|
|
3620
3915
|
}] } });
|
|
@@ -3641,9 +3936,7 @@ class ContactsMultiselectComponent {
|
|
|
3641
3936
|
}
|
|
3642
3937
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ContactsMultiselectComponent, decorators: [{
|
|
3643
3938
|
type: Component,
|
|
3644
|
-
args: [{ selector: 'rtsee-contacts-multiselect', imports: [
|
|
3645
|
-
SearchComponent
|
|
3646
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n" }]
|
|
3939
|
+
args: [{ selector: 'rtsee-contacts-multiselect', imports: [SearchComponent], standalone: true, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n" }]
|
|
3647
3940
|
}], propDecorators: { menuState: [{
|
|
3648
3941
|
type: Input
|
|
3649
3942
|
}], search: [{
|
|
@@ -3672,7 +3965,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3672
3965
|
NgIf,
|
|
3673
3966
|
SearchComponent,
|
|
3674
3967
|
ManageChatComponent,
|
|
3675
|
-
ContactsMultiselectComponent
|
|
3968
|
+
ContactsMultiselectComponent,
|
|
3676
3969
|
], standalone: true, template: "<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n" }]
|
|
3677
3970
|
}], propDecorators: { search: [{
|
|
3678
3971
|
type: Input
|
|
@@ -3695,7 +3988,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3695
3988
|
type: Directive,
|
|
3696
3989
|
args: [{
|
|
3697
3990
|
selector: '[rtseeShave]',
|
|
3698
|
-
standalone: true
|
|
3991
|
+
standalone: true,
|
|
3699
3992
|
}]
|
|
3700
3993
|
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
3701
3994
|
|
|
@@ -3771,9 +4064,9 @@ class RTSeeModule {
|
|
|
3771
4064
|
provideAnimationsAsync(),
|
|
3772
4065
|
providePrimeNG({
|
|
3773
4066
|
theme: {
|
|
3774
|
-
preset: Aura
|
|
3775
|
-
}
|
|
3776
|
-
})
|
|
4067
|
+
preset: Aura,
|
|
4068
|
+
},
|
|
4069
|
+
}),
|
|
3777
4070
|
], imports: [RTSeeAuthComponent,
|
|
3778
4071
|
ForgotPasswordComponent,
|
|
3779
4072
|
SignInComponent,
|
|
@@ -3809,9 +4102,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3809
4102
|
provideAnimationsAsync(),
|
|
3810
4103
|
providePrimeNG({
|
|
3811
4104
|
theme: {
|
|
3812
|
-
preset: Aura
|
|
3813
|
-
}
|
|
3814
|
-
})
|
|
4105
|
+
preset: Aura,
|
|
4106
|
+
},
|
|
4107
|
+
}),
|
|
3815
4108
|
],
|
|
3816
4109
|
declarations: [],
|
|
3817
4110
|
imports: [
|
|
@@ -3865,7 +4158,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3865
4158
|
NgOptimizedImage,
|
|
3866
4159
|
RouterLink,
|
|
3867
4160
|
RouterLinkActive,
|
|
3868
|
-
NgxCaptchaModule
|
|
4161
|
+
NgxCaptchaModule,
|
|
3869
4162
|
],
|
|
3870
4163
|
exports: [
|
|
3871
4164
|
RTSeeConferenceComponent,
|
|
@@ -3874,11 +4167,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3874
4167
|
RTSeeContainerComponent,
|
|
3875
4168
|
PresentationComponent,
|
|
3876
4169
|
RTSeeAuthComponent,
|
|
3877
|
-
PaymentProductSnippetComponent
|
|
4170
|
+
PaymentProductSnippetComponent,
|
|
3878
4171
|
],
|
|
3879
|
-
schemas: [
|
|
3880
|
-
CUSTOM_ELEMENTS_SCHEMA,
|
|
3881
|
-
]
|
|
4172
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
3882
4173
|
}]
|
|
3883
4174
|
}] });
|
|
3884
4175
|
|