Skip to content

Commit 1a58862

Browse files
committed
chore: rebase with main. share only at ledger level.
1 parent e99204b commit 1a58862

File tree

3 files changed

+48
-40
lines changed

3 files changed

+48
-40
lines changed

dashboard/backend/api.ts

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1777,19 +1777,7 @@ export class FPApiSQL implements FPApiInterface {
17771777
return Result.Err("Cannot share ledger with yourself");
17781778
}
17791779

1780-
// 6. Add user to tenant first
1781-
const rAddUserToTenant = await this.addUserToTenant(this.db, {
1782-
userName: req.email,
1783-
tenantId: ledger.tenantId,
1784-
userId: targetUser.userId,
1785-
role: "member",
1786-
});
1787-
1788-
if (rAddUserToTenant.isErr()) {
1789-
return Result.Err(rAddUserToTenant.Err());
1790-
}
1791-
1792-
// 7. Add user to ledger
1780+
// 6. Add user to ledger (no need to add to tenant for sharing)
17931781
const rAddUser = await this.addUserToLedger(this.db, {
17941782
userName: req.email,
17951783
ledgerId: ledgerId,
@@ -1803,15 +1791,17 @@ export class FPApiSQL implements FPApiInterface {
18031791
return Result.Err(rAddUser.Err());
18041792
}
18051793

1794+
const addedUser = rAddUser.Ok();
1795+
18061796
return Result.Ok({
18071797
type: "resShareWithUser",
18081798
success: true,
18091799
message: `Successfully shared ledger with ${req.email}`,
1810-
ledgerId: ledgerId,
1811-
userId: targetUser.userId,
1800+
ledgerId: addedUser.ledgerId,
1801+
userId: addedUser.userId,
18121802
email: req.email,
1813-
role: req.role || "member",
1814-
right: req.right || "write",
1803+
role: addedUser.role,
1804+
right: addedUser.right,
18151805
});
18161806
}
18171807

dashboard/backend/cf-serve.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ import { drizzle } from "drizzle-orm/d1";
22
import { D1Database, Fetcher, Request as CFRequest, Response as CFResponse } from "@cloudflare/workers-types";
33
import { DefaultHttpHeaders, createHandler } from "./create-handler.js";
44
import { URI } from "@adviser/cement";
5-
import { Request as CFRequest, Response as CFResponse, D1Database, Fetcher } from "@cloudflare/workers-types";
6-
import { drizzle } from "drizzle-orm/d1";
7-
import { CORS, createHandler } from "./create-handler.js";
85
import { resWellKnownJwks } from "./well-known-jwks.js";
96

107
export interface Env {

dashboard/src/pages/cloud/api/token-auto.tsx

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import React, { useContext, useEffect, useState } from "react";
21
import { URI } from "@adviser/cement";
2+
import { TenantLedger } from "@fireproof/core-types-protocols-cloud";
33
import { useMutation, useQuery } from "@tanstack/react-query";
44
import { base64url } from "jose";
5+
import React, { useContext, useEffect, useState } from "react";
56
import { Navigate, useSearchParams } from "react-router-dom";
67
import { AppContext } from "../../../app-context.jsx";
7-
import { TenantLedger } from "@fireproof/core-types-protocols-cloud";
88
import { ListTenantsLedgersByUser } from "../../../cloud-context.jsx";
99

1010
interface 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

Comments
 (0)