1- import React , { useContext , useEffect , useState } from "react" ;
21import { URI } from "@adviser/cement" ;
2+ import { TenantLedger } from "@fireproof/core-types-protocols-cloud" ;
33import { useMutation , useQuery } from "@tanstack/react-query" ;
44import { base64url } from "jose" ;
5+ import React , { useContext , useEffect , useState } from "react" ;
56import { Navigate , useSearchParams } from "react-router-dom" ;
67import { AppContext } from "../../../app-context.jsx" ;
7- import { TenantLedger } from "@fireproof/core-types-protocols-cloud" ;
88import { ListTenantsLedgersByUser } from "../../../cloud-context.jsx" ;
99
1010interface TenantLedgerWithName {
@@ -51,9 +51,12 @@ export function ApiTokenAuto() {
5151 ) ;
5252 }
5353
54- // Get user's tenants and ledgers
54+ // Get user's tenants and ledgers (includes both owned and shared ledgers)
5555 const { data : tenantsData , error : tenantsError } = cloud . getListTenantsLedgersByUser ( ) ;
5656
57+ // Also get all ledgers user is a member of (including shared ones not in their tenants)
58+ const { data : allUserLedgers , error : allUserLedgersError } = cloud . getListLedgersByUser ( ) ;
59+
5760 // Create ledger mutation
5861 const createLedgerMutation = useMutation ( {
5962 mutationFn : async ( { tenantId, name } : { tenantId : string ; name : string } ) => {
@@ -70,9 +73,9 @@ export function ApiTokenAuto() {
7073 } ,
7174 } ) ;
7275
73- // Process ledger data when tenants are loaded
76+ // Process ledger data when tenants/ledgers are loaded
7477 useEffect ( ( ) => {
75- if ( ! tenantsData || tenantsData . length === 0 || ledgerInfo ) {
78+ if ( ledgerInfo ) {
7679 return ;
7780 }
7881
@@ -86,27 +89,45 @@ export function ApiTokenAuto() {
8689 return ;
8790 }
8891
89- // Look for existing ledger by name or ID
92+ // Look for existing ledger by name or ID in all user's ledgers (including shared)
9093 let foundLedger : TenantLedgerWithName | null = null ;
9194
92- for ( const tenant of tenantsData ) {
93- for ( const ledger of tenant . ledgers ) {
94- if ( ledger . name === ledgerName || ( ledgerId && ledger . ledgerId === ledgerId ) ) {
95- foundLedger = {
96- tenant : tenant . tenant . tenantId ,
97- ledger : ledger . ledgerId ,
98- name : ledger . name ,
99- } ;
100- break ;
95+ // First check in allUserLedgers (includes shared ledgers)
96+ if ( allUserLedgers ?. ledgers ) {
97+ const matchingLedger = allUserLedgers . ledgers . find (
98+ ( ledger ) => ledger . name === ledgerName || ( ledgerId && ledger . ledgerId === ledgerId ) ,
99+ ) ;
100+
101+ if ( matchingLedger ) {
102+ foundLedger = {
103+ tenant : matchingLedger . tenantId ,
104+ ledger : matchingLedger . ledgerId ,
105+ name : matchingLedger . name ,
106+ } ;
107+ }
108+ }
109+
110+ // Fallback: check in tenantsData if not found
111+ if ( ! foundLedger && tenantsData && tenantsData . length > 0 ) {
112+ for ( const tenant of tenantsData ) {
113+ for ( const ledger of tenant . ledgers ) {
114+ if ( ledger . name === ledgerName || ( ledgerId && ledger . ledgerId === ledgerId ) ) {
115+ foundLedger = {
116+ tenant : tenant . tenant . tenantId ,
117+ ledger : ledger . ledgerId ,
118+ name : ledger . name ,
119+ } ;
120+ break ;
121+ }
101122 }
123+ if ( foundLedger ) break ;
102124 }
103- if ( foundLedger ) break ;
104125 }
105126
106127 if ( foundLedger ) {
107128 setLedgerInfo ( foundLedger ) ;
108- } else {
109- // Need to create a new ledger
129+ } else if ( tenantsData && tenantsData . length > 0 ) {
130+ // Only create a new ledger if user has tenants (don't create for shared-only users)
110131 const targetTenant = tenantId
111132 ? tenantsData . find ( ( t : ListTenantsLedgersByUser ) => t . tenant . tenantId === tenantId ) ?. tenant
112133 : tenantsData [ 0 ] ?. tenant ;
@@ -118,7 +139,7 @@ export function ApiTokenAuto() {
118139 } ) ;
119140 }
120141 }
121- } , [ tenantsData , tenantId , ledgerId , ledgerName , ledgerInfo , createLedgerMutation ] ) ;
142+ } , [ tenantsData , allUserLedgers , tenantId , ledgerId , ledgerName , ledgerInfo , createLedgerMutation ] ) ;
122143
123144 // Handle successful ledger creation
124145 useEffect ( ( ) => {
@@ -182,7 +203,7 @@ export function ApiTokenAuto() {
182203 } , [ cloudToken , backUrl , countdownSecs ] ) ;
183204
184205 // Show errors
185- const error = tenantsError || createLedgerMutation . error || errorToken ;
206+ const error = tenantsError || allUserLedgersError || createLedgerMutation . error || errorToken ;
186207 if ( error ) {
187208 return (
188209 < div style = { { padding : "40px" , textAlign : "center" } } >
0 commit comments