Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/utils/data/useAppOrAdminData.ts
T

44 lines
2.1 KiB
TypeScript

import { useMatches } from "react-router";
import { TenantSimple } from "../db/tenants.db.server";
import { UserWithoutPassword } from "../db/users.db.server";
import { AppLoaderData } from "./useAppData";
import { AdminLoaderData } from "./useAdminData";
import { EntityWithDetails } from "../db/entities/entities.db.server";
import { GroupWithDetails } from "../db/permissions/groups.db.server";
import { OnboardingSessionWithDetails } from "~/modules/onboarding/db/onboardingSessions.db.server";
import { DefaultPermission } from "~/application/dtos/shared/DefaultPermissions";
import { EntityGroupWithDetails } from "../db/entities/entityGroups.db.server";
import { TenantTypeWithDetails } from "../db/tenants/tenantTypes.db.server";
import { PlanFeatureUsageDto } from "~/application/dtos/subscriptions/PlanFeatureUsageDto";
import type { ProductAccessDecision } from "@toolctrl/entitlements";
export type AppOrAdminData = {
// i18n: Record<string, Language>;
user: UserWithoutPassword;
myTenants: TenantSimple[];
currentTenant: TenantSimple | null;
allRoles: { id: string; name: string; description: string }[];
// roles: UserRoleWithPermission[];
permissions: DefaultPermission[];
entities: EntityWithDetails[];
entityGroups: EntityGroupWithDetails[];
isSuperUser: boolean;
isSuperAdmin: boolean;
myGroups: GroupWithDetails[];
lng?: string;
onboardingSession: OnboardingSessionWithDetails | null;
tenantTypes: TenantTypeWithDetails[];
credits?: PlanFeatureUsageDto | undefined;
productAccess?: Record<string, ProductAccessDecision>;
};
export function useAppOrAdminData(): AppOrAdminData {
const appPaths: string[] = ["routes/app.$tenant", "routes/app"];
const appData = (useMatches().find((f) => appPaths.includes(f.id.toLowerCase()))?.data ?? {}) as AppLoaderData;
const adminPaths: string[] = ["routes/admin", "routes/admin.__host", "routes/dashboard"];
const adminData = (useMatches().find((f) => adminPaths.includes(f.id.toLowerCase()) || Boolean((f.data as Partial<AdminLoaderData> | undefined)?.isSuperAdmin))?.data ?? {}) as AdminLoaderData;
const appOrAdminData = appData.user ? appData : adminData;
return appOrAdminData;
}