diff --git a/packages/services/src/Domain/Session/SessionsClientInterface.ts b/packages/services/src/Domain/Session/SessionsClientInterface.ts index 08db150e1..8de0a24e9 100644 --- a/packages/services/src/Domain/Session/SessionsClientInterface.ts +++ b/packages/services/src/Domain/Session/SessionsClientInterface.ts @@ -11,6 +11,7 @@ export interface SessionsClientInterface { createDemoShareToken(): Promise populateSessionFromDemoShareToken(token: Base64String): Promise getUser(): User | undefined + isCurrentSessionReadOnly(): boolean | undefined register(email: string, password: string, ephemeral: boolean): Promise signIn( email: string, diff --git a/packages/snjs/lib/Services/Session/SessionManager.ts b/packages/snjs/lib/Services/Session/SessionManager.ts index 5a96a4bd3..e5454acb5 100644 --- a/packages/snjs/lib/Services/Session/SessionManager.ts +++ b/packages/snjs/lib/Services/Session/SessionManager.ts @@ -77,6 +77,7 @@ export class SNSessionManager { private user?: Responses.User private isSessionRenewChallengePresented = false + private session?: Session | LegacySession constructor( private diskStorageService: DiskStorageService, @@ -149,6 +150,8 @@ export class SNSessionManager } private setSession(session: Session | LegacySession, persist = true): void { + this.session = session + if (session instanceof Session) { this.httpService.setSession(session) } @@ -170,6 +173,18 @@ export class SNSessionManager return this.user } + isCurrentSessionReadOnly(): boolean | undefined { + if (this.session === undefined) { + return undefined + } + + if (this.session instanceof LegacySession) { + return false + } + + return this.session.isReadOnly() + } + public getSureUser() { return this.user as Responses.User } diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Account/SubscriptionSharing/SubscriptionSharing.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Account/SubscriptionSharing/SubscriptionSharing.tsx index 679f7b5fc..8aa8cfb84 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Account/SubscriptionSharing/SubscriptionSharing.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Account/SubscriptionSharing/SubscriptionSharing.tsx @@ -1,4 +1,4 @@ -import { FeatureStatus, FeatureIdentifier } from '@standardnotes/snjs' +import { FeatureStatus, FeatureIdentifier, SessionsClientInterface } from '@standardnotes/snjs' import { observer } from 'mobx-react-lite' import { FunctionComponent, useState } from 'react' @@ -26,8 +26,11 @@ const SubscriptionSharing: FunctionComponent = ({ application, viewContro const subscriptionState = viewControllerManager.subscriptionController + const isReadOnlySession = application.sessions.isCurrentSessionReadOnly() + const isSubscriptionSharingFeatureAvailable = - application.features.getFeatureStatus(FeatureIdentifier.SubscriptionSharing) === FeatureStatus.Entitled + application.features.getFeatureStatus(FeatureIdentifier.SubscriptionSharing) === FeatureStatus.Entitled && + !isReadOnlySession const closeInviteDialog = () => setIsInviteDialogOpen(false)