barsa-novin-ray-core 2.3.99 → 2.3.100
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/fesm2022/barsa-novin-ray-core.mjs +258 -89
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/index.d.ts +42 -21
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, ComponentFactoryResolver, Injector, ApplicationRef, Compiler, DOCUMENT, NgModuleFactory, InjectionToken, NgZone, EventEmitter, ChangeDetectorRef, Renderer2, HostBinding, Output, HostListener, ViewContainerRef, ViewChild,
|
|
3
|
-
import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, combineLatest, withLatestFrom as withLatestFrom$1, fromEvent, forkJoin, takeUntil as takeUntil$1, filter as filter$1, throwError, merge, interval,
|
|
2
|
+
import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, ComponentFactoryResolver, Injector, ApplicationRef, Compiler, DOCUMENT, NgModuleFactory, InjectionToken, NgZone, signal, effect, EventEmitter, ChangeDetectorRef, Renderer2, HostBinding, Output, HostListener, ViewContainerRef, ViewChild, Directive, TemplateRef, input, NgModule, NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer, ErrorHandler } from '@angular/core';
|
|
3
|
+
import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, combineLatest, withLatestFrom as withLatestFrom$1, fromEvent, forkJoin, takeUntil as takeUntil$1, filter as filter$1, throwError, merge, interval, lastValueFrom, take, debounceTime as debounceTime$1, skip, Observable, tap as tap$1, catchError as catchError$1, timer, mergeWith, Subscription } from 'rxjs';
|
|
4
4
|
import * as i1 from '@angular/router';
|
|
5
5
|
import { Router, NavigationEnd, ActivatedRoute, RouterEvent, NavigationStart, RouterModule } from '@angular/router';
|
|
6
6
|
import { DomSanitizer, Title } from '@angular/platform-browser';
|
|
@@ -17,6 +17,7 @@ import * as i1$1 from '@angular/common';
|
|
|
17
17
|
import { Location, TitleCasePipe, CommonModule } from '@angular/common';
|
|
18
18
|
import RecordRTC from 'recordrtc';
|
|
19
19
|
import { SwUpdate, SwPush } from '@angular/service-worker';
|
|
20
|
+
import { openDB } from 'idb';
|
|
20
21
|
import Splide from '@splidejs/splide';
|
|
21
22
|
|
|
22
23
|
class BarsaApi {
|
|
@@ -8267,54 +8268,224 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
8267
8268
|
args: [{ providedIn: 'root' }]
|
|
8268
8269
|
}] });
|
|
8269
8270
|
|
|
8271
|
+
/* eslint-disable */
|
|
8272
|
+
//
|
|
8273
|
+
function usePushNotification() {
|
|
8274
|
+
const swPush = inject(SwPush);
|
|
8275
|
+
const http = inject(HttpClient);
|
|
8276
|
+
const _localStorage = inject(LocalStorageService);
|
|
8277
|
+
// Signals
|
|
8278
|
+
const bannerVisible = signal(false);
|
|
8279
|
+
const isSubscribed = signal(false);
|
|
8280
|
+
const permission = signal(Notification.permission);
|
|
8281
|
+
const errorMessage = signal(null);
|
|
8282
|
+
// IndexedDB setup
|
|
8283
|
+
const dbPromise = openDB('push-db', 1, {
|
|
8284
|
+
upgrade(db) {
|
|
8285
|
+
db.createObjectStore('subscription');
|
|
8286
|
+
}
|
|
8287
|
+
});
|
|
8288
|
+
// ذخیره subscription در DB
|
|
8289
|
+
const saveSubscription = async (sub) => {
|
|
8290
|
+
const db = await dbPromise;
|
|
8291
|
+
await db.put('subscription', sub.toJSON(), 'push-subscription');
|
|
8292
|
+
};
|
|
8293
|
+
async function initPushBanner() {
|
|
8294
|
+
const saved = await loadSubscription();
|
|
8295
|
+
if (saved) {
|
|
8296
|
+
isSubscribed.set(true);
|
|
8297
|
+
bannerVisible.set(false); // قبلاً subscribe شده
|
|
8298
|
+
}
|
|
8299
|
+
else {
|
|
8300
|
+
isSubscribed.set(false);
|
|
8301
|
+
bannerVisible.set(true); // هنوز subscribe نشده، بنر نمایش داده شود
|
|
8302
|
+
}
|
|
8303
|
+
}
|
|
8304
|
+
// خواندن subscription از DB
|
|
8305
|
+
const loadSubscription = async () => {
|
|
8306
|
+
const db = await dbPromise;
|
|
8307
|
+
const data = await db.get('subscription', 'push-subscription');
|
|
8308
|
+
if (!data) {
|
|
8309
|
+
return null;
|
|
8310
|
+
}
|
|
8311
|
+
// داده را به سرور میفرستیم یا UI نشان میدهیم
|
|
8312
|
+
return data;
|
|
8313
|
+
};
|
|
8314
|
+
// حذف subscription از DB
|
|
8315
|
+
const deleteSubscription = async () => {
|
|
8316
|
+
const db = await dbPromise;
|
|
8317
|
+
await db.delete('subscription', 'push-subscription');
|
|
8318
|
+
};
|
|
8319
|
+
const handleNewSubscription = async (subData) => {
|
|
8320
|
+
const saved = await loadSubscription();
|
|
8321
|
+
if (!saved || saved.endpoint !== subData.endpoint) {
|
|
8322
|
+
// حذف قبلی
|
|
8323
|
+
if (saved) {
|
|
8324
|
+
try {
|
|
8325
|
+
await addSubscriptionToServer(saved);
|
|
8326
|
+
}
|
|
8327
|
+
catch (e) {
|
|
8328
|
+
console.error('Delete old subscription failed', e);
|
|
8329
|
+
}
|
|
8330
|
+
}
|
|
8331
|
+
// ثبت جدید
|
|
8332
|
+
try {
|
|
8333
|
+
await deleteSubscriptionFromServer(subData);
|
|
8334
|
+
await saveSubscription(subData);
|
|
8335
|
+
isSubscribed.set(true);
|
|
8336
|
+
}
|
|
8337
|
+
catch (e) {
|
|
8338
|
+
console.error('Add new subscription failed', e);
|
|
8339
|
+
}
|
|
8340
|
+
}
|
|
8341
|
+
};
|
|
8342
|
+
const hideBanner = () => bannerVisible.set(false);
|
|
8343
|
+
// بررسی وضعیت فعلی subscription از SwPush و DB
|
|
8344
|
+
swPush.subscription.subscribe(async (sub) => {
|
|
8345
|
+
isSubscribed.set(!!sub);
|
|
8346
|
+
permission.set(Notification.permission);
|
|
8347
|
+
if (sub) {
|
|
8348
|
+
await handleNewSubscription(sub.toJSON());
|
|
8349
|
+
}
|
|
8350
|
+
});
|
|
8351
|
+
const addSubscriptionToServer = async (sub) => {
|
|
8352
|
+
const token2 = _localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
|
|
8353
|
+
const options = {
|
|
8354
|
+
headers: new HttpHeaders({
|
|
8355
|
+
'Content-Type': 'application/json',
|
|
8356
|
+
sth: token2
|
|
8357
|
+
})
|
|
8358
|
+
};
|
|
8359
|
+
await lastValueFrom(http.post('/api/pushnotification/add', sub, options));
|
|
8360
|
+
};
|
|
8361
|
+
const deleteSubscriptionFromServer = async (sub) => {
|
|
8362
|
+
const token2 = _localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
|
|
8363
|
+
const options = {
|
|
8364
|
+
headers: new HttpHeaders({
|
|
8365
|
+
'Content-Type': 'application/json',
|
|
8366
|
+
sth: token2
|
|
8367
|
+
})
|
|
8368
|
+
};
|
|
8369
|
+
await lastValueFrom(http.post('/api/pushnotification/delete', sub, options));
|
|
8370
|
+
};
|
|
8371
|
+
// subscribe فقط داخل gesture
|
|
8372
|
+
const subscribe = async () => {
|
|
8373
|
+
try {
|
|
8374
|
+
const publicKey = await lastValueFrom(http.get('/api/pushnotification/publickey', { responseType: 'text' }));
|
|
8375
|
+
const sub = await swPush.requestSubscription({ serverPublicKey: publicKey });
|
|
8376
|
+
const registration = await navigator.serviceWorker.ready;
|
|
8377
|
+
registration.active?.postMessage({ event: 'setVapidKey', publicKey });
|
|
8378
|
+
await addSubscriptionToServer(sub);
|
|
8379
|
+
await saveSubscription(sub);
|
|
8380
|
+
isSubscribed.set(true);
|
|
8381
|
+
permission.set(Notification.permission);
|
|
8382
|
+
bannerVisible.set(false);
|
|
8383
|
+
errorMessage.set(null);
|
|
8384
|
+
return sub;
|
|
8385
|
+
}
|
|
8386
|
+
catch (err) {
|
|
8387
|
+
console.error('Push subscribe error:', err);
|
|
8388
|
+
errorMessage.set(err?.message || 'خطا در فعالسازی Push');
|
|
8389
|
+
throw err;
|
|
8390
|
+
}
|
|
8391
|
+
};
|
|
8392
|
+
const unsubscribe = async () => {
|
|
8393
|
+
try {
|
|
8394
|
+
const sub = await lastValueFrom(swPush.subscription);
|
|
8395
|
+
if (!sub) {
|
|
8396
|
+
return;
|
|
8397
|
+
}
|
|
8398
|
+
swPush.unsubscribe();
|
|
8399
|
+
await deleteSubscriptionFromServer(sub);
|
|
8400
|
+
await sub.unsubscribe();
|
|
8401
|
+
await deleteSubscription();
|
|
8402
|
+
isSubscribed.set(false);
|
|
8403
|
+
errorMessage.set(null);
|
|
8404
|
+
}
|
|
8405
|
+
catch (err) {
|
|
8406
|
+
console.error('Push unsubscribe error:', err);
|
|
8407
|
+
errorMessage.set(err?.message || 'خطا در لغو اشتراک');
|
|
8408
|
+
}
|
|
8409
|
+
};
|
|
8410
|
+
return {
|
|
8411
|
+
bannerVisible,
|
|
8412
|
+
isSubscribed,
|
|
8413
|
+
permission,
|
|
8414
|
+
errorMessage,
|
|
8415
|
+
initPushBanner,
|
|
8416
|
+
subscribe,
|
|
8417
|
+
unsubscribe,
|
|
8418
|
+
handleNewSubscription,
|
|
8419
|
+
hideBanner
|
|
8420
|
+
};
|
|
8421
|
+
}
|
|
8422
|
+
|
|
8270
8423
|
class ServiceWorkerCommuncationService {
|
|
8271
8424
|
constructor() {
|
|
8272
8425
|
this._toastService = inject(TOAST_SERVICE, { optional: true });
|
|
8273
8426
|
this._localStorage = inject(LocalStorageService);
|
|
8274
8427
|
this._portalService = inject(PortalService);
|
|
8275
|
-
this._swPush = inject(SwPush);
|
|
8276
|
-
this._httpClient = inject(HttpClient);
|
|
8277
8428
|
this._pushCheckService = inject(PushCheckService);
|
|
8429
|
+
this._usePushNotification = usePushNotification();
|
|
8278
8430
|
}
|
|
8279
8431
|
get token2() {
|
|
8280
8432
|
return this._localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
|
|
8281
8433
|
}
|
|
8282
|
-
get httpOptions() {
|
|
8283
|
-
return {
|
|
8284
|
-
headers: new HttpHeaders({
|
|
8285
|
-
'Content-Type': 'application/json',
|
|
8286
|
-
sth: this.token2
|
|
8287
|
-
})
|
|
8288
|
-
};
|
|
8289
|
-
}
|
|
8290
8434
|
init() {
|
|
8291
|
-
|
|
8292
|
-
|
|
8293
|
-
this._handlePushUnSubscription(doReturn);
|
|
8294
|
-
}
|
|
8295
|
-
});
|
|
8435
|
+
this._subscribe();
|
|
8436
|
+
// register SW
|
|
8296
8437
|
if (!navigator.serviceWorker) {
|
|
8297
8438
|
return;
|
|
8298
8439
|
}
|
|
8299
|
-
navigator.serviceWorker.ready.then((
|
|
8300
|
-
if (
|
|
8301
|
-
this._serviceWorker =
|
|
8302
|
-
|
|
8440
|
+
navigator.serviceWorker.ready.then((reg) => {
|
|
8441
|
+
if (reg.active) {
|
|
8442
|
+
this._serviceWorker = reg.active;
|
|
8443
|
+
navigator.serviceWorker.addEventListener('message', (event) => {
|
|
8444
|
+
if (event.data?.event === 'subscriptionChanged') {
|
|
8445
|
+
this._usePushNotification.handleNewSubscription(event.data.subscription);
|
|
8446
|
+
}
|
|
8447
|
+
});
|
|
8303
8448
|
}
|
|
8304
8449
|
});
|
|
8305
|
-
|
|
8306
|
-
|
|
8307
|
-
|
|
8308
|
-
|
|
8309
|
-
|
|
8450
|
+
// user logout
|
|
8451
|
+
BarsaApi.Ul.ApplicationCtrlr.on({
|
|
8452
|
+
UserLoggedout: (_, doReturn) => this._handlePushUnSubscription(doReturn)
|
|
8453
|
+
});
|
|
8454
|
+
// automatic effect: update operationName based on subscription
|
|
8455
|
+
effect(() => {
|
|
8456
|
+
const sub = this._usePushNotification.isSubscribed();
|
|
8457
|
+
// اینجا میتونی متغیر operationName یا UI رو اتوماتیک آپدیت کنی
|
|
8458
|
+
console.log('Push subscription changed:', sub);
|
|
8459
|
+
});
|
|
8460
|
+
// automatic effect: show toast on errors
|
|
8461
|
+
effect(() => {
|
|
8462
|
+
const err = this._usePushNotification.errorMessage();
|
|
8463
|
+
if (err) {
|
|
8464
|
+
this.toast(err);
|
|
8465
|
+
}
|
|
8310
8466
|
});
|
|
8311
8467
|
}
|
|
8468
|
+
// فعالسازی push توسط gesture (مثلاً از UI)
|
|
8469
|
+
async subscribePush() {
|
|
8470
|
+
try {
|
|
8471
|
+
const check = await this._pushCheckService.checkPushReady();
|
|
8472
|
+
if (check !== true) {
|
|
8473
|
+
this.toast(check);
|
|
8474
|
+
return;
|
|
8475
|
+
}
|
|
8476
|
+
await this._usePushNotification.subscribe();
|
|
8477
|
+
this.toast('نوتیفیکیشن فعال شد');
|
|
8478
|
+
}
|
|
8479
|
+
catch (err) {
|
|
8480
|
+
console.error(err);
|
|
8481
|
+
this.toast('خطا در فعالسازی Push');
|
|
8482
|
+
}
|
|
8483
|
+
}
|
|
8312
8484
|
_subscribe() {
|
|
8313
8485
|
this._portalService.userLoggedIn$.pipe().subscribe((isLoggedIn) => this._isLoggedIn(isLoggedIn));
|
|
8314
8486
|
this._portalService.documentVisibilitychange$
|
|
8315
8487
|
.pipe()
|
|
8316
8488
|
.subscribe((visibilitychange) => this._visibilitychange(visibilitychange));
|
|
8317
|
-
this._handlePushSubscirption();
|
|
8318
8489
|
}
|
|
8319
8490
|
_setDefaultOptions() {
|
|
8320
8491
|
const token2 = this.token2;
|
|
@@ -8326,7 +8497,7 @@ class ServiceWorkerCommuncationService {
|
|
|
8326
8497
|
this._postServiceWorker({ event: 'isLoggedInChange', options: { isLoggedIn } });
|
|
8327
8498
|
if (isLoggedIn) {
|
|
8328
8499
|
this._setDefaultOptions();
|
|
8329
|
-
this.
|
|
8500
|
+
this._usePushNotification.initPushBanner();
|
|
8330
8501
|
}
|
|
8331
8502
|
}
|
|
8332
8503
|
_visibilitychange(documentIsHidden) {
|
|
@@ -8340,66 +8511,15 @@ class ServiceWorkerCommuncationService {
|
|
|
8340
8511
|
}
|
|
8341
8512
|
this._serviceWorker.postMessage(message);
|
|
8342
8513
|
}
|
|
8343
|
-
|
|
8344
|
-
|
|
8345
|
-
|
|
8346
|
-
}, 5000);
|
|
8514
|
+
// لغو push (هر زمان امکانپذیر است)
|
|
8515
|
+
_handlePushUnSubscription(doReturn) {
|
|
8516
|
+
this._usePushNotification.unsubscribe().finally(() => doReturn && doReturn());
|
|
8347
8517
|
}
|
|
8348
8518
|
toast(msg) {
|
|
8349
8519
|
if (!this._toastService) {
|
|
8350
|
-
console.log(msg);
|
|
8351
|
-
return;
|
|
8352
|
-
}
|
|
8353
|
-
this._toastService?.open(` ${msg} `, { duration: 5000 });
|
|
8354
|
-
}
|
|
8355
|
-
_initPushSubscription() {
|
|
8356
|
-
this._httpClient
|
|
8357
|
-
.get('/api/pushnotification/publickey', { responseType: 'text' })
|
|
8358
|
-
.pipe(concatMap$1(async (publicKey) => {
|
|
8359
|
-
// 1) بررسی کامل iOS + Android + Browser
|
|
8360
|
-
const check = await this._pushCheckService.checkPushReady();
|
|
8361
|
-
if (check !== true) {
|
|
8362
|
-
this.toast(check);
|
|
8363
|
-
throw new Error(check);
|
|
8364
|
-
}
|
|
8365
|
-
// 2) درخواست ساباسکریپشن
|
|
8366
|
-
try {
|
|
8367
|
-
const subscription = await this._swPush.requestSubscription({
|
|
8368
|
-
serverPublicKey: publicKey
|
|
8369
|
-
});
|
|
8370
|
-
return subscription;
|
|
8371
|
-
}
|
|
8372
|
-
catch (err) {
|
|
8373
|
-
const msg = 'مشترک شدن Push انجام نشد';
|
|
8374
|
-
this.toast(msg);
|
|
8375
|
-
throw err;
|
|
8376
|
-
}
|
|
8377
|
-
}), concatMap$1((subscription) => this._httpClient.post('/api/pushnotification/add', subscription, this.httpOptions)), catchError$1((err) => {
|
|
8378
|
-
const msg = 'خطا در ثبت Push Notification';
|
|
8379
|
-
this.toast(msg);
|
|
8380
|
-
return throwError(() => err);
|
|
8381
|
-
}))
|
|
8382
|
-
.subscribe({
|
|
8383
|
-
next: () => {
|
|
8384
|
-
const msg = 'نوتیفیکیشن فعال شد';
|
|
8385
|
-
this.toast(msg);
|
|
8386
|
-
}
|
|
8387
|
-
});
|
|
8388
|
-
}
|
|
8389
|
-
_handlePushUnSubscription(doReturn) {
|
|
8390
|
-
if (!this._subscription) {
|
|
8391
|
-
return doReturn && doReturn();
|
|
8520
|
+
return console.log(msg);
|
|
8392
8521
|
}
|
|
8393
|
-
this.
|
|
8394
|
-
.post('/api/pushnotification/delete', this._subscription, this.httpOptions)
|
|
8395
|
-
.pipe(concatMap$1(() => from(this._swPush.unsubscribe())), catchError$1((err) => {
|
|
8396
|
-
console.error(err);
|
|
8397
|
-
doReturn && doReturn();
|
|
8398
|
-
return throwError(() => new Error(err));
|
|
8399
|
-
}), finalize$1(() => {
|
|
8400
|
-
doReturn && doReturn();
|
|
8401
|
-
}))
|
|
8402
|
-
.subscribe();
|
|
8522
|
+
this._toastService.open(msg, { duration: 5000 });
|
|
8403
8523
|
}
|
|
8404
8524
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8405
8525
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService }); }
|
|
@@ -13093,6 +13213,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13093
13213
|
args: [{ selector: 'bnrc-unlimit-session', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "", styles: [":host{background:#191919 -webkit-linear-gradient(top,#000 0%,#191919 100%) no-repeat;background:#191919 linear-gradient(to bottom,#000,#191919) no-repeat;text-align:center}:host h1,:host h2{font-weight:400}:host h1{margin:0 auto;padding:.15em;font-size:10em;text-shadow:0 2px 2px #000}:host h2{margin-bottom:2em}\n"] }]
|
|
13094
13214
|
}] });
|
|
13095
13215
|
|
|
13216
|
+
class PushBannerComponent {
|
|
13217
|
+
constructor() {
|
|
13218
|
+
this.push = usePushNotification();
|
|
13219
|
+
}
|
|
13220
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13221
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: PushBannerComponent, isStandalone: false, selector: "bnrc-push-banner", ngImport: i0, template: `
|
|
13222
|
+
@if(push.bannerVisible()){
|
|
13223
|
+
<div class="push-banner">
|
|
13224
|
+
<div class="text">
|
|
13225
|
+
<b>فعالسازی اعلانها</b>
|
|
13226
|
+
<p>برای دریافت پیامها و رویدادهای مهم، اعلانها را فعال کنید.</p>
|
|
13227
|
+
</div>
|
|
13228
|
+
<div class="actions">
|
|
13229
|
+
<button class="btn enable" (click)="push.subscribe()">فعالسازی</button>
|
|
13230
|
+
<button class="btn later" (click)="push.hideBanner()">بعداً</button>
|
|
13231
|
+
</div>
|
|
13232
|
+
@if(push.errorMessage()){
|
|
13233
|
+
<p class="error">{{ push.errorMessage() }}</p>
|
|
13234
|
+
}
|
|
13235
|
+
</div>
|
|
13236
|
+
}
|
|
13237
|
+
`, isInline: true, styles: [".push-banner{position:fixed;bottom:0;left:0;right:0;background:#fff;border-radius:12px 12px 0 0;box-shadow:0 -4px 16px #00000026;padding:16px;display:flex;flex-direction:column;gap:8px;z-index:9999}.actions{display:flex;gap:8px}.btn.enable{background:#25d366;color:#fff;border-radius:8px;padding:8px 12px;border:none}.btn.later{background:transparent;color:#666;border:none;padding:8px 12px}.error{color:red;font-size:13px}\n"] }); }
|
|
13238
|
+
}
|
|
13239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, decorators: [{
|
|
13240
|
+
type: Component,
|
|
13241
|
+
args: [{ selector: 'bnrc-push-banner', standalone: false, template: `
|
|
13242
|
+
@if(push.bannerVisible()){
|
|
13243
|
+
<div class="push-banner">
|
|
13244
|
+
<div class="text">
|
|
13245
|
+
<b>فعالسازی اعلانها</b>
|
|
13246
|
+
<p>برای دریافت پیامها و رویدادهای مهم، اعلانها را فعال کنید.</p>
|
|
13247
|
+
</div>
|
|
13248
|
+
<div class="actions">
|
|
13249
|
+
<button class="btn enable" (click)="push.subscribe()">فعالسازی</button>
|
|
13250
|
+
<button class="btn later" (click)="push.hideBanner()">بعداً</button>
|
|
13251
|
+
</div>
|
|
13252
|
+
@if(push.errorMessage()){
|
|
13253
|
+
<p class="error">{{ push.errorMessage() }}</p>
|
|
13254
|
+
}
|
|
13255
|
+
</div>
|
|
13256
|
+
}
|
|
13257
|
+
`, styles: [".push-banner{position:fixed;bottom:0;left:0;right:0;background:#fff;border-radius:12px 12px 0 0;box-shadow:0 -4px 16px #00000026;padding:16px;display:flex;flex-direction:column;gap:8px;z-index:9999}.actions{display:flex;gap:8px}.btn.enable{background:#25d366;color:#fff;border-radius:8px;padding:8px 12px;border:none}.btn.later{background:transparent;color:#666;border:none;padding:8px 12px}.error{color:red;font-size:13px}\n"] }]
|
|
13258
|
+
}] });
|
|
13259
|
+
|
|
13096
13260
|
class LoadExternalFilesDirective {
|
|
13097
13261
|
constructor() {
|
|
13098
13262
|
this._renderer2 = inject(Renderer2);
|
|
@@ -13279,7 +13443,8 @@ class RootPortalComponent extends PageBaseComponent {
|
|
|
13279
13443
|
@if(pageData?.UnlimitSession==='True'){
|
|
13280
13444
|
<bnrc-unlimit-session></bnrc-unlimit-session>
|
|
13281
13445
|
}
|
|
13282
|
-
|
|
13446
|
+
<bnrc-push-banner></bnrc-push-banner>
|
|
13447
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: UnlimitSessionComponent, selector: "bnrc-unlimit-session" }, { kind: "component", type: PushBannerComponent, selector: "bnrc-push-banner" }, { kind: "directive", type: LoadExternalFilesDirective, selector: "[loadExternalFiles]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13283
13448
|
}
|
|
13284
13449
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RootPortalComponent, decorators: [{
|
|
13285
13450
|
type: Component,
|
|
@@ -13351,6 +13516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13351
13516
|
@if(pageData?.UnlimitSession==='True'){
|
|
13352
13517
|
<bnrc-unlimit-session></bnrc-unlimit-session>
|
|
13353
13518
|
}
|
|
13519
|
+
<bnrc-push-banner></bnrc-push-banner>
|
|
13354
13520
|
`,
|
|
13355
13521
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13356
13522
|
providers: [ContainerService],
|
|
@@ -16869,7 +17035,8 @@ const components = [
|
|
|
16869
17035
|
FormFieldReportPageComponent,
|
|
16870
17036
|
ButtonLoadingComponent,
|
|
16871
17037
|
UnlimitSessionComponent,
|
|
16872
|
-
DynamicTileGroupComponent
|
|
17038
|
+
DynamicTileGroupComponent,
|
|
17039
|
+
PushBannerComponent
|
|
16873
17040
|
];
|
|
16874
17041
|
const directives = [
|
|
16875
17042
|
PlaceHolderDirective,
|
|
@@ -17128,7 +17295,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
17128
17295
|
FormFieldReportPageComponent,
|
|
17129
17296
|
ButtonLoadingComponent,
|
|
17130
17297
|
UnlimitSessionComponent,
|
|
17131
|
-
DynamicTileGroupComponent,
|
|
17298
|
+
DynamicTileGroupComponent,
|
|
17299
|
+
PushBannerComponent, NumeralPipe,
|
|
17132
17300
|
CanUploadFilePipe,
|
|
17133
17301
|
RemoveNewlinePipe,
|
|
17134
17302
|
ConvertToStylePipe,
|
|
@@ -17264,7 +17432,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
17264
17432
|
FormFieldReportPageComponent,
|
|
17265
17433
|
ButtonLoadingComponent,
|
|
17266
17434
|
UnlimitSessionComponent,
|
|
17267
|
-
DynamicTileGroupComponent,
|
|
17435
|
+
DynamicTileGroupComponent,
|
|
17436
|
+
PushBannerComponent, NumeralPipe,
|
|
17268
17437
|
CanUploadFilePipe,
|
|
17269
17438
|
RemoveNewlinePipe,
|
|
17270
17439
|
ConvertToStylePipe,
|
|
@@ -17402,5 +17571,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
17402
17571
|
* Generated bundle index. Do not edit.
|
|
17403
17572
|
*/
|
|
17404
17573
|
|
|
17405
|
-
export { APP_VERSION, AbsoluteDivBodyDirective, AddDynamicFormStyles, AffixRespondEvents, AllFilesMimeType, AnchorScrollDirective, ApiService, ApplicationBaseComponent, ApplicationCtrlrService, AttrRtlDirective, AudioMimeType, AudioRecordingService, AuthGuard, BarsaApi, BarsaDialogService, BarsaIconDictPipe, BarsaNovinRayCoreModule, BarsaReadonlyDirective, BarsaSapUiFormPageModule, BarsaStorageService, BaseColumnPropsComponent, BaseComponent, BaseController, BaseDirective, BaseDynamicComponent, BaseFormToolbaritemPropsComponent, BaseItemContentPropsComponent, BaseModule, BaseReportModel, BaseUlvSettingComponent, BaseViewContentPropsComponent, BaseViewItemPropsComponent, BaseViewPropsComponent, BbbTranslatePipe, BodyClickDirective, BoolControlInfoModel, BreadcrumbService, ButtonLoadingComponent, CalculateControlInfoModel, CanUploadFilePipe, CardMediaSizePipe, ChangeLayoutInfoCustomUi, ChunkArrayPipe, CodeEditorControlInfoModel, ColSetting, ColumnCustomComponentPipe, ColumnCustomUiPipe, ColumnIconPipe, ColumnResizerDirective, ColumnService, ColumnValueDirective, ColumnValueOfParametersPipe, ColumnValuePipe, ComboRowImagePipe, CommandControlInfoModel, ContainerComponent, ContainerService, ContextMenuPipe, ControlUiPipe, ConvertToStylePipe, CopyDirective, CountDownDirective, CustomCommand, CustomInjector, CustomRouteReuseStategy, DIALOG_SERVICE, DateHijriService, DateMiladiService, DateRanges, DateService, DateShamsiService, DateTimeControlInfoModel, DeviceWidth, DialogParams, DynamicCommandDirective, DynamicComponentService, DynamicDarkColorPipe, DynamicFormComponent, DynamicFormToolbaritemComponent, DynamicItemComponent, DynamicLayoutComponent, DynamicRootVariableDirective, DynamicStyleDirective, DynamicTileGroupComponent, EllapsisTextDirective, EllipsifyDirective, EmptyPageComponent, EmptyPageWithRouterAndRouterOutletComponent, EnumControlInfoModel, ExecuteDynamicCommand, ExecuteWorkflowChoiceDef, FORM_DIALOG_COMPONENT, FieldBaseComponent, FieldDirective, FieldInfoTypeEnum, FieldUiComponent, FileControlInfoModel, FileInfoCountPipe, FilePictureInfoModel, FilesValidationHelper, FillAllLayoutControls, FillEmptySpaceDirective, FilterColumnsByDetailsPipe, FilterInlineActionListPipe, FilterPipe, FilterStringPipe, FilterTabPipe, FilterToolbarControlPipe, FilterWorkflowInMobilePipe, FindColumnByDbNamePipe, FindGroup, FindLayoutSettingFromLayout94, FindPreviewColumnPipe, FindToolbarItem, FioriIconPipe, FormBaseComponent, FormCloseDirective, FormComponent, FormFieldReportPageComponent, FormNewComponent, FormPageBaseComponent, FormPageComponent, FormPanelService, FormPropsBaseComponent, FormService, FormToolbarBaseComponent, GaugeControlInfoModel, GeneralControlInfoModel, GetAllColumnsSorted, GetAllHorizontalFromLayout94, GetDefaultMoObjectInfo, GetImgTags, GetVisibleValue, GridSetting, GroupBy, GroupByPipe, GroupByService, HeaderFacetValuePipe, HideAcceptCancelButtonsPipe, HideColumnsInmobilePipe, HistoryControlInfoModel, HorizontalLayoutService, HorizontalResponsiveDirective, IconControlInfoModel, ImageLazyDirective, ImageMimeType, ImagetoPrint, InMemoryStorageService, IndexedDbService, InputNumber, IntersectionObserverDirective, IntersectionStatus, IsDarkMode, IsExpandedNodePipe, IsImagePipe, ItemsRendererDirective, LabelStarTrimPipe, LabelmandatoryDirective, LayoutItemBaseComponent, LayoutMainContentService, LayoutPanelBaseComponent, LayoutService, LeafletLongPressDirective, LinearListControlInfoModel, LinearListHelper, ListCountPipe, ListRelationModel, LoadExternalFilesDirective, LocalStorageService, LogService, LoginSettingsResolver, MapToChatMessagePipe, MasterDetailsPageComponent, MeasureFormTitleWidthDirective, MergeFieldsToColumnsPipe, MetaobjectDataModel, MetaobjectRelationModel, MoForReportModel, MoForReportModelBase, MoInfoUlvMoListPipe, MoInfoUlvPagingPipe, MoReportValueConcatPipe, MoReportValuePipe, MoValuePipe, MobileDirective, ModalRootComponent, MultipleGroupByPipe, NOTIFICATAION_POPUP_SERVER, NOTIFICATION_WEBWORKER_FACTORY, NetworkStatusService, NotFoundComponent, NotificationService, NowraptextDirective, NumberBaseComponent, NumberControlInfoModel, NumbersOnlyInputDirective, NumeralPipe, OverflowTextDirective, PageBaseComponent, PageWithFormHandlerBaseComponent, PdfMimeType, PictureFieldSourcePipe, PictureFileControlInfoModel, PlaceHolderDirective, PortalDynamicPageResolver, PortalFormPageResolver, PortalPageComponent, PortalPageResolver, PortalPageSidebarComponent, PortalReportPageResolver, PortalService, PreventDefaulEvent, PreventDefaultDirective, PrintFilesDirective, PrintImage, PromptUpdateService, PushCheckService, RabetehAkseTakiListiControlInfoModel, RedirectHomeGuard, RedirectReportNavigatorCommandComponent, RelatedReportControlInfoModel, RelationListControlInfoModel, RemoveDynamicFormStyles, RemoveNewlinePipe, RenderUlvDirective, RenderUlvPaginDirective, RenderUlvViewerDirective, ReplacePipe, ReportBaseComponent, ReportBaseInfo, ReportCalendarModel, ReportContainerComponent, ReportExtraInfo, ReportField, ReportFormModel, ReportItemBaseComponent, ReportListModel, ReportModel, ReportTreeModel, ReportViewBaseComponent, ReportViewColumn, ResizableComponent, ResizableDirective, ResizableModule, ResizeHandlerDirective, ResizeObserverDirective, ReversePipe, RichStringControlInfoModel, RootPageComponent, RootPortalComponent, RouteFormChangeDirective, RoutingService, RowDataOption, RowNumberPipe, SafeBottomDirective, SanitizeTextPipe, SaveImageDirective, SaveImageToFile, SaveScrollPositionService, ScrollPersistDirective, ScrollToSelectedDirective, SelectionMode, SeperatorFixPipe, ServiceWorkerCommuncationService, ServiceWorkerNotificationService, ShellbarHeightService, ShortcutHandlerDirective, ShortcutRegisterDirective, SimplebarDirective, SingleRelationControlInfoModel, SortDirection, SortPipe, SortSetting, SplideSliderDirective, SplitPipe, StopPropagationDirective, StringControlInfoModel, StringToNumberPipe, SubformControlInfoModel, SystemBaseComponent, TOAST_SERVICE, TableHeaderWidthMode, TableResizerDirective, TabpageService, ThImageOrIconePipe, TileGroupBreadcrumResolver, TilePropsComponent, TlbButtonsPipe, ToolbarSettingsPipe, TooltipDirective, TotalSummaryPipe, UiService, UlvCommandDirective, UlvMainService, UnlimitSessionComponent, UntilInViewDirective, UploadService, VideoMimeType, VideoRecordingService, ViewBase, VisibleValuePipe, WebOtpDirective, WordMimeType, WorfkflowwChoiceCommandDirective, addCssVariableToRoot, availablePrefixes, calcContextMenuWidth, calculateColumnContent, calculateColumnWidth, calculateColumnWidthFitToContainer, calculateFreeColumnSize, calculateMoDataListContentWidthByColumnName, cancelRequestAnimationFrame, createFormPanelMetaConditions, createGridEditorFormPanel, easeInOutCubic, elementInViewport2, enumValueToStringSize, executeUlvCommandHandler, flattenTree, forbiddenValidator, formRoutes, formatBytes, fromEntries, fromIntersectionObserver, genrateInlineMoId, getAllItemsPerChildren, getColumnValueOfMoDataList, getComponentDefined, getControlList, getControlSizeMode, getDateService, getDeviceIsDesktop, getDeviceIsMobile, getDeviceIsPhone, getDeviceIsTablet, getFieldValue, getFocusableTagNames, getFormSettings, getGridSettings, getHeaderValue, getIcon, getImagePath, getLabelWidth, getLayout94ObjectInfo, getLayoutControl, getNewMoGridEditor, getParentHeight, getRequestAnimationFrame, getResetGridSettings, getTargetRect, getUniqueId, getValidExtension, isFF, isFirefox, isFunction, isImage, isInLocalMode, isSafari, isTargetWindow, measureText, measureText2, measureTextBy, mobile_regex, nullOrUndefinedString, number_only, requestAnimationFramePolyfill, setColumnWidthByMaxMoContentWidth, setOneDepthLevel, setTableThWidth, shallowEqual, stopPropagation, throwIfAlreadyLoaded, toNumber, validateAllFormFields };
|
|
17574
|
+
export { APP_VERSION, AbsoluteDivBodyDirective, AddDynamicFormStyles, AffixRespondEvents, AllFilesMimeType, AnchorScrollDirective, ApiService, ApplicationBaseComponent, ApplicationCtrlrService, AttrRtlDirective, AudioMimeType, AudioRecordingService, AuthGuard, BarsaApi, BarsaDialogService, BarsaIconDictPipe, BarsaNovinRayCoreModule, BarsaReadonlyDirective, BarsaSapUiFormPageModule, BarsaStorageService, BaseColumnPropsComponent, BaseComponent, BaseController, BaseDirective, BaseDynamicComponent, BaseFormToolbaritemPropsComponent, BaseItemContentPropsComponent, BaseModule, BaseReportModel, BaseUlvSettingComponent, BaseViewContentPropsComponent, BaseViewItemPropsComponent, BaseViewPropsComponent, BbbTranslatePipe, BodyClickDirective, BoolControlInfoModel, BreadcrumbService, ButtonLoadingComponent, CalculateControlInfoModel, CanUploadFilePipe, CardMediaSizePipe, ChangeLayoutInfoCustomUi, ChunkArrayPipe, CodeEditorControlInfoModel, ColSetting, ColumnCustomComponentPipe, ColumnCustomUiPipe, ColumnIconPipe, ColumnResizerDirective, ColumnService, ColumnValueDirective, ColumnValueOfParametersPipe, ColumnValuePipe, ComboRowImagePipe, CommandControlInfoModel, ContainerComponent, ContainerService, ContextMenuPipe, ControlUiPipe, ConvertToStylePipe, CopyDirective, CountDownDirective, CustomCommand, CustomInjector, CustomRouteReuseStategy, DIALOG_SERVICE, DateHijriService, DateMiladiService, DateRanges, DateService, DateShamsiService, DateTimeControlInfoModel, DeviceWidth, DialogParams, DynamicCommandDirective, DynamicComponentService, DynamicDarkColorPipe, DynamicFormComponent, DynamicFormToolbaritemComponent, DynamicItemComponent, DynamicLayoutComponent, DynamicRootVariableDirective, DynamicStyleDirective, DynamicTileGroupComponent, EllapsisTextDirective, EllipsifyDirective, EmptyPageComponent, EmptyPageWithRouterAndRouterOutletComponent, EnumControlInfoModel, ExecuteDynamicCommand, ExecuteWorkflowChoiceDef, FORM_DIALOG_COMPONENT, FieldBaseComponent, FieldDirective, FieldInfoTypeEnum, FieldUiComponent, FileControlInfoModel, FileInfoCountPipe, FilePictureInfoModel, FilesValidationHelper, FillAllLayoutControls, FillEmptySpaceDirective, FilterColumnsByDetailsPipe, FilterInlineActionListPipe, FilterPipe, FilterStringPipe, FilterTabPipe, FilterToolbarControlPipe, FilterWorkflowInMobilePipe, FindColumnByDbNamePipe, FindGroup, FindLayoutSettingFromLayout94, FindPreviewColumnPipe, FindToolbarItem, FioriIconPipe, FormBaseComponent, FormCloseDirective, FormComponent, FormFieldReportPageComponent, FormNewComponent, FormPageBaseComponent, FormPageComponent, FormPanelService, FormPropsBaseComponent, FormService, FormToolbarBaseComponent, GaugeControlInfoModel, GeneralControlInfoModel, GetAllColumnsSorted, GetAllHorizontalFromLayout94, GetDefaultMoObjectInfo, GetImgTags, GetVisibleValue, GridSetting, GroupBy, GroupByPipe, GroupByService, HeaderFacetValuePipe, HideAcceptCancelButtonsPipe, HideColumnsInmobilePipe, HistoryControlInfoModel, HorizontalLayoutService, HorizontalResponsiveDirective, IconControlInfoModel, ImageLazyDirective, ImageMimeType, ImagetoPrint, InMemoryStorageService, IndexedDbService, InputNumber, IntersectionObserverDirective, IntersectionStatus, IsDarkMode, IsExpandedNodePipe, IsImagePipe, ItemsRendererDirective, LabelStarTrimPipe, LabelmandatoryDirective, LayoutItemBaseComponent, LayoutMainContentService, LayoutPanelBaseComponent, LayoutService, LeafletLongPressDirective, LinearListControlInfoModel, LinearListHelper, ListCountPipe, ListRelationModel, LoadExternalFilesDirective, LocalStorageService, LogService, LoginSettingsResolver, MapToChatMessagePipe, MasterDetailsPageComponent, MeasureFormTitleWidthDirective, MergeFieldsToColumnsPipe, MetaobjectDataModel, MetaobjectRelationModel, MoForReportModel, MoForReportModelBase, MoInfoUlvMoListPipe, MoInfoUlvPagingPipe, MoReportValueConcatPipe, MoReportValuePipe, MoValuePipe, MobileDirective, ModalRootComponent, MultipleGroupByPipe, NOTIFICATAION_POPUP_SERVER, NOTIFICATION_WEBWORKER_FACTORY, NetworkStatusService, NotFoundComponent, NotificationService, NowraptextDirective, NumberBaseComponent, NumberControlInfoModel, NumbersOnlyInputDirective, NumeralPipe, OverflowTextDirective, PageBaseComponent, PageWithFormHandlerBaseComponent, PdfMimeType, PictureFieldSourcePipe, PictureFileControlInfoModel, PlaceHolderDirective, PortalDynamicPageResolver, PortalFormPageResolver, PortalPageComponent, PortalPageResolver, PortalPageSidebarComponent, PortalReportPageResolver, PortalService, PreventDefaulEvent, PreventDefaultDirective, PrintFilesDirective, PrintImage, PromptUpdateService, PushBannerComponent, PushCheckService, RabetehAkseTakiListiControlInfoModel, RedirectHomeGuard, RedirectReportNavigatorCommandComponent, RelatedReportControlInfoModel, RelationListControlInfoModel, RemoveDynamicFormStyles, RemoveNewlinePipe, RenderUlvDirective, RenderUlvPaginDirective, RenderUlvViewerDirective, ReplacePipe, ReportBaseComponent, ReportBaseInfo, ReportCalendarModel, ReportContainerComponent, ReportExtraInfo, ReportField, ReportFormModel, ReportItemBaseComponent, ReportListModel, ReportModel, ReportTreeModel, ReportViewBaseComponent, ReportViewColumn, ResizableComponent, ResizableDirective, ResizableModule, ResizeHandlerDirective, ResizeObserverDirective, ReversePipe, RichStringControlInfoModel, RootPageComponent, RootPortalComponent, RouteFormChangeDirective, RoutingService, RowDataOption, RowNumberPipe, SafeBottomDirective, SanitizeTextPipe, SaveImageDirective, SaveImageToFile, SaveScrollPositionService, ScrollPersistDirective, ScrollToSelectedDirective, SelectionMode, SeperatorFixPipe, ServiceWorkerCommuncationService, ServiceWorkerNotificationService, ShellbarHeightService, ShortcutHandlerDirective, ShortcutRegisterDirective, SimplebarDirective, SingleRelationControlInfoModel, SortDirection, SortPipe, SortSetting, SplideSliderDirective, SplitPipe, StopPropagationDirective, StringControlInfoModel, StringToNumberPipe, SubformControlInfoModel, SystemBaseComponent, TOAST_SERVICE, TableHeaderWidthMode, TableResizerDirective, TabpageService, ThImageOrIconePipe, TileGroupBreadcrumResolver, TilePropsComponent, TlbButtonsPipe, ToolbarSettingsPipe, TooltipDirective, TotalSummaryPipe, UiService, UlvCommandDirective, UlvMainService, UnlimitSessionComponent, UntilInViewDirective, UploadService, VideoMimeType, VideoRecordingService, ViewBase, VisibleValuePipe, WebOtpDirective, WordMimeType, WorfkflowwChoiceCommandDirective, addCssVariableToRoot, availablePrefixes, calcContextMenuWidth, calculateColumnContent, calculateColumnWidth, calculateColumnWidthFitToContainer, calculateFreeColumnSize, calculateMoDataListContentWidthByColumnName, cancelRequestAnimationFrame, createFormPanelMetaConditions, createGridEditorFormPanel, easeInOutCubic, elementInViewport2, enumValueToStringSize, executeUlvCommandHandler, flattenTree, forbiddenValidator, formRoutes, formatBytes, fromEntries, fromIntersectionObserver, genrateInlineMoId, getAllItemsPerChildren, getColumnValueOfMoDataList, getComponentDefined, getControlList, getControlSizeMode, getDateService, getDeviceIsDesktop, getDeviceIsMobile, getDeviceIsPhone, getDeviceIsTablet, getFieldValue, getFocusableTagNames, getFormSettings, getGridSettings, getHeaderValue, getIcon, getImagePath, getLabelWidth, getLayout94ObjectInfo, getLayoutControl, getNewMoGridEditor, getParentHeight, getRequestAnimationFrame, getResetGridSettings, getTargetRect, getUniqueId, getValidExtension, isFF, isFirefox, isFunction, isImage, isInLocalMode, isSafari, isTargetWindow, measureText, measureText2, measureTextBy, mobile_regex, nullOrUndefinedString, number_only, requestAnimationFramePolyfill, setColumnWidthByMaxMoContentWidth, setOneDepthLevel, setTableThWidth, shallowEqual, stopPropagation, throwIfAlreadyLoaded, toNumber, usePushNotification, validateAllFormFields };
|
|
17406
17575
|
//# sourceMappingURL=barsa-novin-ray-core.mjs.map
|