grafana/public/app/features/admin/api.ts
Alexander Zobnin cf7a2ea733
RolePicker: Optimise rendering inside lists of items (#77297)
* Role picker: Load users roles in batch

* Use orgId in request

* Add roles to OrgUser type

* Improve loading logic

* Improve loading indicator

* Fix org page

* Update service accounts page

* Use bulk roles query for teams

* Use POST requests for search

* Use post request for teams

* Update betterer results

* Review suggestions

* AdminEditOrgPage: move API calls to separate file
2023-11-01 11:57:02 +01:00

39 lines
1.4 KiB
TypeScript

import { UrlQueryValue } from '@grafana/data';
import { getBackendSrv } from '@grafana/runtime';
import { contextSrv } from 'app/core/core';
import { accessControlQueryParam } from 'app/core/utils/accessControl';
import { OrgUser, AccessControlAction } from 'app/types';
const perPage = 30;
export const getOrg = async (orgId: UrlQueryValue) => {
return await getBackendSrv().get(`/api/orgs/${orgId}`);
};
export const getOrgUsers = async (orgId: UrlQueryValue, page: number) => {
if (contextSrv.hasPermission(AccessControlAction.OrgUsersRead)) {
return getBackendSrv().get(`/api/orgs/${orgId}/users/search`, accessControlQueryParam({ perpage: perPage, page }));
}
return { orgUsers: [] };
};
export const getUsersRoles = async (orgId: number, users: OrgUser[]) => {
const userIds = users.map((u) => u.userId);
const roles = await getBackendSrv().post(`/api/access-control/users/roles/search`, { userIds, orgId });
users.forEach((u) => {
u.roles = roles ? roles[u.userId] || [] : [];
});
};
export const updateOrgUserRole = (orgUser: OrgUser, orgId: UrlQueryValue) => {
return getBackendSrv().patch(`/api/orgs/${orgId}/users/${orgUser.userId}`, orgUser);
};
export const removeOrgUser = (orgUser: OrgUser, orgId: UrlQueryValue) => {
return getBackendSrv().delete(`/api/orgs/${orgId}/users/${orgUser.userId}`);
};
export const updateOrgName = (name: string, orgId: number) => {
return getBackendSrv().put(`/api/orgs/${orgId}`, { name });
};