@rtsee/ngx 0.0.89 → 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 +806 -514
- 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,16 +749,13 @@ 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
|
}
|
|
740
755
|
this.chat.loadRemoteMessages('front');
|
|
741
756
|
}
|
|
742
757
|
scrollToBottom() {
|
|
758
|
+
this.groupMessages();
|
|
743
759
|
if (this.chat.isStandalone) {
|
|
744
760
|
return;
|
|
745
761
|
}
|
|
@@ -748,7 +764,6 @@ class MessagesListComponent {
|
|
|
748
764
|
this.scroller.scrollToPosition([0, document.body.scrollHeight]);
|
|
749
765
|
}
|
|
750
766
|
if (!this.scrollContainer?.nativeElement?.scrollHeight) {
|
|
751
|
-
console.log('scrollToBottom early return');
|
|
752
767
|
return;
|
|
753
768
|
}
|
|
754
769
|
try {
|
|
@@ -800,14 +815,14 @@ class MessagesListComponent {
|
|
|
800
815
|
throw new Error('Either m.id or m.temporary id is required');
|
|
801
816
|
}
|
|
802
817
|
const isFromMe = message.from.id === this.messenger.clientId;
|
|
803
|
-
const isSenderVisible = (this.chat.type !== RTSeeChatTypes.INDIVIDUAL && !isFromMe)
|
|
804
|
-
|
|
805
|
-
|
|
818
|
+
const isSenderVisible = (this.chat.type !== RTSeeChatTypes.INDIVIDUAL && !isFromMe) ||
|
|
819
|
+
this.chat.type === RTSeeChatTypes.COMMENTS ||
|
|
820
|
+
this.chat.type === RTSeeChatTypes.RATINGS;
|
|
806
821
|
currentGroup = {
|
|
807
822
|
id: message.id || message.temporaryId,
|
|
808
823
|
sender: message.from,
|
|
809
824
|
senderVisible: isSenderVisible,
|
|
810
|
-
messages: [message]
|
|
825
|
+
messages: [message],
|
|
811
826
|
};
|
|
812
827
|
}
|
|
813
828
|
}
|
|
@@ -879,18 +894,17 @@ class MessagesListComponent {
|
|
|
879
894
|
if (!this.chat.messages.length) {
|
|
880
895
|
return null;
|
|
881
896
|
}
|
|
882
|
-
return [
|
|
897
|
+
return [
|
|
898
|
+
this.chat.messages[0],
|
|
899
|
+
this.chat.messages[this.chat.messages.length - 1],
|
|
900
|
+
];
|
|
883
901
|
}
|
|
884
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 }); }
|
|
885
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"] }] }); }
|
|
886
904
|
}
|
|
887
905
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessagesListComponent, decorators: [{
|
|
888
906
|
type: Component,
|
|
889
|
-
args: [{ selector: 'rtsee-messages-list', imports: [
|
|
890
|
-
InfiniteScrollDirective,
|
|
891
|
-
MessageComponent,
|
|
892
|
-
NgClass
|
|
893
|
-
], 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" }]
|
|
894
908
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }, { type: i2$1.ViewportScroller }, { type: Document, decorators: [{
|
|
895
909
|
type: Inject,
|
|
896
910
|
args: [DOCUMENT]
|
|
@@ -940,10 +954,7 @@ class ChatInputComponent {
|
|
|
940
954
|
}
|
|
941
955
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatInputComponent, decorators: [{
|
|
942
956
|
type: Component,
|
|
943
|
-
args: [{ selector: 'rtsee-chat-input', imports: [
|
|
944
|
-
ReactiveFormsModule,
|
|
945
|
-
Textarea
|
|
946
|
-
], 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" }]
|
|
947
958
|
}], propDecorators: { messenger: [{
|
|
948
959
|
type: Input
|
|
949
960
|
}], chat: [{
|
|
@@ -964,10 +975,10 @@ class ViewportObserverDirective {
|
|
|
964
975
|
const options = {
|
|
965
976
|
root: null, // observing relative to the document's viewport
|
|
966
977
|
rootMargin: '0px',
|
|
967
|
-
threshold: 0
|
|
978
|
+
threshold: 0,
|
|
968
979
|
};
|
|
969
980
|
this.observer = new IntersectionObserver((entries) => {
|
|
970
|
-
entries.forEach(entry => {
|
|
981
|
+
entries.forEach((entry) => {
|
|
971
982
|
// entry.isIntersecting is true if the element is in the viewport
|
|
972
983
|
this.inViewport.emit(entry.isIntersecting);
|
|
973
984
|
});
|
|
@@ -986,7 +997,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
986
997
|
type: Directive,
|
|
987
998
|
args: [{
|
|
988
999
|
selector: '[rtseeViewportObserver]',
|
|
989
|
-
standalone: true // Use `standalone: true` in modern Angular
|
|
1000
|
+
standalone: true, // Use `standalone: true` in modern Angular
|
|
990
1001
|
}]
|
|
991
1002
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { inViewport: [{
|
|
992
1003
|
type: Output
|
|
@@ -1002,7 +1013,10 @@ class ChatComponent {
|
|
|
1002
1013
|
console.log(`Either chat ot chatData is required!`);
|
|
1003
1014
|
}
|
|
1004
1015
|
if (!this.chat && this.chatData) {
|
|
1005
|
-
this.chat = this.messenger.addStandaloneChat(
|
|
1016
|
+
this.chat = this.messenger.addStandaloneChat({
|
|
1017
|
+
...this.chatData,
|
|
1018
|
+
utilitiesSignalingClient: this.entity?.signalingClient,
|
|
1019
|
+
});
|
|
1006
1020
|
this.chat.loadRemoteMessages('back');
|
|
1007
1021
|
}
|
|
1008
1022
|
}
|
|
@@ -1012,7 +1026,7 @@ class ChatComponent {
|
|
|
1012
1026
|
}
|
|
1013
1027
|
}
|
|
1014
1028
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1015
|
-
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"] }] }); }
|
|
1016
1030
|
}
|
|
1017
1031
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatComponent, decorators: [{
|
|
1018
1032
|
type: Component,
|
|
@@ -1020,12 +1034,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1020
1034
|
MessagesListComponent,
|
|
1021
1035
|
ChatInputComponent,
|
|
1022
1036
|
ViewportObserverDirective,
|
|
1023
|
-
NgClass
|
|
1037
|
+
NgClass,
|
|
1024
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" }]
|
|
1025
1039
|
}], propDecorators: { chat: [{
|
|
1026
1040
|
type: Input
|
|
1027
1041
|
}], chatData: [{
|
|
1028
1042
|
type: Input
|
|
1043
|
+
}], entity: [{
|
|
1044
|
+
type: Input
|
|
1029
1045
|
}], messenger: [{
|
|
1030
1046
|
type: Input
|
|
1031
1047
|
}] } });
|
|
@@ -1035,8 +1051,7 @@ class RTSeeCropperComponent {
|
|
|
1035
1051
|
this.loadInProgress = true;
|
|
1036
1052
|
this.nextClicked = new EventEmitter();
|
|
1037
1053
|
}
|
|
1038
|
-
ngOnInit() {
|
|
1039
|
-
}
|
|
1054
|
+
ngOnInit() { }
|
|
1040
1055
|
onCropperReady() {
|
|
1041
1056
|
this.loadInProgress = false;
|
|
1042
1057
|
this.cropper.setCropperElem(this.imageCropper);
|
|
@@ -1058,7 +1073,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1058
1073
|
NgClass,
|
|
1059
1074
|
RadioButton,
|
|
1060
1075
|
PreloaderComponent,
|
|
1061
|
-
Button
|
|
1076
|
+
Button,
|
|
1062
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" }]
|
|
1063
1078
|
}], ctorParameters: () => [], propDecorators: { cropper: [{
|
|
1064
1079
|
type: Input
|
|
@@ -1101,11 +1116,7 @@ class RTSeeImageUploaderComponent {
|
|
|
1101
1116
|
}
|
|
1102
1117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeImageUploaderComponent, decorators: [{
|
|
1103
1118
|
type: Component,
|
|
1104
|
-
args: [{ selector: 'rtsee-image-uploader', imports: [
|
|
1105
|
-
RTSeeUploaderComponent,
|
|
1106
|
-
RTSeeCropperComponent,
|
|
1107
|
-
Button
|
|
1108
|
-
], 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" }]
|
|
1109
1120
|
}], propDecorators: { cropperComponent: [{
|
|
1110
1121
|
type: ViewChild,
|
|
1111
1122
|
args: [RTSeeCropperComponent]
|
|
@@ -1121,16 +1132,16 @@ class ManageProfileComponent {
|
|
|
1121
1132
|
validators: [
|
|
1122
1133
|
Validators.required,
|
|
1123
1134
|
Validators.minLength(3),
|
|
1124
|
-
Validators.maxLength(141)
|
|
1125
|
-
]
|
|
1135
|
+
Validators.maxLength(141),
|
|
1136
|
+
],
|
|
1126
1137
|
}),
|
|
1127
1138
|
lastName: this.formBuilder.control('', {
|
|
1128
1139
|
validators: [
|
|
1129
1140
|
Validators.required,
|
|
1130
1141
|
Validators.minLength(3),
|
|
1131
|
-
Validators.maxLength(141)
|
|
1132
|
-
]
|
|
1133
|
-
})
|
|
1142
|
+
Validators.maxLength(141),
|
|
1143
|
+
],
|
|
1144
|
+
}),
|
|
1134
1145
|
});
|
|
1135
1146
|
}
|
|
1136
1147
|
ngOnInit() {
|
|
@@ -1149,7 +1160,7 @@ class ManageProfileComponent {
|
|
|
1149
1160
|
}
|
|
1150
1161
|
await this.manageProfile.save({
|
|
1151
1162
|
firstName: this.firstNameField.getRawValue(),
|
|
1152
|
-
lastName: this.lastNameField.getRawValue()
|
|
1163
|
+
lastName: this.lastNameField.getRawValue(),
|
|
1153
1164
|
});
|
|
1154
1165
|
}
|
|
1155
1166
|
get firstNameField() {
|
|
@@ -1170,7 +1181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1170
1181
|
Message,
|
|
1171
1182
|
RTSeeImageUploaderComponent,
|
|
1172
1183
|
ReactiveFormsModule,
|
|
1173
|
-
InputText
|
|
1184
|
+
InputText,
|
|
1174
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" }]
|
|
1175
1186
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { messenger: [{
|
|
1176
1187
|
type: Input
|
|
@@ -1190,10 +1201,7 @@ class PaymentProductSnippetComponent {
|
|
|
1190
1201
|
}
|
|
1191
1202
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentProductSnippetComponent, decorators: [{
|
|
1192
1203
|
type: Component,
|
|
1193
|
-
args: [{ selector: 'rtsee-payment-product-snippet', imports: [
|
|
1194
|
-
Card,
|
|
1195
|
-
Button
|
|
1196
|
-
], 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" }]
|
|
1197
1205
|
}], propDecorators: { product: [{
|
|
1198
1206
|
type: Input
|
|
1199
1207
|
}], priceSelected: [{
|
|
@@ -1212,17 +1220,16 @@ class PaymentsService {
|
|
|
1212
1220
|
}
|
|
1213
1221
|
createSession(options) {
|
|
1214
1222
|
if (!this.paymentsConfig) {
|
|
1215
|
-
throw new Error(
|
|
1223
|
+
throw new Error('Payments not configured');
|
|
1216
1224
|
}
|
|
1217
|
-
return this.http
|
|
1218
|
-
.post(this.paymentsConfig.createSessionEndpoint, options);
|
|
1225
|
+
return this.http.post(this.paymentsConfig.createSessionEndpoint, options);
|
|
1219
1226
|
}
|
|
1220
1227
|
getSession() {
|
|
1221
1228
|
if (!this.paymentsConfig) {
|
|
1222
|
-
throw new Error(
|
|
1229
|
+
throw new Error('Payments not configured');
|
|
1223
1230
|
}
|
|
1224
1231
|
if (!this.paymentsConfig.sessionId) {
|
|
1225
|
-
throw new Error(
|
|
1232
|
+
throw new Error('No SessionId provided');
|
|
1226
1233
|
}
|
|
1227
1234
|
return this.http
|
|
1228
1235
|
.get(`${this.paymentsConfig.getSessionEndpoint}/?sessionId=${this.paymentsConfig.sessionId}`)
|
|
@@ -1233,7 +1240,7 @@ class PaymentsService {
|
|
|
1233
1240
|
}
|
|
1234
1241
|
getProducts() {
|
|
1235
1242
|
if (!this.paymentsConfig || !this.paymentsConfig.appId) {
|
|
1236
|
-
throw new Error(
|
|
1243
|
+
throw new Error('Payments Config not initialized!');
|
|
1237
1244
|
}
|
|
1238
1245
|
this.paymentsConfig.setProductsLoadInProgress(true);
|
|
1239
1246
|
return this.http
|
|
@@ -1242,11 +1249,10 @@ class PaymentsService {
|
|
|
1242
1249
|
}
|
|
1243
1250
|
unsubscribe(subscriptionId) {
|
|
1244
1251
|
if (!this.paymentsConfig || !this.paymentsConfig.appId) {
|
|
1245
|
-
throw new Error(
|
|
1252
|
+
throw new Error('Payments Config not initialized!');
|
|
1246
1253
|
}
|
|
1247
|
-
return this.http
|
|
1248
|
-
|
|
1249
|
-
subscriptionId
|
|
1254
|
+
return this.http.post(`${this.paymentsConfig?.unsubscribeEndpoint}`, {
|
|
1255
|
+
subscriptionId,
|
|
1250
1256
|
});
|
|
1251
1257
|
}
|
|
1252
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 }); }
|
|
@@ -1255,7 +1261,7 @@ class PaymentsService {
|
|
|
1255
1261
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentsService, decorators: [{
|
|
1256
1262
|
type: Injectable,
|
|
1257
1263
|
args: [{
|
|
1258
|
-
providedIn: 'root'
|
|
1264
|
+
providedIn: 'root',
|
|
1259
1265
|
}]
|
|
1260
1266
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }] });
|
|
1261
1267
|
|
|
@@ -1270,7 +1276,9 @@ class PaymentPageComponent {
|
|
|
1270
1276
|
if (!this.paymentsService.paymentsConfig?.publicKey) {
|
|
1271
1277
|
return;
|
|
1272
1278
|
}
|
|
1273
|
-
this.stripe =
|
|
1279
|
+
this.stripe =
|
|
1280
|
+
(await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||
|
|
1281
|
+
undefined;
|
|
1274
1282
|
this.getProducts();
|
|
1275
1283
|
}
|
|
1276
1284
|
getProducts() {
|
|
@@ -1278,7 +1286,8 @@ class PaymentPageComponent {
|
|
|
1278
1286
|
}
|
|
1279
1287
|
selectPlan(price) {
|
|
1280
1288
|
const priceId = price.priceId;
|
|
1281
|
-
if (!this.messenger.payments ||
|
|
1289
|
+
if (!this.messenger.payments ||
|
|
1290
|
+
!this.messenger.payments.createSessionEndpoint) {
|
|
1282
1291
|
console.log('No payments config.');
|
|
1283
1292
|
return;
|
|
1284
1293
|
}
|
|
@@ -1288,12 +1297,14 @@ class PaymentPageComponent {
|
|
|
1288
1297
|
}
|
|
1289
1298
|
this.planSelected = true;
|
|
1290
1299
|
this.loadInProgress = true;
|
|
1291
|
-
this.paymentsService
|
|
1300
|
+
this.paymentsService
|
|
1301
|
+
.createSession({
|
|
1292
1302
|
priceId: priceId,
|
|
1293
1303
|
userId: this.messenger.myPeer.clientId,
|
|
1294
1304
|
route: `/profile/${this.messenger.myPeer.clientId}`,
|
|
1295
|
-
applicationId: this.messenger.myPeer.rtseeAppId
|
|
1296
|
-
})
|
|
1305
|
+
applicationId: this.messenger.myPeer.rtseeAppId,
|
|
1306
|
+
})
|
|
1307
|
+
.subscribe((response) => {
|
|
1297
1308
|
void this.initCheckout(response.clientSecret);
|
|
1298
1309
|
});
|
|
1299
1310
|
}
|
|
@@ -1303,7 +1314,7 @@ class PaymentPageComponent {
|
|
|
1303
1314
|
return;
|
|
1304
1315
|
}
|
|
1305
1316
|
const checkout = await this.stripe.initEmbeddedCheckout({
|
|
1306
|
-
clientSecret: secret
|
|
1317
|
+
clientSecret: secret,
|
|
1307
1318
|
});
|
|
1308
1319
|
if (!checkout) {
|
|
1309
1320
|
return;
|
|
@@ -1326,7 +1337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1326
1337
|
ReactiveFormsModule,
|
|
1327
1338
|
ProgressSpinner,
|
|
1328
1339
|
PaymentProductSnippetComponent,
|
|
1329
|
-
Button
|
|
1340
|
+
Button,
|
|
1330
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" }]
|
|
1331
1342
|
}], ctorParameters: () => [{ type: PaymentsService }], propDecorators: { messenger: [{
|
|
1332
1343
|
type: Input
|
|
@@ -1345,7 +1356,9 @@ class PaymentValidationPageComponent {
|
|
|
1345
1356
|
if (!this.paymentsService.paymentsConfig?.publicKey) {
|
|
1346
1357
|
return;
|
|
1347
1358
|
}
|
|
1348
|
-
this.stripe =
|
|
1359
|
+
this.stripe =
|
|
1360
|
+
(await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||
|
|
1361
|
+
undefined;
|
|
1349
1362
|
this.validatePayment();
|
|
1350
1363
|
}
|
|
1351
1364
|
validatePayment() {
|
|
@@ -1364,11 +1377,7 @@ class PaymentValidationPageComponent {
|
|
|
1364
1377
|
}
|
|
1365
1378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PaymentValidationPageComponent, decorators: [{
|
|
1366
1379
|
type: Component,
|
|
1367
|
-
args: [{ selector: 'rtsee-payment-validation-page', imports: [
|
|
1368
|
-
ReactiveFormsModule,
|
|
1369
|
-
ProgressSpinner,
|
|
1370
|
-
Button
|
|
1371
|
-
], 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" }]
|
|
1372
1381
|
}], ctorParameters: () => [{ type: PaymentsService }], propDecorators: { messenger: [{
|
|
1373
1382
|
type: Input
|
|
1374
1383
|
}], checkoutContainer: [{
|
|
@@ -1399,11 +1408,7 @@ class ManagePlanComponent {
|
|
|
1399
1408
|
}
|
|
1400
1409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManagePlanComponent, decorators: [{
|
|
1401
1410
|
type: Component,
|
|
1402
|
-
args: [{ selector: 'rtsee-manage-plan', imports: [
|
|
1403
|
-
Card,
|
|
1404
|
-
Divider,
|
|
1405
|
-
Button
|
|
1406
|
-
], 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" }]
|
|
1407
1412
|
}], ctorParameters: () => [{ type: PaymentsService }], propDecorators: { messenger: [{
|
|
1408
1413
|
type: Input
|
|
1409
1414
|
}] } });
|
|
@@ -1413,7 +1418,7 @@ class MessengerComponent {
|
|
|
1413
1418
|
this.messenger.loadChats();
|
|
1414
1419
|
}
|
|
1415
1420
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1416
|
-
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"] }] }); }
|
|
1417
1422
|
}
|
|
1418
1423
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerComponent, decorators: [{
|
|
1419
1424
|
type: Component,
|
|
@@ -1428,7 +1433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1428
1433
|
ManageProfileComponent,
|
|
1429
1434
|
PaymentPageComponent,
|
|
1430
1435
|
PaymentValidationPageComponent,
|
|
1431
|
-
ManagePlanComponent
|
|
1436
|
+
ManagePlanComponent,
|
|
1432
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" }]
|
|
1433
1438
|
}], propDecorators: { messenger: [{
|
|
1434
1439
|
type: Input
|
|
@@ -1519,10 +1524,7 @@ class EventThumbnailComponent {
|
|
|
1519
1524
|
}
|
|
1520
1525
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EventThumbnailComponent, decorators: [{
|
|
1521
1526
|
type: Component,
|
|
1522
|
-
args: [{ selector: 'rtsee-event-thumbnail', imports: [
|
|
1523
|
-
WidgetDirective,
|
|
1524
|
-
NgClass
|
|
1525
|
-
], 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" }]
|
|
1526
1528
|
}], ctorParameters: () => [{ type: EventsWidgetsService }, { type: i0.ComponentFactoryResolver }, { type: TimeFormatHelperService }, { type: i0.ChangeDetectorRef }], propDecorators: { event: [{
|
|
1527
1529
|
type: Input
|
|
1528
1530
|
}], widgetHost: [{
|
|
@@ -1539,11 +1541,7 @@ class RtseeEventsDashboardSessionComponent {
|
|
|
1539
1541
|
}
|
|
1540
1542
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardSessionComponent, decorators: [{
|
|
1541
1543
|
type: Component,
|
|
1542
|
-
args: [{ selector: 'rtsee-rtsee-events-dashboard-session', imports: [
|
|
1543
|
-
NgIf,
|
|
1544
|
-
EventThumbnailComponent,
|
|
1545
|
-
SlicePipe
|
|
1546
|
-
], 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" }]
|
|
1547
1545
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }], propDecorators: { session: [{
|
|
1548
1546
|
type: Input
|
|
1549
1547
|
}] } });
|
|
@@ -1562,9 +1560,7 @@ class RtseeEventsDashboardClientThumbnailComponent {
|
|
|
1562
1560
|
}
|
|
1563
1561
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardClientThumbnailComponent, decorators: [{
|
|
1564
1562
|
type: Component,
|
|
1565
|
-
args: [{ selector: 'ngx-rtsee-events-dashboard-client-thumbnail', imports: [
|
|
1566
|
-
RtseeEventsDashboardSessionComponent
|
|
1567
|
-
], 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" }]
|
|
1568
1564
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }, { type: DefaultImagesService }], propDecorators: { dashboard: [{
|
|
1569
1565
|
type: Input
|
|
1570
1566
|
}], client: [{
|
|
@@ -1577,9 +1573,7 @@ class RtseeEventsDashboardComponent {
|
|
|
1577
1573
|
}
|
|
1578
1574
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardComponent, decorators: [{
|
|
1579
1575
|
type: Component,
|
|
1580
|
-
args: [{ selector: 'rtsee-events-dashboard', imports: [
|
|
1581
|
-
RtseeEventsDashboardClientThumbnailComponent
|
|
1582
|
-
], 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" }]
|
|
1583
1577
|
}], propDecorators: { eventsDashboard: [{
|
|
1584
1578
|
type: Input
|
|
1585
1579
|
}] } });
|
|
@@ -1595,7 +1589,7 @@ class JoinCallComponent {
|
|
|
1595
1589
|
this.messageService.add({
|
|
1596
1590
|
severity: 'success',
|
|
1597
1591
|
summary: 'Link Copied!',
|
|
1598
|
-
detail: 'The link was copied to clipboard!'
|
|
1592
|
+
detail: 'The link was copied to clipboard!',
|
|
1599
1593
|
});
|
|
1600
1594
|
this.recentlyCopied = true;
|
|
1601
1595
|
setTimeout(() => {
|
|
@@ -1607,12 +1601,7 @@ class JoinCallComponent {
|
|
|
1607
1601
|
}
|
|
1608
1602
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: JoinCallComponent, decorators: [{
|
|
1609
1603
|
type: Component,
|
|
1610
|
-
args: [{ selector: 'rtsee-join-call', imports: [
|
|
1611
|
-
Button,
|
|
1612
|
-
CdkCopyToClipboard,
|
|
1613
|
-
Message,
|
|
1614
|
-
Toast
|
|
1615
|
-
], 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" }]
|
|
1616
1605
|
}], ctorParameters: () => [{ type: i1$2.MessageService }], propDecorators: { presentation: [{
|
|
1617
1606
|
type: Input
|
|
1618
1607
|
}], room: [{
|
|
@@ -1628,50 +1617,11 @@ class PresentationHeaderComponent {
|
|
|
1628
1617
|
}
|
|
1629
1618
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationHeaderComponent, decorators: [{
|
|
1630
1619
|
type: Component,
|
|
1631
|
-
args: [{ selector: 'rtsee-presentation-header', imports: [
|
|
1632
|
-
Button,
|
|
1633
|
-
NgClass,
|
|
1634
|
-
Chip,
|
|
1635
|
-
JoinCallComponent
|
|
1636
|
-
], 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" }]
|
|
1637
1621
|
}], propDecorators: { presentation: [{
|
|
1638
1622
|
type: Input
|
|
1639
1623
|
}] } });
|
|
1640
1624
|
|
|
1641
|
-
class RatingComponent {
|
|
1642
|
-
constructor() {
|
|
1643
|
-
this.stars = [];
|
|
1644
|
-
}
|
|
1645
|
-
ngOnInit() {
|
|
1646
|
-
this.initStars();
|
|
1647
|
-
}
|
|
1648
|
-
initStars() {
|
|
1649
|
-
const stars = [];
|
|
1650
|
-
const full = Math.floor(this.rating.value);
|
|
1651
|
-
const hasHalf = this.rating.value - full >= 0.25;
|
|
1652
|
-
for (let i = 0; i < full; i++) {
|
|
1653
|
-
stars.push('full');
|
|
1654
|
-
}
|
|
1655
|
-
if (hasHalf) {
|
|
1656
|
-
stars.push('half');
|
|
1657
|
-
}
|
|
1658
|
-
while (stars.length < this.rating.max) {
|
|
1659
|
-
stars.push('empty');
|
|
1660
|
-
}
|
|
1661
|
-
this.stars = stars;
|
|
1662
|
-
}
|
|
1663
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1664
|
-
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"] }] }); }
|
|
1665
|
-
}
|
|
1666
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RatingComponent, decorators: [{
|
|
1667
|
-
type: Component,
|
|
1668
|
-
args: [{ selector: 'rtsee-rating', imports: [
|
|
1669
|
-
NgClass
|
|
1670
|
-
], 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" }]
|
|
1671
|
-
}], propDecorators: { rating: [{
|
|
1672
|
-
type: Input
|
|
1673
|
-
}] } });
|
|
1674
|
-
|
|
1675
1625
|
class StoryThumbnailComponent {
|
|
1676
1626
|
constructor() {
|
|
1677
1627
|
this.progressPercent = 0;
|
|
@@ -1679,18 +1629,15 @@ class StoryThumbnailComponent {
|
|
|
1679
1629
|
}
|
|
1680
1630
|
ngOnInit() {
|
|
1681
1631
|
if (this.story.preselectedSlideNumber) {
|
|
1682
|
-
this.progressPercent = Math
|
|
1683
|
-
.round((this.story.preselectedSlideNumber / this.story.totalSlides) * 100);
|
|
1632
|
+
this.progressPercent = Math.round((this.story.preselectedSlideNumber / this.story.totalSlides) * 100);
|
|
1684
1633
|
}
|
|
1685
1634
|
}
|
|
1686
1635
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryThumbnailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1687
|
-
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"] }] }); }
|
|
1688
1637
|
}
|
|
1689
1638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryThumbnailComponent, decorators: [{
|
|
1690
1639
|
type: Component,
|
|
1691
|
-
args: [{ selector: 'rtsee-story-thumbnail', imports: [
|
|
1692
|
-
RatingComponent
|
|
1693
|
-
], 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" }]
|
|
1694
1641
|
}], propDecorators: { story: [{
|
|
1695
1642
|
type: Input
|
|
1696
1643
|
}] } });
|
|
@@ -1711,8 +1658,7 @@ class SlideComponent {
|
|
|
1711
1658
|
}
|
|
1712
1659
|
}
|
|
1713
1660
|
ngAfterViewInit() {
|
|
1714
|
-
const parentSlideEl = this.elementRef.nativeElement
|
|
1715
|
-
.closest('.story-player-slide-container');
|
|
1661
|
+
const parentSlideEl = this.elementRef.nativeElement.closest('.story-player-slide-container');
|
|
1716
1662
|
if (!parentSlideEl) {
|
|
1717
1663
|
return;
|
|
1718
1664
|
}
|
|
@@ -1729,7 +1675,7 @@ class SlideComponent {
|
|
|
1729
1675
|
}
|
|
1730
1676
|
handleScroll(position, scrollHeight, clientHeight) {
|
|
1731
1677
|
const BUFFER = 50;
|
|
1732
|
-
const isAtBottom = Math.abs(
|
|
1678
|
+
const isAtBottom = Math.abs(scrollHeight - position - clientHeight) < 10;
|
|
1733
1679
|
if (position > this.lastScrollPosition + BUFFER) {
|
|
1734
1680
|
if (!this.scrollingDown) {
|
|
1735
1681
|
this.scrollingDown = true;
|
|
@@ -1756,12 +1702,7 @@ class SlideComponent {
|
|
|
1756
1702
|
}
|
|
1757
1703
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SlideComponent, decorators: [{
|
|
1758
1704
|
type: Component,
|
|
1759
|
-
args: [{ selector: 'rtsee-slide', imports: [
|
|
1760
|
-
NgStyle,
|
|
1761
|
-
WidgetDirective,
|
|
1762
|
-
Button,
|
|
1763
|
-
NgClass
|
|
1764
|
-
], 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" }]
|
|
1765
1706
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { story: [{
|
|
1766
1707
|
type: Input
|
|
1767
1708
|
}], slide: [{
|
|
@@ -1780,7 +1721,7 @@ class StoryPlayerComponent {
|
|
|
1780
1721
|
ngAfterViewInit() {
|
|
1781
1722
|
const swiper = new Swiper(this.swiperEl.nativeElement, {
|
|
1782
1723
|
effect: 'cards',
|
|
1783
|
-
grabCursor: true
|
|
1724
|
+
grabCursor: true,
|
|
1784
1725
|
});
|
|
1785
1726
|
this.story.initSwiper(swiper);
|
|
1786
1727
|
}
|
|
@@ -1789,10 +1730,7 @@ class StoryPlayerComponent {
|
|
|
1789
1730
|
}
|
|
1790
1731
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryPlayerComponent, decorators: [{
|
|
1791
1732
|
type: Component,
|
|
1792
|
-
args: [{ selector: 'rtsee-story-player', imports: [
|
|
1793
|
-
NgClass,
|
|
1794
|
-
SlideComponent
|
|
1795
|
-
], 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" }]
|
|
1796
1734
|
}], ctorParameters: () => [], propDecorators: { story: [{
|
|
1797
1735
|
type: Input
|
|
1798
1736
|
}], settings: [{
|
|
@@ -1808,12 +1746,7 @@ class AutocompleteComponent {
|
|
|
1808
1746
|
}
|
|
1809
1747
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
1810
1748
|
type: Component,
|
|
1811
|
-
args: [{ selector: 'rtsee-autocomplete', imports: [
|
|
1812
|
-
AutoCompleteModule,
|
|
1813
|
-
FloatLabel,
|
|
1814
|
-
InputGroup,
|
|
1815
|
-
FormsModule
|
|
1816
|
-
], 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" }]
|
|
1817
1750
|
}], propDecorators: { config: [{
|
|
1818
1751
|
type: Input
|
|
1819
1752
|
}] } });
|
|
@@ -1824,11 +1757,7 @@ class ManageSlidesComponent {
|
|
|
1824
1757
|
}
|
|
1825
1758
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageSlidesComponent, decorators: [{
|
|
1826
1759
|
type: Component,
|
|
1827
|
-
args: [{ selector: 'rtsee-manage-slides', imports: [
|
|
1828
|
-
OrderList,
|
|
1829
|
-
Button,
|
|
1830
|
-
NgClass
|
|
1831
|
-
], 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" }]
|
|
1832
1761
|
}], propDecorators: { manageSlides: [{
|
|
1833
1762
|
type: Input
|
|
1834
1763
|
}] } });
|
|
@@ -1841,9 +1770,9 @@ class ManageSlideComponent {
|
|
|
1841
1770
|
validators: [
|
|
1842
1771
|
Validators.required,
|
|
1843
1772
|
Validators.minLength(3),
|
|
1844
|
-
Validators.maxLength(131000)
|
|
1845
|
-
]
|
|
1846
|
-
})
|
|
1773
|
+
Validators.maxLength(131000),
|
|
1774
|
+
],
|
|
1775
|
+
}),
|
|
1847
1776
|
});
|
|
1848
1777
|
}
|
|
1849
1778
|
ngOnInit() {
|
|
@@ -1875,7 +1804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1875
1804
|
InputGroup,
|
|
1876
1805
|
Message,
|
|
1877
1806
|
Textarea,
|
|
1878
|
-
Button
|
|
1807
|
+
Button,
|
|
1879
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" }]
|
|
1880
1809
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageSlide: [{
|
|
1881
1810
|
type: Input
|
|
@@ -1889,19 +1818,19 @@ class ManageStoryComponent {
|
|
|
1889
1818
|
validators: [
|
|
1890
1819
|
Validators.required,
|
|
1891
1820
|
Validators.minLength(3),
|
|
1892
|
-
Validators.maxLength(131)
|
|
1893
|
-
]
|
|
1821
|
+
Validators.maxLength(131),
|
|
1822
|
+
],
|
|
1894
1823
|
}),
|
|
1895
1824
|
description: this.formBuilder.control('', {
|
|
1896
1825
|
validators: [
|
|
1897
1826
|
Validators.required,
|
|
1898
1827
|
Validators.minLength(6),
|
|
1899
|
-
Validators.maxLength(244)
|
|
1900
|
-
]
|
|
1828
|
+
Validators.maxLength(244),
|
|
1829
|
+
],
|
|
1901
1830
|
}),
|
|
1902
1831
|
averageReadTime: this.formBuilder.control(0),
|
|
1903
1832
|
isPublished: this.formBuilder.control(false),
|
|
1904
|
-
isDiscussable: this.formBuilder.control(false)
|
|
1833
|
+
isDiscussable: this.formBuilder.control(false),
|
|
1905
1834
|
});
|
|
1906
1835
|
}
|
|
1907
1836
|
submit() {
|
|
@@ -1911,7 +1840,7 @@ class ManageStoryComponent {
|
|
|
1911
1840
|
description: this.descriptionField.value,
|
|
1912
1841
|
averageReadTime: this.averageReadTimeField.value,
|
|
1913
1842
|
commentsEnabled: this.isDiscussableField.value,
|
|
1914
|
-
isPublished: this.isPublishedField.value
|
|
1843
|
+
isPublished: this.isPublishedField.value,
|
|
1915
1844
|
});
|
|
1916
1845
|
}
|
|
1917
1846
|
else {
|
|
@@ -1970,7 +1899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1970
1899
|
ManageSlidesComponent,
|
|
1971
1900
|
ManageSlideComponent,
|
|
1972
1901
|
Divider,
|
|
1973
|
-
ToggleSwitch
|
|
1902
|
+
ToggleSwitch,
|
|
1974
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" }]
|
|
1975
1904
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageStory: [{
|
|
1976
1905
|
type: Input
|
|
@@ -1985,12 +1914,7 @@ class ManageStoriesComponent {
|
|
|
1985
1914
|
}
|
|
1986
1915
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageStoriesComponent, decorators: [{
|
|
1987
1916
|
type: Component,
|
|
1988
|
-
args: [{ selector: 'rtsee-manage-stories', imports: [
|
|
1989
|
-
ManageStoryComponent,
|
|
1990
|
-
Button,
|
|
1991
|
-
OrderList,
|
|
1992
|
-
NgClass
|
|
1993
|
-
], 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" }]
|
|
1994
1918
|
}], propDecorators: { manageStories: [{
|
|
1995
1919
|
type: Input
|
|
1996
1920
|
}] } });
|
|
@@ -2003,16 +1927,16 @@ class ManageCategoryComponent {
|
|
|
2003
1927
|
validators: [
|
|
2004
1928
|
Validators.required,
|
|
2005
1929
|
Validators.minLength(3),
|
|
2006
|
-
Validators.maxLength(131)
|
|
2007
|
-
]
|
|
1930
|
+
Validators.maxLength(131),
|
|
1931
|
+
],
|
|
2008
1932
|
}),
|
|
2009
1933
|
description: this.formBuilder.control('', {
|
|
2010
1934
|
validators: [
|
|
2011
1935
|
Validators.required,
|
|
2012
1936
|
Validators.minLength(6),
|
|
2013
|
-
Validators.maxLength(244)
|
|
2014
|
-
]
|
|
2015
|
-
})
|
|
1937
|
+
Validators.maxLength(244),
|
|
1938
|
+
],
|
|
1939
|
+
}),
|
|
2016
1940
|
});
|
|
2017
1941
|
}
|
|
2018
1942
|
ngOnInit() {
|
|
@@ -2023,7 +1947,7 @@ class ManageCategoryComponent {
|
|
|
2023
1947
|
if (this.categoryForm.valid) {
|
|
2024
1948
|
void this.manageCategory.save({
|
|
2025
1949
|
name: this.nameField.value,
|
|
2026
|
-
description: this.descriptionField.value
|
|
1950
|
+
description: this.descriptionField.value,
|
|
2027
1951
|
});
|
|
2028
1952
|
}
|
|
2029
1953
|
else {
|
|
@@ -2049,7 +1973,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2049
1973
|
InputText,
|
|
2050
1974
|
Message,
|
|
2051
1975
|
Textarea,
|
|
2052
|
-
ReactiveFormsModule
|
|
1976
|
+
ReactiveFormsModule,
|
|
2053
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" }]
|
|
2054
1978
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageCategory: [{
|
|
2055
1979
|
type: Input
|
|
@@ -2064,10 +1988,7 @@ class ManageCategoriesComponent {
|
|
|
2064
1988
|
}
|
|
2065
1989
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageCategoriesComponent, decorators: [{
|
|
2066
1990
|
type: Component,
|
|
2067
|
-
args: [{ selector: 'rtsee-manage-categories', imports: [
|
|
2068
|
-
Button,
|
|
2069
|
-
ManageCategoryComponent
|
|
2070
|
-
], 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" }]
|
|
2071
1992
|
}], propDecorators: { manageCategories: [{
|
|
2072
1993
|
type: Input
|
|
2073
1994
|
}] } });
|
|
@@ -2080,23 +2001,23 @@ class ManageLabelComponent {
|
|
|
2080
2001
|
validators: [
|
|
2081
2002
|
Validators.required,
|
|
2082
2003
|
Validators.minLength(3),
|
|
2083
|
-
Validators.maxLength(131)
|
|
2084
|
-
]
|
|
2004
|
+
Validators.maxLength(131),
|
|
2005
|
+
],
|
|
2085
2006
|
}),
|
|
2086
2007
|
description: this.formBuilder.control('', {
|
|
2087
2008
|
validators: [
|
|
2088
2009
|
Validators.required,
|
|
2089
2010
|
Validators.minLength(6),
|
|
2090
|
-
Validators.maxLength(244)
|
|
2091
|
-
]
|
|
2011
|
+
Validators.maxLength(244),
|
|
2012
|
+
],
|
|
2092
2013
|
}),
|
|
2093
2014
|
symbol: this.formBuilder.control('', {
|
|
2094
2015
|
validators: [
|
|
2095
2016
|
Validators.required,
|
|
2096
2017
|
Validators.minLength(1),
|
|
2097
|
-
Validators.maxLength(244)
|
|
2098
|
-
]
|
|
2099
|
-
})
|
|
2018
|
+
Validators.maxLength(244),
|
|
2019
|
+
],
|
|
2020
|
+
}),
|
|
2100
2021
|
});
|
|
2101
2022
|
}
|
|
2102
2023
|
ngOnInit() {
|
|
@@ -2139,7 +2060,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2139
2060
|
Message,
|
|
2140
2061
|
Textarea,
|
|
2141
2062
|
ReactiveFormsModule,
|
|
2142
|
-
ColorPicker
|
|
2063
|
+
ColorPicker,
|
|
2143
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" }]
|
|
2144
2065
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageLabel: [{
|
|
2145
2066
|
type: Input
|
|
@@ -2154,10 +2075,7 @@ class ManageLabelsComponent {
|
|
|
2154
2075
|
}
|
|
2155
2076
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageLabelsComponent, decorators: [{
|
|
2156
2077
|
type: Component,
|
|
2157
|
-
args: [{ selector: 'rtsee-manage-labels', imports: [
|
|
2158
|
-
Button,
|
|
2159
|
-
ManageLabelComponent
|
|
2160
|
-
], 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" }]
|
|
2161
2079
|
}], propDecorators: { manageLabels: [{
|
|
2162
2080
|
type: Input
|
|
2163
2081
|
}] } });
|
|
@@ -2170,23 +2088,23 @@ class ManageTopicComponent {
|
|
|
2170
2088
|
validators: [
|
|
2171
2089
|
Validators.required,
|
|
2172
2090
|
Validators.minLength(3),
|
|
2173
|
-
Validators.maxLength(131)
|
|
2174
|
-
]
|
|
2091
|
+
Validators.maxLength(131),
|
|
2092
|
+
],
|
|
2175
2093
|
}),
|
|
2176
2094
|
key: this.formBuilder.control('', {
|
|
2177
2095
|
validators: [
|
|
2178
2096
|
Validators.required,
|
|
2179
2097
|
Validators.minLength(1),
|
|
2180
|
-
Validators.maxLength(244)
|
|
2181
|
-
]
|
|
2098
|
+
Validators.maxLength(244),
|
|
2099
|
+
],
|
|
2182
2100
|
}),
|
|
2183
2101
|
description: this.formBuilder.control('', {
|
|
2184
2102
|
validators: [
|
|
2185
2103
|
Validators.required,
|
|
2186
2104
|
Validators.minLength(6),
|
|
2187
|
-
Validators.maxLength(244)
|
|
2188
|
-
]
|
|
2189
|
-
})
|
|
2105
|
+
Validators.maxLength(244),
|
|
2106
|
+
],
|
|
2107
|
+
}),
|
|
2190
2108
|
});
|
|
2191
2109
|
}
|
|
2192
2110
|
ngOnInit() {
|
|
@@ -2229,7 +2147,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2229
2147
|
ReactiveFormsModule,
|
|
2230
2148
|
Textarea,
|
|
2231
2149
|
AutocompleteComponent,
|
|
2232
|
-
OrderList
|
|
2150
|
+
OrderList,
|
|
2233
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" }]
|
|
2234
2152
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageTopic: [{
|
|
2235
2153
|
type: Input
|
|
@@ -2244,10 +2162,7 @@ class ManageTopicsComponent {
|
|
|
2244
2162
|
}
|
|
2245
2163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageTopicsComponent, decorators: [{
|
|
2246
2164
|
type: Component,
|
|
2247
|
-
args: [{ selector: 'rtsee-manage-topics', imports: [
|
|
2248
|
-
Button,
|
|
2249
|
-
ManageTopicComponent
|
|
2250
|
-
], 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" }]
|
|
2251
2166
|
}], propDecorators: { manageTopics: [{
|
|
2252
2167
|
type: Input
|
|
2253
2168
|
}] } });
|
|
@@ -2269,7 +2184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2269
2184
|
Button,
|
|
2270
2185
|
Chip,
|
|
2271
2186
|
ManageLabelsComponent,
|
|
2272
|
-
ManageTopicsComponent
|
|
2187
|
+
ManageTopicsComponent,
|
|
2273
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" }]
|
|
2274
2189
|
}], propDecorators: { dashboard: [{
|
|
2275
2190
|
type: Input
|
|
@@ -2294,7 +2209,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2294
2209
|
Message,
|
|
2295
2210
|
Tag,
|
|
2296
2211
|
Listbox,
|
|
2297
|
-
JoinCallComponent
|
|
2212
|
+
JoinCallComponent,
|
|
2298
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" }]
|
|
2299
2214
|
}], propDecorators: { settings: [{
|
|
2300
2215
|
type: Input
|
|
@@ -2302,18 +2217,282 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2302
2217
|
type: Input
|
|
2303
2218
|
}] } });
|
|
2304
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
|
+
|
|
2305
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
|
+
}
|
|
2306
2490
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2307
|
-
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"] }] }); }
|
|
2308
2492
|
}
|
|
2309
2493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryDetailsComponent, decorators: [{
|
|
2310
2494
|
type: Component,
|
|
2311
|
-
args: [{ selector: 'rtsee-story-details', imports: [
|
|
2312
|
-
Chip,
|
|
2313
|
-
Tag,
|
|
2314
|
-
Button,
|
|
2315
|
-
ChatComponent
|
|
2316
|
-
], 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" }]
|
|
2317
2496
|
}], propDecorators: { story: [{
|
|
2318
2497
|
type: Input
|
|
2319
2498
|
}], presentation: [{
|
|
@@ -2339,7 +2518,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2339
2518
|
PreloaderComponent,
|
|
2340
2519
|
PresentationsDashboardComponent,
|
|
2341
2520
|
PresentationSettingsComponent,
|
|
2342
|
-
StoryDetailsComponent
|
|
2521
|
+
StoryDetailsComponent,
|
|
2343
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" }]
|
|
2344
2523
|
}], ctorParameters: () => [], propDecorators: { presentation: [{
|
|
2345
2524
|
type: Input
|
|
@@ -2370,12 +2549,9 @@ class RtseeNavComponent {
|
|
|
2370
2549
|
console.log('RTSeeContainer: user peer not found');
|
|
2371
2550
|
return false;
|
|
2372
2551
|
}
|
|
2373
|
-
const profileRoute = this.config.routes
|
|
2374
|
-
|
|
2375
|
-
const
|
|
2376
|
-
.find((r) => r.rtseeRoute === RTSeeRoutesList.EVENTS_DASHBOARD) || null;
|
|
2377
|
-
const messengerRoute = this.config.routes
|
|
2378
|
-
.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;
|
|
2379
2555
|
if (dashboardRoute) {
|
|
2380
2556
|
dashboardRoute.isEnabled = hasPermission(peer, RTSeePeerPermissions.ACCESS_EVENTS_DASHBOARD);
|
|
2381
2557
|
}
|
|
@@ -2402,7 +2578,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2402
2578
|
Avatar,
|
|
2403
2579
|
Image,
|
|
2404
2580
|
Divider,
|
|
2405
|
-
Tooltip
|
|
2581
|
+
Tooltip,
|
|
2406
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" }]
|
|
2407
2583
|
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { config: [{
|
|
2408
2584
|
type: Input
|
|
@@ -2420,9 +2596,11 @@ class RTSeeContainerComponent {
|
|
|
2420
2596
|
}
|
|
2421
2597
|
ngOnInit() {
|
|
2422
2598
|
this.authService.init(this.auth);
|
|
2423
|
-
this.routeSubscription = this.router.events
|
|
2599
|
+
this.routeSubscription = this.router.events
|
|
2600
|
+
.pipe(
|
|
2424
2601
|
// Filter for the NavigationEnd event to know when navigation is complete
|
|
2425
|
-
filter((event) => event instanceof NavigationEnd))
|
|
2602
|
+
filter((event) => event instanceof NavigationEnd))
|
|
2603
|
+
.subscribe((event) => {
|
|
2426
2604
|
this.defineSideNavState(event.url);
|
|
2427
2605
|
});
|
|
2428
2606
|
}
|
|
@@ -2432,12 +2610,12 @@ class RTSeeContainerComponent {
|
|
|
2432
2610
|
defineSideNavState(url) {
|
|
2433
2611
|
const isBase = url === '/' || url.startsWith('/?');
|
|
2434
2612
|
const routeUrlSplit = url.split('/');
|
|
2435
|
-
const rootRoutePath = isBase ? '' :
|
|
2613
|
+
const rootRoutePath = isBase ? '' : routeUrlSplit[1] || null;
|
|
2436
2614
|
if (!rootRoutePath && !isBase) {
|
|
2437
2615
|
return;
|
|
2438
2616
|
}
|
|
2439
|
-
const rtseeRoute = this.navigationConfig.routes
|
|
2440
|
-
|
|
2617
|
+
const rtseeRoute = this.navigationConfig.routes.find((rn) => rn.link === rootRoutePath) ||
|
|
2618
|
+
null;
|
|
2441
2619
|
if (!rtseeRoute) {
|
|
2442
2620
|
return;
|
|
2443
2621
|
}
|
|
@@ -2455,7 +2633,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2455
2633
|
MessengerComponent,
|
|
2456
2634
|
RtseeEventsDashboardComponent,
|
|
2457
2635
|
PresentationComponent,
|
|
2458
|
-
RtseeNavComponent
|
|
2636
|
+
RtseeNavComponent,
|
|
2459
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" }]
|
|
2460
2638
|
}], ctorParameters: () => [{ type: RTSeeAuthService }, { type: i2.Router }], propDecorators: { rtsee: [{
|
|
2461
2639
|
type: Input
|
|
@@ -2471,11 +2649,13 @@ class RtseeTagsAccordionMenuComponent {
|
|
|
2471
2649
|
this.onTagClicked = output();
|
|
2472
2650
|
}
|
|
2473
2651
|
ngOnInit() {
|
|
2474
|
-
this.manageTags
|
|
2652
|
+
this.manageTags
|
|
2653
|
+
.loadTags()
|
|
2475
2654
|
.then(() => {
|
|
2476
2655
|
this.items = this.tagsToItems(this.manageTags.tags);
|
|
2477
2656
|
console.log(this.items);
|
|
2478
|
-
})
|
|
2657
|
+
})
|
|
2658
|
+
.catch((err) => {
|
|
2479
2659
|
console.log(err);
|
|
2480
2660
|
});
|
|
2481
2661
|
}
|
|
@@ -2488,7 +2668,7 @@ class RtseeTagsAccordionMenuComponent {
|
|
|
2488
2668
|
isSelected: false,
|
|
2489
2669
|
command: () => {
|
|
2490
2670
|
this.onTagClicked.emit(t);
|
|
2491
|
-
}
|
|
2671
|
+
},
|
|
2492
2672
|
};
|
|
2493
2673
|
});
|
|
2494
2674
|
}
|
|
@@ -2497,9 +2677,7 @@ class RtseeTagsAccordionMenuComponent {
|
|
|
2497
2677
|
}
|
|
2498
2678
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeTagsAccordionMenuComponent, decorators: [{
|
|
2499
2679
|
type: Component,
|
|
2500
|
-
args: [{ selector: 'rtsee-tags-accordion', imports: [
|
|
2501
|
-
PanelMenu
|
|
2502
|
-
], 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" }]
|
|
2503
2681
|
}], propDecorators: { manageTags: [{
|
|
2504
2682
|
type: Input
|
|
2505
2683
|
}] } });
|
|
@@ -2516,10 +2694,7 @@ class RecursiveSelectComponent {
|
|
|
2516
2694
|
}
|
|
2517
2695
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RecursiveSelectComponent, decorators: [{
|
|
2518
2696
|
type: Component,
|
|
2519
|
-
args: [{ selector: 'rtsee-recursive-select', imports: [
|
|
2520
|
-
Select,
|
|
2521
|
-
FormsModule
|
|
2522
|
-
], 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" }]
|
|
2523
2698
|
}], propDecorators: { selectModel: [{
|
|
2524
2699
|
type: Input
|
|
2525
2700
|
}] } });
|
|
@@ -2540,7 +2715,7 @@ class RtseeTagManageComponent {
|
|
|
2540
2715
|
this.presetFields(this.manageTags.activeTag);
|
|
2541
2716
|
}
|
|
2542
2717
|
async presetParent() {
|
|
2543
|
-
console.log(
|
|
2718
|
+
console.log('presetParent', this.manageTags.activeTag);
|
|
2544
2719
|
if (!this.manageTags.activeTag) {
|
|
2545
2720
|
return;
|
|
2546
2721
|
}
|
|
@@ -2558,7 +2733,7 @@ class RtseeTagManageComponent {
|
|
|
2558
2733
|
return Promise.resolve(null);
|
|
2559
2734
|
}
|
|
2560
2735
|
return this.manageTags.getTag(tag.parentId);
|
|
2561
|
-
}
|
|
2736
|
+
},
|
|
2562
2737
|
};
|
|
2563
2738
|
console.log('active tag', this.manageTags.activeTag);
|
|
2564
2739
|
if (this.manageTags.activeTag.parentId) {
|
|
@@ -2567,7 +2742,9 @@ class RtseeTagManageComponent {
|
|
|
2567
2742
|
this.tagsRecursiveSelect = new RecursiveSelect(selectOptions);
|
|
2568
2743
|
}
|
|
2569
2744
|
async submit() {
|
|
2570
|
-
if (this.tagForm.invalid ||
|
|
2745
|
+
if (this.tagForm.invalid ||
|
|
2746
|
+
!this.manageTags.peer.rtseeAppId ||
|
|
2747
|
+
!this.manageTags.activeTag) {
|
|
2571
2748
|
console.log('Form Invalid!');
|
|
2572
2749
|
return;
|
|
2573
2750
|
}
|
|
@@ -2575,13 +2752,13 @@ class RtseeTagManageComponent {
|
|
|
2575
2752
|
const tagParams = {
|
|
2576
2753
|
name: this.nameField.getRawValue(),
|
|
2577
2754
|
description: this.descriptionField.getRawValue(),
|
|
2578
|
-
applicationId: this.manageTags.
|
|
2579
|
-
parentId
|
|
2755
|
+
applicationId: this.manageTags.applicationId,
|
|
2756
|
+
parentId,
|
|
2580
2757
|
};
|
|
2581
2758
|
if (this.manageTags.activeTag.id) {
|
|
2582
2759
|
const options = {
|
|
2583
2760
|
id: this.manageTags.activeTag.id,
|
|
2584
|
-
...tagParams
|
|
2761
|
+
...tagParams,
|
|
2585
2762
|
};
|
|
2586
2763
|
await this.manageTags.updateTag(options);
|
|
2587
2764
|
}
|
|
@@ -2605,28 +2782,22 @@ class RtseeTagManageComponent {
|
|
|
2605
2782
|
validators: [
|
|
2606
2783
|
Validators.required,
|
|
2607
2784
|
Validators.minLength(3),
|
|
2608
|
-
Validators.maxLength(131)
|
|
2609
|
-
]
|
|
2785
|
+
Validators.maxLength(131),
|
|
2786
|
+
],
|
|
2610
2787
|
}),
|
|
2611
2788
|
description: this.formBuilder.control('', {
|
|
2612
2789
|
validators: [
|
|
2613
2790
|
Validators.required,
|
|
2614
2791
|
Validators.minLength(6),
|
|
2615
|
-
Validators.maxLength(244)
|
|
2616
|
-
]
|
|
2792
|
+
Validators.maxLength(244),
|
|
2793
|
+
],
|
|
2617
2794
|
}),
|
|
2618
2795
|
iconClass: this.formBuilder.control('', {
|
|
2619
|
-
validators: [
|
|
2620
|
-
Validators.minLength(1),
|
|
2621
|
-
Validators.maxLength(244)
|
|
2622
|
-
]
|
|
2796
|
+
validators: [Validators.minLength(1), Validators.maxLength(244)],
|
|
2623
2797
|
}),
|
|
2624
2798
|
value: this.formBuilder.control('', {
|
|
2625
|
-
validators: [
|
|
2626
|
-
|
|
2627
|
-
Validators.maxLength(244)
|
|
2628
|
-
]
|
|
2629
|
-
})
|
|
2799
|
+
validators: [Validators.minLength(1), Validators.maxLength(244)],
|
|
2800
|
+
}),
|
|
2630
2801
|
});
|
|
2631
2802
|
}
|
|
2632
2803
|
get nameField() {
|
|
@@ -2656,7 +2827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2656
2827
|
Textarea,
|
|
2657
2828
|
ReactiveFormsModule,
|
|
2658
2829
|
RecursiveSelectComponent,
|
|
2659
|
-
Divider
|
|
2830
|
+
Divider,
|
|
2660
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" }]
|
|
2661
2832
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageTags: [{
|
|
2662
2833
|
type: Input
|
|
@@ -2669,15 +2840,17 @@ class RtseeTagGroupsManageComponent {
|
|
|
2669
2840
|
this.onTagGroupClicked = output();
|
|
2670
2841
|
}
|
|
2671
2842
|
ngOnInit() {
|
|
2672
|
-
this.manageTagGroups
|
|
2843
|
+
this.manageTagGroups
|
|
2844
|
+
.loadTagGroups()
|
|
2673
2845
|
.then(() => {
|
|
2674
2846
|
this.items = this.tagGroupsToItems(this.manageTagGroups.tagGroups);
|
|
2675
|
-
})
|
|
2847
|
+
})
|
|
2848
|
+
.catch((err) => {
|
|
2676
2849
|
console.log(err);
|
|
2677
2850
|
});
|
|
2678
2851
|
}
|
|
2679
2852
|
tagGroupsToItems(tagGroups) {
|
|
2680
|
-
console.log(
|
|
2853
|
+
console.log('tagGroupsToItems', tagGroups);
|
|
2681
2854
|
return tagGroups.map((tg) => {
|
|
2682
2855
|
return {
|
|
2683
2856
|
label: tg.name,
|
|
@@ -2685,7 +2858,7 @@ class RtseeTagGroupsManageComponent {
|
|
|
2685
2858
|
command: () => {
|
|
2686
2859
|
this.selectedTagGroup = tg;
|
|
2687
2860
|
this.onTagGroupClicked.emit(tg);
|
|
2688
|
-
}
|
|
2861
|
+
},
|
|
2689
2862
|
};
|
|
2690
2863
|
});
|
|
2691
2864
|
}
|
|
@@ -2694,9 +2867,7 @@ class RtseeTagGroupsManageComponent {
|
|
|
2694
2867
|
}
|
|
2695
2868
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeTagGroupsManageComponent, decorators: [{
|
|
2696
2869
|
type: Component,
|
|
2697
|
-
args: [{ selector: 'rtsee-rtsee-tag-groups-manage', imports: [
|
|
2698
|
-
Menu
|
|
2699
|
-
], 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" }]
|
|
2700
2871
|
}], propDecorators: { manageTagGroups: [{
|
|
2701
2872
|
type: Input
|
|
2702
2873
|
}] } });
|
|
@@ -2727,12 +2898,12 @@ class RtseeTagGroupManageComponent {
|
|
|
2727
2898
|
const tagGroupParams = {
|
|
2728
2899
|
name: this.nameField.getRawValue(),
|
|
2729
2900
|
description: this.descriptionField.getRawValue(),
|
|
2730
|
-
applicationId: this.manageTagGroups.peer.rtseeAppId
|
|
2901
|
+
applicationId: this.manageTagGroups.peer.rtseeAppId,
|
|
2731
2902
|
};
|
|
2732
2903
|
if (this.manageTagGroups.activeTagGroup.id) {
|
|
2733
2904
|
await this.manageTagGroups.updateTagGroup({
|
|
2734
2905
|
...tagGroupParams,
|
|
2735
|
-
id: this.manageTagGroups.activeTagGroup.id
|
|
2906
|
+
id: this.manageTagGroups.activeTagGroup.id,
|
|
2736
2907
|
});
|
|
2737
2908
|
}
|
|
2738
2909
|
else {
|
|
@@ -2752,16 +2923,16 @@ class RtseeTagGroupManageComponent {
|
|
|
2752
2923
|
validators: [
|
|
2753
2924
|
Validators.required,
|
|
2754
2925
|
Validators.minLength(3),
|
|
2755
|
-
Validators.maxLength(131)
|
|
2756
|
-
]
|
|
2926
|
+
Validators.maxLength(131),
|
|
2927
|
+
],
|
|
2757
2928
|
}),
|
|
2758
2929
|
description: this.formBuilder.control('', {
|
|
2759
2930
|
validators: [
|
|
2760
2931
|
Validators.required,
|
|
2761
2932
|
Validators.minLength(6),
|
|
2762
|
-
Validators.maxLength(244)
|
|
2763
|
-
]
|
|
2764
|
-
})
|
|
2933
|
+
Validators.maxLength(244),
|
|
2934
|
+
],
|
|
2935
|
+
}),
|
|
2765
2936
|
});
|
|
2766
2937
|
}
|
|
2767
2938
|
get nameField() {
|
|
@@ -2783,7 +2954,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2783
2954
|
Message,
|
|
2784
2955
|
ReactiveFormsModule,
|
|
2785
2956
|
Textarea,
|
|
2786
|
-
AutocompleteComponent
|
|
2957
|
+
AutocompleteComponent,
|
|
2787
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" }]
|
|
2788
2959
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageTagGroups: [{
|
|
2789
2960
|
type: Input
|
|
@@ -2795,15 +2966,17 @@ class EntitiesConfigurationsListComponent {
|
|
|
2795
2966
|
this.onConfigurationClicked = output();
|
|
2796
2967
|
}
|
|
2797
2968
|
ngOnInit() {
|
|
2798
|
-
this.manageEntityConfigurations
|
|
2969
|
+
this.manageEntityConfigurations
|
|
2970
|
+
.loadEntityConfigurations()
|
|
2799
2971
|
.then(() => {
|
|
2800
2972
|
this.items = this.configurationsToItems(this.manageEntityConfigurations.entityConfigurations);
|
|
2801
|
-
})
|
|
2973
|
+
})
|
|
2974
|
+
.catch((err) => {
|
|
2802
2975
|
console.log(err);
|
|
2803
2976
|
});
|
|
2804
2977
|
}
|
|
2805
2978
|
configurationsToItems(entityConfigurations) {
|
|
2806
|
-
console.log(
|
|
2979
|
+
console.log('entityConfigsToItems', entityConfigurations);
|
|
2807
2980
|
return entityConfigurations.map((ec) => {
|
|
2808
2981
|
return {
|
|
2809
2982
|
label: ec.name,
|
|
@@ -2811,7 +2984,7 @@ class EntitiesConfigurationsListComponent {
|
|
|
2811
2984
|
command: () => {
|
|
2812
2985
|
this.selectedEntityConfiguration = ec;
|
|
2813
2986
|
this.onConfigurationClicked.emit(ec);
|
|
2814
|
-
}
|
|
2987
|
+
},
|
|
2815
2988
|
};
|
|
2816
2989
|
});
|
|
2817
2990
|
}
|
|
@@ -2820,13 +2993,160 @@ class EntitiesConfigurationsListComponent {
|
|
|
2820
2993
|
}
|
|
2821
2994
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EntitiesConfigurationsListComponent, decorators: [{
|
|
2822
2995
|
type: Component,
|
|
2823
|
-
args: [{ selector: 'rtsee-entities-configurations-list', imports: [
|
|
2824
|
-
Menu
|
|
2825
|
-
], 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" }]
|
|
2826
2997
|
}], propDecorators: { manageEntityConfigurations: [{
|
|
2827
2998
|
type: Input
|
|
2828
2999
|
}] } });
|
|
2829
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
|
+
|
|
2830
3150
|
class ManageEntityConfigurationComponent {
|
|
2831
3151
|
constructor(formBuilder) {
|
|
2832
3152
|
this.formBuilder = formBuilder;
|
|
@@ -2846,7 +3166,8 @@ class ManageEntityConfigurationComponent {
|
|
|
2846
3166
|
if (!this.manageEntityConfigurations.activeEntityConfiguration) {
|
|
2847
3167
|
throw new Error(`Active entityConfiguration should be selected`);
|
|
2848
3168
|
}
|
|
2849
|
-
if (this.entityConfigurationForm.invalid ||
|
|
3169
|
+
if (this.entityConfigurationForm.invalid ||
|
|
3170
|
+
!this.manageEntityConfigurations.peer.rtseeAppId) {
|
|
2850
3171
|
console.log('Form Invalid!');
|
|
2851
3172
|
return;
|
|
2852
3173
|
}
|
|
@@ -2861,7 +3182,7 @@ class ManageEntityConfigurationComponent {
|
|
|
2861
3182
|
if (this.manageEntityConfigurations.activeEntityConfiguration.id) {
|
|
2862
3183
|
await this.manageEntityConfigurations.updateEntityConfiguration({
|
|
2863
3184
|
...configurationParams,
|
|
2864
|
-
id: this.manageEntityConfigurations.activeEntityConfiguration.id
|
|
3185
|
+
id: this.manageEntityConfigurations.activeEntityConfiguration.id,
|
|
2865
3186
|
});
|
|
2866
3187
|
}
|
|
2867
3188
|
else {
|
|
@@ -2884,19 +3205,19 @@ class ManageEntityConfigurationComponent {
|
|
|
2884
3205
|
validators: [
|
|
2885
3206
|
Validators.required,
|
|
2886
3207
|
Validators.minLength(3),
|
|
2887
|
-
Validators.maxLength(131)
|
|
2888
|
-
]
|
|
3208
|
+
Validators.maxLength(131),
|
|
3209
|
+
],
|
|
2889
3210
|
}),
|
|
2890
3211
|
description: this.formBuilder.control('', {
|
|
2891
3212
|
validators: [
|
|
2892
3213
|
Validators.required,
|
|
2893
3214
|
Validators.minLength(6),
|
|
2894
|
-
Validators.maxLength(244)
|
|
2895
|
-
]
|
|
3215
|
+
Validators.maxLength(244),
|
|
3216
|
+
],
|
|
2896
3217
|
}),
|
|
2897
3218
|
taggingEnabled: this.formBuilder.control(false),
|
|
2898
3219
|
commentsEnabled: this.formBuilder.control(false),
|
|
2899
|
-
ratingEnabled: this.formBuilder.control(false)
|
|
3220
|
+
ratingEnabled: this.formBuilder.control(false),
|
|
2900
3221
|
});
|
|
2901
3222
|
}
|
|
2902
3223
|
get nameField() {
|
|
@@ -2915,7 +3236,7 @@ class ManageEntityConfigurationComponent {
|
|
|
2915
3236
|
return this.entityConfigurationForm.get('ratingEnabled');
|
|
2916
3237
|
}
|
|
2917
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 }); }
|
|
2918
|
-
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"] }] }); }
|
|
2919
3240
|
}
|
|
2920
3241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageEntityConfigurationComponent, decorators: [{
|
|
2921
3242
|
type: Component,
|
|
@@ -2929,8 +3250,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2929
3250
|
Message,
|
|
2930
3251
|
Textarea,
|
|
2931
3252
|
ReactiveFormsModule,
|
|
2932
|
-
ToggleSwitch
|
|
2933
|
-
|
|
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" }]
|
|
2934
3256
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageEntityConfigurations: [{
|
|
2935
3257
|
type: Input
|
|
2936
3258
|
}] } });
|
|
@@ -2941,15 +3263,17 @@ class EntitiesListComponent {
|
|
|
2941
3263
|
this.onEntityClicked = output();
|
|
2942
3264
|
}
|
|
2943
3265
|
ngOnInit() {
|
|
2944
|
-
this.manageEntities
|
|
3266
|
+
this.manageEntities
|
|
3267
|
+
.loadEntities()
|
|
2945
3268
|
.then(() => {
|
|
2946
3269
|
this.items = this.entitiesToItems(this.manageEntities.entities);
|
|
2947
|
-
})
|
|
3270
|
+
})
|
|
3271
|
+
.catch((err) => {
|
|
2948
3272
|
console.log(err);
|
|
2949
3273
|
});
|
|
2950
3274
|
}
|
|
2951
3275
|
entitiesToItems(entityConfigurations) {
|
|
2952
|
-
console.log(
|
|
3276
|
+
console.log('entityConfigsToItems', entityConfigurations);
|
|
2953
3277
|
return entityConfigurations.map((et) => {
|
|
2954
3278
|
return {
|
|
2955
3279
|
label: et.name,
|
|
@@ -2957,7 +3281,7 @@ class EntitiesListComponent {
|
|
|
2957
3281
|
command: () => {
|
|
2958
3282
|
this.selectedEntity = et;
|
|
2959
3283
|
this.onEntityClicked.emit(et);
|
|
2960
|
-
}
|
|
3284
|
+
},
|
|
2961
3285
|
};
|
|
2962
3286
|
});
|
|
2963
3287
|
}
|
|
@@ -2966,9 +3290,7 @@ class EntitiesListComponent {
|
|
|
2966
3290
|
}
|
|
2967
3291
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EntitiesListComponent, decorators: [{
|
|
2968
3292
|
type: Component,
|
|
2969
|
-
args: [{ selector: 'rtsee-entities-list', imports: [
|
|
2970
|
-
Menu
|
|
2971
|
-
], 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" }]
|
|
2972
3294
|
}], propDecorators: { manageEntities: [{
|
|
2973
3295
|
type: Input
|
|
2974
3296
|
}] } });
|
|
@@ -3002,12 +3324,12 @@ class ManageEntityComponent {
|
|
|
3002
3324
|
configurationId: this.configurationIdField.getRawValue(),
|
|
3003
3325
|
imageUrl: this.imageUrlField.getRawValue(),
|
|
3004
3326
|
tags: [],
|
|
3005
|
-
tagIds: []
|
|
3327
|
+
tagIds: [],
|
|
3006
3328
|
};
|
|
3007
3329
|
if (this.manageEntities.activeEntity.id) {
|
|
3008
3330
|
await this.manageEntities.updateEntity({
|
|
3009
3331
|
...entityParams,
|
|
3010
|
-
id: this.manageEntities.activeEntity.id
|
|
3332
|
+
id: this.manageEntities.activeEntity.id,
|
|
3011
3333
|
});
|
|
3012
3334
|
}
|
|
3013
3335
|
else {
|
|
@@ -3031,20 +3353,15 @@ class ManageEntityComponent {
|
|
|
3031
3353
|
validators: [
|
|
3032
3354
|
Validators.required,
|
|
3033
3355
|
Validators.minLength(3),
|
|
3034
|
-
Validators.maxLength(131)
|
|
3035
|
-
]
|
|
3356
|
+
Validators.maxLength(131),
|
|
3357
|
+
],
|
|
3036
3358
|
}),
|
|
3037
3359
|
configurationId: this.formBuilder.control('', {
|
|
3038
|
-
validators: [
|
|
3039
|
-
Validators.required,
|
|
3040
|
-
]
|
|
3360
|
+
validators: [Validators.required],
|
|
3041
3361
|
}),
|
|
3042
3362
|
imageUrl: this.formBuilder.control('', {
|
|
3043
|
-
validators: [
|
|
3044
|
-
|
|
3045
|
-
Validators.maxLength(244)
|
|
3046
|
-
]
|
|
3047
|
-
})
|
|
3363
|
+
validators: [Validators.minLength(6), Validators.maxLength(244)],
|
|
3364
|
+
}),
|
|
3048
3365
|
});
|
|
3049
3366
|
}
|
|
3050
3367
|
get nameField() {
|
|
@@ -3070,59 +3387,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3070
3387
|
Message,
|
|
3071
3388
|
ReactiveFormsModule,
|
|
3072
3389
|
Select,
|
|
3073
|
-
FormsModule
|
|
3390
|
+
FormsModule,
|
|
3074
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" }]
|
|
3075
3392
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { manageEntities: [{
|
|
3076
3393
|
type: Input
|
|
3077
3394
|
}] } });
|
|
3078
3395
|
|
|
3079
|
-
class RtseeEntityCommentsComponent {
|
|
3080
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityCommentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3081
|
-
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"] }] }); }
|
|
3082
|
-
}
|
|
3083
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityCommentsComponent, decorators: [{
|
|
3084
|
-
type: Component,
|
|
3085
|
-
args: [{ selector: 'rtsee-entity-comments', imports: [
|
|
3086
|
-
ChatComponent
|
|
3087
|
-
], 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" }]
|
|
3088
|
-
}], propDecorators: { messenger: [{
|
|
3089
|
-
type: Input
|
|
3090
|
-
}], chat: [{
|
|
3091
|
-
type: Input
|
|
3092
|
-
}] } });
|
|
3093
|
-
|
|
3094
|
-
class RtseeEntityTagsComponent {
|
|
3095
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityTagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3096
|
-
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"] }] }); }
|
|
3097
|
-
}
|
|
3098
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityTagsComponent, decorators: [{
|
|
3099
|
-
type: Component,
|
|
3100
|
-
args: [{ selector: 'rtsee-entity-tags', imports: [
|
|
3101
|
-
Chip
|
|
3102
|
-
], 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" }]
|
|
3103
|
-
}], propDecorators: { entity: [{
|
|
3104
|
-
type: Input
|
|
3105
|
-
}] } });
|
|
3106
|
-
|
|
3107
|
-
class RtseeEntityPreviewComponent {
|
|
3108
|
-
ngOnInit() {
|
|
3109
|
-
void this.entity.reload();
|
|
3110
|
-
}
|
|
3111
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3112
|
-
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"] }] }); }
|
|
3113
|
-
}
|
|
3114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEntityPreviewComponent, decorators: [{
|
|
3115
|
-
type: Component,
|
|
3116
|
-
args: [{ selector: 'rtsee-entity-preview', imports: [
|
|
3117
|
-
RtseeEntityCommentsComponent,
|
|
3118
|
-
RtseeEntityTagsComponent
|
|
3119
|
-
], 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" }]
|
|
3120
|
-
}], propDecorators: { entity: [{
|
|
3121
|
-
type: Input
|
|
3122
|
-
}], messenger: [{
|
|
3123
|
-
type: Input
|
|
3124
|
-
}] } });
|
|
3125
|
-
|
|
3126
3396
|
class SignInComponent {
|
|
3127
3397
|
constructor(formBuilder, router, authService) {
|
|
3128
3398
|
this.formBuilder = formBuilder;
|
|
@@ -3131,13 +3401,13 @@ class SignInComponent {
|
|
|
3131
3401
|
this.signInForm = this.formBuilder.group({
|
|
3132
3402
|
username: this.formBuilder.nonNullable.control({
|
|
3133
3403
|
value: '',
|
|
3134
|
-
disabled: false
|
|
3404
|
+
disabled: false,
|
|
3135
3405
|
}, {
|
|
3136
|
-
validators: [Validators.required, Validators.email]
|
|
3406
|
+
validators: [Validators.required, Validators.email],
|
|
3137
3407
|
}),
|
|
3138
3408
|
password: this.formBuilder.nonNullable.control({
|
|
3139
3409
|
value: '',
|
|
3140
|
-
disabled: false
|
|
3410
|
+
disabled: false,
|
|
3141
3411
|
}, { validators: [Validators.required] }),
|
|
3142
3412
|
remember: this.formBuilder.nonNullable.control(false),
|
|
3143
3413
|
});
|
|
@@ -3159,23 +3429,22 @@ class SignInComponent {
|
|
|
3159
3429
|
login() {
|
|
3160
3430
|
if (this.signInForm.valid) {
|
|
3161
3431
|
this.disableFormFields();
|
|
3162
|
-
this.authService.signIn(this.signInForm.getRawValue())
|
|
3163
|
-
|
|
3164
|
-
next: (() => {
|
|
3432
|
+
this.authService.signIn(this.signInForm.getRawValue()).subscribe({
|
|
3433
|
+
next: () => {
|
|
3165
3434
|
void this.router.navigate(this.authService.rtseeAuth.authConfiguration.defaultPostLoginRoute);
|
|
3166
3435
|
this.enableFormFields();
|
|
3167
3436
|
setTimeout(() => {
|
|
3168
3437
|
window.location.reload();
|
|
3169
3438
|
}, 100);
|
|
3170
|
-
}
|
|
3171
|
-
error: (
|
|
3439
|
+
},
|
|
3440
|
+
error: (error) => {
|
|
3172
3441
|
console.log(error);
|
|
3173
3442
|
this.showServerSideErrorForXSeconds(error.error.message);
|
|
3174
3443
|
this.enableFormFields();
|
|
3175
|
-
}
|
|
3176
|
-
complete: (
|
|
3444
|
+
},
|
|
3445
|
+
complete: () => {
|
|
3177
3446
|
this.enableFormFields();
|
|
3178
|
-
}
|
|
3447
|
+
},
|
|
3179
3448
|
});
|
|
3180
3449
|
}
|
|
3181
3450
|
else {
|
|
@@ -3216,14 +3485,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3216
3485
|
FloatLabel,
|
|
3217
3486
|
Checkbox,
|
|
3218
3487
|
Message,
|
|
3219
|
-
ProgressSpinner
|
|
3488
|
+
ProgressSpinner,
|
|
3220
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" }]
|
|
3221
3490
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3222
3491
|
|
|
3223
3492
|
class UtilsService {
|
|
3224
|
-
constructor() {
|
|
3225
|
-
}
|
|
3493
|
+
constructor() { }
|
|
3226
3494
|
static getKeysAsValueObject(obj) {
|
|
3495
|
+
// object was {}
|
|
3227
3496
|
if (obj) {
|
|
3228
3497
|
return Object.keys(obj).reduce((result, value) => {
|
|
3229
3498
|
result[value] = value;
|
|
@@ -3238,7 +3507,7 @@ class UtilsService {
|
|
|
3238
3507
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: UtilsService, decorators: [{
|
|
3239
3508
|
type: Injectable,
|
|
3240
3509
|
args: [{
|
|
3241
|
-
providedIn: 'root'
|
|
3510
|
+
providedIn: 'root',
|
|
3242
3511
|
}]
|
|
3243
3512
|
}], ctorParameters: () => [] });
|
|
3244
3513
|
|
|
@@ -3257,7 +3526,7 @@ class ConfirmPasswordValidator {
|
|
|
3257
3526
|
const passwordConfirmation = passwordConfirmationField.getRawValue();
|
|
3258
3527
|
if (password !== passwordConfirmation) {
|
|
3259
3528
|
return {
|
|
3260
|
-
confirmPassword: true
|
|
3529
|
+
confirmPassword: true,
|
|
3261
3530
|
};
|
|
3262
3531
|
}
|
|
3263
3532
|
return null;
|
|
@@ -3274,16 +3543,18 @@ class SignUpComponent {
|
|
|
3274
3543
|
this.errorMessage = '';
|
|
3275
3544
|
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
3276
3545
|
this.signUpForm = this.formBuilder.group({
|
|
3277
|
-
email: this.formBuilder.control('', {
|
|
3278
|
-
|
|
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
|
+
}),
|
|
3279
3552
|
passwordConfirmation: this.formBuilder.control('', {
|
|
3280
|
-
validators: [
|
|
3281
|
-
Validators.required,
|
|
3282
|
-
Validators.minLength(6)
|
|
3283
|
-
]
|
|
3553
|
+
validators: [Validators.required, Validators.minLength(6)],
|
|
3284
3554
|
}),
|
|
3285
|
-
terms: this.formBuilder.control(false, {
|
|
3286
|
-
|
|
3555
|
+
terms: this.formBuilder.control(false, {
|
|
3556
|
+
nonNullable: true,
|
|
3557
|
+
validators: [Validators.requiredTrue],
|
|
3287
3558
|
}),
|
|
3288
3559
|
}, { validators: [ConfirmPasswordValidator.MatchFields] });
|
|
3289
3560
|
this.signUpFormKeys = UtilsService.getKeysAsValueObject(this.signUpForm.getRawValue());
|
|
@@ -3308,22 +3579,27 @@ class SignUpComponent {
|
|
|
3308
3579
|
this.errorMessage = '';
|
|
3309
3580
|
this.successMessage = '';
|
|
3310
3581
|
const formValues = this.signUpForm.getRawValue();
|
|
3311
|
-
this.authService
|
|
3582
|
+
this.authService
|
|
3583
|
+
.signUp({
|
|
3312
3584
|
email: formValues.email,
|
|
3313
3585
|
password: formValues.password,
|
|
3314
|
-
terms: formValues.terms
|
|
3315
|
-
})
|
|
3586
|
+
terms: formValues.terms,
|
|
3587
|
+
})
|
|
3588
|
+
.subscribe({
|
|
3316
3589
|
next: (response) => {
|
|
3317
3590
|
this.loadInProgress = false;
|
|
3318
|
-
this.successMessage =
|
|
3591
|
+
this.successMessage =
|
|
3592
|
+
'Registration successful! You can now sign in.';
|
|
3319
3593
|
void this.router.navigate(this.authConfiguration.getRoutePathSplit(this.AuthEndpointsKeys.SIGN_IN));
|
|
3320
3594
|
console.log('User registered successfully', response);
|
|
3321
3595
|
},
|
|
3322
3596
|
error: (error) => {
|
|
3323
3597
|
this.loadInProgress = false;
|
|
3324
|
-
this.errorMessage =
|
|
3598
|
+
this.errorMessage =
|
|
3599
|
+
error.error?.message ||
|
|
3600
|
+
'Error during registration. Please try again.';
|
|
3325
3601
|
console.error('Error during registration', error);
|
|
3326
|
-
}
|
|
3602
|
+
},
|
|
3327
3603
|
});
|
|
3328
3604
|
}
|
|
3329
3605
|
}
|
|
@@ -3343,7 +3619,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3343
3619
|
FloatLabel,
|
|
3344
3620
|
Checkbox,
|
|
3345
3621
|
Message,
|
|
3346
|
-
ProgressSpinner
|
|
3622
|
+
ProgressSpinner,
|
|
3347
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" }]
|
|
3348
3624
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3349
3625
|
|
|
@@ -3357,7 +3633,9 @@ class ForgotPasswordComponent {
|
|
|
3357
3633
|
this.errorMessage = '';
|
|
3358
3634
|
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
3359
3635
|
this.emailForm = this.formBuilder.group({
|
|
3360
|
-
email: this.formBuilder.nonNullable.control('', {
|
|
3636
|
+
email: this.formBuilder.nonNullable.control('', {
|
|
3637
|
+
validators: [Validators.required, Validators.email],
|
|
3638
|
+
}),
|
|
3361
3639
|
});
|
|
3362
3640
|
this.forgotPasswordFormKeys = UtilsService.getKeysAsValueObject(this.emailForm.getRawValue());
|
|
3363
3641
|
this.authConfiguration = this.authService.rtseeAuth.authConfiguration;
|
|
@@ -3372,18 +3650,23 @@ class ForgotPasswordComponent {
|
|
|
3372
3650
|
this.errorMessage = '';
|
|
3373
3651
|
this.successMessage = '';
|
|
3374
3652
|
const email = this.emailForm.getRawValue().email;
|
|
3375
|
-
this.authService
|
|
3653
|
+
this.authService
|
|
3654
|
+
.forgotPassword({ email })
|
|
3655
|
+
.subscribe({
|
|
3376
3656
|
next: (response) => {
|
|
3377
3657
|
this.isLoading = false;
|
|
3378
|
-
this.successMessage =
|
|
3658
|
+
this.successMessage =
|
|
3659
|
+
response.message || 'Password reset email sent successfully!';
|
|
3379
3660
|
console.log('Password reset email sent successfully', response);
|
|
3380
3661
|
void this.router.navigate(this.authConfiguration.getRoutePathSplit(this.AuthEndpointsKeys.SIGN_IN));
|
|
3381
3662
|
},
|
|
3382
3663
|
error: (error) => {
|
|
3383
3664
|
this.isLoading = false;
|
|
3384
|
-
this.errorMessage =
|
|
3665
|
+
this.errorMessage =
|
|
3666
|
+
error.error?.message ||
|
|
3667
|
+
'Error sending password reset email. Please try again.';
|
|
3385
3668
|
console.error('Error sending password reset email', error);
|
|
3386
|
-
}
|
|
3669
|
+
},
|
|
3387
3670
|
});
|
|
3388
3671
|
}
|
|
3389
3672
|
}
|
|
@@ -3401,7 +3684,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3401
3684
|
InputText,
|
|
3402
3685
|
FloatLabel,
|
|
3403
3686
|
Message,
|
|
3404
|
-
ProgressSpinner
|
|
3687
|
+
ProgressSpinner,
|
|
3405
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" }]
|
|
3406
3689
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3407
3690
|
|
|
@@ -3426,13 +3709,25 @@ class ResetPasswordComponent {
|
|
|
3426
3709
|
this.errorMessage = '';
|
|
3427
3710
|
this.hidePassword = {
|
|
3428
3711
|
password: true,
|
|
3429
|
-
passwordConfirm: true
|
|
3712
|
+
passwordConfirm: true,
|
|
3430
3713
|
};
|
|
3431
3714
|
this.FormErrorKey = FormErrorKey;
|
|
3432
3715
|
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
3433
3716
|
this.resetPasswordForm = this.formBuilder.group({
|
|
3434
|
-
password: this.formBuilder.control('', {
|
|
3435
|
-
|
|
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
|
+
}),
|
|
3436
3731
|
}, { validators: [this.passwordMatchValidator()] });
|
|
3437
3732
|
this.passwordFormKeys = UtilsService.getKeysAsValueObject(this.resetPasswordForm.value);
|
|
3438
3733
|
this.authConfiguration = this.authService.authConfiguration;
|
|
@@ -3453,22 +3748,27 @@ class ResetPasswordComponent {
|
|
|
3453
3748
|
this.errorMessage = '';
|
|
3454
3749
|
this.successMessage = '';
|
|
3455
3750
|
const formValues = this.resetPasswordForm.getRawValue();
|
|
3456
|
-
this.authService
|
|
3751
|
+
this.authService
|
|
3752
|
+
.resetPassword({
|
|
3457
3753
|
password: formValues.password,
|
|
3458
3754
|
passwordConfirm: formValues.passwordConfirm,
|
|
3459
|
-
token: this.token
|
|
3460
|
-
})
|
|
3755
|
+
token: this.token,
|
|
3756
|
+
})
|
|
3757
|
+
.subscribe({
|
|
3461
3758
|
next: (response) => {
|
|
3462
3759
|
this.isLoading = false;
|
|
3463
|
-
this.successMessage =
|
|
3760
|
+
this.successMessage =
|
|
3761
|
+
response.message || 'Password reset successfully!';
|
|
3464
3762
|
console.log('Password reset successfully', response);
|
|
3465
3763
|
void this.router.navigate(this.authConfiguration.getRoutePathSplit(this.AuthEndpointsKeys.SIGN_IN));
|
|
3466
3764
|
},
|
|
3467
3765
|
error: (error) => {
|
|
3468
3766
|
this.isLoading = false;
|
|
3469
|
-
this.errorMessage =
|
|
3767
|
+
this.errorMessage =
|
|
3768
|
+
error.error?.message ||
|
|
3769
|
+
'Error resetting password. Please try again.';
|
|
3470
3770
|
console.error('Error resetting password', error);
|
|
3471
|
-
}
|
|
3771
|
+
},
|
|
3472
3772
|
});
|
|
3473
3773
|
}
|
|
3474
3774
|
}
|
|
@@ -3479,10 +3779,14 @@ class ResetPasswordComponent {
|
|
|
3479
3779
|
const passwordConfirm = form.value.passwordConfirm;
|
|
3480
3780
|
if (password !== passwordConfirm) {
|
|
3481
3781
|
if (form.controls.password.valid) {
|
|
3482
|
-
form.controls.password.setErrors({
|
|
3782
|
+
form.controls.password.setErrors({
|
|
3783
|
+
[FormErrorKey.passwordsMismatch]: true,
|
|
3784
|
+
});
|
|
3483
3785
|
}
|
|
3484
3786
|
if (form.controls.passwordConfirm.valid) {
|
|
3485
|
-
form.controls.passwordConfirm.setErrors({
|
|
3787
|
+
form.controls.passwordConfirm.setErrors({
|
|
3788
|
+
[FormErrorKey.passwordsMismatch]: true,
|
|
3789
|
+
});
|
|
3486
3790
|
}
|
|
3487
3791
|
return { [FormErrorKey.passwordsMismatch]: true };
|
|
3488
3792
|
}
|
|
@@ -3508,7 +3812,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3508
3812
|
Password,
|
|
3509
3813
|
FloatLabel,
|
|
3510
3814
|
Message,
|
|
3511
|
-
ProgressSpinner
|
|
3815
|
+
ProgressSpinner,
|
|
3512
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" }]
|
|
3513
3817
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: RTSeeAuthService }] });
|
|
3514
3818
|
|
|
@@ -3518,10 +3822,7 @@ class PrivacyPolicyComponent {
|
|
|
3518
3822
|
}
|
|
3519
3823
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PrivacyPolicyComponent, decorators: [{
|
|
3520
3824
|
type: Component,
|
|
3521
|
-
args: [{ selector: 'rtsee-privacy-policy', imports: [
|
|
3522
|
-
ButtonModule,
|
|
3523
|
-
MessageModule
|
|
3524
|
-
], 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"] }]
|
|
3525
3826
|
}] });
|
|
3526
3827
|
|
|
3527
3828
|
class RTSeeAuthComponent {
|
|
@@ -3537,8 +3838,7 @@ class RTSeeAuthComponent {
|
|
|
3537
3838
|
else if (window.location.pathname.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.FORGOT_PASSWORD])) {
|
|
3538
3839
|
this.activeComponent = 'forgot-password';
|
|
3539
3840
|
}
|
|
3540
|
-
else if (window.location.pathname
|
|
3541
|
-
.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.RESET_PASSWORD].split('/')[0])) {
|
|
3841
|
+
else if (window.location.pathname.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.RESET_PASSWORD].split('/')[0])) {
|
|
3542
3842
|
this.activeComponent = 'reset-password';
|
|
3543
3843
|
}
|
|
3544
3844
|
else if (window.location.pathname.includes(DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.PRIVACY_POLICY])) {
|
|
@@ -3558,7 +3858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3558
3858
|
SignUpComponent,
|
|
3559
3859
|
ForgotPasswordComponent,
|
|
3560
3860
|
ResetPasswordComponent,
|
|
3561
|
-
PrivacyPolicyComponent
|
|
3861
|
+
PrivacyPolicyComponent,
|
|
3562
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" }]
|
|
3563
3863
|
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { auth: [{
|
|
3564
3864
|
type: Input
|
|
@@ -3609,11 +3909,7 @@ class SearchComponent {
|
|
|
3609
3909
|
}
|
|
3610
3910
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchComponent, decorators: [{
|
|
3611
3911
|
type: Component,
|
|
3612
|
-
args: [{ selector: 'rtsee-search', imports: [
|
|
3613
|
-
ReactiveFormsModule,
|
|
3614
|
-
PreloaderComponent,
|
|
3615
|
-
NgForOf
|
|
3616
|
-
], 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" }]
|
|
3617
3913
|
}], propDecorators: { search: [{
|
|
3618
3914
|
type: Input
|
|
3619
3915
|
}] } });
|
|
@@ -3640,9 +3936,7 @@ class ContactsMultiselectComponent {
|
|
|
3640
3936
|
}
|
|
3641
3937
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ContactsMultiselectComponent, decorators: [{
|
|
3642
3938
|
type: Component,
|
|
3643
|
-
args: [{ selector: 'rtsee-contacts-multiselect', imports: [
|
|
3644
|
-
SearchComponent
|
|
3645
|
-
], 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" }]
|
|
3646
3940
|
}], propDecorators: { menuState: [{
|
|
3647
3941
|
type: Input
|
|
3648
3942
|
}], search: [{
|
|
@@ -3671,7 +3965,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3671
3965
|
NgIf,
|
|
3672
3966
|
SearchComponent,
|
|
3673
3967
|
ManageChatComponent,
|
|
3674
|
-
ContactsMultiselectComponent
|
|
3968
|
+
ContactsMultiselectComponent,
|
|
3675
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" }]
|
|
3676
3970
|
}], propDecorators: { search: [{
|
|
3677
3971
|
type: Input
|
|
@@ -3694,7 +3988,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3694
3988
|
type: Directive,
|
|
3695
3989
|
args: [{
|
|
3696
3990
|
selector: '[rtseeShave]',
|
|
3697
|
-
standalone: true
|
|
3991
|
+
standalone: true,
|
|
3698
3992
|
}]
|
|
3699
3993
|
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
3700
3994
|
|
|
@@ -3770,9 +4064,9 @@ class RTSeeModule {
|
|
|
3770
4064
|
provideAnimationsAsync(),
|
|
3771
4065
|
providePrimeNG({
|
|
3772
4066
|
theme: {
|
|
3773
|
-
preset: Aura
|
|
3774
|
-
}
|
|
3775
|
-
})
|
|
4067
|
+
preset: Aura,
|
|
4068
|
+
},
|
|
4069
|
+
}),
|
|
3776
4070
|
], imports: [RTSeeAuthComponent,
|
|
3777
4071
|
ForgotPasswordComponent,
|
|
3778
4072
|
SignInComponent,
|
|
@@ -3808,9 +4102,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3808
4102
|
provideAnimationsAsync(),
|
|
3809
4103
|
providePrimeNG({
|
|
3810
4104
|
theme: {
|
|
3811
|
-
preset: Aura
|
|
3812
|
-
}
|
|
3813
|
-
})
|
|
4105
|
+
preset: Aura,
|
|
4106
|
+
},
|
|
4107
|
+
}),
|
|
3814
4108
|
],
|
|
3815
4109
|
declarations: [],
|
|
3816
4110
|
imports: [
|
|
@@ -3864,7 +4158,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3864
4158
|
NgOptimizedImage,
|
|
3865
4159
|
RouterLink,
|
|
3866
4160
|
RouterLinkActive,
|
|
3867
|
-
NgxCaptchaModule
|
|
4161
|
+
NgxCaptchaModule,
|
|
3868
4162
|
],
|
|
3869
4163
|
exports: [
|
|
3870
4164
|
RTSeeConferenceComponent,
|
|
@@ -3873,11 +4167,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
3873
4167
|
RTSeeContainerComponent,
|
|
3874
4168
|
PresentationComponent,
|
|
3875
4169
|
RTSeeAuthComponent,
|
|
3876
|
-
PaymentProductSnippetComponent
|
|
4170
|
+
PaymentProductSnippetComponent,
|
|
3877
4171
|
],
|
|
3878
|
-
schemas: [
|
|
3879
|
-
CUSTOM_ELEMENTS_SCHEMA,
|
|
3880
|
-
]
|
|
4172
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
3881
4173
|
}]
|
|
3882
4174
|
}] });
|
|
3883
4175
|
|