@sneat/space-components 0.5.0 → 0.5.2
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,7 +1,7 @@
|
|
|
1
1
|
import { computed, Directive, effect, inject, signal, } from '@angular/core';
|
|
2
2
|
import { ActivatedRoute } from '@angular/router';
|
|
3
3
|
import { NavController } from '@ionic/angular/standalone';
|
|
4
|
-
import { equalSpaceRefs } from '@sneat/core';
|
|
4
|
+
import { equalSpaceRefs, writeCurrentSpace, } from '@sneat/core';
|
|
5
5
|
import { equalSpaceBriefs } from '@sneat/dto';
|
|
6
6
|
import { SpaceService, trackSpaceIdAndTypeFromRouteParameter, } from '@sneat/space-services';
|
|
7
7
|
import { SneatBaseComponent } from '@sneat/ui';
|
|
@@ -299,6 +299,11 @@ export class SpaceBaseComponent extends SneatBaseComponent {
|
|
|
299
299
|
? { id: spaceRef.id, type: spaceRef.type || prev?.type }
|
|
300
300
|
: { id: spaceRef.id };
|
|
301
301
|
});
|
|
302
|
+
const currentSpaceRef = this.$spaceRef();
|
|
303
|
+
if (currentSpaceRef) {
|
|
304
|
+
// Persist so the login page can restore it after sign-in. No-op unless id+type are known.
|
|
305
|
+
writeCurrentSpace(currentSpaceRef);
|
|
306
|
+
}
|
|
302
307
|
}
|
|
303
308
|
setSpaceContext(spaceContext) {
|
|
304
309
|
const prevSpace = this.$space();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-base-component.directive.js","sourceRoot":"","sources":["../../../../../../libs/space/components/src/lib/space-base-component.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n Directive,\n effect,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport { ActivatedRoute, ParamMap } from '@angular/router';\nimport { NavController } from '@ionic/angular/standalone';\nimport { equalSpaceRefs, ILogger, ISpaceRef, SpaceType } from '@sneat/core';\n\ntype NavigationOptions = NonNullable<\n Parameters<NavController['navigateRoot']>[1]\n>;\nimport { equalSpaceBriefs, ISpaceBrief, ISpaceDbo } from '@sneat/dto';\nimport { ISpaceContext } from '@sneat/space-models';\nimport {\n SpaceService,\n trackSpaceIdAndTypeFromRouteParameter,\n} from '@sneat/space-services';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { SneatBaseComponent } from '@sneat/ui';\nimport {\n distinctUntilChanged,\n map,\n MonoTypeOperatorFunction,\n Observable,\n shareReplay,\n Subject,\n} from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpaceComponentBaseParams } from './space-component-base-params.service';\n\n@Directive() // The @Directive is required by Angular as we are implementing OnInit\nexport abstract class SpaceBaseComponent\n extends SneatBaseComponent\n implements OnInit\n{\n protected readonly $spaceRef = signal<ISpaceRef | undefined | null>(\n undefined,\n );\n private readonly $spaceBrief = signal<ISpaceBrief | undefined | null>(\n undefined,\n );\n private readonly $spaceDbo = signal<ISpaceDbo | undefined | null>(undefined);\n\n // private readonly $_spaceID = signal<string | undefined>(undefined);\n // protected readonly $spaceID = this.$_spaceID.asReadonly();\n protected readonly $spaceID = computed(() => this.$spaceRef()?.id);\n\n // private readonly $_spaceType = signal<SpaceType | undefined>(undefined);\n // protected readonly $spaceType = this.$_spaceType.asReadonly();\n protected readonly $spaceType = computed(() => this.$spaceRef()?.type);\n\n protected readonly $space = computed<ISpaceContext>(() => {\n return {\n ...(this.$spaceRef() || { id: '' }),\n brief: this.$spaceBrief(),\n dbo: this.$spaceDbo(),\n };\n });\n\n private readonly spaceIDChanged = new Subject<string | undefined>();\n private readonly spaceTypeChanged = new Subject<SpaceType | undefined>();\n\n protected takeUntilSpaceIdChanged<T>(): MonoTypeOperatorFunction<T> {\n return takeUntil(this.spaceIDChanged$);\n }\n\n protected noPermissions = false;\n\n protected readonly spaceBriefChanged = new Subject<\n ISpaceBrief | undefined | null\n >();\n protected readonly spaceDboChanged = new Subject<\n ISpaceDbo | undefined | null\n >();\n\n // protected spaceContext?: ISpaceContext;\n\n private readonly spaceChanged = new Subject<ISpaceContext>();\n protected readonly spaceChanged$ = this.spaceChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed());\n\n protected readonly navController = inject(NavController);\n // protected readonly activeCommuneService: IActiveCommuneService;\n protected readonly userService: SneatUserService;\n // protected readonly communeService: ICommuneService;\n protected readonly spaceService = inject(SpaceService);\n // protected readonly authStateService: IAuthStateService;\n protected readonly logger: ILogger;\n // protected readonly willLeave = new Subject<void>();\n protected defaultBackPage?: string;\n\n protected readonly spaceIDChanged$ = this.spaceIDChanged.asObservable().pipe(\n this.takeUntilDestroyed(),\n distinctUntilChanged(),\n // tap((id) => console.log(this.className + '=> spaceIDChanged$: ' + id)),\n );\n\n protected readonly spaceTypeChanged$: Observable<SpaceType | undefined> =\n this.spaceTypeChanged.pipe(\n this.takeUntilDestroyed(),\n distinctUntilChanged(),\n // tap(v => console.log('spaceTypeChanged$ before replay =>', v)),\n shareReplay(1),\n // tap(v => console.log('spaceTypeChanged$ after replay =>', v)),\n );\n\n protected readonly spaceBriefChanged$ = this.spaceBriefChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged(equalSpaceBriefs));\n\n public readonly spaceDboChanged$ = this.spaceDboChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged());\n\n protected get space(): ISpaceContext {\n // TODO: Document why we do not allow undefined\n return this.$space() || ({ id: '' } as ISpaceContext);\n }\n\n protected get preloader() {\n return this.spaceParams.preloader;\n }\n\n protected get spaceNav() {\n return this.spaceParams.spaceNavService;\n }\n\n protected get currentUserId() {\n return this.userService.currentUserID;\n }\n\n protected readonly $defaultBackUrlSpacePath = signal('');\n\n // Intentionally not readonly, but might reconsider\n protected $defaultBackUrl = computed<string>(() => {\n const space = this.$space();\n const path = this.$defaultBackUrlSpacePath();\n let url = space ? `/space/${space.type}/${space.id}` : '';\n url = url && this.defaultBackPage ? url + '/' + this.defaultBackPage : url;\n if (path) {\n url = url + '/' + path;\n }\n return url;\n });\n\n protected readonly route = inject(ActivatedRoute);\n protected readonly spaceParams = inject(SpaceComponentBaseParams);\n\n public constructor() {\n super();\n\n let prevSpaceID: string | undefined;\n\n effect(() => {\n const spaceID = this.$spaceID();\n\n if (spaceID === prevSpaceID) {\n // This seems to be a bag or a strange feature in Angular signals?\n // this happens if we call this.spaceIDChanged.next(spaceID);\n // Giving up for now so not logging as a warning\n return;\n }\n prevSpaceID = spaceID;\n this.spaceIDChanged.next(spaceID); // This should be BEFORE onSpaceIdChanged()!\n this.onSpaceIdChanged(); // This should be AFTER spaceIDChanged.next()!\n this.unsubscribe('$spaceID() changed');\n this.$spaceBrief.set(undefined);\n this.$spaceDbo.set(undefined);\n if (spaceID) {\n setTimeout(() => this.subscribeForSpaceChanges(spaceID), 1);\n }\n });\n\n // this.spaceIDChanged$\n // \t.pipe(this.takeUntilDestroyed(), distinctUntilChanged())\n // \t.subscribe((spaceID) => {\n // \t\tif (spaceID) {\n // \t\t\t// !!! Be careful to migrate this to signal effect - can cause dead cycles!\n // \t\t\tsetTimeout(() => this.subscribeForSpaceChanges(spaceID), 1);\n // \t\t}\n // \t});\n\n effect(() => {\n this.spaceTypeChanged.next(this.$spaceType());\n });\n\n try {\n // this.navController = spaceParams.navController;\n this.userService = this.spaceParams.userService;\n this.logger = this.spaceParams.loggerFactory.getLogger(this.className);\n this.getSpaceContextFromRouteState();\n this.cleanupOnUserLogout();\n } catch (e) {\n this.errorLogger.logError(\n e,\n `Failed in ${this.className}:SpaceBaseComponent.constructor()`,\n );\n throw e;\n }\n }\n\n public ngOnInit(): void {\n // We can't call this in constructor as some members of the child class may not be initialized yet\n this.trackRouteParamMap(\n this.route.paramMap.pipe(this.takeUntilDestroyed()),\n );\n }\n\n // public ionViewWillLeave(): void {\n // \t// console.log(`${this.className}:SpaceBaseComponent.ionViewWillLeave()`);\n // \tthis.willLeave.next();\n // }\n\n protected onUserIdChanged(): void {\n if (!this.currentUserId) {\n this.subs.unsubscribe();\n if (this.space && this.space.dbo) {\n this.setSpaceContext({\n ...this.space,\n brief: undefined,\n dbo: undefined,\n });\n }\n }\n }\n\n protected navigateForwardToSpacePage(\n page: string,\n navOptions?: NavigationOptions,\n ) {\n if (!this.space) {\n return Promise.reject('no space context');\n }\n return this.spaceParams.spaceNavService.navigateForwardToSpacePage(\n this.space,\n page,\n navOptions,\n );\n }\n\n // TODO: Consider removing this method as it is fragile.\n // It is easy go get it wrong and server similar purpose as spaceIDChanged$.\n protected onSpaceIdChanged(): void {\n // this.log(\n // \t`${this.className}:SpaceBaseComponent.onSpaceIdChanged() spaceID=${this.space?.id}`,\n // );\n }\n\n protected onSpaceDboChanged(): void {\n // this.log(\n // \t`${this.className}:SpaceBaseComponent.onSpaceDboChanged(): ` +\n // \t\tJSON.stringify(this.space.dbo),\n // );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/no-empty-function\n protected onRouteParamsChanged(params: ParamMap): void {}\n\n protected trackRouteParamMap(paramMap$: Observable<ParamMap>): void {\n this.trackSpaceIdFromRouteParams(paramMap$);\n paramMap$.subscribe({\n next: (paramMap) => this.onRouteParamsChanged(paramMap),\n });\n }\n\n private trackSpaceIdFromRouteParams(paramMap$: Observable<ParamMap>): void {\n trackSpaceIdAndTypeFromRouteParameter(paramMap$)\n // .pipe(\n // \ttap((v) => this.log('trackSpaceIdFromRouteParams 1', v)),\n // \tdistinctUntilChanged(\n // \t\t(previous, current) => previous?.id === current?.id,\n // \t),\n // \ttap((v) => this.log('trackSpaceIdFromRouteParams 3', v)),\n // )\n .subscribe({\n next: this.onSpaceIdChangedInUrl,\n error: this.logErrorHandler,\n });\n }\n\n private readonly onSpaceIdChangedInUrl = (space?: ISpaceContext): void => {\n const prevSpace = this.$space();\n this.log(\n `${this.className}:SpaceBaseComponent.onSpaceIdChangedInUrl(): prevSpace.id: ${prevSpace?.id} => ${space?.id}`,\n );\n if (\n space === prevSpace ||\n (space?.id === prevSpace?.id && space?.type === prevSpace?.type)\n ) {\n return;\n }\n if (space && prevSpace?.id === space?.id) {\n space = { ...prevSpace, ...space };\n }\n this.setSpaceContext(space);\n };\n\n private subscribeForSpaceChanges(spaceID: string): void {\n this.spaceService\n .watchSpace(spaceID)\n .pipe(\n this.takeUntilDestroyed(),\n takeUntil(this.spaceIDChanged$),\n map((space) => {\n return { ...space, type: space.dbo?.type };\n }),\n )\n .subscribe({\n next: this.onSpaceContextChanged,\n error: (err) => {\n if (err.code === 'permission-denied') {\n this.log(\n 'subscribeForSpaceChanges() => permission denied to read space record',\n );\n this.noPermissions = true;\n return;\n }\n this.errorLogger.logError('failed to get team record');\n },\n });\n }\n\n private getSpaceContextFromRouteState(): void {\n const space = history.state?.team as ISpaceContext;\n this.log(\n `${this.className}:SpaceBaseComponent.getSpaceContextFromRouteState()`,\n space,\n );\n if (!space?.id) {\n return;\n }\n // TODO: document why not to set team context immediately\n setTimeout(() => this.setSpaceContext(space), 1);\n }\n\n private cleanupOnUserLogout(): void {\n try {\n this.userService.userChanged.pipe(this.takeUntilDestroyed()).subscribe({\n next: (uid) => {\n if (!uid) {\n this.unsubscribe('user signed out');\n this.setSpaceContext(undefined);\n }\n this.onUserIdChanged();\n },\n error: (e) => this.logError(e, 'Failed to get user record'),\n });\n } catch (e) {\n this.logError(\n e,\n 'Failed to subscribe a hook on page cleanup on user logout',\n );\n }\n }\n\n // private updateExistingSpaceContext(spaceContext: ISpaceContext): void {\n // \tconst dtoChanged = this.spaceContext?.dto != spaceContext.dto;\n // \tthis.spaceContext = spaceContext;\n // \tif (dtoChanged) {\n // \t\tthis.onSpaceDtoChanged();\n // \t}\n // }\n\n protected setSpaceRef(spaceRef?: ISpaceRef): void {\n let idChanged = false;\n let typeChanged = false;\n this.$spaceRef.update((prev) => {\n if (prev === spaceRef) {\n return prev;\n }\n idChanged = prev?.id !== spaceRef?.id;\n typeChanged = prev?.type !== spaceRef?.type;\n if (!idChanged && !typeChanged) {\n return prev;\n }\n if (!spaceRef) {\n return undefined;\n }\n if (equalSpaceRefs(spaceRef, prev)) {\n return prev;\n }\n const keys = Object.keys(spaceRef || {});\n return (keys.length === 1 && keys[0] === 'id') ||\n (keys.length === 2 && keys.includes('id') && keys.includes('type'))\n ? spaceRef\n : spaceRef.type || (prev?.type && prev.id !== spaceRef.id)\n ? { id: spaceRef.id, type: spaceRef.type || prev?.type }\n : { id: spaceRef.id };\n });\n }\n\n private setSpaceContext(spaceContext?: ISpaceContext): void {\n const prevSpace = this.$space();\n this.log(\n `${this.className}:SpaceBaseComponent.setSpaceContext(id=${spaceContext?.id}), previous id=${prevSpace.id}`,\n spaceContext,\n );\n if (!equalSpaceRefs(spaceContext, this.$spaceRef())) {\n this.setSpaceRef(spaceContext);\n }\n if (prevSpace == spaceContext) {\n this.console.warn(\n 'Duplicate call to SpaceBaseComponent.setSpaceContext() with same spaceContext:',\n spaceContext,\n );\n return;\n }\n const idChanged = prevSpace?.id != spaceContext?.id;\n const briefChanged = !equalSpaceBriefs(\n prevSpace?.brief,\n spaceContext?.brief,\n );\n const dboChanged = prevSpace?.dbo != spaceContext?.dbo;\n this.log(\n `${this.className}:SpaceBaseComponent.setSpaceContext(id=${spaceContext?.id}) => idChanged=${idChanged}, briefChanged=${briefChanged}, dtoChanged=${dboChanged}`,\n );\n if (briefChanged) {\n this.$spaceBrief.set(spaceContext?.brief);\n this.spaceBriefChanged.next(spaceContext?.brief);\n }\n if (dboChanged) {\n this.$spaceDbo.set(spaceContext?.dbo);\n this.spaceDboChanged.next(spaceContext?.dbo);\n }\n if (spaceContext) {\n this.spaceChanged.next(spaceContext);\n }\n }\n\n private readonly onSpaceContextChanged = (space: ISpaceContext): void => {\n const isDboChanged = space.dbo !== this.$space()?.dbo;\n // this.log(\n // \t`${this.className}:SpaceBaseComponent.onSpaceContextChanged() => dtoChanged=${dtoChanged}, space:`,\n // \tspace,\n // );\n if (!space.brief && space.dbo) {\n space = { ...space, brief: space.dbo };\n }\n if (!space.type) {\n if (space.brief?.type) {\n space = { ...space, type: space.brief.type };\n }\n }\n this.setSpaceContext(space);\n if (isDboChanged) {\n this.onSpaceDboChanged();\n }\n // this.log(`${this.className} => loaded team record:`, newTeam);\n // if (newSpace.id === this.spaceContext?.id) {\n // \tthis.setNewSpaceContext({ ...this.spaceContext, ...newSpace });\n // \t// this.spaceContext = ;\n // } else { // Whe should never end up here as should unsubscribe on leaving page or ID change\n // \tthis.errorLogger.logError(`got team record after space context changed: received id=${newSpace.id}, current id=${this.spaceContext?.id}`);\n // }\n };\n\n protected saveNotes(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n // alert('Saving noes is not implemented yet');\n }\n\n protected spacePageUrl(page: string): string {\n return spacePageUrl(this.$space(), page) || '';\n }\n}\n\nexport const spacePageUrl = (\n team?: ISpaceContext,\n page?: string,\n): string | undefined => {\n return team?.id\n ? page\n ? `/space/${team.type}/${team.id}/${page}`\n : `/space/${team.type}/${team.id}`\n : undefined;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"space-base-component.directive.js","sourceRoot":"","sources":["../../../../../../libs/space/components/src/lib/space-base-component.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n Directive,\n effect,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport { ActivatedRoute, ParamMap } from '@angular/router';\nimport { NavController } from '@ionic/angular/standalone';\nimport {\n equalSpaceRefs,\n ILogger,\n ISpaceRef,\n SpaceType,\n writeCurrentSpace,\n} from '@sneat/core';\n\ntype NavigationOptions = NonNullable<\n Parameters<NavController['navigateRoot']>[1]\n>;\nimport { equalSpaceBriefs, ISpaceBrief, ISpaceDbo } from '@sneat/dto';\nimport { ISpaceContext } from '@sneat/space-models';\nimport {\n SpaceService,\n trackSpaceIdAndTypeFromRouteParameter,\n} from '@sneat/space-services';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { SneatBaseComponent } from '@sneat/ui';\nimport {\n distinctUntilChanged,\n map,\n MonoTypeOperatorFunction,\n Observable,\n shareReplay,\n Subject,\n} from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpaceComponentBaseParams } from './space-component-base-params.service';\n\n@Directive() // The @Directive is required by Angular as we are implementing OnInit\nexport abstract class SpaceBaseComponent\n extends SneatBaseComponent\n implements OnInit\n{\n protected readonly $spaceRef = signal<ISpaceRef | undefined | null>(\n undefined,\n );\n private readonly $spaceBrief = signal<ISpaceBrief | undefined | null>(\n undefined,\n );\n private readonly $spaceDbo = signal<ISpaceDbo | undefined | null>(undefined);\n\n // private readonly $_spaceID = signal<string | undefined>(undefined);\n // protected readonly $spaceID = this.$_spaceID.asReadonly();\n protected readonly $spaceID = computed(() => this.$spaceRef()?.id);\n\n // private readonly $_spaceType = signal<SpaceType | undefined>(undefined);\n // protected readonly $spaceType = this.$_spaceType.asReadonly();\n protected readonly $spaceType = computed(() => this.$spaceRef()?.type);\n\n protected readonly $space = computed<ISpaceContext>(() => {\n return {\n ...(this.$spaceRef() || { id: '' }),\n brief: this.$spaceBrief(),\n dbo: this.$spaceDbo(),\n };\n });\n\n private readonly spaceIDChanged = new Subject<string | undefined>();\n private readonly spaceTypeChanged = new Subject<SpaceType | undefined>();\n\n protected takeUntilSpaceIdChanged<T>(): MonoTypeOperatorFunction<T> {\n return takeUntil(this.spaceIDChanged$);\n }\n\n protected noPermissions = false;\n\n protected readonly spaceBriefChanged = new Subject<\n ISpaceBrief | undefined | null\n >();\n protected readonly spaceDboChanged = new Subject<\n ISpaceDbo | undefined | null\n >();\n\n // protected spaceContext?: ISpaceContext;\n\n private readonly spaceChanged = new Subject<ISpaceContext>();\n protected readonly spaceChanged$ = this.spaceChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed());\n\n protected readonly navController = inject(NavController);\n // protected readonly activeCommuneService: IActiveCommuneService;\n protected readonly userService: SneatUserService;\n // protected readonly communeService: ICommuneService;\n protected readonly spaceService = inject(SpaceService);\n // protected readonly authStateService: IAuthStateService;\n protected readonly logger: ILogger;\n // protected readonly willLeave = new Subject<void>();\n protected defaultBackPage?: string;\n\n protected readonly spaceIDChanged$ = this.spaceIDChanged.asObservable().pipe(\n this.takeUntilDestroyed(),\n distinctUntilChanged(),\n // tap((id) => console.log(this.className + '=> spaceIDChanged$: ' + id)),\n );\n\n protected readonly spaceTypeChanged$: Observable<SpaceType | undefined> =\n this.spaceTypeChanged.pipe(\n this.takeUntilDestroyed(),\n distinctUntilChanged(),\n // tap(v => console.log('spaceTypeChanged$ before replay =>', v)),\n shareReplay(1),\n // tap(v => console.log('spaceTypeChanged$ after replay =>', v)),\n );\n\n protected readonly spaceBriefChanged$ = this.spaceBriefChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged(equalSpaceBriefs));\n\n public readonly spaceDboChanged$ = this.spaceDboChanged\n .asObservable()\n .pipe(this.takeUntilDestroyed(), distinctUntilChanged());\n\n protected get space(): ISpaceContext {\n // TODO: Document why we do not allow undefined\n return this.$space() || ({ id: '' } as ISpaceContext);\n }\n\n protected get preloader() {\n return this.spaceParams.preloader;\n }\n\n protected get spaceNav() {\n return this.spaceParams.spaceNavService;\n }\n\n protected get currentUserId() {\n return this.userService.currentUserID;\n }\n\n protected readonly $defaultBackUrlSpacePath = signal('');\n\n // Intentionally not readonly, but might reconsider\n protected $defaultBackUrl = computed<string>(() => {\n const space = this.$space();\n const path = this.$defaultBackUrlSpacePath();\n let url = space ? `/space/${space.type}/${space.id}` : '';\n url = url && this.defaultBackPage ? url + '/' + this.defaultBackPage : url;\n if (path) {\n url = url + '/' + path;\n }\n return url;\n });\n\n protected readonly route = inject(ActivatedRoute);\n protected readonly spaceParams = inject(SpaceComponentBaseParams);\n\n public constructor() {\n super();\n\n let prevSpaceID: string | undefined;\n\n effect(() => {\n const spaceID = this.$spaceID();\n\n if (spaceID === prevSpaceID) {\n // This seems to be a bag or a strange feature in Angular signals?\n // this happens if we call this.spaceIDChanged.next(spaceID);\n // Giving up for now so not logging as a warning\n return;\n }\n prevSpaceID = spaceID;\n this.spaceIDChanged.next(spaceID); // This should be BEFORE onSpaceIdChanged()!\n this.onSpaceIdChanged(); // This should be AFTER spaceIDChanged.next()!\n this.unsubscribe('$spaceID() changed');\n this.$spaceBrief.set(undefined);\n this.$spaceDbo.set(undefined);\n if (spaceID) {\n setTimeout(() => this.subscribeForSpaceChanges(spaceID), 1);\n }\n });\n\n // this.spaceIDChanged$\n // \t.pipe(this.takeUntilDestroyed(), distinctUntilChanged())\n // \t.subscribe((spaceID) => {\n // \t\tif (spaceID) {\n // \t\t\t// !!! Be careful to migrate this to signal effect - can cause dead cycles!\n // \t\t\tsetTimeout(() => this.subscribeForSpaceChanges(spaceID), 1);\n // \t\t}\n // \t});\n\n effect(() => {\n this.spaceTypeChanged.next(this.$spaceType());\n });\n\n try {\n // this.navController = spaceParams.navController;\n this.userService = this.spaceParams.userService;\n this.logger = this.spaceParams.loggerFactory.getLogger(this.className);\n this.getSpaceContextFromRouteState();\n this.cleanupOnUserLogout();\n } catch (e) {\n this.errorLogger.logError(\n e,\n `Failed in ${this.className}:SpaceBaseComponent.constructor()`,\n );\n throw e;\n }\n }\n\n public ngOnInit(): void {\n // We can't call this in constructor as some members of the child class may not be initialized yet\n this.trackRouteParamMap(\n this.route.paramMap.pipe(this.takeUntilDestroyed()),\n );\n }\n\n // public ionViewWillLeave(): void {\n // \t// console.log(`${this.className}:SpaceBaseComponent.ionViewWillLeave()`);\n // \tthis.willLeave.next();\n // }\n\n protected onUserIdChanged(): void {\n if (!this.currentUserId) {\n this.subs.unsubscribe();\n if (this.space && this.space.dbo) {\n this.setSpaceContext({\n ...this.space,\n brief: undefined,\n dbo: undefined,\n });\n }\n }\n }\n\n protected navigateForwardToSpacePage(\n page: string,\n navOptions?: NavigationOptions,\n ) {\n if (!this.space) {\n return Promise.reject('no space context');\n }\n return this.spaceParams.spaceNavService.navigateForwardToSpacePage(\n this.space,\n page,\n navOptions,\n );\n }\n\n // TODO: Consider removing this method as it is fragile.\n // It is easy go get it wrong and server similar purpose as spaceIDChanged$.\n protected onSpaceIdChanged(): void {\n // this.log(\n // \t`${this.className}:SpaceBaseComponent.onSpaceIdChanged() spaceID=${this.space?.id}`,\n // );\n }\n\n protected onSpaceDboChanged(): void {\n // this.log(\n // \t`${this.className}:SpaceBaseComponent.onSpaceDboChanged(): ` +\n // \t\tJSON.stringify(this.space.dbo),\n // );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/no-empty-function\n protected onRouteParamsChanged(params: ParamMap): void {}\n\n protected trackRouteParamMap(paramMap$: Observable<ParamMap>): void {\n this.trackSpaceIdFromRouteParams(paramMap$);\n paramMap$.subscribe({\n next: (paramMap) => this.onRouteParamsChanged(paramMap),\n });\n }\n\n private trackSpaceIdFromRouteParams(paramMap$: Observable<ParamMap>): void {\n trackSpaceIdAndTypeFromRouteParameter(paramMap$)\n // .pipe(\n // \ttap((v) => this.log('trackSpaceIdFromRouteParams 1', v)),\n // \tdistinctUntilChanged(\n // \t\t(previous, current) => previous?.id === current?.id,\n // \t),\n // \ttap((v) => this.log('trackSpaceIdFromRouteParams 3', v)),\n // )\n .subscribe({\n next: this.onSpaceIdChangedInUrl,\n error: this.logErrorHandler,\n });\n }\n\n private readonly onSpaceIdChangedInUrl = (space?: ISpaceContext): void => {\n const prevSpace = this.$space();\n this.log(\n `${this.className}:SpaceBaseComponent.onSpaceIdChangedInUrl(): prevSpace.id: ${prevSpace?.id} => ${space?.id}`,\n );\n if (\n space === prevSpace ||\n (space?.id === prevSpace?.id && space?.type === prevSpace?.type)\n ) {\n return;\n }\n if (space && prevSpace?.id === space?.id) {\n space = { ...prevSpace, ...space };\n }\n this.setSpaceContext(space);\n };\n\n private subscribeForSpaceChanges(spaceID: string): void {\n this.spaceService\n .watchSpace(spaceID)\n .pipe(\n this.takeUntilDestroyed(),\n takeUntil(this.spaceIDChanged$),\n map((space) => {\n return { ...space, type: space.dbo?.type };\n }),\n )\n .subscribe({\n next: this.onSpaceContextChanged,\n error: (err) => {\n if (err.code === 'permission-denied') {\n this.log(\n 'subscribeForSpaceChanges() => permission denied to read space record',\n );\n this.noPermissions = true;\n return;\n }\n this.errorLogger.logError('failed to get team record');\n },\n });\n }\n\n private getSpaceContextFromRouteState(): void {\n const space = history.state?.team as ISpaceContext;\n this.log(\n `${this.className}:SpaceBaseComponent.getSpaceContextFromRouteState()`,\n space,\n );\n if (!space?.id) {\n return;\n }\n // TODO: document why not to set team context immediately\n setTimeout(() => this.setSpaceContext(space), 1);\n }\n\n private cleanupOnUserLogout(): void {\n try {\n this.userService.userChanged.pipe(this.takeUntilDestroyed()).subscribe({\n next: (uid) => {\n if (!uid) {\n this.unsubscribe('user signed out');\n this.setSpaceContext(undefined);\n }\n this.onUserIdChanged();\n },\n error: (e) => this.logError(e, 'Failed to get user record'),\n });\n } catch (e) {\n this.logError(\n e,\n 'Failed to subscribe a hook on page cleanup on user logout',\n );\n }\n }\n\n // private updateExistingSpaceContext(spaceContext: ISpaceContext): void {\n // \tconst dtoChanged = this.spaceContext?.dto != spaceContext.dto;\n // \tthis.spaceContext = spaceContext;\n // \tif (dtoChanged) {\n // \t\tthis.onSpaceDtoChanged();\n // \t}\n // }\n\n protected setSpaceRef(spaceRef?: ISpaceRef): void {\n let idChanged = false;\n let typeChanged = false;\n this.$spaceRef.update((prev) => {\n if (prev === spaceRef) {\n return prev;\n }\n idChanged = prev?.id !== spaceRef?.id;\n typeChanged = prev?.type !== spaceRef?.type;\n if (!idChanged && !typeChanged) {\n return prev;\n }\n if (!spaceRef) {\n return undefined;\n }\n if (equalSpaceRefs(spaceRef, prev)) {\n return prev;\n }\n const keys = Object.keys(spaceRef || {});\n return (keys.length === 1 && keys[0] === 'id') ||\n (keys.length === 2 && keys.includes('id') && keys.includes('type'))\n ? spaceRef\n : spaceRef.type || (prev?.type && prev.id !== spaceRef.id)\n ? { id: spaceRef.id, type: spaceRef.type || prev?.type }\n : { id: spaceRef.id };\n });\n const currentSpaceRef = this.$spaceRef();\n if (currentSpaceRef) {\n // Persist so the login page can restore it after sign-in. No-op unless id+type are known.\n writeCurrentSpace(currentSpaceRef);\n }\n }\n\n private setSpaceContext(spaceContext?: ISpaceContext): void {\n const prevSpace = this.$space();\n this.log(\n `${this.className}:SpaceBaseComponent.setSpaceContext(id=${spaceContext?.id}), previous id=${prevSpace.id}`,\n spaceContext,\n );\n if (!equalSpaceRefs(spaceContext, this.$spaceRef())) {\n this.setSpaceRef(spaceContext);\n }\n if (prevSpace == spaceContext) {\n this.console.warn(\n 'Duplicate call to SpaceBaseComponent.setSpaceContext() with same spaceContext:',\n spaceContext,\n );\n return;\n }\n const idChanged = prevSpace?.id != spaceContext?.id;\n const briefChanged = !equalSpaceBriefs(\n prevSpace?.brief,\n spaceContext?.brief,\n );\n const dboChanged = prevSpace?.dbo != spaceContext?.dbo;\n this.log(\n `${this.className}:SpaceBaseComponent.setSpaceContext(id=${spaceContext?.id}) => idChanged=${idChanged}, briefChanged=${briefChanged}, dtoChanged=${dboChanged}`,\n );\n if (briefChanged) {\n this.$spaceBrief.set(spaceContext?.brief);\n this.spaceBriefChanged.next(spaceContext?.brief);\n }\n if (dboChanged) {\n this.$spaceDbo.set(spaceContext?.dbo);\n this.spaceDboChanged.next(spaceContext?.dbo);\n }\n if (spaceContext) {\n this.spaceChanged.next(spaceContext);\n }\n }\n\n private readonly onSpaceContextChanged = (space: ISpaceContext): void => {\n const isDboChanged = space.dbo !== this.$space()?.dbo;\n // this.log(\n // \t`${this.className}:SpaceBaseComponent.onSpaceContextChanged() => dtoChanged=${dtoChanged}, space:`,\n // \tspace,\n // );\n if (!space.brief && space.dbo) {\n space = { ...space, brief: space.dbo };\n }\n if (!space.type) {\n if (space.brief?.type) {\n space = { ...space, type: space.brief.type };\n }\n }\n this.setSpaceContext(space);\n if (isDboChanged) {\n this.onSpaceDboChanged();\n }\n // this.log(`${this.className} => loaded team record:`, newTeam);\n // if (newSpace.id === this.spaceContext?.id) {\n // \tthis.setNewSpaceContext({ ...this.spaceContext, ...newSpace });\n // \t// this.spaceContext = ;\n // } else { // Whe should never end up here as should unsubscribe on leaving page or ID change\n // \tthis.errorLogger.logError(`got team record after space context changed: received id=${newSpace.id}, current id=${this.spaceContext?.id}`);\n // }\n };\n\n protected saveNotes(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n // alert('Saving noes is not implemented yet');\n }\n\n protected spacePageUrl(page: string): string {\n return spacePageUrl(this.$space(), page) || '';\n }\n}\n\nexport const spacePageUrl = (\n team?: ISpaceContext,\n page?: string,\n): string | undefined => {\n return team?.id\n ? page\n ? `/space/${team.type}/${team.id}/${page}`\n : `/space/${team.type}/${team.id}`\n : undefined;\n};\n"]}
|