c980ce1d8d
- getDashboardData aggregates open jobs, pending-action jobs, unread notifications, pending finance totals, approved connection count, recent jobs (up to 8) and recent notifications (up to 5) — single Promise.all so the dashboard renders in one round-trip. - Four stat cards, each a Link to the relevant module; tone (positive / negative) flips between clinic (payable) and lab (receivable). - Clinic users with zero approved connections see a 'Bağlantı Kur' prompt card so they don't get stuck on /jobs/new. - Recent jobs table is role-aware: lab sees Klinik column + 'Son Gelen İşler' header, clinic sees Laboratuvar column + 'Son Giden İşler' header. - Recent notifications panel with read/unread dot, clickable header arrow to /notifications. - ActiveContext now carries 'kind' (mirror of TenantSettings.kind) so we no longer reach into ctx.settings?.kind in callers.
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import "server-only";
|
|
|
|
import { Query } from "node-appwrite";
|
|
|
|
import { createAdminClient, getCurrentUser } from "./server";
|
|
import { DATABASE_ID, TABLES, type TenantKind, type TenantSettings } from "./schema";
|
|
import { getActiveTenantId, getUserTeams } from "./tenant";
|
|
|
|
export type ActiveContext = {
|
|
user: { id: string; name: string; email: string };
|
|
tenantId: string;
|
|
kind: TenantKind | null;
|
|
settings: TenantSettings | null;
|
|
};
|
|
|
|
export async function getActiveContext(): Promise<ActiveContext | null> {
|
|
const user = await getCurrentUser();
|
|
if (!user) return null;
|
|
|
|
let tenantId = await getActiveTenantId();
|
|
if (!tenantId) {
|
|
const teams = await getUserTeams();
|
|
tenantId = teams?.teams[0]?.$id ?? null;
|
|
}
|
|
if (!tenantId) return null;
|
|
|
|
let settings: TenantSettings | null = null;
|
|
try {
|
|
const { tablesDB } = createAdminClient();
|
|
const result = await tablesDB.listRows({
|
|
databaseId: DATABASE_ID,
|
|
tableId: TABLES.tenantSettings,
|
|
queries: [Query.equal("tenantId", tenantId), Query.limit(1)],
|
|
});
|
|
settings = (result.rows[0] as unknown as TenantSettings) ?? null;
|
|
} catch {
|
|
settings = null;
|
|
}
|
|
|
|
return {
|
|
user: { id: user.$id, name: user.name, email: user.email },
|
|
tenantId,
|
|
kind: settings?.kind ?? null,
|
|
settings,
|
|
};
|
|
}
|