about summary refs log tree commit diff
path: root/src/state/models
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models')
-rw-r--r--src/state/models/navigation.ts18
-rw-r--r--src/state/models/session.ts15
-rw-r--r--src/state/models/shell-ui.ts29
3 files changed, 32 insertions, 30 deletions
diff --git a/src/state/models/navigation.ts b/src/state/models/navigation.ts
index 758ae37d8..1e639b0f3 100644
--- a/src/state/models/navigation.ts
+++ b/src/state/models/navigation.ts
@@ -222,6 +222,24 @@ export class NavigationModel {
     this.tabs.find(t => t.id === ptr[0])?.setTitle(ptr[1], title)
   }
 
+  handleLink(url: string) {
+    let path
+    if (url.startsWith('/')) {
+      path = url
+    } else if (url.startsWith('http')) {
+      try {
+        path = new URL(url).pathname
+      } catch (e) {
+        console.error('Invalid url', url, e)
+        return
+      }
+    } else {
+      console.error('Invalid url', url)
+      return
+    }
+    this.navigate(path)
+  }
+
   // tab management
   // =
 
diff --git a/src/state/models/session.ts b/src/state/models/session.ts
index e10a08e86..0f1faeaba 100644
--- a/src/state/models/session.ts
+++ b/src/state/models/session.ts
@@ -1,6 +1,9 @@
 import {makeAutoObservable} from 'mobx'
 import {sessionClient as AtpApi} from '../../third-party/api/index'
-import type {SessionServiceClient} from '../../third-party/api/src/index'
+import type {
+  SessionServiceClient,
+  Session,
+} from '../../third-party/api/src/index'
 import type * as GetAccountsConfig from '../../third-party/api/src/client/types/com/atproto/server/getAccountsConfig'
 import {isObj, hasProp} from '../lib/type-guards'
 import {RootStoreModel} from './root-store'
@@ -88,6 +91,16 @@ export class SessionModel {
     this.data = data
   }
 
+  updateAuthTokens(session: Session) {
+    if (this.data) {
+      this.setState({
+        ...this.data,
+        accessJwt: session.accessJwt,
+        refreshJwt: session.refreshJwt,
+      })
+    }
+  }
+
   private configureApi(): boolean {
     if (!this.data) {
       return false
diff --git a/src/state/models/shell-ui.ts b/src/state/models/shell-ui.ts
index 73b1bd56e..13d720730 100644
--- a/src/state/models/shell-ui.ts
+++ b/src/state/models/shell-ui.ts
@@ -2,23 +2,6 @@ import {makeAutoObservable} from 'mobx'
 import {ProfileViewModel} from './profile-view'
 import * as Post from '../../third-party/api/src/client/types/app/bsky/feed/post'
 
-export interface LinkActionsModelOpts {
-  newTab?: boolean
-}
-export class LinkActionsModel {
-  name = 'link-actions'
-  newTab: boolean
-
-  constructor(
-    public href: string,
-    public title: string,
-    opts?: LinkActionsModelOpts,
-  ) {
-    makeAutoObservable(this)
-    this.newTab = typeof opts?.newTab === 'boolean' ? opts.newTab : true
-  }
-}
-
 export class ConfirmModel {
   name = 'confirm'
 
@@ -31,14 +14,6 @@ export class ConfirmModel {
   }
 }
 
-export class SharePostModel {
-  name = 'share-post'
-
-  constructor(public href: string) {
-    makeAutoObservable(this)
-  }
-}
-
 export class EditProfileModel {
   name = 'edit-profile'
 
@@ -85,9 +60,7 @@ export interface ComposerOpts {
 export class ShellUiModel {
   isModalActive = false
   activeModal:
-    | LinkActionsModel
     | ConfirmModel
-    | SharePostModel
     | EditProfileModel
     | CreateSceneModel
     | ServerInputModel
@@ -101,9 +74,7 @@ export class ShellUiModel {
 
   openModal(
     modal:
-      | LinkActionsModel
       | ConfirmModel
-      | SharePostModel
       | EditProfileModel
       | CreateSceneModel
       | ServerInputModel,