@sneat/space-services 0.26.6 → 0.27.0
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/lib/services/space-item.service.js +1 -1
- package/esm2022/lib/services/space-item.service.js.map +1 -1
- package/esm2022/lib/services/space-module.service.js +1 -1
- package/esm2022/lib/services/space-module.service.js.map +1 -1
- package/esm2022/lib/services/space.service.js +1 -1
- package/esm2022/lib/services/space.service.js.map +1 -1
- package/lib/services/space-item.service.d.ts +1 -1
- package/lib/services/space-module.service.d.ts +1 -1
- package/package.json +1 -2
- package/tsconfig.lib.prod.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runInInjectionContext } from '@angular/core';
|
|
2
|
-
import { doc, collection, } from '
|
|
2
|
+
import { doc, collection, } from 'firebase/firestore';
|
|
3
3
|
import { SneatFirestoreService } from '@sneat/api';
|
|
4
4
|
import { map } from 'rxjs/operators';
|
|
5
5
|
class SpaceItemBaseService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-item.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-item.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injector, runInInjectionContext } from '@angular/core';\nimport {\n Firestore as AngularFirestore,\n doc,\n collection,\n CollectionReference,\n} from '@angular/fire/firestore';\nimport { QuerySnapshot } from '@firebase/firestore-types';\nimport { IQueryArgs, SneatApiService, SneatFirestoreService } from '@sneat/api';\nimport {\n IIdAndBriefAndDbo,\n IIdAndOptionalBriefAndOptionalDbo,\n ISpaceItemWithBriefAndDbo,\n ISpaceRef,\n} from '@sneat/core';\nimport { ISpaceDbo } from '@sneat/dto';\nimport { ISpaceItemNavContext, ISpaceRequest } from '@sneat/space-models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\ntype ICreateSpaceItemResponse<\n Brief,\n Dbo extends Brief,\n> = ISpaceItemWithBriefAndDbo<Brief, Dbo>;\n\nabstract class SpaceItemBaseService<Brief, Dbo extends Brief> {\n protected readonly sfs: SneatFirestoreService<Brief, Dbo>;\n\n protected constructor(\n protected readonly injector: Injector,\n public readonly collectionName: string,\n public readonly afs: AngularFirestore,\n public readonly sneatApiService: SneatApiService,\n ) {\n if (!this.collectionName) {\n throw new Error('collectionName is required');\n }\n this.sfs = new SneatFirestoreService<Brief, Dbo>(this.injector);\n }\n\n private _collectionRef?: CollectionReference<Dbo>;\n\n protected abstract collectionRef<Dbo2 extends Dbo>(\n spaceID: string,\n ): CollectionReference<Dbo2>;\n\n public watchSpaceItemByIdWithSpaceRef<Dbo2 extends Dbo>(\n space: ISpaceRef,\n itemID: string,\n ): Observable<ISpaceItemNavContext<Brief, Dbo2>> {\n\n if (!space.id) {\n throw new Error('spaceID is required');\n }\n let collectionRef: CollectionReference<Dbo2>;\n if (this._collectionRef?.id == space.id) {\n collectionRef = this._collectionRef as CollectionReference<Dbo2>;\n } else {\n collectionRef = this.collectionRef<Dbo2>(space.id);\n this._collectionRef = collectionRef;\n }\n return runInInjectionContext(this.injector, () =>\n this.sfs\n .watchByID(collectionRef, itemID)\n .pipe(map((o) => ({ space, ...o }))),\n );\n }\n\n protected queryItems<Dbo2 extends Dbo>(\n collectionRef: CollectionReference<Dbo2>,\n queryArgs?: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n const $querySnapshot = this.sfs.watchSnapshotsByFilter<Dbo2>(\n collectionRef,\n queryArgs,\n );\n return $querySnapshot.pipe(\n map((querySnapshot) => {\n return this.mapQueryItem<Dbo2>(\n querySnapshot as unknown as QuerySnapshot<Dbo2>,\n );\n }),\n );\n }\n\n protected mapQueryItem<Dbo2 extends Dbo>(\n querySnapshot: QuerySnapshot<Dbo2>,\n ): IIdAndBriefAndDbo<Brief, Dbo2>[] {\n return querySnapshot.docs.map((docSnapshot) => {\n const dto = docSnapshot.data();\n const { id } = docSnapshot;\n const brief: Brief = dto;\n return { id, brief, dbo: dto };\n });\n }\n\n public deleteSpaceItem<Response>(\n endpoint: string,\n request: ISpaceRequest,\n ): Observable<Response> {\n return this.sneatApiService.delete<Response>(endpoint, undefined, request);\n }\n\n public createSpaceItem<Brief, Dbo extends Brief>(\n endpoint: string,\n spaceRef: ISpaceRef,\n request: ISpaceRequest,\n ): Observable<ISpaceItemWithBriefAndDbo<Brief, Dbo>> {\n return this.sneatApiService\n .post<ICreateSpaceItemResponse<Brief, Dbo>>(endpoint, request)\n .pipe(\n map((response) => {\n if (!response) {\n throw new Error('create team item response is empty');\n }\n if (!response.id) {\n throw new Error('create team item response have no ID');\n }\n const item: ISpaceItemWithBriefAndDbo<Brief, Dbo> = {\n space: spaceRef,\n id: response.id,\n dbo: response.dbo,\n brief: { id: response.id, ...response.dbo } as unknown as Brief,\n };\n return item;\n }),\n );\n }\n}\n\n// At the moment reserved to `happenings` only\nexport class GlobalSpaceItemService<\n Brief,\n Dbo extends Brief,\n> extends SpaceItemBaseService<Brief, Dbo> {\n protected override collectionRef<\n Dbo2 extends Dbo,\n >(): CollectionReference<Dbo2> {\n return runInInjectionContext(\n this.injector,\n () =>\n collection(this.afs, this.collectionName) as CollectionReference<Dbo2>,\n );\n }\n\n public watchGlobalItems<Dbo2 extends Dbo>(\n queryArgs: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n const collectionRef = this.collectionRef<Dbo2>();\n return this.queryItems<Dbo2>(collectionRef, queryArgs);\n }\n\n public watchGlobalSpaceItemsWithSpaceRef<Dbo2 extends Dbo>(\n space: ISpaceRef,\n queryArgs: IQueryArgs,\n ): Observable<ISpaceItemWithBriefAndDbo<Brief, Dbo2>[]> {\n return this.watchGlobalSpaceItems<Dbo2>(space.id, queryArgs).pipe(\n map((items) => items.map((item) => ({ ...item, space }))),\n );\n }\n\n public watchGlobalSpaceItems<Dbo2 extends Dbo>(\n spaceID: string,\n queryArgs: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n queryArgs = {\n ...queryArgs,\n filter: [\n ...(queryArgs?.filter || []),\n { field: 'spaceIDs', operator: '==', value: spaceID },\n ],\n };\n const collectionRef = this.collectionRef<Dbo2>();\n return this.queryItems<Dbo2>(collectionRef, queryArgs);\n }\n}\n\n// intentionally not abstract\nexport class ModuleSpaceItemService<\n Brief,\n Dbo extends Brief,\n> extends SpaceItemBaseService<Brief, Dbo> {\n protected readonly spacesCollection: CollectionReference<ISpaceDbo>;\n\n constructor(\n injector: Injector,\n public readonly moduleID: string,\n collectionName: string,\n afs: AngularFirestore,\n sneatApiService: SneatApiService,\n ) {\n super(injector, collectionName, afs, sneatApiService);\n if (!moduleID) {\n throw new Error('moduleID is required');\n }\n this.spacesCollection = collection(\n this.afs,\n 'spaces',\n ) as CollectionReference<ISpaceDbo>;\n }\n\n protected readonly dto2brief = (id: string, dto: Dbo) => ({ id, ...dto });\n\n // protected teamCollection(spaceID: string): AngularFirestoreCollection<ITeamDto> {\n // \treturn this.afs.collection('spaces');\n // }\n\n protected override collectionRef<Dbo2 extends Dbo>(\n spaceID: string,\n ): CollectionReference<Dbo2> {\n if (!spaceID) {\n throw new Error('spaceID is required');\n }\n return runInInjectionContext(\n this.injector,\n () =>\n collection(\n this.spacesCollection,\n spaceID,\n 'ext',\n this.moduleID,\n this.collectionName,\n ) as CollectionReference<Dbo2>,\n );\n }\n\n private readonly spaceRef = (id: string) => doc(this.spacesCollection, id);\n\n public watchModuleSpaceItem<Dbo2 extends Dbo>(\n space: ISpaceRef,\n itemID: string,\n ): Observable<IIdAndOptionalBriefAndOptionalDbo<Brief, Dbo2>> {\n const collection = this.collectionRef<Dbo2>(space.id);\n return this.sfs.watchByID<Dbo2>(collection, itemID);\n }\n\n public watchModuleSpaceItemsWithSpaceRef<Dbo2 extends Dbo>(\n space: ISpaceRef,\n queryArgs?: IQueryArgs,\n ): Observable<ISpaceItemWithBriefAndDbo<Brief, Dbo2>[]> {\n return this.watchModuleSpaceItems<Dbo2>(space.id, queryArgs).pipe(\n map((items) => items.map((item) => ({ ...item, space }))),\n );\n }\n\n public watchModuleSpaceItems<Dbo2 extends Dbo>(\n spaceID: string,\n queryArgs?: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n // filter = [\n // \t...(filter || []),\n // \t// { field: 'spaceIDs', operator: '==', value: spaceID },\n // ];\n return runInInjectionContext(this.injector, () => {\n const collectionRef = this.collectionRef<Dbo2>(spaceID);\n return this.queryItems<Dbo2>(collectionRef, queryArgs);\n });\n }\n\n // private readonly mapItemTeamItemContext = <\n // Brief2 extends Brief,\n // Dbo2 extends Dto,\n // >(\n // space: ISpaceContext,\n // item: IIdAndBrief<Brief2, Dbo2>,\n // ) => {\n // return querySnapshot.docs.map((docSnapshot) => {\n // const dto = docSnapshot.data();\n // const { id } = docSnapshot;\n // const brief: Brief2 = { id, ...dto } as unknown as Brief2;\n // const c: ISpaceItemContext<Brief2, Dbo2> = { id, team, dto, brief };\n // return c;\n // });\n // };\n\n // public watchSpaceItems<Brief2 extends Brief, Dbo2 extends Dto>(\n // spaceID: string,\n // filter?: readonly IFilter[],\n // ): Observable<IIdAndBriefAndDto<Brief2, Dbo2>[]> {\n // console.log('watchSpaceItems()', spaceID, this.collectionName);\n // const collectionRef = collection(\n // this.teamRef(spaceID),\n // this.collectionName,\n // );\n // const querySnapshots = this.sfs.watchSnapshotsByFilter<Dbo2>(\n // collectionRef as CollectionReference<Dbo2>,\n // filter || [],\n // );\n // return querySnapshots.pipe(\n // map(a => this.mapQueryItem(a)),\n // );\n // }\n\n // public watchTeamItemsWithSpaceContext<Brief2 extends Brief, Dbo2 extends Dto>(\n // space: ISpaceRef,\n // filter?: readonly IFilter[],\n // ): Observable<ISpaceItemContext<Brief2, Dbo2>[]> {\n // const querySnapshots = this.watchTeamItems(space.id, filter);\n // return querySnapshots.pipe(\n // map((querySnapshot) =>\n // this.mapItemSpaceItemContext(\n // team,\n // querySnapshot as unknown as QuerySnapshot<Dbo2>,\n // ),\n // ),\n // );\n // }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"space-item.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-item.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injector, runInInjectionContext } from '@angular/core';\nimport {\n Firestore as AngularFirestore,\n doc,\n collection,\n CollectionReference,\n} from 'firebase/firestore';\nimport { QuerySnapshot } from '@firebase/firestore-types';\nimport { IQueryArgs, SneatApiService, SneatFirestoreService } from '@sneat/api';\nimport {\n IIdAndBriefAndDbo,\n IIdAndOptionalBriefAndOptionalDbo,\n ISpaceItemWithBriefAndDbo,\n ISpaceRef,\n} from '@sneat/core';\nimport { ISpaceDbo } from '@sneat/dto';\nimport { ISpaceItemNavContext, ISpaceRequest } from '@sneat/space-models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\ntype ICreateSpaceItemResponse<\n Brief,\n Dbo extends Brief,\n> = ISpaceItemWithBriefAndDbo<Brief, Dbo>;\n\nabstract class SpaceItemBaseService<Brief, Dbo extends Brief> {\n protected readonly sfs: SneatFirestoreService<Brief, Dbo>;\n\n protected constructor(\n protected readonly injector: Injector,\n public readonly collectionName: string,\n public readonly afs: AngularFirestore,\n public readonly sneatApiService: SneatApiService,\n ) {\n if (!this.collectionName) {\n throw new Error('collectionName is required');\n }\n this.sfs = new SneatFirestoreService<Brief, Dbo>(this.injector);\n }\n\n private _collectionRef?: CollectionReference<Dbo>;\n\n protected abstract collectionRef<Dbo2 extends Dbo>(\n spaceID: string,\n ): CollectionReference<Dbo2>;\n\n public watchSpaceItemByIdWithSpaceRef<Dbo2 extends Dbo>(\n space: ISpaceRef,\n itemID: string,\n ): Observable<ISpaceItemNavContext<Brief, Dbo2>> {\n\n if (!space.id) {\n throw new Error('spaceID is required');\n }\n let collectionRef: CollectionReference<Dbo2>;\n if (this._collectionRef?.id == space.id) {\n collectionRef = this._collectionRef as CollectionReference<Dbo2>;\n } else {\n collectionRef = this.collectionRef<Dbo2>(space.id);\n this._collectionRef = collectionRef;\n }\n return runInInjectionContext(this.injector, () =>\n this.sfs\n .watchByID(collectionRef, itemID)\n .pipe(map((o) => ({ space, ...o }))),\n );\n }\n\n protected queryItems<Dbo2 extends Dbo>(\n collectionRef: CollectionReference<Dbo2>,\n queryArgs?: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n const $querySnapshot = this.sfs.watchSnapshotsByFilter<Dbo2>(\n collectionRef,\n queryArgs,\n );\n return $querySnapshot.pipe(\n map((querySnapshot) => {\n return this.mapQueryItem<Dbo2>(\n querySnapshot as unknown as QuerySnapshot<Dbo2>,\n );\n }),\n );\n }\n\n protected mapQueryItem<Dbo2 extends Dbo>(\n querySnapshot: QuerySnapshot<Dbo2>,\n ): IIdAndBriefAndDbo<Brief, Dbo2>[] {\n return querySnapshot.docs.map((docSnapshot) => {\n const dto = docSnapshot.data();\n const { id } = docSnapshot;\n const brief: Brief = dto;\n return { id, brief, dbo: dto };\n });\n }\n\n public deleteSpaceItem<Response>(\n endpoint: string,\n request: ISpaceRequest,\n ): Observable<Response> {\n return this.sneatApiService.delete<Response>(endpoint, undefined, request);\n }\n\n public createSpaceItem<Brief, Dbo extends Brief>(\n endpoint: string,\n spaceRef: ISpaceRef,\n request: ISpaceRequest,\n ): Observable<ISpaceItemWithBriefAndDbo<Brief, Dbo>> {\n return this.sneatApiService\n .post<ICreateSpaceItemResponse<Brief, Dbo>>(endpoint, request)\n .pipe(\n map((response) => {\n if (!response) {\n throw new Error('create team item response is empty');\n }\n if (!response.id) {\n throw new Error('create team item response have no ID');\n }\n const item: ISpaceItemWithBriefAndDbo<Brief, Dbo> = {\n space: spaceRef,\n id: response.id,\n dbo: response.dbo,\n brief: { id: response.id, ...response.dbo } as unknown as Brief,\n };\n return item;\n }),\n );\n }\n}\n\n// At the moment reserved to `happenings` only\nexport class GlobalSpaceItemService<\n Brief,\n Dbo extends Brief,\n> extends SpaceItemBaseService<Brief, Dbo> {\n protected override collectionRef<\n Dbo2 extends Dbo,\n >(): CollectionReference<Dbo2> {\n return runInInjectionContext(\n this.injector,\n () =>\n collection(this.afs, this.collectionName) as CollectionReference<Dbo2>,\n );\n }\n\n public watchGlobalItems<Dbo2 extends Dbo>(\n queryArgs: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n const collectionRef = this.collectionRef<Dbo2>();\n return this.queryItems<Dbo2>(collectionRef, queryArgs);\n }\n\n public watchGlobalSpaceItemsWithSpaceRef<Dbo2 extends Dbo>(\n space: ISpaceRef,\n queryArgs: IQueryArgs,\n ): Observable<ISpaceItemWithBriefAndDbo<Brief, Dbo2>[]> {\n return this.watchGlobalSpaceItems<Dbo2>(space.id, queryArgs).pipe(\n map((items) => items.map((item) => ({ ...item, space }))),\n );\n }\n\n public watchGlobalSpaceItems<Dbo2 extends Dbo>(\n spaceID: string,\n queryArgs: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n queryArgs = {\n ...queryArgs,\n filter: [\n ...(queryArgs?.filter || []),\n { field: 'spaceIDs', operator: '==', value: spaceID },\n ],\n };\n const collectionRef = this.collectionRef<Dbo2>();\n return this.queryItems<Dbo2>(collectionRef, queryArgs);\n }\n}\n\n// intentionally not abstract\nexport class ModuleSpaceItemService<\n Brief,\n Dbo extends Brief,\n> extends SpaceItemBaseService<Brief, Dbo> {\n protected readonly spacesCollection: CollectionReference<ISpaceDbo>;\n\n constructor(\n injector: Injector,\n public readonly moduleID: string,\n collectionName: string,\n afs: AngularFirestore,\n sneatApiService: SneatApiService,\n ) {\n super(injector, collectionName, afs, sneatApiService);\n if (!moduleID) {\n throw new Error('moduleID is required');\n }\n this.spacesCollection = collection(\n this.afs,\n 'spaces',\n ) as CollectionReference<ISpaceDbo>;\n }\n\n protected readonly dto2brief = (id: string, dto: Dbo) => ({ id, ...dto });\n\n // protected teamCollection(spaceID: string): AngularFirestoreCollection<ITeamDto> {\n // \treturn this.afs.collection('spaces');\n // }\n\n protected override collectionRef<Dbo2 extends Dbo>(\n spaceID: string,\n ): CollectionReference<Dbo2> {\n if (!spaceID) {\n throw new Error('spaceID is required');\n }\n return runInInjectionContext(\n this.injector,\n () =>\n collection(\n this.spacesCollection,\n spaceID,\n 'ext',\n this.moduleID,\n this.collectionName,\n ) as CollectionReference<Dbo2>,\n );\n }\n\n private readonly spaceRef = (id: string) => doc(this.spacesCollection, id);\n\n public watchModuleSpaceItem<Dbo2 extends Dbo>(\n space: ISpaceRef,\n itemID: string,\n ): Observable<IIdAndOptionalBriefAndOptionalDbo<Brief, Dbo2>> {\n const collection = this.collectionRef<Dbo2>(space.id);\n return this.sfs.watchByID<Dbo2>(collection, itemID);\n }\n\n public watchModuleSpaceItemsWithSpaceRef<Dbo2 extends Dbo>(\n space: ISpaceRef,\n queryArgs?: IQueryArgs,\n ): Observable<ISpaceItemWithBriefAndDbo<Brief, Dbo2>[]> {\n return this.watchModuleSpaceItems<Dbo2>(space.id, queryArgs).pipe(\n map((items) => items.map((item) => ({ ...item, space }))),\n );\n }\n\n public watchModuleSpaceItems<Dbo2 extends Dbo>(\n spaceID: string,\n queryArgs?: IQueryArgs,\n ): Observable<IIdAndBriefAndDbo<Brief, Dbo2>[]> {\n // filter = [\n // \t...(filter || []),\n // \t// { field: 'spaceIDs', operator: '==', value: spaceID },\n // ];\n return runInInjectionContext(this.injector, () => {\n const collectionRef = this.collectionRef<Dbo2>(spaceID);\n return this.queryItems<Dbo2>(collectionRef, queryArgs);\n });\n }\n\n // private readonly mapItemTeamItemContext = <\n // Brief2 extends Brief,\n // Dbo2 extends Dto,\n // >(\n // space: ISpaceContext,\n // item: IIdAndBrief<Brief2, Dbo2>,\n // ) => {\n // return querySnapshot.docs.map((docSnapshot) => {\n // const dto = docSnapshot.data();\n // const { id } = docSnapshot;\n // const brief: Brief2 = { id, ...dto } as unknown as Brief2;\n // const c: ISpaceItemContext<Brief2, Dbo2> = { id, team, dto, brief };\n // return c;\n // });\n // };\n\n // public watchSpaceItems<Brief2 extends Brief, Dbo2 extends Dto>(\n // spaceID: string,\n // filter?: readonly IFilter[],\n // ): Observable<IIdAndBriefAndDto<Brief2, Dbo2>[]> {\n // console.log('watchSpaceItems()', spaceID, this.collectionName);\n // const collectionRef = collection(\n // this.teamRef(spaceID),\n // this.collectionName,\n // );\n // const querySnapshots = this.sfs.watchSnapshotsByFilter<Dbo2>(\n // collectionRef as CollectionReference<Dbo2>,\n // filter || [],\n // );\n // return querySnapshots.pipe(\n // map(a => this.mapQueryItem(a)),\n // );\n // }\n\n // public watchTeamItemsWithSpaceContext<Brief2 extends Brief, Dbo2 extends Dto>(\n // space: ISpaceRef,\n // filter?: readonly IFilter[],\n // ): Observable<ISpaceItemContext<Brief2, Dbo2>[]> {\n // const querySnapshots = this.watchTeamItems(space.id, filter);\n // return querySnapshots.pipe(\n // map((querySnapshot) =>\n // this.mapItemSpaceItemContext(\n // team,\n // querySnapshot as unknown as QuerySnapshot<Dbo2>,\n // ),\n // ),\n // );\n // }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runInInjectionContext } from '@angular/core';
|
|
2
|
-
import { collection, } from '
|
|
2
|
+
import { collection, } from 'firebase/firestore';
|
|
3
3
|
import { map } from 'rxjs/operators';
|
|
4
4
|
import { ModuleSpaceItemService } from './space-item.service';
|
|
5
5
|
// import Item = firebase.analytics.Item;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-module.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-module.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,UAAU,GAGX,MAAM,
|
|
1
|
+
{"version":3,"file":"space-module.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space-module.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,UAAU,GAGX,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,yCAAyC;AAEzC,MAAM,OAAgB,kBAAwB,SAAQ,sBAGrD;IACC,6DAA6D;IAC7D,YACE,QAAkB,EAClB,QAAgB,EAChB,GAAqB;QAErB,yEAAyE;QACzE,KAAK,CACH,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,GAAG,EACH,SAAuC,CACxC,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,OAAe;QACpC,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC/C,MAAM,aAAa,GAAG,UAAU,CAC9B,IAAI,CAAC,gBAAgB,EACrB,OAAO,EACP,KAAK,CACsB,CAAC;YAC9B,qCAAqC;YACrC,qDAAqD;YACrD,IAAI;YACJ,OAAO,IAAI,CAAC,GAAG;iBACZ,SAAS,CAAM,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;iBAC5C,IAAI,EAEH,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CACT,OAAe,EACf,SAA6D;QAE7D,MAAM,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,CACX,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;YACvD,MAAM,KAAK,GAA6B,MAAM;gBAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { Injector, runInInjectionContext } from '@angular/core';\nimport {\n collection,\n CollectionReference,\n Firestore as AngularFirestore,\n} from 'firebase/firestore';\nimport { SneatApiService } from '@sneat/api';\nimport { IIdAndBrief, IIdAndOptionalDbo } from '@sneat/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ModuleSpaceItemService } from './space-item.service';\n\n// import Item = firebase.analytics.Item;\n\nexport abstract class SpaceModuleService<Dbo> extends ModuleSpaceItemService<\n Dbo,\n Dbo\n> {\n // protected readonly sfs: SneatFirestoreService<Brief, Dto>;\n protected constructor(\n injector: Injector,\n moduleID: string,\n afs: AngularFirestore,\n ) {\n // this.sfs = new SneatFirestoreService<Brief, Dto>(collectionName, afs);\n super(\n injector,\n moduleID,\n 'ext',\n afs,\n undefined as unknown as SneatApiService,\n );\n }\n\n watchSpaceModuleRecord(spaceID: string): Observable<IIdAndOptionalDbo<Dbo>> {\n return runInInjectionContext(this.injector, () => {\n const collectionRef = collection(\n this.spacesCollection,\n spaceID,\n 'ext',\n ) as CollectionReference<Dbo>;\n // if (this.moduleID === 'trackus') {\n // \treturn throwError(() => new Error('test error'));\n // }\n return this.sfs\n .watchByID<Dbo>(collectionRef, this.moduleID)\n .pipe\n // tap((o) => console.log(`${logPrefix} =>`, o)),\n ();\n });\n }\n\n watchBriefs<ItemBrief>(\n spaceID: string,\n getBriefs: (dto?: Dbo) => Readonly<Record<string, ItemBrief>>,\n ): Observable<IIdAndBrief<ItemBrief>[]> {\n const o = this.watchSpaceModuleRecord(spaceID);\n return o.pipe(\n map((teamModule) => {\n const briefs = getBriefs(teamModule?.dbo || undefined);\n const items: IIdAndBrief<ItemBrief>[] = briefs\n ? Object.keys(briefs).map((id) => ({ id, brief: briefs[id] }))\n : [];\n return items;\n }),\n );\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpParams } from '@angular/common/http';
|
|
2
2
|
import { Injectable, Injector, inject, runInInjectionContext, } from '@angular/core';
|
|
3
|
-
import { Firestore as AngularFirestore, collection, } from '
|
|
3
|
+
import { Firestore as AngularFirestore, collection, } from 'firebase/firestore';
|
|
4
4
|
import { SneatApiService, SneatFirestoreService } from '@sneat/api';
|
|
5
5
|
import { AuthStatuses, SneatAuthStateService, } from '@sneat/auth-core';
|
|
6
6
|
import { ErrorLogger } from '@sneat/core';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpParams } from '@angular/common/http';\nimport {\n Injectable,\n Injector,\n inject,\n runInInjectionContext,\n} from '@angular/core';\nimport {\n Firestore as AngularFirestore,\n CollectionReference,\n collection,\n} from '@angular/fire/firestore';\nimport { SneatApiService, SneatFirestoreService } from '@sneat/api';\nimport {\n AuthStatus,\n AuthStatuses,\n SneatAuthStateService,\n} from '@sneat/auth-core';\nimport { IUserSpaceBrief } from '@sneat/auth-models';\nimport { IIdAndBrief } from '@sneat/core';\nimport { IRecord } from '@sneat/data';\nimport { ISpaceBrief, ISpaceDbo, ISpaceMetric } from '@sneat/dto';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport {\n ICreateSpaceRequest,\n ICreateSpaceResponse,\n ILeaveSpaceRequest,\n ISpaceContext,\n IUpdateRelatedRequest,\n zipMapBriefsWithIDs,\n} from '@sneat/space-models';\nimport { ISneatUserState, SneatUserService } from '@sneat/auth-core';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n throwError,\n} from 'rxjs';\nimport { filter, first, map, tap } from 'rxjs/operators';\n\nconst spaceBriefFromUserSpaceInfo = (v: IUserSpaceBrief): ISpaceBrief => ({\n ...v,\n type: v.type,\n});\n\n// export class CachedDataService<Brief, Dbo extends Brief> {\n// \tconstructor(\n// \t\tprivate readonly db: AngularFirestore,\n// \t) {\n// \t}\n//\n// \t// watchRecord()\n// }\n\n@Injectable()\nexport class SpaceService {\n readonly sneatAuthStateService = inject(SneatAuthStateService);\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly afs = inject(AngularFirestore);\n private readonly userService = inject(SneatUserService);\n private readonly sneatApiService = inject(SneatApiService);\n\n private userID?: string;\n\n private currentUserSpaces?: Record<string, IUserSpaceBrief>;\n\n private spaces$: Record<string, BehaviorSubject<ISpaceContext | undefined>> =\n {};\n private subscriptions: Subscription[] = [];\n\n private readonly sfs: SneatFirestoreService<ISpaceBrief, ISpaceDbo>;\n\n private readonly injector = inject(Injector);\n\n constructor() {\n const sneatAuthStateService = this.sneatAuthStateService;\n\n // console.log('SpaceService.constructor()');\n this.sfs = new SneatFirestoreService<ISpaceBrief, ISpaceDbo>(\n this.injector,\n (id: string, dto: ISpaceDbo) => ({\n id,\n ...dto,\n }),\n );\n const onAuthStatusChanged = (status: AuthStatus): void => {\n if (status === 'notAuthenticated') {\n this.unsubscribe('signed out');\n }\n };\n sneatAuthStateService.authStatus.subscribe(onAuthStatusChanged);\n\n // We are intentionally not un-subscribing from user record updates. TODO: why?\n this.userService.userState.subscribe({\n next: this.processUserRecordInSpaceService,\n error: this.errorLogger.logErrorHandler('failed to load user record'),\n });\n }\n\n private readonly processUserRecordInSpaceService = (\n userState: ISneatUserState,\n ): void => {\n const user = userState?.record;\n if (!user) {\n // this.userID = undefined;\n if (\n userState.status === AuthStatuses.notAuthenticated &&\n this.subscriptions?.length\n ) {\n this.unsubscribe(\n 'user is not authenticated and active team subscriptions',\n );\n }\n return;\n }\n if (userState.user?.uid !== this.userID) {\n if (this.userID) {\n this.unsubscribe('user id changed');\n }\n this.userID = userState.user?.uid;\n }\n this.currentUserSpaces = user?.spaces;\n\n zipMapBriefsWithIDs(user.spaces).forEach(this.subscribeForUserSpaceChanges);\n };\n\n public createSpace(\n request: ICreateSpaceRequest,\n ): Observable<IRecord<ISpaceDbo>> {\n return this.sneatApiService\n .post<ICreateSpaceResponse>('spaces/create_space', request)\n .pipe(map((response: ICreateSpaceResponse) => response.space));\n }\n\n // public getSpace(ref: ISpaceRef): Observable<ISpaceContext> {\n // \treturn this.watchSpace(ref).pipe(first());\n // }\n\n public watchSpace(id: string): Observable<ISpaceContext> {\n if (!id) {\n throw new Error('space id is a required parameter');\n }\n if (id === 'contacts') {\n throw new Error('watchSpace({i}d===contacts})');\n }\n let subj = this.spaces$[id];\n if (subj) {\n return subj.asObservable().pipe(filter((s) => !!s));\n }\n let spaceContext: ISpaceContext | undefined = undefined;\n if (this.currentUserSpaces) {\n const userSpaceInfo = this.currentUserSpaces[id];\n if (userSpaceInfo) {\n spaceContext = {\n id,\n type: userSpaceInfo.type,\n brief: spaceBriefFromUserSpaceInfo(userSpaceInfo),\n };\n }\n }\n subj = new BehaviorSubject<ISpaceContext | undefined>(spaceContext);\n this.spaces$[id] = subj;\n if (this.userService.currentUserID) {\n this.subscribeForSpaceChanges(id, subj);\n } else {\n this.userService.userState\n .pipe(\n filter((v) => v.status === AuthStatuses.authenticated),\n first(),\n )\n .subscribe({\n next: () => this.subscribeForSpaceChanges(id, subj),\n });\n }\n return subj.asObservable().pipe(filter((s) => !!s));\n }\n\n public onSpaceUpdated(space: ISpaceContext): void {\n let team$ = this.spaces$[space.id];\n if (team$) {\n const prevTeam = team$.value;\n space = { ...prevTeam, ...space };\n } else {\n this.spaces$[space.id] = team$ = new BehaviorSubject<\n ISpaceContext | undefined\n >(space);\n }\n team$.next(space);\n }\n\n public leaveSpace(request: ILeaveSpaceRequest): Observable<void> {\n return this.sneatApiService.post('space/leave_space', request);\n }\n\n public updateRelated(request: IUpdateRelatedRequest): Observable<void> {\n return this.sneatApiService.post('space/update_related', request);\n }\n\n // TODO: move to separate module\n public deleteMetrics(space: string, metrics: string[]): Observable<void> {\n return this.sneatApiService.post('space/remove_metrics', {\n space,\n metrics,\n });\n }\n\n // TODO: move to separate module\n public addMetric(space: string, metric: ISpaceMetric): Observable<void> {\n if (!space) {\n return throwError(() => 'space parameter is required');\n }\n const params = new HttpParams({ fromObject: { id: space } });\n return this.sneatApiService.post('space/add_metric?' + params.toString(), {\n metric,\n });\n }\n\n private readonly subscribeForUserSpaceChanges = (\n userSpaceBrief: IIdAndBrief<IUserSpaceBrief>,\n ): void => {\n let subj = this.spaces$[userSpaceBrief.id];\n if (subj) {\n let space = subj.value;\n if (space && !space?.type) {\n space = {\n ...space,\n type: userSpaceBrief.brief?.type,\n brief: spaceBriefFromUserSpaceInfo(userSpaceBrief.brief),\n };\n subj.next(space);\n }\n return;\n }\n\n const space: ISpaceContext = {\n id: userSpaceBrief.id,\n type: userSpaceBrief.brief.type,\n brief: spaceBriefFromUserSpaceInfo(userSpaceBrief.brief),\n };\n this.spaces$[space.id] = subj = new BehaviorSubject<\n ISpaceContext | undefined\n >(space);\n this.subscribeForSpaceChanges(space.id, subj);\n };\n\n private subscribeForSpaceChanges(\n id: string,\n subj: Subject<ISpaceContext | undefined>,\n ): void {\n if (id === 'contacts') {\n throw new Error('subscribeForSpaceChanges(id===contacts)');\n }\n const spacesCollection = runInInjectionContext(\n this.injector,\n () => collection(this.afs, 'spaces') as CollectionReference<ISpaceDbo>,\n );\n const o: Observable<ISpaceContext> = this.sfs\n .watchByID(spacesCollection, id)\n .pipe(\n map((team) => {\n // const _prevTeam = this.spaces$[id].value;\n // if (prevTeam.assets) {\n // \tteam = { ...team, assets: prevTeam.assets};\n // \tconsole.log('Reusing assets from prev context');\n // }\n return team;\n }),\n tap(() => {\n // subj.next(team);\n }),\n );\n\n this.subscriptions.push(\n o.subscribe({\n next: (v) => subj.next(v), // Do not use as \"next: subj.next\" because it will be called with wrong \"this\" context\n error: (err) => subj.error(err),\n }),\n );\n }\n\n private unsubscribe(_reason?: string): void {\n try {\n this.subscriptions.forEach((s) => s.unsubscribe());\n this.subscriptions = [];\n this.spaces$ = {};\n } catch (e) {\n this.errorLogger.logError(e, 'SpaceService failed to unsubscribe');\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"space.service.js","sourceRoot":"","sources":["../../../../../../../libs/space/services/src/lib/services/space.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpParams } from '@angular/common/http';\nimport {\n Injectable,\n Injector,\n inject,\n runInInjectionContext,\n} from '@angular/core';\nimport {\n Firestore as AngularFirestore,\n CollectionReference,\n collection,\n} from 'firebase/firestore';\nimport { SneatApiService, SneatFirestoreService } from '@sneat/api';\nimport {\n AuthStatus,\n AuthStatuses,\n SneatAuthStateService,\n} from '@sneat/auth-core';\nimport { IUserSpaceBrief } from '@sneat/auth-models';\nimport { IIdAndBrief } from '@sneat/core';\nimport { IRecord } from '@sneat/data';\nimport { ISpaceBrief, ISpaceDbo, ISpaceMetric } from '@sneat/dto';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport {\n ICreateSpaceRequest,\n ICreateSpaceResponse,\n ILeaveSpaceRequest,\n ISpaceContext,\n IUpdateRelatedRequest,\n zipMapBriefsWithIDs,\n} from '@sneat/space-models';\nimport { ISneatUserState, SneatUserService } from '@sneat/auth-core';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n throwError,\n} from 'rxjs';\nimport { filter, first, map, tap } from 'rxjs/operators';\n\nconst spaceBriefFromUserSpaceInfo = (v: IUserSpaceBrief): ISpaceBrief => ({\n ...v,\n type: v.type,\n});\n\n// export class CachedDataService<Brief, Dbo extends Brief> {\n// \tconstructor(\n// \t\tprivate readonly db: AngularFirestore,\n// \t) {\n// \t}\n//\n// \t// watchRecord()\n// }\n\n@Injectable()\nexport class SpaceService {\n readonly sneatAuthStateService = inject(SneatAuthStateService);\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly afs = inject(AngularFirestore);\n private readonly userService = inject(SneatUserService);\n private readonly sneatApiService = inject(SneatApiService);\n\n private userID?: string;\n\n private currentUserSpaces?: Record<string, IUserSpaceBrief>;\n\n private spaces$: Record<string, BehaviorSubject<ISpaceContext | undefined>> =\n {};\n private subscriptions: Subscription[] = [];\n\n private readonly sfs: SneatFirestoreService<ISpaceBrief, ISpaceDbo>;\n\n private readonly injector = inject(Injector);\n\n constructor() {\n const sneatAuthStateService = this.sneatAuthStateService;\n\n // console.log('SpaceService.constructor()');\n this.sfs = new SneatFirestoreService<ISpaceBrief, ISpaceDbo>(\n this.injector,\n (id: string, dto: ISpaceDbo) => ({\n id,\n ...dto,\n }),\n );\n const onAuthStatusChanged = (status: AuthStatus): void => {\n if (status === 'notAuthenticated') {\n this.unsubscribe('signed out');\n }\n };\n sneatAuthStateService.authStatus.subscribe(onAuthStatusChanged);\n\n // We are intentionally not un-subscribing from user record updates. TODO: why?\n this.userService.userState.subscribe({\n next: this.processUserRecordInSpaceService,\n error: this.errorLogger.logErrorHandler('failed to load user record'),\n });\n }\n\n private readonly processUserRecordInSpaceService = (\n userState: ISneatUserState,\n ): void => {\n const user = userState?.record;\n if (!user) {\n // this.userID = undefined;\n if (\n userState.status === AuthStatuses.notAuthenticated &&\n this.subscriptions?.length\n ) {\n this.unsubscribe(\n 'user is not authenticated and active team subscriptions',\n );\n }\n return;\n }\n if (userState.user?.uid !== this.userID) {\n if (this.userID) {\n this.unsubscribe('user id changed');\n }\n this.userID = userState.user?.uid;\n }\n this.currentUserSpaces = user?.spaces;\n\n zipMapBriefsWithIDs(user.spaces).forEach(this.subscribeForUserSpaceChanges);\n };\n\n public createSpace(\n request: ICreateSpaceRequest,\n ): Observable<IRecord<ISpaceDbo>> {\n return this.sneatApiService\n .post<ICreateSpaceResponse>('spaces/create_space', request)\n .pipe(map((response: ICreateSpaceResponse) => response.space));\n }\n\n // public getSpace(ref: ISpaceRef): Observable<ISpaceContext> {\n // \treturn this.watchSpace(ref).pipe(first());\n // }\n\n public watchSpace(id: string): Observable<ISpaceContext> {\n if (!id) {\n throw new Error('space id is a required parameter');\n }\n if (id === 'contacts') {\n throw new Error('watchSpace({i}d===contacts})');\n }\n let subj = this.spaces$[id];\n if (subj) {\n return subj.asObservable().pipe(filter((s) => !!s));\n }\n let spaceContext: ISpaceContext | undefined = undefined;\n if (this.currentUserSpaces) {\n const userSpaceInfo = this.currentUserSpaces[id];\n if (userSpaceInfo) {\n spaceContext = {\n id,\n type: userSpaceInfo.type,\n brief: spaceBriefFromUserSpaceInfo(userSpaceInfo),\n };\n }\n }\n subj = new BehaviorSubject<ISpaceContext | undefined>(spaceContext);\n this.spaces$[id] = subj;\n if (this.userService.currentUserID) {\n this.subscribeForSpaceChanges(id, subj);\n } else {\n this.userService.userState\n .pipe(\n filter((v) => v.status === AuthStatuses.authenticated),\n first(),\n )\n .subscribe({\n next: () => this.subscribeForSpaceChanges(id, subj),\n });\n }\n return subj.asObservable().pipe(filter((s) => !!s));\n }\n\n public onSpaceUpdated(space: ISpaceContext): void {\n let team$ = this.spaces$[space.id];\n if (team$) {\n const prevTeam = team$.value;\n space = { ...prevTeam, ...space };\n } else {\n this.spaces$[space.id] = team$ = new BehaviorSubject<\n ISpaceContext | undefined\n >(space);\n }\n team$.next(space);\n }\n\n public leaveSpace(request: ILeaveSpaceRequest): Observable<void> {\n return this.sneatApiService.post('space/leave_space', request);\n }\n\n public updateRelated(request: IUpdateRelatedRequest): Observable<void> {\n return this.sneatApiService.post('space/update_related', request);\n }\n\n // TODO: move to separate module\n public deleteMetrics(space: string, metrics: string[]): Observable<void> {\n return this.sneatApiService.post('space/remove_metrics', {\n space,\n metrics,\n });\n }\n\n // TODO: move to separate module\n public addMetric(space: string, metric: ISpaceMetric): Observable<void> {\n if (!space) {\n return throwError(() => 'space parameter is required');\n }\n const params = new HttpParams({ fromObject: { id: space } });\n return this.sneatApiService.post('space/add_metric?' + params.toString(), {\n metric,\n });\n }\n\n private readonly subscribeForUserSpaceChanges = (\n userSpaceBrief: IIdAndBrief<IUserSpaceBrief>,\n ): void => {\n let subj = this.spaces$[userSpaceBrief.id];\n if (subj) {\n let space = subj.value;\n if (space && !space?.type) {\n space = {\n ...space,\n type: userSpaceBrief.brief?.type,\n brief: spaceBriefFromUserSpaceInfo(userSpaceBrief.brief),\n };\n subj.next(space);\n }\n return;\n }\n\n const space: ISpaceContext = {\n id: userSpaceBrief.id,\n type: userSpaceBrief.brief.type,\n brief: spaceBriefFromUserSpaceInfo(userSpaceBrief.brief),\n };\n this.spaces$[space.id] = subj = new BehaviorSubject<\n ISpaceContext | undefined\n >(space);\n this.subscribeForSpaceChanges(space.id, subj);\n };\n\n private subscribeForSpaceChanges(\n id: string,\n subj: Subject<ISpaceContext | undefined>,\n ): void {\n if (id === 'contacts') {\n throw new Error('subscribeForSpaceChanges(id===contacts)');\n }\n const spacesCollection = runInInjectionContext(\n this.injector,\n () => collection(this.afs, 'spaces') as CollectionReference<ISpaceDbo>,\n );\n const o: Observable<ISpaceContext> = this.sfs\n .watchByID(spacesCollection, id)\n .pipe(\n map((team) => {\n // const _prevTeam = this.spaces$[id].value;\n // if (prevTeam.assets) {\n // \tteam = { ...team, assets: prevTeam.assets};\n // \tconsole.log('Reusing assets from prev context');\n // }\n return team;\n }),\n tap(() => {\n // subj.next(team);\n }),\n );\n\n this.subscriptions.push(\n o.subscribe({\n next: (v) => subj.next(v), // Do not use as \"next: subj.next\" because it will be called with wrong \"this\" context\n error: (err) => subj.error(err),\n }),\n );\n }\n\n private unsubscribe(_reason?: string): void {\n try {\n this.subscriptions.forEach((s) => s.unsubscribe());\n this.subscriptions = [];\n this.spaces$ = {};\n } catch (e) {\n this.errorLogger.logError(e, 'SpaceService failed to unsubscribe');\n }\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injector } from '@angular/core';
|
|
2
|
-
import { Firestore as AngularFirestore, CollectionReference } from '
|
|
2
|
+
import { Firestore as AngularFirestore, CollectionReference } from 'firebase/firestore';
|
|
3
3
|
import { QuerySnapshot } from '@firebase/firestore-types';
|
|
4
4
|
import { IQueryArgs, SneatApiService, SneatFirestoreService } from '@sneat/api';
|
|
5
5
|
import { IIdAndBriefAndDbo, IIdAndOptionalBriefAndOptionalDbo, ISpaceItemWithBriefAndDbo, ISpaceRef } from '@sneat/core';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injector } from '@angular/core';
|
|
2
|
-
import { Firestore as AngularFirestore } from '
|
|
2
|
+
import { Firestore as AngularFirestore } from 'firebase/firestore';
|
|
3
3
|
import { IIdAndBrief, IIdAndOptionalDbo } from '@sneat/core';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { ModuleSpaceItemService } from './space-item.service';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sneat/space-services",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
"@angular/core": ">=22.0.0 <23.0.0",
|
|
10
10
|
"@ionic/angular": ">=9.0.0 <10.0.0",
|
|
11
11
|
"firebase": "*",
|
|
12
|
-
"@angular/fire": ">=20",
|
|
13
12
|
"@sneat/extension-contactus-contract": "^0.12.0"
|
|
14
13
|
},
|
|
15
14
|
"peerDependenciesMeta": {
|