1- import { useState , useCallback } from "react" ;
1+ import { useState , useCallback , useEffect } from "react" ;
22import { usePlugin } from "./PluginContext" ;
33import { Notice } from "obsidian" ;
44import { updateUsername } from "~/utils/supabaseContext" ;
55import { initializeSupabaseSync } from "~/utils/syncDgNodesToSupabase" ;
6+ import { nextRoot } from "@repo/utils/execContext" ;
7+ import { getLoggedInClient } from "~/utils/supabaseContext" ;
68
79export const AdminPanelSettings = ( ) => {
810 const plugin = usePlugin ( ) ;
@@ -12,6 +14,26 @@ export const AdminPanelSettings = () => {
1214 const [ username , setUsername ] = useState < string > (
1315 plugin . settings . username || "" ,
1416 ) ;
17+ const [ accessToken , setAccessToken ] = useState < string | null > ( null ) ;
18+ const [ refreshToken , setRefreshToken ] = useState < string | null > ( null ) ;
19+ useEffect ( ( ) => {
20+ if ( syncModeEnabled ) {
21+ const fetchTokens = async ( ) => {
22+ const client = await getLoggedInClient ( plugin ) ;
23+ if ( client ) {
24+ const session = await client . auth . getSession ( ) ;
25+ if ( session . data . session ) {
26+ setAccessToken ( session . data . session . access_token ) ;
27+ setRefreshToken ( session . data . session . refresh_token ) ;
28+ }
29+ }
30+ } ;
31+ void fetchTokens ( ) ;
32+ } else {
33+ setAccessToken ( null ) ;
34+ setRefreshToken ( null ) ;
35+ }
36+ } , [ syncModeEnabled ] ) ;
1537
1638 const handleSyncModeToggle = useCallback (
1739 async ( newValue : boolean ) => {
@@ -80,6 +102,32 @@ export const AdminPanelSettings = () => {
80102 />
81103 </ div >
82104 </ div >
105+ < div
106+ className = {
107+ "setting-item " + ( accessToken && refreshToken ? "" : "hidden" )
108+ }
109+ >
110+ < div className = "setting-item-info" >
111+ < div className = "setting-item-name" > Group management</ div >
112+ < div className = "setting-item-description" >
113+ This will allow you to view and manage your sharing groups
114+ </ div >
115+ </ div >
116+ < div className = "setting-item-control" >
117+ { accessToken && refreshToken && (
118+ < button
119+ onClick = { ( ) => {
120+ window . open (
121+ `${ nextRoot ( ) } /auth/token?t=${ accessToken } &r=${ refreshToken } &url=/` ,
122+ "_blank" ,
123+ ) ;
124+ } }
125+ >
126+ Manage groups
127+ </ button >
128+ ) }
129+ </ div >
130+ </ div >
83131 </ div >
84132 ) ;
85133} ;
0 commit comments