@o3r/mobile 11.6.0-prerelease.21 → 11.6.0-prerelease.23

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.
@@ -1,14 +1,13 @@
1
- import { OnDestroy } from '@angular/core';
2
1
  import * as i0 from "@angular/core";
3
- export declare class CapacitorTargetService implements OnDestroy {
4
- private readonly subscriptions;
2
+ export declare class CapacitorTargetService {
3
+ private readonly destroyRef;
4
+ private hijackDone;
5
5
  private openInCapacitorBrowser;
6
6
  /**
7
7
  * Method called for 'hijacking' the click event on <a> tags with target _blank attribute.
8
8
  * Instead of the default action, it will open the URL using the CapacitorJS Browser plugin.
9
9
  */
10
10
  hijackClick(): void;
11
- ngOnDestroy(): void;
12
11
  static ɵfac: i0.ɵɵFactoryDeclaration<CapacitorTargetService, never>;
13
12
  static ɵprov: i0.ɵɵInjectableDeclaration<CapacitorTargetService>;
14
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capacitor-target.service.d.ts","sourceRoot":"","sources":["../../src/capacitor/capacitor-target.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACV,MAAM,eAAe,CAAC;;AAYvB,qBAGa,sBAAuB,YAAW,SAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;YAEtC,sBAAsB;IAcpC;;;OAGG;IACI,WAAW,IAAI,IAAI;IASnB,WAAW;yCA9BP,sBAAsB;6CAAtB,sBAAsB;CAiClC"}
1
+ {"version":3,"file":"capacitor-target.service.d.ts","sourceRoot":"","sources":["../../src/capacitor/capacitor-target.service.ts"],"names":[],"mappings":";AAkBA,qBAGa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,UAAU,CAAS;YAEb,sBAAsB;IAcpC;;;OAGG;IACI,WAAW,IAAI,IAAI;yCAtBf,sBAAsB;6CAAtB,sBAAsB;CA+BlC"}
@@ -1,11 +1,13 @@
1
- import { Injectable, } from '@angular/core';
1
+ import { DestroyRef, inject, Injectable, } from '@angular/core';
2
+ import { takeUntilDestroyed, } from '@angular/core/rxjs-interop';
2
3
  import { Browser, } from '@capacitor/browser';
3
4
  import { fromEvent, } from 'rxjs';
4
5
  import { isCapacitorContext, } from './helpers';
5
6
  import * as i0 from "@angular/core";
6
7
  export class CapacitorTargetService {
7
8
  constructor() {
8
- this.subscriptions = [];
9
+ this.destroyRef = inject(DestroyRef);
10
+ this.hijackDone = false;
9
11
  }
10
12
  async openInCapacitorBrowser(element, event) {
11
13
  if (await isCapacitorContext() && element instanceof Element) {
@@ -26,16 +28,14 @@ export class CapacitorTargetService {
26
28
  * Instead of the default action, it will open the URL using the CapacitorJS Browser plugin.
27
29
  */
28
30
  hijackClick() {
29
- if (this.subscriptions.length === 0) {
30
- this.subscriptions.push(fromEvent(document, 'click').subscribe(async (event) => {
31
+ if (!this.hijackDone) {
32
+ fromEvent(document, 'click').pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (event) => {
31
33
  const element = event.target;
32
34
  await this.openInCapacitorBrowser(element, event);
33
- }));
35
+ });
36
+ this.hijackDone = true;
34
37
  }
35
38
  }
36
- ngOnDestroy() {
37
- this.subscriptions.forEach((subscription) => subscription.unsubscribe());
38
- }
39
39
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CapacitorTargetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
40
40
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CapacitorTargetService, providedIn: 'root' }); }
41
41
  }
@@ -45,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
45
45
  providedIn: 'root'
46
46
  }]
47
47
  }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWNpdG9yLXRhcmdldC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NhcGFjaXRvci9jYXBhY2l0b3ItdGFyZ2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxHQUNSLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLFNBQVMsR0FFVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxrQkFBa0IsR0FDbkIsTUFBTSxXQUFXLENBQUM7O0FBS25CLE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJbUIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0tBZ0NyRDtJQTlCUyxLQUFLLENBQUMsc0JBQXNCLENBQUMsT0FBMkIsRUFBRSxLQUFZO1FBQzVFLElBQUksTUFBTSxrQkFBa0IsRUFBRSxJQUFJLE9BQU8sWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUM3RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ3ZELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3RSxNQUFNLE9BQU8sR0FBdUIsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDakQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7a0lBaENVLHNCQUFzQjtzSUFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnJvd3Nlcixcbn0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7XG4gIGZyb21FdmVudCxcbiAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGlzQ2FwYWNpdG9yQ29udGV4dCxcbn0gZnJvbSAnLi9oZWxwZXJzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FwYWNpdG9yVGFyZ2V0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIGFzeW5jIG9wZW5JbkNhcGFjaXRvckJyb3dzZXIoZWxlbWVudDogRXZlbnRUYXJnZXQgfCBudWxsLCBldmVudDogRXZlbnQpIHtcbiAgICBpZiAoYXdhaXQgaXNDYXBhY2l0b3JDb250ZXh0KCkgJiYgZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICBjb25zdCB1cmwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJyAmJiB1cmwpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGF3YWl0IEJyb3dzZXIub3Blbih7IHVybCwgcHJlc2VudGF0aW9uU3R5bGU6ICdwb3BvdmVyJyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuSW5DYXBhY2l0b3JCcm93c2VyKGVsZW1lbnQucGFyZW50RWxlbWVudCwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgY2FsbGVkIGZvciAnaGlqYWNraW5nJyB0aGUgY2xpY2sgZXZlbnQgb24gPGE+IHRhZ3Mgd2l0aCB0YXJnZXQgX2JsYW5rIGF0dHJpYnV0ZS5cbiAgICogSW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb24sIGl0IHdpbGwgb3BlbiB0aGUgVVJMIHVzaW5nIHRoZSBDYXBhY2l0b3JKUyBCcm93c2VyIHBsdWdpbi5cbiAgICovXG4gIHB1YmxpYyBoaWphY2tDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKS5zdWJzY3JpYmUoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuSW5DYXBhY2l0b3JCcm93c2VyKGVsZW1lbnQsIGV2ZW50KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWNpdG9yLXRhcmdldC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NhcGFjaXRvci9jYXBhY2l0b3ItdGFyZ2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsT0FBTyxHQUNSLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxrQkFBa0IsR0FDbkIsTUFBTSxXQUFXLENBQUM7O0FBS25CLE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxlQUFVLEdBQUcsS0FBSyxDQUFDO0tBNkI1QjtJQTNCUyxLQUFLLENBQUMsc0JBQXNCLENBQUMsT0FBMkIsRUFBRSxLQUFZO1FBQzVFLElBQUksTUFBTSxrQkFBa0IsRUFBRSxJQUFJLE9BQU8sWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUM3RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ3ZELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDL0YsTUFBTSxPQUFPLEdBQXVCLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO2tJQTlCVSxzQkFBc0I7c0lBQXRCLHNCQUFzQixjQUZyQixNQUFNOzs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVzdHJveVJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIHRha2VVbnRpbERlc3Ryb3llZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgQnJvd3Nlcixcbn0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7XG4gIGZyb21FdmVudCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBpc0NhcGFjaXRvckNvbnRleHQsXG59IGZyb20gJy4vaGVscGVycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENhcGFjaXRvclRhcmdldFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgaGlqYWNrRG9uZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgYXN5bmMgb3BlbkluQ2FwYWNpdG9yQnJvd3NlcihlbGVtZW50OiBFdmVudFRhcmdldCB8IG51bGwsIGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChhd2FpdCBpc0NhcGFjaXRvckNvbnRleHQoKSAmJiBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFyZ2V0JykgPT09ICdfYmxhbmsnICYmIHVybCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYXdhaXQgQnJvd3Nlci5vcGVuKHsgdXJsLCBwcmVzZW50YXRpb25TdHlsZTogJ3BvcG92ZXInIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLm9wZW5JbkNhcGFjaXRvckJyb3dzZXIoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgZm9yICdoaWphY2tpbmcnIHRoZSBjbGljayBldmVudCBvbiA8YT4gdGFncyB3aXRoIHRhcmdldCBfYmxhbmsgYXR0cmlidXRlLlxuICAgKiBJbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvbiwgaXQgd2lsbCBvcGVuIHRoZSBVUkwgdXNpbmcgdGhlIENhcGFjaXRvckpTIEJyb3dzZXIgcGx1Z2luLlxuICAgKi9cbiAgcHVibGljIGhpamFja0NsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oaWphY2tEb25lKSB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudDogRXZlbnRUYXJnZXQgfCBudWxsID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBhd2FpdCB0aGlzLm9wZW5JbkNhcGFjaXRvckJyb3dzZXIoZWxlbWVudCwgZXZlbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmhpamFja0RvbmUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,5 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, InjectionToken, Inject, NgModule } from '@angular/core';
2
+ import { inject, DestroyRef, Injectable, InjectionToken, Inject, NgModule } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
4
  import { Browser } from '@capacitor/browser';
4
5
  import { fromEvent } from 'rxjs';
5
6
  import { Device } from '@capacitor/device';
@@ -44,7 +45,8 @@ async function getBaseUrl() {
44
45
 
45
46
  class CapacitorTargetService {
46
47
  constructor() {
47
- this.subscriptions = [];
48
+ this.destroyRef = inject(DestroyRef);
49
+ this.hijackDone = false;
48
50
  }
49
51
  async openInCapacitorBrowser(element, event) {
50
52
  if (await isCapacitorContext() && element instanceof Element) {
@@ -65,16 +67,14 @@ class CapacitorTargetService {
65
67
  * Instead of the default action, it will open the URL using the CapacitorJS Browser plugin.
66
68
  */
67
69
  hijackClick() {
68
- if (this.subscriptions.length === 0) {
69
- this.subscriptions.push(fromEvent(document, 'click').subscribe(async (event) => {
70
+ if (!this.hijackDone) {
71
+ fromEvent(document, 'click').pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (event) => {
70
72
  const element = event.target;
71
73
  await this.openInCapacitorBrowser(element, event);
72
- }));
74
+ });
75
+ this.hijackDone = true;
73
76
  }
74
77
  }
75
- ngOnDestroy() {
76
- this.subscriptions.forEach((subscription) => subscription.unsubscribe());
77
- }
78
78
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CapacitorTargetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
79
79
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CapacitorTargetService, providedIn: 'root' }); }
80
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"o3r-mobile.mjs","sources":["../../src/capacitor/helpers.ts","../../src/capacitor/capacitor-target.service.ts","../../src/capacitor/storage/rehydrater.ts","../../src/capacitor/storage/rehydrater.module.ts","../../src/capacitor/storage/storage.ts","../../src/o3r-mobile.ts"],"sourcesContent":["import {\n Device,\n} from '@capacitor/device';\n\n/**\n * Type for the 3 capacitor platforms\n */\nexport type CapacitorPlatforms = 'ios' | 'android' | 'web';\n\n/**\n * Returns the capacitor platform\n */\nexport async function getCapacitorPlatform(): Promise<CapacitorPlatforms> {\n const info = await Device.getInfo();\n return info.platform;\n}\n\n/**\n * Returns true if in a capacitor context (mobile app) or false for web\n */\nexport async function isCapacitorContext(): Promise<boolean> {\n const platform = await getCapacitorPlatform();\n return (platform === 'ios') || (platform === 'android');\n}\n\n/**\n * Returns the baseUrl that can be used depending on the platform\n */\nexport async function getBaseUrl(): Promise<string> {\n const platform = await getCapacitorPlatform();\n switch (platform) {\n case ('ios'): {\n return 'capacitor://localhost';\n }\n case ('android'): {\n return 'http://localhost';\n }\n default: {\n return window.location.href;\n }\n }\n}\n","import {\n Injectable,\n OnDestroy,\n} from '@angular/core';\nimport {\n Browser,\n} from '@capacitor/browser';\nimport {\n fromEvent,\n Subscription,\n} from 'rxjs';\nimport {\n isCapacitorContext,\n} from './helpers';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CapacitorTargetService implements OnDestroy {\n private readonly subscriptions: Subscription[] = [];\n\n private async openInCapacitorBrowser(element: EventTarget | null, event: Event) {\n if (await isCapacitorContext() && element instanceof Element) {\n if (element.tagName === 'A') {\n const url = element.getAttribute('href');\n if (element.getAttribute('target') === '_blank' && url) {\n event.preventDefault();\n await Browser.open({ url, presentationStyle: 'popover' });\n }\n } else {\n await this.openInCapacitorBrowser(element.parentElement, event);\n }\n }\n }\n\n /**\n * Method called for 'hijacking' the click event on <a> tags with target _blank attribute.\n * Instead of the default action, it will open the URL using the CapacitorJS Browser plugin.\n */\n public hijackClick(): void {\n if (this.subscriptions.length === 0) {\n this.subscriptions.push(fromEvent(document, 'click').subscribe(async (event) => {\n const element: EventTarget | null = event.target;\n await this.openInCapacitorBrowser(element, event);\n }));\n }\n }\n\n public ngOnDestroy() {\n this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n }\n}\n","import {\n Inject,\n Injectable,\n InjectionToken,\n} from '@angular/core';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n dateReviver,\n isLocalStorageConfig,\n isSerializer,\n rehydrateAction,\n StorageSyncOptions,\n} from '@o3r/store-sync';\n\n/**\n * Injection token for the storage sync options\n */\nexport const STORAGE_SYNC_OPTIONS = new InjectionToken<Partial<StorageSyncOptions>>('STORAGE_SYNC_OPTIONS');\n\nconst noopDeserializer = (raw: string) => raw;\n\n@Injectable()\nexport class CapacitorRehydrater {\n private readonly options: StorageSyncOptions;\n constructor(\n private readonly store: Store<any>,\n @Inject(STORAGE_SYNC_OPTIONS) options: Partial<StorageSyncOptions>,\n private readonly logger: LoggerService\n ) {\n this.options = { keys: [], ...options };\n }\n\n /**\n * Dispatch an action to rehydrate the store with the data from the storage\n */\n public async rehydrate() {\n if (isLocalStorageConfig(this.options)) {\n this.logger.warn('A non-async storage is used, rehydration is not supported');\n return;\n }\n const storageCalls: Promise<Record<string, any> | undefined>[] = this.options.keys\n .map(async (key) => {\n const storeName = Object.keys(key)[0];\n const storeSynchronizer = (key as any)[storeName];\n let reviver = this.options.restoreDates ? dateReviver : undefined;\n let deserialize = noopDeserializer;\n\n if (isSerializer(storeSynchronizer)) {\n if (storeSynchronizer.reviver) {\n reviver = storeSynchronizer.reviver;\n }\n if (storeSynchronizer.deserialize) {\n deserialize = storeSynchronizer.deserialize;\n }\n }\n\n const stateSlice = await this.options.storage!.getItem(\n this.options.storageKeySerializer\n ? this.options.storageKeySerializer(storeName)\n : storeName\n );\n if (stateSlice) {\n const isObjectRegex = /{|\\[/;\n let raw = stateSlice;\n\n if (stateSlice === 'null' || stateSlice === 'true' || stateSlice === 'false' || isObjectRegex.test(stateSlice.charAt(0))) {\n raw = JSON.parse(stateSlice, reviver);\n }\n\n return {\n [storeName]: deserialize(raw)\n };\n }\n });\n\n const result = await Promise.all(storageCalls);\n\n this.store.dispatch(\n rehydrateAction({\n payload: result.reduce(\n (acc: Record<string, any>, store) => ({ ...acc, ...store }),\n {}\n )\n })\n );\n }\n}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n StoreModule,\n} from '@ngrx/store';\nimport {\n LoggerModule,\n} from '@o3r/logger';\nimport type {\n StorageSyncOptions,\n} from '@o3r/store-sync';\nimport {\n CapacitorRehydrater,\n STORAGE_SYNC_OPTIONS,\n} from './rehydrater';\n\n@NgModule({\n imports: [\n StoreModule,\n LoggerModule\n ],\n providers: [\n CapacitorRehydrater\n ]\n})\nexport class CapacitorRehydraterModule {\n public static forRoot(options: StorageSyncOptions): ModuleWithProviders<CapacitorRehydraterModule> {\n return {\n ngModule: CapacitorRehydraterModule,\n providers: [\n { provide: STORAGE_SYNC_OPTIONS, useValue: options }\n ]\n };\n }\n}\n","import {\n Preferences as CapacitorStorage,\n} from '@capacitor/preferences';\nimport type {\n AsyncStorage,\n} from '@o3r/store-sync';\n\n/**\n * Capacitor storage\n */\nexport class OtterCapacitorStorage implements AsyncStorage {\n /**\n * @inheritdoc\n */\n public removeItem(key: string): void {\n void CapacitorStorage.remove({ key });\n }\n\n /**\n * @inheritdoc\n */\n public setItem(key: string, value: string): void {\n void CapacitorStorage.set({ key, value });\n }\n\n /**\n * @inheritdoc\n */\n public async getItem(key: string): Promise<string | null> {\n const { value } = await CapacitorStorage.get({ key });\n return value;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["CapacitorStorage"],"mappings":"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"}
1
+ {"version":3,"file":"o3r-mobile.mjs","sources":["../../src/capacitor/helpers.ts","../../src/capacitor/capacitor-target.service.ts","../../src/capacitor/storage/rehydrater.ts","../../src/capacitor/storage/rehydrater.module.ts","../../src/capacitor/storage/storage.ts","../../src/o3r-mobile.ts"],"sourcesContent":["import {\n Device,\n} from '@capacitor/device';\n\n/**\n * Type for the 3 capacitor platforms\n */\nexport type CapacitorPlatforms = 'ios' | 'android' | 'web';\n\n/**\n * Returns the capacitor platform\n */\nexport async function getCapacitorPlatform(): Promise<CapacitorPlatforms> {\n const info = await Device.getInfo();\n return info.platform;\n}\n\n/**\n * Returns true if in a capacitor context (mobile app) or false for web\n */\nexport async function isCapacitorContext(): Promise<boolean> {\n const platform = await getCapacitorPlatform();\n return (platform === 'ios') || (platform === 'android');\n}\n\n/**\n * Returns the baseUrl that can be used depending on the platform\n */\nexport async function getBaseUrl(): Promise<string> {\n const platform = await getCapacitorPlatform();\n switch (platform) {\n case ('ios'): {\n return 'capacitor://localhost';\n }\n case ('android'): {\n return 'http://localhost';\n }\n default: {\n return window.location.href;\n }\n }\n}\n","import {\n DestroyRef,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n Browser,\n} from '@capacitor/browser';\nimport {\n fromEvent,\n} from 'rxjs';\nimport {\n isCapacitorContext,\n} from './helpers';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CapacitorTargetService {\n private readonly destroyRef = inject(DestroyRef);\n private hijackDone = false;\n\n private async openInCapacitorBrowser(element: EventTarget | null, event: Event) {\n if (await isCapacitorContext() && element instanceof Element) {\n if (element.tagName === 'A') {\n const url = element.getAttribute('href');\n if (element.getAttribute('target') === '_blank' && url) {\n event.preventDefault();\n await Browser.open({ url, presentationStyle: 'popover' });\n }\n } else {\n await this.openInCapacitorBrowser(element.parentElement, event);\n }\n }\n }\n\n /**\n * Method called for 'hijacking' the click event on <a> tags with target _blank attribute.\n * Instead of the default action, it will open the URL using the CapacitorJS Browser plugin.\n */\n public hijackClick(): void {\n if (!this.hijackDone) {\n fromEvent(document, 'click').pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (event) => {\n const element: EventTarget | null = event.target;\n await this.openInCapacitorBrowser(element, event);\n });\n this.hijackDone = true;\n }\n }\n}\n","import {\n Inject,\n Injectable,\n InjectionToken,\n} from '@angular/core';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n dateReviver,\n isLocalStorageConfig,\n isSerializer,\n rehydrateAction,\n StorageSyncOptions,\n} from '@o3r/store-sync';\n\n/**\n * Injection token for the storage sync options\n */\nexport const STORAGE_SYNC_OPTIONS = new InjectionToken<Partial<StorageSyncOptions>>('STORAGE_SYNC_OPTIONS');\n\nconst noopDeserializer = (raw: string) => raw;\n\n@Injectable()\nexport class CapacitorRehydrater {\n private readonly options: StorageSyncOptions;\n constructor(\n private readonly store: Store<any>,\n @Inject(STORAGE_SYNC_OPTIONS) options: Partial<StorageSyncOptions>,\n private readonly logger: LoggerService\n ) {\n this.options = { keys: [], ...options };\n }\n\n /**\n * Dispatch an action to rehydrate the store with the data from the storage\n */\n public async rehydrate() {\n if (isLocalStorageConfig(this.options)) {\n this.logger.warn('A non-async storage is used, rehydration is not supported');\n return;\n }\n const storageCalls: Promise<Record<string, any> | undefined>[] = this.options.keys\n .map(async (key) => {\n const storeName = Object.keys(key)[0];\n const storeSynchronizer = (key as any)[storeName];\n let reviver = this.options.restoreDates ? dateReviver : undefined;\n let deserialize = noopDeserializer;\n\n if (isSerializer(storeSynchronizer)) {\n if (storeSynchronizer.reviver) {\n reviver = storeSynchronizer.reviver;\n }\n if (storeSynchronizer.deserialize) {\n deserialize = storeSynchronizer.deserialize;\n }\n }\n\n const stateSlice = await this.options.storage!.getItem(\n this.options.storageKeySerializer\n ? this.options.storageKeySerializer(storeName)\n : storeName\n );\n if (stateSlice) {\n const isObjectRegex = /{|\\[/;\n let raw = stateSlice;\n\n if (stateSlice === 'null' || stateSlice === 'true' || stateSlice === 'false' || isObjectRegex.test(stateSlice.charAt(0))) {\n raw = JSON.parse(stateSlice, reviver);\n }\n\n return {\n [storeName]: deserialize(raw)\n };\n }\n });\n\n const result = await Promise.all(storageCalls);\n\n this.store.dispatch(\n rehydrateAction({\n payload: result.reduce(\n (acc: Record<string, any>, store) => ({ ...acc, ...store }),\n {}\n )\n })\n );\n }\n}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n StoreModule,\n} from '@ngrx/store';\nimport {\n LoggerModule,\n} from '@o3r/logger';\nimport type {\n StorageSyncOptions,\n} from '@o3r/store-sync';\nimport {\n CapacitorRehydrater,\n STORAGE_SYNC_OPTIONS,\n} from './rehydrater';\n\n@NgModule({\n imports: [\n StoreModule,\n LoggerModule\n ],\n providers: [\n CapacitorRehydrater\n ]\n})\nexport class CapacitorRehydraterModule {\n public static forRoot(options: StorageSyncOptions): ModuleWithProviders<CapacitorRehydraterModule> {\n return {\n ngModule: CapacitorRehydraterModule,\n providers: [\n { provide: STORAGE_SYNC_OPTIONS, useValue: options }\n ]\n };\n }\n}\n","import {\n Preferences as CapacitorStorage,\n} from '@capacitor/preferences';\nimport type {\n AsyncStorage,\n} from '@o3r/store-sync';\n\n/**\n * Capacitor storage\n */\nexport class OtterCapacitorStorage implements AsyncStorage {\n /**\n * @inheritdoc\n */\n public removeItem(key: string): void {\n void CapacitorStorage.remove({ key });\n }\n\n /**\n * @inheritdoc\n */\n public setItem(key: string, value: string): void {\n void CapacitorStorage.set({ key, value });\n }\n\n /**\n * @inheritdoc\n */\n public async getItem(key: string): Promise<string | null> {\n const { value } = await CapacitorStorage.get({ key });\n return value;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["CapacitorStorage"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@o3r/mobile",
3
- "version": "11.6.0-prerelease.21",
3
+ "version": "11.6.0-prerelease.23",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -43,10 +43,10 @@
43
43
  "@capacitor/device": "^6.0.0",
44
44
  "@capacitor/preferences": "^6.0.0",
45
45
  "@ngrx/store": "~18.0.0",
46
- "@o3r/core": "^11.6.0-prerelease.21",
47
- "@o3r/logger": "^11.6.0-prerelease.21",
48
- "@o3r/schematics": "^11.6.0-prerelease.21",
49
- "@o3r/store-sync": "^11.6.0-prerelease.21",
46
+ "@o3r/core": "^11.6.0-prerelease.23",
47
+ "@o3r/logger": "^11.6.0-prerelease.23",
48
+ "@o3r/schematics": "^11.6.0-prerelease.23",
49
+ "@o3r/store-sync": "^11.6.0-prerelease.23",
50
50
  "@schematics/angular": "~18.2.0",
51
51
  "fast-deep-equal": "^3.1.3",
52
52
  "rxjs": "^7.8.1"