barsa-novin-ray-core 2.3.99 → 2.3.101
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 +326 -131
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/index.d.ts +75 -27
- 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 {
|
|
@@ -7835,12 +7836,11 @@ class ServiceWorkerNotificationService {
|
|
|
7835
7836
|
this.hasRegistration = false;
|
|
7836
7837
|
this._swPush = inject(SwPush);
|
|
7837
7838
|
this._portalService = inject(PortalService);
|
|
7838
|
-
this._notificationPermissionAllowed = false;
|
|
7839
7839
|
this.init();
|
|
7840
7840
|
}
|
|
7841
7841
|
// بررسی وضعیت فعلی
|
|
7842
7842
|
get isEnabled() {
|
|
7843
|
-
return this._swPush.isEnabled && this.hasRegistration
|
|
7843
|
+
return this._swPush.isEnabled && this.hasRegistration;
|
|
7844
7844
|
}
|
|
7845
7845
|
async closeNotifications(tags) {
|
|
7846
7846
|
const sw = await this.getSw();
|
|
@@ -7896,7 +7896,6 @@ class ServiceWorkerNotificationService {
|
|
|
7896
7896
|
}
|
|
7897
7897
|
async init() {
|
|
7898
7898
|
console.log(`SwPush enabled: ${this._swPush.isEnabled}`);
|
|
7899
|
-
this.handlePermission();
|
|
7900
7899
|
// مدیریت کلیک روی نوتیفیکیشنها
|
|
7901
7900
|
this._swPush.notificationClicks.subscribe((e) => {
|
|
7902
7901
|
if (!e.notification.tag) {
|
|
@@ -7911,44 +7910,6 @@ class ServiceWorkerNotificationService {
|
|
|
7911
7910
|
// بررسی مجوز و ثبت سرویسورکر
|
|
7912
7911
|
await this.registerServiceWorker();
|
|
7913
7912
|
}
|
|
7914
|
-
handlePermission() {
|
|
7915
|
-
if (!navigator?.permissions?.query) {
|
|
7916
|
-
return;
|
|
7917
|
-
}
|
|
7918
|
-
return navigator.permissions
|
|
7919
|
-
.query({ name: 'notifications' })
|
|
7920
|
-
.then(this.permissionQuery.bind(this))
|
|
7921
|
-
.catch(this.permissionError.bind(this));
|
|
7922
|
-
}
|
|
7923
|
-
permissionQuery(result) {
|
|
7924
|
-
let newPrompt;
|
|
7925
|
-
if (result.state === 'granted') {
|
|
7926
|
-
console.log('notificaiton granted');
|
|
7927
|
-
// notifications allowed, go wild
|
|
7928
|
-
}
|
|
7929
|
-
else if (result.state === 'prompt') {
|
|
7930
|
-
// we can ask the user
|
|
7931
|
-
console.log('notificaiton prompt');
|
|
7932
|
-
newPrompt = Notification.requestPermission();
|
|
7933
|
-
}
|
|
7934
|
-
else if (result.state === 'denied') {
|
|
7935
|
-
// notifications were disabled
|
|
7936
|
-
console.log('notificaiton denied');
|
|
7937
|
-
this._notificationPermissionAllowed = false;
|
|
7938
|
-
}
|
|
7939
|
-
result.onchange = () => console.log({ updatedPermission: result });
|
|
7940
|
-
return newPrompt || result;
|
|
7941
|
-
}
|
|
7942
|
-
permissionError(error) {
|
|
7943
|
-
this._notificationPermissionAllowed = false;
|
|
7944
|
-
console.error(error);
|
|
7945
|
-
}
|
|
7946
|
-
async requestPermission() {
|
|
7947
|
-
if (Notification.permission === 'default') {
|
|
7948
|
-
await Notification.requestPermission();
|
|
7949
|
-
}
|
|
7950
|
-
this._notificationPermissionAllowed = Notification.permission === 'granted';
|
|
7951
|
-
}
|
|
7952
7913
|
async registerServiceWorker() {
|
|
7953
7914
|
if (!('serviceWorker' in navigator)) {
|
|
7954
7915
|
return;
|
|
@@ -8267,46 +8228,254 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
8267
8228
|
args: [{ providedIn: 'root' }]
|
|
8268
8229
|
}] });
|
|
8269
8230
|
|
|
8231
|
+
// src/app/services/idb.service.ts
|
|
8232
|
+
class IdbService {
|
|
8233
|
+
constructor() {
|
|
8234
|
+
this.dbPromise = openDB('my-app-db', 1, {
|
|
8235
|
+
upgrade(db) {
|
|
8236
|
+
if (!db.objectStoreNames.contains('subscription')) {
|
|
8237
|
+
db.createObjectStore('subscription');
|
|
8238
|
+
}
|
|
8239
|
+
if (!db.objectStoreNames.contains('settings')) {
|
|
8240
|
+
db.createObjectStore('settings');
|
|
8241
|
+
}
|
|
8242
|
+
}
|
|
8243
|
+
});
|
|
8244
|
+
}
|
|
8245
|
+
async get(store, key) {
|
|
8246
|
+
const db = await this.dbPromise;
|
|
8247
|
+
const v = await db.get(store, key);
|
|
8248
|
+
return (v === undefined ? null : v);
|
|
8249
|
+
}
|
|
8250
|
+
async set(store, key, value) {
|
|
8251
|
+
const db = await this.dbPromise;
|
|
8252
|
+
await db.put(store, value, key);
|
|
8253
|
+
}
|
|
8254
|
+
async delete(store, key) {
|
|
8255
|
+
const db = await this.dbPromise;
|
|
8256
|
+
await db.delete(store, key);
|
|
8257
|
+
}
|
|
8258
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8259
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, providedIn: 'root' }); }
|
|
8260
|
+
}
|
|
8261
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, decorators: [{
|
|
8262
|
+
type: Injectable,
|
|
8263
|
+
args: [{ providedIn: 'root' }]
|
|
8264
|
+
}], ctorParameters: () => [] });
|
|
8265
|
+
|
|
8266
|
+
class PushNotificationService {
|
|
8267
|
+
constructor() {
|
|
8268
|
+
this.swPush = inject(SwPush);
|
|
8269
|
+
this.http = inject(HttpClient);
|
|
8270
|
+
this.idb = inject(IdbService);
|
|
8271
|
+
this.local = inject(LocalStorageService);
|
|
8272
|
+
// یک سیگنال واحد
|
|
8273
|
+
this._push = signal({
|
|
8274
|
+
bannerVisible: false,
|
|
8275
|
+
isSubscribed: false,
|
|
8276
|
+
permission: Notification.permission,
|
|
8277
|
+
errorMessage: null
|
|
8278
|
+
});
|
|
8279
|
+
this.registerServiceWorkerMessageListener = () => {
|
|
8280
|
+
// avoid adding multiple listeners (idempotent)
|
|
8281
|
+
const onMessage = (event) => {
|
|
8282
|
+
const data = event.data;
|
|
8283
|
+
if (!data) {
|
|
8284
|
+
return;
|
|
8285
|
+
}
|
|
8286
|
+
if (data.event === 'subscriptionChanged' && data.subscription) {
|
|
8287
|
+
// run async handler but don't await here
|
|
8288
|
+
(async () => {
|
|
8289
|
+
await this.handleNewSubscription(data.subscription);
|
|
8290
|
+
})().catch(console.error);
|
|
8291
|
+
}
|
|
8292
|
+
};
|
|
8293
|
+
// addEventListener is idempotent-ish but let's guard by setting property
|
|
8294
|
+
// we attach once on navigator.serviceWorker (not to window)
|
|
8295
|
+
navigator.serviceWorker?.addEventListener('message', onMessage);
|
|
8296
|
+
};
|
|
8297
|
+
}
|
|
8298
|
+
get push() {
|
|
8299
|
+
return this._push.asReadonly();
|
|
8300
|
+
}
|
|
8301
|
+
hideBanner() {
|
|
8302
|
+
this.update({ bannerVisible: false });
|
|
8303
|
+
}
|
|
8304
|
+
async setup() {
|
|
8305
|
+
// Load subscription status
|
|
8306
|
+
await this.initPushBanner();
|
|
8307
|
+
// Listen for subscription updates
|
|
8308
|
+
this.swPush.subscription.subscribe((sub) => {
|
|
8309
|
+
this.update({
|
|
8310
|
+
isSubscribed: !!sub,
|
|
8311
|
+
permission: Notification.permission
|
|
8312
|
+
});
|
|
8313
|
+
if (sub) {
|
|
8314
|
+
const json = sub.toJSON?.() ?? sub;
|
|
8315
|
+
this.handleNewSubscription(json);
|
|
8316
|
+
}
|
|
8317
|
+
});
|
|
8318
|
+
// Listen for SW messages
|
|
8319
|
+
navigator.serviceWorker.addEventListener('message', (event) => {
|
|
8320
|
+
if (event.data?.event === 'subscriptionChanged') {
|
|
8321
|
+
this.handleNewSubscription(event.data.subscription);
|
|
8322
|
+
}
|
|
8323
|
+
});
|
|
8324
|
+
}
|
|
8325
|
+
async subscribe() {
|
|
8326
|
+
this.update({
|
|
8327
|
+
bannerVisible: false
|
|
8328
|
+
});
|
|
8329
|
+
try {
|
|
8330
|
+
const publicKey = await lastValueFrom(this.http.get('/api/pushnotification/publickey', { responseType: 'text' }));
|
|
8331
|
+
await this.idb.set('settings', 'vapid-public-key', publicKey);
|
|
8332
|
+
const sub = await this.swPush.requestSubscription({ serverPublicKey: publicKey });
|
|
8333
|
+
await lastValueFrom(this.http.post('/api/pushnotification/add', sub, this.httpOptions()));
|
|
8334
|
+
await this.idb.set('subscription', 'push-subscription', sub.toJSON());
|
|
8335
|
+
this.update({
|
|
8336
|
+
isSubscribed: true,
|
|
8337
|
+
permission: Notification.permission,
|
|
8338
|
+
bannerVisible: false,
|
|
8339
|
+
errorMessage: null
|
|
8340
|
+
});
|
|
8341
|
+
return sub;
|
|
8342
|
+
}
|
|
8343
|
+
catch (err) {
|
|
8344
|
+
this.update({ errorMessage: err.message ?? 'خطا در فعالسازی اعلان', bannerVisible: true });
|
|
8345
|
+
throw err;
|
|
8346
|
+
}
|
|
8347
|
+
}
|
|
8348
|
+
async unsubscribe() {
|
|
8349
|
+
try {
|
|
8350
|
+
const sub = await lastValueFrom(this.swPush.subscription);
|
|
8351
|
+
if (!sub) {
|
|
8352
|
+
return;
|
|
8353
|
+
}
|
|
8354
|
+
const json = sub.toJSON();
|
|
8355
|
+
await lastValueFrom(this.http.post('/api/pushnotification/delete', json, this.httpOptions()));
|
|
8356
|
+
await sub.unsubscribe();
|
|
8357
|
+
await this.deleteSubscription();
|
|
8358
|
+
this.update({ isSubscribed: false, errorMessage: null });
|
|
8359
|
+
}
|
|
8360
|
+
catch (err) {
|
|
8361
|
+
this.update({ errorMessage: err.message ?? 'خطا در لغو اشتراک' });
|
|
8362
|
+
}
|
|
8363
|
+
}
|
|
8364
|
+
async handleNewSubscription(subData) {
|
|
8365
|
+
const saved = await this.idb.get('subscription', 'push-subscription');
|
|
8366
|
+
if (!saved || saved.endpoint !== subData.endpoint) {
|
|
8367
|
+
if (saved) {
|
|
8368
|
+
await lastValueFrom(this.http.post('/api/pushnotification/delete', saved, this.httpOptions()));
|
|
8369
|
+
}
|
|
8370
|
+
await lastValueFrom(this.http.post('/api/pushnotification/add', subData, this.httpOptions()));
|
|
8371
|
+
await this.idb.set('subscription', 'push-subscription', subData);
|
|
8372
|
+
}
|
|
8373
|
+
this.update({
|
|
8374
|
+
isSubscribed: true,
|
|
8375
|
+
permission: Notification.permission,
|
|
8376
|
+
errorMessage: null
|
|
8377
|
+
});
|
|
8378
|
+
}
|
|
8379
|
+
update(values) {
|
|
8380
|
+
this._push.update((prev) => ({ ...prev, ...values }));
|
|
8381
|
+
}
|
|
8382
|
+
async loadSubscription() {
|
|
8383
|
+
return await this.idb.get('subscription', 'push-subscription');
|
|
8384
|
+
}
|
|
8385
|
+
async loadPublicKey() {
|
|
8386
|
+
return await this.idb.get('settings', 'vapid-public-key');
|
|
8387
|
+
}
|
|
8388
|
+
async initPushBanner() {
|
|
8389
|
+
let saved = await this.loadSubscription();
|
|
8390
|
+
const perm = Notification.permission;
|
|
8391
|
+
this.update({
|
|
8392
|
+
permission: perm
|
|
8393
|
+
});
|
|
8394
|
+
if (saved) {
|
|
8395
|
+
// اگر پرمیشن اکنون revoked یا default شد، subscription قبلی را حذف کن
|
|
8396
|
+
if (perm === 'default' || perm === 'denied') {
|
|
8397
|
+
console.log('Permission reset detected, removing old subscription');
|
|
8398
|
+
await this.deleteSubscription();
|
|
8399
|
+
saved = null;
|
|
8400
|
+
}
|
|
8401
|
+
}
|
|
8402
|
+
if (saved) {
|
|
8403
|
+
this.update({
|
|
8404
|
+
isSubscribed: true,
|
|
8405
|
+
bannerVisible: false
|
|
8406
|
+
});
|
|
8407
|
+
}
|
|
8408
|
+
else {
|
|
8409
|
+
this.update({
|
|
8410
|
+
isSubscribed: false,
|
|
8411
|
+
bannerVisible: perm !== 'denied' && 'PushManager' in window
|
|
8412
|
+
});
|
|
8413
|
+
}
|
|
8414
|
+
this.registerServiceWorkerMessageListener();
|
|
8415
|
+
const publicKey = await this.loadPublicKey();
|
|
8416
|
+
if (publicKey) {
|
|
8417
|
+
const reg = await navigator.serviceWorker.ready;
|
|
8418
|
+
reg.active?.postMessage({ event: 'setVapidKey', publicKey });
|
|
8419
|
+
}
|
|
8420
|
+
}
|
|
8421
|
+
async deleteSubscription() {
|
|
8422
|
+
await this.idb.delete('subscription', 'push-subscription');
|
|
8423
|
+
}
|
|
8424
|
+
httpOptions() {
|
|
8425
|
+
const token2 = this.local.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
|
|
8426
|
+
return { headers: new HttpHeaders({ 'Content-Type': 'application/json', sth: token2 }) };
|
|
8427
|
+
}
|
|
8428
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8429
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushNotificationService, providedIn: 'root' }); }
|
|
8430
|
+
}
|
|
8431
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushNotificationService, decorators: [{
|
|
8432
|
+
type: Injectable,
|
|
8433
|
+
args: [{ providedIn: 'root' }]
|
|
8434
|
+
}] });
|
|
8435
|
+
|
|
8270
8436
|
class ServiceWorkerCommuncationService {
|
|
8271
8437
|
constructor() {
|
|
8272
8438
|
this._toastService = inject(TOAST_SERVICE, { optional: true });
|
|
8273
8439
|
this._localStorage = inject(LocalStorageService);
|
|
8274
8440
|
this._portalService = inject(PortalService);
|
|
8275
|
-
this._swPush = inject(SwPush);
|
|
8276
|
-
this._httpClient = inject(HttpClient);
|
|
8277
8441
|
this._pushCheckService = inject(PushCheckService);
|
|
8442
|
+
this._pushNotificatioService = inject(PushNotificationService);
|
|
8278
8443
|
}
|
|
8279
8444
|
get token2() {
|
|
8280
8445
|
return this._localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
|
|
8281
8446
|
}
|
|
8282
|
-
get httpOptions() {
|
|
8283
|
-
return {
|
|
8284
|
-
headers: new HttpHeaders({
|
|
8285
|
-
'Content-Type': 'application/json',
|
|
8286
|
-
sth: this.token2
|
|
8287
|
-
})
|
|
8288
|
-
};
|
|
8289
|
-
}
|
|
8290
8447
|
init() {
|
|
8291
|
-
|
|
8292
|
-
|
|
8293
|
-
this._handlePushUnSubscription(doReturn);
|
|
8294
|
-
}
|
|
8295
|
-
});
|
|
8448
|
+
this._subscribe();
|
|
8449
|
+
// register SW
|
|
8296
8450
|
if (!navigator.serviceWorker) {
|
|
8297
8451
|
return;
|
|
8298
8452
|
}
|
|
8299
|
-
navigator.serviceWorker.ready.then((
|
|
8300
|
-
if (
|
|
8301
|
-
this._serviceWorker =
|
|
8302
|
-
|
|
8453
|
+
navigator.serviceWorker.ready.then((reg) => {
|
|
8454
|
+
if (reg.active) {
|
|
8455
|
+
this._serviceWorker = reg.active;
|
|
8456
|
+
navigator.serviceWorker.addEventListener('message', (event) => {
|
|
8457
|
+
if (event.data?.event === 'subscriptionChanged') {
|
|
8458
|
+
this._pushNotificatioService.handleNewSubscription(event.data.subscription);
|
|
8459
|
+
}
|
|
8460
|
+
});
|
|
8303
8461
|
}
|
|
8304
8462
|
});
|
|
8305
|
-
|
|
8306
|
-
|
|
8307
|
-
|
|
8308
|
-
|
|
8309
|
-
|
|
8463
|
+
// user logout
|
|
8464
|
+
BarsaApi.Ul.ApplicationCtrlr.on({
|
|
8465
|
+
UserLoggedout: (_, doReturn) => this._handlePushUnSubscription(doReturn)
|
|
8466
|
+
});
|
|
8467
|
+
// automatic effect: update operationName based on subscription
|
|
8468
|
+
effect(() => {
|
|
8469
|
+
const sub = this._pushNotificatioService.push().isSubscribed;
|
|
8470
|
+
// اینجا میتونی متغیر operationName یا UI رو اتوماتیک آپدیت کنی
|
|
8471
|
+
console.log('Push subscription changed:', sub);
|
|
8472
|
+
});
|
|
8473
|
+
// automatic effect: show toast on errors
|
|
8474
|
+
effect(() => {
|
|
8475
|
+
const err = this._pushNotificatioService.push().errorMessage;
|
|
8476
|
+
if (err) {
|
|
8477
|
+
this.toast(err);
|
|
8478
|
+
}
|
|
8310
8479
|
});
|
|
8311
8480
|
}
|
|
8312
8481
|
_subscribe() {
|
|
@@ -8314,7 +8483,6 @@ class ServiceWorkerCommuncationService {
|
|
|
8314
8483
|
this._portalService.documentVisibilitychange$
|
|
8315
8484
|
.pipe()
|
|
8316
8485
|
.subscribe((visibilitychange) => this._visibilitychange(visibilitychange));
|
|
8317
|
-
this._handlePushSubscirption();
|
|
8318
8486
|
}
|
|
8319
8487
|
_setDefaultOptions() {
|
|
8320
8488
|
const token2 = this.token2;
|
|
@@ -8326,7 +8494,7 @@ class ServiceWorkerCommuncationService {
|
|
|
8326
8494
|
this._postServiceWorker({ event: 'isLoggedInChange', options: { isLoggedIn } });
|
|
8327
8495
|
if (isLoggedIn) {
|
|
8328
8496
|
this._setDefaultOptions();
|
|
8329
|
-
this.
|
|
8497
|
+
this._pushNotificatioService.setup();
|
|
8330
8498
|
}
|
|
8331
8499
|
}
|
|
8332
8500
|
_visibilitychange(documentIsHidden) {
|
|
@@ -8340,66 +8508,15 @@ class ServiceWorkerCommuncationService {
|
|
|
8340
8508
|
}
|
|
8341
8509
|
this._serviceWorker.postMessage(message);
|
|
8342
8510
|
}
|
|
8343
|
-
|
|
8344
|
-
|
|
8345
|
-
|
|
8346
|
-
}, 5000);
|
|
8511
|
+
// لغو push (هر زمان امکانپذیر است)
|
|
8512
|
+
_handlePushUnSubscription(doReturn) {
|
|
8513
|
+
this._pushNotificatioService.unsubscribe().finally(() => doReturn && doReturn());
|
|
8347
8514
|
}
|
|
8348
8515
|
toast(msg) {
|
|
8349
8516
|
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();
|
|
8517
|
+
return console.log(msg);
|
|
8392
8518
|
}
|
|
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();
|
|
8519
|
+
this._toastService.open(msg, { duration: 5000 });
|
|
8403
8520
|
}
|
|
8404
8521
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8405
8522
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService }); }
|
|
@@ -13093,6 +13210,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13093
13210
|
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
13211
|
}] });
|
|
13095
13212
|
|
|
13213
|
+
class PushBannerComponent extends BaseComponent {
|
|
13214
|
+
constructor() {
|
|
13215
|
+
super();
|
|
13216
|
+
this._pushService = inject(PushNotificationService);
|
|
13217
|
+
this.push = this._pushService.push;
|
|
13218
|
+
}
|
|
13219
|
+
get bannerPositionClass() {
|
|
13220
|
+
const userAgent = navigator.userAgent;
|
|
13221
|
+
const isMobile = /Android|iPhone|iPad|iPod/i.test(userAgent);
|
|
13222
|
+
if (!isMobile) {
|
|
13223
|
+
// دسکتاپ: بالا، راست/چپ
|
|
13224
|
+
return 'position-desktop';
|
|
13225
|
+
}
|
|
13226
|
+
const isAndroid = /Android/i.test(userAgent);
|
|
13227
|
+
const isIOS = /iPhone|iPad|iPod/i.test(userAgent);
|
|
13228
|
+
if (isAndroid) {
|
|
13229
|
+
// موبایل اندروید: بالا
|
|
13230
|
+
return 'position-android-top';
|
|
13231
|
+
}
|
|
13232
|
+
if (isIOS) {
|
|
13233
|
+
// موبایل iOS: پایین (برای جلوگیری از تداخل با نوار آدرس Safari/Chrome)
|
|
13234
|
+
return 'position-ios-bottom';
|
|
13235
|
+
}
|
|
13236
|
+
// پیشفرض برای هر موبایل دیگر
|
|
13237
|
+
return 'position-ios-bottom';
|
|
13238
|
+
}
|
|
13239
|
+
onHideBanner() {
|
|
13240
|
+
this._pushService.hideBanner();
|
|
13241
|
+
}
|
|
13242
|
+
onEnable() {
|
|
13243
|
+
this._pushService.subscribe();
|
|
13244
|
+
}
|
|
13245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13246
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: PushBannerComponent, isStandalone: false, selector: "bnrc-push-banner", usesInheritance: true, ngImport: i0, template: `
|
|
13247
|
+
@if(push().bannerVisible){
|
|
13248
|
+
<div class="push-banner" [ngClass]="bannerPositionClass">
|
|
13249
|
+
<div class="text">
|
|
13250
|
+
<b>فعالسازی اعلانها</b>
|
|
13251
|
+
<p>برای دریافت پیامها و رویدادهای مهم، اعلانها را فعال کنید.</p>
|
|
13252
|
+
</div>
|
|
13253
|
+
<div class="actions">
|
|
13254
|
+
<button class="btn enable" (click)="onEnable()">فعالسازی</button>
|
|
13255
|
+
<button class="btn later" (click)="onHideBanner()">بعداً</button>
|
|
13256
|
+
</div>
|
|
13257
|
+
@if(push().errorMessage){
|
|
13258
|
+
<p class="error">{{ push().errorMessage }}</p>
|
|
13259
|
+
}
|
|
13260
|
+
</div>
|
|
13261
|
+
}
|
|
13262
|
+
`, isInline: true, styles: [".push-banner{position:fixed;left:0;right:0;font-family:var(--sapFontFamily);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}.position-ios-bottom{bottom:0;top:auto;border-radius:12px 12px 0 0}.position-android-top{top:0;bottom:auto;border-radius:0 0 12px 12px}.position-desktop{inset:20px 20px auto auto;width:320px;max-width:90%;border-radius:8px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13263
|
+
}
|
|
13264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, decorators: [{
|
|
13265
|
+
type: Component,
|
|
13266
|
+
args: [{ selector: 'bnrc-push-banner', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
13267
|
+
@if(push().bannerVisible){
|
|
13268
|
+
<div class="push-banner" [ngClass]="bannerPositionClass">
|
|
13269
|
+
<div class="text">
|
|
13270
|
+
<b>فعالسازی اعلانها</b>
|
|
13271
|
+
<p>برای دریافت پیامها و رویدادهای مهم، اعلانها را فعال کنید.</p>
|
|
13272
|
+
</div>
|
|
13273
|
+
<div class="actions">
|
|
13274
|
+
<button class="btn enable" (click)="onEnable()">فعالسازی</button>
|
|
13275
|
+
<button class="btn later" (click)="onHideBanner()">بعداً</button>
|
|
13276
|
+
</div>
|
|
13277
|
+
@if(push().errorMessage){
|
|
13278
|
+
<p class="error">{{ push().errorMessage }}</p>
|
|
13279
|
+
}
|
|
13280
|
+
</div>
|
|
13281
|
+
}
|
|
13282
|
+
`, styles: [".push-banner{position:fixed;left:0;right:0;font-family:var(--sapFontFamily);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}.position-ios-bottom{bottom:0;top:auto;border-radius:12px 12px 0 0}.position-android-top{top:0;bottom:auto;border-radius:0 0 12px 12px}.position-desktop{inset:20px 20px auto auto;width:320px;max-width:90%;border-radius:8px}\n"] }]
|
|
13283
|
+
}], ctorParameters: () => [] });
|
|
13284
|
+
|
|
13096
13285
|
class LoadExternalFilesDirective {
|
|
13097
13286
|
constructor() {
|
|
13098
13287
|
this._renderer2 = inject(Renderer2);
|
|
@@ -13279,7 +13468,8 @@ class RootPortalComponent extends PageBaseComponent {
|
|
|
13279
13468
|
@if(pageData?.UnlimitSession==='True'){
|
|
13280
13469
|
<bnrc-unlimit-session></bnrc-unlimit-session>
|
|
13281
13470
|
}
|
|
13282
|
-
|
|
13471
|
+
<bnrc-push-banner></bnrc-push-banner>
|
|
13472
|
+
`, 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
13473
|
}
|
|
13284
13474
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RootPortalComponent, decorators: [{
|
|
13285
13475
|
type: Component,
|
|
@@ -13351,6 +13541,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13351
13541
|
@if(pageData?.UnlimitSession==='True'){
|
|
13352
13542
|
<bnrc-unlimit-session></bnrc-unlimit-session>
|
|
13353
13543
|
}
|
|
13544
|
+
<bnrc-push-banner></bnrc-push-banner>
|
|
13354
13545
|
`,
|
|
13355
13546
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13356
13547
|
providers: [ContainerService],
|
|
@@ -16869,7 +17060,8 @@ const components = [
|
|
|
16869
17060
|
FormFieldReportPageComponent,
|
|
16870
17061
|
ButtonLoadingComponent,
|
|
16871
17062
|
UnlimitSessionComponent,
|
|
16872
|
-
DynamicTileGroupComponent
|
|
17063
|
+
DynamicTileGroupComponent,
|
|
17064
|
+
PushBannerComponent
|
|
16873
17065
|
];
|
|
16874
17066
|
const directives = [
|
|
16875
17067
|
PlaceHolderDirective,
|
|
@@ -16951,7 +17143,8 @@ const services = [
|
|
|
16951
17143
|
BbbTranslatePipe,
|
|
16952
17144
|
BarsaStorageService,
|
|
16953
17145
|
ServiceWorkerCommuncationService,
|
|
16954
|
-
ApplicationCtrlrService
|
|
17146
|
+
ApplicationCtrlrService,
|
|
17147
|
+
PushNotificationService
|
|
16955
17148
|
];
|
|
16956
17149
|
const pipes = [
|
|
16957
17150
|
NumeralPipe,
|
|
@@ -17128,7 +17321,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
17128
17321
|
FormFieldReportPageComponent,
|
|
17129
17322
|
ButtonLoadingComponent,
|
|
17130
17323
|
UnlimitSessionComponent,
|
|
17131
|
-
DynamicTileGroupComponent,
|
|
17324
|
+
DynamicTileGroupComponent,
|
|
17325
|
+
PushBannerComponent, NumeralPipe,
|
|
17132
17326
|
CanUploadFilePipe,
|
|
17133
17327
|
RemoveNewlinePipe,
|
|
17134
17328
|
ConvertToStylePipe,
|
|
@@ -17264,7 +17458,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
17264
17458
|
FormFieldReportPageComponent,
|
|
17265
17459
|
ButtonLoadingComponent,
|
|
17266
17460
|
UnlimitSessionComponent,
|
|
17267
|
-
DynamicTileGroupComponent,
|
|
17461
|
+
DynamicTileGroupComponent,
|
|
17462
|
+
PushBannerComponent, NumeralPipe,
|
|
17268
17463
|
CanUploadFilePipe,
|
|
17269
17464
|
RemoveNewlinePipe,
|
|
17270
17465
|
ConvertToStylePipe,
|
|
@@ -17402,5 +17597,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
17402
17597
|
* Generated bundle index. Do not edit.
|
|
17403
17598
|
*/
|
|
17404
17599
|
|
|
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 };
|
|
17600
|
+
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, IdbService, 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, PushNotificationService, 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 };
|
|
17406
17601
|
//# sourceMappingURL=barsa-novin-ray-core.mjs.map
|