@sneat/space-services 0.25.0 → 0.26.1

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/esm2022/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  export * from './lib/services/space-service.module';
2
+ export * from './lib/services/space-nav-service.interface';
3
+ /** @deprecated see the class's own JSDoc for the migration path. */
2
4
  export * from './lib/services/space-nav.service';
3
5
  export * from './lib/services/space.service';
4
6
  export * from './lib/services/space-item.service';
5
7
  export * from './lib/services/space-context.service';
6
8
  export * from './lib/services/space-module.service';
9
+ /** @deprecated hard-depends on the deprecated `SpaceNavService`. */
7
10
  export * from './lib/components/with-space-input.directive';
8
11
  export * from './lib/guards/space-home-redirect.guard';
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/space/services/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6CAA6C,CAAC;AAE5D,cAAc,wCAAwC,CAAC","sourcesContent":["export * from './lib/services/space-service.module';\nexport * from './lib/services/space-nav.service';\nexport * from './lib/services/space.service';\nexport * from './lib/services/space-item.service';\nexport * from './lib/services/space-context.service';\nexport * from './lib/services/space-module.service';\n\nexport * from './lib/components/with-space-input.directive';\n\nexport * from './lib/guards/space-home-redirect.guard';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/space/services/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,4CAA4C,CAAC;AAE3D,oEAAoE;AACpE,cAAc,kCAAkC,CAAC;AAEjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AAEpD,oEAAoE;AACpE,cAAc,6CAA6C,CAAC;AAE5D,cAAc,wCAAwC,CAAC","sourcesContent":["export * from './lib/services/space-service.module';\nexport * from './lib/services/space-nav-service.interface';\n\n/** @deprecated see the class's own JSDoc for the migration path. */\nexport * from './lib/services/space-nav.service';\n\nexport * from './lib/services/space.service';\nexport * from './lib/services/space-item.service';\nexport * from './lib/services/space-context.service';\nexport * from './lib/services/space-module.service';\n\n/** @deprecated hard-depends on the deprecated `SpaceNavService`. */\nexport * from './lib/components/with-space-input.directive';\n\nexport * from './lib/guards/space-home-redirect.guard';\n"]}
@@ -7,17 +7,21 @@ export class WithSpaceInput extends SneatBaseComponent {
7
7
  constructor() {
8
8
  super();
9
9
  this.spaceNavService = inject(SpaceNavService);
10
- this.$space = input.required(...(ngDevMode ? [{ debugName: "$space" }] : []));
11
- this.$spaceID = computed(() => this.$space().id, ...(ngDevMode ? [{ debugName: "$spaceID" }] : []));
10
+ this.$space = input.required(/* @ts-ignore */
11
+ ...(ngDevMode ? [{ debugName: "$space" }] : /* istanbul ignore next */ []));
12
+ this.$spaceID = computed(() => this.$space().id, /* @ts-ignore */
13
+ ...(ngDevMode ? [{ debugName: "$spaceID" }] : /* istanbul ignore next */ []));
12
14
  this.spaceIDChanged = new BehaviorSubject(undefined);
13
15
  this.spaceID$ = this.spaceIDChanged
14
16
  .asObservable()
15
17
  .pipe(this.takeUntilDestroyed(), distinctUntilChanged());
16
- this.$spaceType = computed(() => this.$space().type, ...(ngDevMode ? [{ debugName: "$spaceType" }] : []));
18
+ this.$spaceType = computed(() => this.$space().type, /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "$spaceType" }] : /* istanbul ignore next */ []));
17
20
  this.$spaceRef = computed(() => ({
18
21
  id: this.$spaceID(),
19
22
  type: this.$spaceType(),
20
- }), ...(ngDevMode ? [{ debugName: "$spaceRef" }] : []));
23
+ }), /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "$spaceRef" }] : /* istanbul ignore next */ []));
21
25
  effect(() => {
22
26
  const spaceID = this.$spaceID();
23
27
  if (spaceID !== this.spaceIDChanged.value) {
@@ -28,10 +32,10 @@ export class WithSpaceInput extends SneatBaseComponent {
28
32
  onSpaceIdChanged(spaceID) {
29
33
  this.spaceIDChanged.next(spaceID);
30
34
  }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: WithSpaceInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
32
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: WithSpaceInput, isStandalone: true, inputs: { $space: { classPropertyName: "$space", publicName: "$space", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: WithSpaceInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.3", type: WithSpaceInput, isStandalone: true, inputs: { $space: { classPropertyName: "$space", publicName: "$space", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
33
37
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: WithSpaceInput, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: WithSpaceInput, decorators: [{
35
39
  type: Directive
36
40
  }], ctorParameters: () => [], propDecorators: { $space: [{ type: i0.Input, args: [{ isSignal: true, alias: "$space", required: true }] }] } });
37
41
  //# sourceMappingURL=with-space-input.directive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-space-input.directive.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/components/with-space-input.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;;AAGhE,MAAM,OAAgB,cAAe,SAAQ,kBAAkB;IAmB7D;QACE,KAAK,EAAE,CAAC;QAnBS,oBAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAE7C,WAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB,CAAC;QAEtC,aAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,oDAAC,CAAC;QAC9C,mBAAc,GAAG,IAAI,eAAe,CACnD,SAAS,CACV,CAAC;QACQ,aAAQ,GAAG,IAAI,CAAC,cAAc;aACrC,YAAY,EAAE;aACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAExC,eAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,sDAAC,CAAC;QAChD,cAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7C,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE;YACnB,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;SACxB,CAAC,qDAAC,CAAC;QAIF,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAES,gBAAgB,CAAC,OAAe;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;8GA/BmB,cAAc;kGAAd,cAAc;;2FAAd,cAAc;kBADnC,SAAS","sourcesContent":["import { computed, Directive, effect, inject, input } from '@angular/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SneatBaseComponent } from '@sneat/ui';\nimport { BehaviorSubject, distinctUntilChanged } from 'rxjs';\nimport { SpaceNavService } from '../services/space-nav.service';\n\n@Directive()\nexport abstract class WithSpaceInput extends SneatBaseComponent {\n protected readonly spaceNavService = inject(SpaceNavService);\n\n public readonly $space = input.required<ISpaceContext>();\n\n protected readonly $spaceID = computed(() => this.$space().id);\n private readonly spaceIDChanged = new BehaviorSubject<string | undefined>(\n undefined,\n );\n protected spaceID$ = this.spaceIDChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged());\n\n protected readonly $spaceType = computed(() => this.$space().type);\n protected readonly $spaceRef = computed(() => ({\n id: this.$spaceID(),\n type: this.$spaceType(),\n }));\n\n constructor() {\n super();\n effect(() => {\n const spaceID = this.$spaceID();\n if (spaceID !== this.spaceIDChanged.value) {\n this.onSpaceIdChanged(spaceID);\n }\n });\n }\n\n protected onSpaceIdChanged(spaceID: string): void {\n this.spaceIDChanged.next(spaceID);\n }\n}\n"]}
1
+ {"version":3,"file":"with-space-input.directive.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/components/with-space-input.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;;AAGhE,MAAM,OAAgB,cAAe,SAAQ,kBAAkB;IAmB7D;QACE,KAAK,EAAE,CAAC;QAnBS,oBAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAE7C,WAAM,GAAG,KAAK,CAAC,QAAQ;mFAAiB,CAAC;QAEtC,aAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;qFAAC,CAAC;QAC9C,mBAAc,GAAG,IAAI,eAAe,CACnD,SAAS,CACV,CAAC;QACQ,aAAQ,GAAG,IAAI,CAAC,cAAc;aACrC,YAAY,EAAE;aACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAExC,eAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI;uFAAC,CAAC;QAChD,cAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7C,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE;YACnB,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;SACxB,CAAC;sFAAC,CAAC;QAIF,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAES,gBAAgB,CAAC,OAAe;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;8GA/BmB,cAAc;kGAAd,cAAc;;2FAAd,cAAc;kBADnC,SAAS","sourcesContent":["import { computed, Directive, effect, inject, input } from '@angular/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SneatBaseComponent } from '@sneat/ui';\nimport { BehaviorSubject, distinctUntilChanged } from 'rxjs';\nimport { SpaceNavService } from '../services/space-nav.service';\n\n@Directive()\nexport abstract class WithSpaceInput extends SneatBaseComponent {\n protected readonly spaceNavService = inject(SpaceNavService);\n\n public readonly $space = input.required<ISpaceContext>();\n\n protected readonly $spaceID = computed(() => this.$space().id);\n private readonly spaceIDChanged = new BehaviorSubject<string | undefined>(\n undefined,\n );\n protected spaceID$ = this.spaceIDChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged());\n\n protected readonly $spaceType = computed(() => this.$space().type);\n protected readonly $spaceRef = computed(() => ({\n id: this.$spaceID(),\n type: this.$spaceType(),\n }));\n\n constructor() {\n super();\n effect(() => {\n const spaceID = this.$spaceID();\n if (spaceID !== this.spaceIDChanged.value) {\n this.onSpaceIdChanged(spaceID);\n }\n });\n }\n\n protected onSpaceIdChanged(spaceID: string): void {\n this.spaceIDChanged.next(spaceID);\n }\n}\n"]}
@@ -4,10 +4,10 @@ import { map } from 'rxjs/operators';
4
4
  import { parseSpaceType } from '@sneat/core';
5
5
  import * as i0 from "@angular/core";
6
6
  export class SpaceContextService {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceContextService, providedIn: 'root' }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceContextService, providedIn: 'root' }); }
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceContextService, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceContextService, decorators: [{
11
11
  type: Injectable,
12
12
  args: [{
13
13
  providedIn: 'root',
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const SPACE_NAV_SERVICE = new InjectionToken('SpaceNavService');
3
+ //# sourceMappingURL=space-nav-service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-nav-service.interface.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-nav-service.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAsE/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,cAAc,CACjD,iBAAiB,CAClB,CAAC","sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { IIdAndBrief } from '@sneat/core';\nimport { IRecord } from '@sneat/data';\nimport { ISpaceDbo } from '@sneat/dto';\nimport { IMemberBrief } from '@sneat/extension-contactus-contract';\nimport { ISpaceContext } from '@sneat/space-models';\n\n/**\n * Neutral push/pop transition hint. Framework-agnostic replacement for\n * Ionic's `NavController.animationDirection`: an Ionic-backed\n * `ISpaceNavService` implementation uses it to pick `navigateRoot` vs\n * `navigateForward`; a plain-Angular `Router`-backed implementation ignores\n * it.\n */\nexport type SpaceNavDirection = 'forward' | 'back';\n\nexport interface INavigateToLoginOptions {\n readonly returnTo?: string;\n readonly queryParams?: Params;\n}\n\nexport interface ISpaceNavOptions {\n readonly queryParams?: Params;\n readonly state?: Record<string, unknown>;\n}\n\n/**\n * Semantic space-navigation contract. Implementations own the actual\n * mechanism (Ionic `NavController` nav-stack, or plain Angular `Router`) so\n * that callers and route-agnostic libraries never import a component\n * library.\n *\n * Apps provide a concrete implementation via DI — e.g.\n * `provideSpaceNavIonicInternal()` from `@sneat/space-nav-ionic` for an\n * Ionic app shell, or `provideSpaceNavRouterInternal()` from\n * `@sneat/space-nav-router` for a PrimeNG / non-Ionic app.\n */\nexport interface ISpaceNavService {\n navigateToSpaces(direction?: SpaceNavDirection): void;\n\n navigateToLogin(options?: INavigateToLoginOptions): void;\n\n navigateToUserProfile(): void;\n\n navigateToSpace(\n space: ISpaceContext,\n direction?: SpaceNavDirection,\n ): Promise<boolean>;\n\n navigateToMember(\n space: ISpaceContext,\n memberInfo: IIdAndBrief<IMemberBrief>,\n ): void;\n\n navigateToAddMetric(team: IRecord<ISpaceDbo>): void;\n\n navigateBackToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions?: ISpaceNavOptions,\n ): Promise<boolean>;\n\n navigateForwardToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions?: ISpaceNavOptions,\n ): Promise<boolean>;\n}\n\nexport const SPACE_NAV_SERVICE = new InjectionToken<ISpaceNavService>(\n 'SpaceNavService',\n);\n"]}
@@ -1,8 +1,22 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
- import { NavController } from '@ionic/angular';
2
+ import { NavController } from '@ionic/angular/lazy';
3
3
  import { AnalyticsService } from '@sneat/core';
4
4
  import { ErrorLogger } from '@sneat/core';
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * @deprecated Concrete, Ionic-coupled nav service. Kept for backward
8
+ * compatibility — a currently-published dependency of this monorepo
9
+ * (`@sneat/extension-contactus-ui@0.13.7`) still imports this class and
10
+ * `WithSpaceInput` directly from `@sneat/space-services`, so it cannot be
11
+ * removed from this package's public entry point without breaking that
12
+ * consumer; see the PR description for the full trade-off.
13
+ *
14
+ * New code should depend on `ISpaceNavService` (the `SPACE_NAV_SERVICE`
15
+ * injection token, also exported from this package) and have the app
16
+ * provide an implementation via `provideSpaceNavIonicInternal()` from
17
+ * `@sneat/space-nav-ionic`, or `provideSpaceNavRouterInternal()` from
18
+ * `@sneat/space-nav-router` for non-Ionic apps.
19
+ */
6
20
  export class SpaceNavService {
7
21
  constructor() {
8
22
  this.errorLogger = inject(ErrorLogger);
@@ -85,10 +99,10 @@ export class SpaceNavService {
85
99
  .navigateForward(url, navOptions)
86
100
  .catch((err) => this.errorLogger.logError(err, 'Failed to navigate to: ' + url));
87
101
  }
88
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
89
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceNavService, providedIn: 'root' }); }
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
103
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceNavService, providedIn: 'root' }); }
90
104
  }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceNavService, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceNavService, decorators: [{
92
106
  type: Injectable,
93
107
  args: [{
94
108
  providedIn: 'root',
@@ -1 +1 @@
1
- {"version":3,"file":"space-nav.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-nav.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { NavController } from '@ionic/angular';\nimport { AnalyticsService, IAnalyticsService, IIdAndBrief, ISpaceRef } from '@sneat/core';\nimport { IMemberBrief } from '@sneat/extension-contactus-contract';\n\ntype NavigationOptions = NonNullable<\n Parameters<NavController['navigateRoot']>[1]\n>;\nimport { IRecord } from '@sneat/data';\nimport { ISpaceDbo } from '@sneat/dto';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\n\nexport type ScrumPageTab = 'team' | 'my' | 'risks' | 'qna';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpaceNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly navController = inject(NavController);\n private readonly analyticsService =\n inject<IAnalyticsService>(AnalyticsService);\n\n public navigateToSpaces(animationDirection?: 'forward' | 'back'): void {\n this.analyticsService.logEvent('navigateToTeams');\n this.navController\n .navigateRoot('spaces', { animationDirection })\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to navigate to teams page'),\n );\n }\n\n public navigateToLogin(options?: {\n returnTo?: string;\n queryParams?: Params;\n // fragment?: string;\n }): void {\n\n // Do not log `returnTo` as it might holds sensitive info\n this.analyticsService.logEvent('navigateToLogin');\n\n const navOptions: NavigationOptions = {\n queryParams: options?.queryParams,\n animationDirection: 'back',\n };\n if (options?.returnTo) {\n navOptions.fragment = options.returnTo;\n }\n this.navController\n .navigateRoot('login', navOptions)\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to navigate to login page'),\n );\n }\n\n public navigateToUserProfile(): void {\n this.analyticsService.logEvent('navigateToUserProfile');\n this.navController\n .navigateRoot('user-profile')\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to naviage to user profile'),\n );\n }\n\n public navigateToSpace(\n space: ISpaceContext,\n animationDirection?: 'forward' | 'back',\n ): Promise<boolean> {\n this.analyticsService.logEvent('navigateToSpace', { spaceID: space.id });\n const url = `space/${space.type || space.brief?.type}/${space.id}`;\n return new Promise<boolean>((resolve, reject) => {\n this.navController\n .navigateRoot(url, {\n state: { space },\n animationDirection,\n })\n .then(resolve)\n .catch((err) => {\n this.errorLogger.logError(\n err,\n 'Failed to navigate to team overview page with URL: ' + url,\n );\n reject(err);\n });\n });\n }\n\n public navigateToMember(\n space: ISpaceContext,\n memberInfo: IIdAndBrief<IMemberBrief>,\n ): void {\n const id = `${space.id}:${memberInfo.id}`;\n this.navForward(\n this.navController,\n 'member',\n {\n queryParams: { id },\n state: { space, memberInfo },\n },\n );\n }\n\n public navigateToAddMetric = (\n navController: NavController,\n team: IRecord<ISpaceDbo>,\n ): void =>\n this.navToSpacePage(\n navController,\n team,\n 'add-metric',\n 'navigateToAddMetric',\n );\n\n public navigateBackToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions: NavigationOptions = {},\n ): Promise<boolean> {\n navOptions.animationDirection = 'back';\n return this.navigateToSpacePage(space, page, navOptions);\n }\n\n public navigateForwardToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions: NavigationOptions = {},\n ): Promise<boolean> {\n navOptions.animationDirection = 'forward';\n return this.navigateToSpacePage(space, page, navOptions);\n }\n\n private navigateToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions: NavigationOptions,\n ): Promise<boolean> {\n const url = `space/${space?.type}/${space?.id}/${page}`;\n const state = navOptions.state || {};\n navOptions = { ...navOptions, state: { space, ...state } };\n return this.navController.navigateForward(url, navOptions);\n }\n\n private navForward(\n navController: NavController,\n url: string,\n navOptions: NavigationOptions,\n // _analyticsEvent: { name: string; params?: Record<string, unknown> },\n ): void {\n navController = navController || this.navController;\n // this.analyticsService.logEvent(analyticsEvent.name, analyticsEvent.params);\n navController\n .navigateForward(url, navOptions)\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to navigate to: ' + url),\n );\n }\n\n private navToSpacePage = (\n navController: NavController,\n space: ISpaceRef,\n url: string,\n eventName: string,\n params?: Record<string, unknown>,\n ): void => {\n params = { ...params, space: space.id };\n this.analyticsService.logEvent(eventName, params);\n this.navForward(\n navController,\n url,\n { queryParams: params, state: { space } },\n );\n };\n}\n"]}
1
+ {"version":3,"file":"space-nav.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-nav.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { NavController } from '@ionic/angular/lazy';\nimport { AnalyticsService, IAnalyticsService, IIdAndBrief, ISpaceRef } from '@sneat/core';\nimport { IMemberBrief } from '@sneat/extension-contactus-contract';\n\ntype NavigationOptions = NonNullable<\n Parameters<NavController['navigateRoot']>[1]\n>;\nimport { IRecord } from '@sneat/data';\nimport { ISpaceDbo } from '@sneat/dto';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\n\nexport type ScrumPageTab = 'team' | 'my' | 'risks' | 'qna';\n\n/**\n * @deprecated Concrete, Ionic-coupled nav service. Kept for backward\n * compatibility — a currently-published dependency of this monorepo\n * (`@sneat/extension-contactus-ui@0.13.7`) still imports this class and\n * `WithSpaceInput` directly from `@sneat/space-services`, so it cannot be\n * removed from this package's public entry point without breaking that\n * consumer; see the PR description for the full trade-off.\n *\n * New code should depend on `ISpaceNavService` (the `SPACE_NAV_SERVICE`\n * injection token, also exported from this package) and have the app\n * provide an implementation via `provideSpaceNavIonicInternal()` from\n * `@sneat/space-nav-ionic`, or `provideSpaceNavRouterInternal()` from\n * `@sneat/space-nav-router` for non-Ionic apps.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SpaceNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly navController = inject(NavController);\n private readonly analyticsService =\n inject<IAnalyticsService>(AnalyticsService);\n\n public navigateToSpaces(animationDirection?: 'forward' | 'back'): void {\n this.analyticsService.logEvent('navigateToTeams');\n this.navController\n .navigateRoot('spaces', { animationDirection })\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to navigate to teams page'),\n );\n }\n\n public navigateToLogin(options?: {\n returnTo?: string;\n queryParams?: Params;\n // fragment?: string;\n }): void {\n\n // Do not log `returnTo` as it might holds sensitive info\n this.analyticsService.logEvent('navigateToLogin');\n\n const navOptions: NavigationOptions = {\n queryParams: options?.queryParams,\n animationDirection: 'back',\n };\n if (options?.returnTo) {\n navOptions.fragment = options.returnTo;\n }\n this.navController\n .navigateRoot('login', navOptions)\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to navigate to login page'),\n );\n }\n\n public navigateToUserProfile(): void {\n this.analyticsService.logEvent('navigateToUserProfile');\n this.navController\n .navigateRoot('user-profile')\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to naviage to user profile'),\n );\n }\n\n public navigateToSpace(\n space: ISpaceContext,\n animationDirection?: 'forward' | 'back',\n ): Promise<boolean> {\n this.analyticsService.logEvent('navigateToSpace', { spaceID: space.id });\n const url = `space/${space.type || space.brief?.type}/${space.id}`;\n return new Promise<boolean>((resolve, reject) => {\n this.navController\n .navigateRoot(url, {\n state: { space },\n animationDirection,\n })\n .then(resolve)\n .catch((err) => {\n this.errorLogger.logError(\n err,\n 'Failed to navigate to team overview page with URL: ' + url,\n );\n reject(err);\n });\n });\n }\n\n public navigateToMember(\n space: ISpaceContext,\n memberInfo: IIdAndBrief<IMemberBrief>,\n ): void {\n const id = `${space.id}:${memberInfo.id}`;\n this.navForward(\n this.navController,\n 'member',\n {\n queryParams: { id },\n state: { space, memberInfo },\n },\n );\n }\n\n public navigateToAddMetric = (\n navController: NavController,\n team: IRecord<ISpaceDbo>,\n ): void =>\n this.navToSpacePage(\n navController,\n team,\n 'add-metric',\n 'navigateToAddMetric',\n );\n\n public navigateBackToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions: NavigationOptions = {},\n ): Promise<boolean> {\n navOptions.animationDirection = 'back';\n return this.navigateToSpacePage(space, page, navOptions);\n }\n\n public navigateForwardToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions: NavigationOptions = {},\n ): Promise<boolean> {\n navOptions.animationDirection = 'forward';\n return this.navigateToSpacePage(space, page, navOptions);\n }\n\n private navigateToSpacePage(\n space: ISpaceContext,\n page: string,\n navOptions: NavigationOptions,\n ): Promise<boolean> {\n const url = `space/${space?.type}/${space?.id}/${page}`;\n const state = navOptions.state || {};\n navOptions = { ...navOptions, state: { space, ...state } };\n return this.navController.navigateForward(url, navOptions);\n }\n\n private navForward(\n navController: NavController,\n url: string,\n navOptions: NavigationOptions,\n // _analyticsEvent: { name: string; params?: Record<string, unknown> },\n ): void {\n navController = navController || this.navController;\n // this.analyticsService.logEvent(analyticsEvent.name, analyticsEvent.params);\n navController\n .navigateForward(url, navOptions)\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to navigate to: ' + url),\n );\n }\n\n private navToSpacePage = (\n navController: NavController,\n space: ISpaceRef,\n url: string,\n eventName: string,\n params?: Record<string, unknown>,\n ): void => {\n params = { ...params, space: space.id };\n this.analyticsService.logEvent(eventName, params);\n this.navForward(\n navController,\n url,\n { queryParams: params, state: { space } },\n );\n };\n}\n"]}
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
2
2
  import { SpaceService } from './space.service';
3
3
  import * as i0 from "@angular/core";
4
4
  export class SpaceServiceModule {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SpaceServiceModule }); }
7
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceServiceModule, providers: [SpaceService] }); }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.3", ngImport: i0, type: SpaceServiceModule }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceServiceModule, providers: [SpaceService] }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceServiceModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceServiceModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  providers: [SpaceService],
@@ -200,10 +200,10 @@ export class SpaceService {
200
200
  this.errorLogger.logError(e, 'SpaceService failed to unsubscribe');
201
201
  }
202
202
  }
203
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
204
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceService }); }
203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
204
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceService }); }
205
205
  }
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceService, decorators: [{
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SpaceService, decorators: [{
207
207
  type: Injectable
208
208
  }], ctorParameters: () => [] });
209
209
  //# sourceMappingURL=space.service.js.map
package/index.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  export * from './lib/services/space-service.module';
2
+ export * from './lib/services/space-nav-service.interface';
3
+ /** @deprecated see the class's own JSDoc for the migration path. */
2
4
  export * from './lib/services/space-nav.service';
3
5
  export * from './lib/services/space.service';
4
6
  export * from './lib/services/space-item.service';
5
7
  export * from './lib/services/space-context.service';
6
8
  export * from './lib/services/space-module.service';
9
+ /** @deprecated hard-depends on the deprecated `SpaceNavService`. */
7
10
  export * from './lib/components/with-space-input.directive';
8
11
  export * from './lib/guards/space-home-redirect.guard';
@@ -0,0 +1,45 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { Params } from '@angular/router';
3
+ import { IIdAndBrief } from '@sneat/core';
4
+ import { IRecord } from '@sneat/data';
5
+ import { ISpaceDbo } from '@sneat/dto';
6
+ import { IMemberBrief } from '@sneat/extension-contactus-contract';
7
+ import { ISpaceContext } from '@sneat/space-models';
8
+ /**
9
+ * Neutral push/pop transition hint. Framework-agnostic replacement for
10
+ * Ionic's `NavController.animationDirection`: an Ionic-backed
11
+ * `ISpaceNavService` implementation uses it to pick `navigateRoot` vs
12
+ * `navigateForward`; a plain-Angular `Router`-backed implementation ignores
13
+ * it.
14
+ */
15
+ export type SpaceNavDirection = 'forward' | 'back';
16
+ export interface INavigateToLoginOptions {
17
+ readonly returnTo?: string;
18
+ readonly queryParams?: Params;
19
+ }
20
+ export interface ISpaceNavOptions {
21
+ readonly queryParams?: Params;
22
+ readonly state?: Record<string, unknown>;
23
+ }
24
+ /**
25
+ * Semantic space-navigation contract. Implementations own the actual
26
+ * mechanism (Ionic `NavController` nav-stack, or plain Angular `Router`) so
27
+ * that callers and route-agnostic libraries never import a component
28
+ * library.
29
+ *
30
+ * Apps provide a concrete implementation via DI — e.g.
31
+ * `provideSpaceNavIonicInternal()` from `@sneat/space-nav-ionic` for an
32
+ * Ionic app shell, or `provideSpaceNavRouterInternal()` from
33
+ * `@sneat/space-nav-router` for a PrimeNG / non-Ionic app.
34
+ */
35
+ export interface ISpaceNavService {
36
+ navigateToSpaces(direction?: SpaceNavDirection): void;
37
+ navigateToLogin(options?: INavigateToLoginOptions): void;
38
+ navigateToUserProfile(): void;
39
+ navigateToSpace(space: ISpaceContext, direction?: SpaceNavDirection): Promise<boolean>;
40
+ navigateToMember(space: ISpaceContext, memberInfo: IIdAndBrief<IMemberBrief>): void;
41
+ navigateToAddMetric(team: IRecord<ISpaceDbo>): void;
42
+ navigateBackToSpacePage(space: ISpaceContext, page: string, navOptions?: ISpaceNavOptions): Promise<boolean>;
43
+ navigateForwardToSpacePage(space: ISpaceContext, page: string, navOptions?: ISpaceNavOptions): Promise<boolean>;
44
+ }
45
+ export declare const SPACE_NAV_SERVICE: InjectionToken<ISpaceNavService>;
@@ -1,5 +1,5 @@
1
1
  import { Params } from '@angular/router';
2
- import { NavController } from '@ionic/angular';
2
+ import { NavController } from '@ionic/angular/lazy';
3
3
  import { IIdAndBrief } from '@sneat/core';
4
4
  import { IMemberBrief } from '@sneat/extension-contactus-contract';
5
5
  import { IRecord } from '@sneat/data';
@@ -8,6 +8,20 @@ import { ISpaceContext } from '@sneat/space-models';
8
8
  import * as i0 from "@angular/core";
9
9
  type NavigationOptions = NonNullable<Parameters<NavController['navigateRoot']>[1]>;
10
10
  export type ScrumPageTab = 'team' | 'my' | 'risks' | 'qna';
11
+ /**
12
+ * @deprecated Concrete, Ionic-coupled nav service. Kept for backward
13
+ * compatibility — a currently-published dependency of this monorepo
14
+ * (`@sneat/extension-contactus-ui@0.13.7`) still imports this class and
15
+ * `WithSpaceInput` directly from `@sneat/space-services`, so it cannot be
16
+ * removed from this package's public entry point without breaking that
17
+ * consumer; see the PR description for the full trade-off.
18
+ *
19
+ * New code should depend on `ISpaceNavService` (the `SPACE_NAV_SERVICE`
20
+ * injection token, also exported from this package) and have the app
21
+ * provide an implementation via `provideSpaceNavIonicInternal()` from
22
+ * `@sneat/space-nav-ionic`, or `provideSpaceNavRouterInternal()` from
23
+ * `@sneat/space-nav-router` for non-Ionic apps.
24
+ */
11
25
  export declare class SpaceNavService {
12
26
  private readonly errorLogger;
13
27
  private readonly navController;
package/package.json CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "name": "@sneat/space-services",
3
- "version": "0.25.0",
3
+ "version": "0.26.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "peerDependencies": {
8
- "@angular/common": ">=21.0.0",
9
- "@angular/core": ">=21.0.0",
10
- "@ionic/angular": ">=8",
8
+ "@angular/common": ">=22.0.0 <23.0.0",
9
+ "@angular/core": ">=22.0.0 <23.0.0",
10
+ "@ionic/angular": ">=9.0.0 <10.0.0",
11
11
  "firebase": "*",
12
12
  "@angular/fire": ">=20",
13
13
  "@sneat/extension-contactus-contract": "^0.12.0"
14
14
  },
15
+ "peerDependenciesMeta": {
16
+ "@ionic/angular": {
17
+ "optional": true
18
+ }
19
+ },
15
20
  "dependencies": {
16
21
  "tslib": "2.8.1"
17
22
  },
@@ -26,5 +31,6 @@
26
31
  "default": "./esm2022/sneat-space-services.js"
27
32
  }
28
33
  },
29
- "sideEffects": false
34
+ "sideEffects": false,
35
+ "type": "module"
30
36
  }