Skip to content

Commit

Permalink
SCTOR-834: use self endpoint user permissions if roles interface pres…
Browse files Browse the repository at this point in the history
…ent, by refactor useUserTenantPermissions hook to achieve that
  • Loading branch information
aidynoJ committed Jun 13, 2024
1 parent 2e162f6 commit d8755e6
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 43 deletions.
51 changes: 51 additions & 0 deletions src/hooks/useUserSelfTenantPermissions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { useQuery } from 'react-query';

import { useStripes } from '../StripesContext';
import { useNamespace } from '../components';
import useOkapiKy from '../useOkapiKy';

const INITIAL_DATA = [];

const useUserSelfTenantPermissions = (
{ tenantId },
options = {},
) => {
const stripes = useStripes();
const ky = useOkapiKy();
const api = ky.extend({
hooks: {
beforeRequest: [(req) => req.headers.set('X-Okapi-Tenant', tenantId)]
}
});
const [namespace] = useNamespace({ key: 'user-self-permissions' });

const user = stripes.user.user;

const {
isFetching,
isLoading,
data,
} = useQuery(
[namespace, user?.id, tenantId],
({ signal }) => {
return api.get(
'users-keycloak/_self',
{ signal },
).json();
},
{
enabled: Boolean(user?.id && tenantId) && stripes.hasInterface('users-keycloak'),
keepPreviousData: true,
...options,
},
);

return ({
isFetching,
isLoading,
userPermissions: data?.permissions.permissions || INITIAL_DATA,
totalRecords: data?.permissions.permissions.length || 0,
});
};

export default useUserSelfTenantPermissions;
59 changes: 59 additions & 0 deletions src/hooks/useUserTenantPermissionNames.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { useQuery } from 'react-query';

import { useStripes } from '../StripesContext';
import { useNamespace } from '../components';
import useOkapiKy from '../useOkapiKy';

const INITIAL_DATA = [];

const useUserTenantPermissionNames = (
{ tenantId },
options = {},
) => {
const stripes = useStripes();
const ky = useOkapiKy();
const api = ky.extend({
hooks: {
beforeRequest: [(req) => req.headers.set('X-Okapi-Tenant', tenantId)]
}
});
const [namespace] = useNamespace({ key: 'user-affiliation-permissions' });

const user = stripes.user.user;

const searchParams = {
full: 'true',
indexField: 'userId',
};

const {
isFetching,
isLoading,
data = {},
} = useQuery(
[namespace, user?.id, tenantId],
({ signal }) => {
return api.get(
`perms/users/${user.id}/permissions`,
{
searchParams,
signal,
},
).json();
},
{
enabled: Boolean(user?.id && tenantId),
keepPreviousData: true,
...options,
},
);

return ({
isFetching,
isLoading,
userPermissions: data.permissionNames || INITIAL_DATA,
totalRecords: data.totalRecords,
});
};

export default useUserTenantPermissionNames;
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
} from 'react-query';

import permissions from 'fixtures/permissions';
import useUserTenantPermissions from './useUserTenantPermissions';
import useUserTenantPermissionNames from './useUserTenantPermissionNames';
import useOkapiKy from '../useOkapiKy';

jest.mock('../useOkapiKy');
Expand Down Expand Up @@ -61,7 +61,7 @@ describe('useUserTenantPermissions', () => {
userId: 'userId',
tenantId: 'tenantId',
};
const { result } = renderHook(() => useUserTenantPermissions(options), { wrapper });
const { result } = renderHook(() => useUserTenantPermissionNames(options), { wrapper });

await waitFor(() => !result.current.isLoading);

Expand Down
61 changes: 20 additions & 41 deletions src/hooks/useUserTenantPermissions.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,37 @@
import { useQuery } from 'react-query';

import { useStripes } from '../StripesContext';
import { useNamespace } from '../components';
import useOkapiKy from '../useOkapiKy';

const INITIAL_DATA = [];
import useUserSelfTenantPermissions from './useUserSelfTenantPermissions';
import useUserTenantPermissionNames from './useUserTenantPermissionNames';

const useUserTenantPermissions = (
{ tenantId },
options = {},
) => {
const stripes = useStripes();
const ky = useOkapiKy();
const api = ky.extend({
hooks: {
beforeRequest: [(req) => req.headers.set('X-Okapi-Tenant', tenantId)]
}
});
const [namespace] = useNamespace({ key: 'user-affiliation-permissions' });

const user = stripes.user.user;

const searchParams = {
full: 'true',
indexField: 'userId',
};
const {
isFetching: isPermissionsFetching,
isLoading: isPermissionsLoading,
userPermissions: permissionsData = {},
totalRecords: permissionsTotalRecords
} = useUserTenantPermissionNames({ tenantId }, options);

const {
isFetching,
isLoading,
data = {},
} = useQuery(
[namespace, user?.id, tenantId],
({ signal }) => {
return api.get(
`perms/users/${user.id}/permissions`,
{
searchParams,
signal,
},
).json();
},
{
enabled: Boolean(user?.id && tenantId),
keepPreviousData: true,
...options,
},
);
isFetching: isSelfPermissionsFetching,
isLoading: isSelfPermissionsLoading,
userPermissions:selfPermissionsData = {},
totalRecords: selfPermissionsTotalRecords
} = useUserSelfTenantPermissions({ tenantId }, options);

const isFetching = stripes.hasInterface('roles') ? isSelfPermissionsFetching : isPermissionsFetching;
const isLoading = stripes.hasInterface('roles') ? isSelfPermissionsLoading : isPermissionsLoading;
const userPermissions = stripes.hasInterface('roles') ? selfPermissionsData : permissionsData;
const totalRecords = stripes.hasInterface('roles') ? selfPermissionsTotalRecords : permissionsTotalRecords;

return ({
isFetching,
isLoading,
userPermissions: data.permissionNames || INITIAL_DATA,
totalRecords: data.totalRecords,
userPermissions,
totalRecords
});
};

Expand Down

0 comments on commit d8755e6

Please sign in to comment.