mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 03:05:42 +00:00
user management ui
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { getMyAdminOrganizations } from "@/shared/services/organizationsService";
|
||||
import { getMyAdminUnits } from "@/user-management/services/api/unitService";
|
||||
import { Name } from "../userManagement/types";
|
||||
|
||||
export interface OrgAdminOrganization {
|
||||
id: string;
|
||||
name: Name;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
export interface OrgAdminUnit {
|
||||
id: string;
|
||||
name: Name;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
// Stable empty arrays — reusing the same reference prevents useEffect dependency loops
|
||||
const EMPTY_ORGS: OrgAdminOrganization[] = [];
|
||||
const EMPTY_UNITS: OrgAdminUnit[] = [];
|
||||
|
||||
/**
|
||||
* Fetches the list of organizations this org-admin administers.
|
||||
* Calls GET /organizations/my-admin-organizations
|
||||
*/
|
||||
export const useMyAdminOrganizations = () => {
|
||||
const { data, isLoading, isError, refetch } = useQuery({
|
||||
queryKey: ["my-admin-organizations"],
|
||||
queryFn: async () => {
|
||||
const { data } = await getMyAdminOrganizations();
|
||||
if (Array.isArray(data)) {
|
||||
return { count: data.length, items: data as OrgAdminOrganization[] };
|
||||
}
|
||||
return {
|
||||
count: (data.count ?? data.items?.length ?? 0) as number,
|
||||
items: (data.items ?? data) as OrgAdminOrganization[],
|
||||
};
|
||||
},
|
||||
staleTime: 5 * 60 * 1000,
|
||||
retry: false,
|
||||
});
|
||||
|
||||
return {
|
||||
organizations: data?.items ?? EMPTY_ORGS,
|
||||
count: data?.count ?? 0,
|
||||
isLoading,
|
||||
isError,
|
||||
refetch,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetches the units this org-admin administers inside a given organization.
|
||||
* Calls GET /units/my-admin-units/organization/{organizationId}
|
||||
*/
|
||||
export const useMyAdminUnits = (
|
||||
organizationId: string,
|
||||
enabled: boolean = true,
|
||||
) => {
|
||||
const { data, isLoading, isError, refetch } = useQuery({
|
||||
queryKey: ["my-admin-units", organizationId],
|
||||
queryFn: async () => {
|
||||
const { data } = await getMyAdminUnits(organizationId);
|
||||
if (Array.isArray(data)) {
|
||||
return { count: data.length, items: data as OrgAdminUnit[] };
|
||||
}
|
||||
return {
|
||||
count: (data.count ?? data.items?.length ?? 0) as number,
|
||||
items: (data.items ?? data) as OrgAdminUnit[],
|
||||
};
|
||||
},
|
||||
enabled: enabled && !!organizationId,
|
||||
staleTime: 5 * 60 * 1000,
|
||||
retry: false,
|
||||
});
|
||||
|
||||
return {
|
||||
units: data?.items ?? EMPTY_UNITS,
|
||||
count: data?.count ?? 0,
|
||||
isLoading,
|
||||
isError,
|
||||
refetch,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user