Merge pull request #1738 from automatisch/AUT-849
refactor: rewrite useAdminSamlAuthProviderRoleMappings with RQ
This commit is contained in:
@@ -1,17 +0,0 @@
|
|||||||
import SamlAuthProvider from '../../models/saml-auth-provider.ee.js';
|
|
||||||
|
|
||||||
const getSamlAuthProviderRoleMappings = async (_parent, params, context) => {
|
|
||||||
context.currentUser.can('read', 'SamlAuthProvider');
|
|
||||||
|
|
||||||
const samlAuthProvider = await SamlAuthProvider.query()
|
|
||||||
.findById(params.id)
|
|
||||||
.throwIfNotFound();
|
|
||||||
|
|
||||||
const roleMappings = await samlAuthProvider
|
|
||||||
.$relatedQuery('samlAuthProvidersRoleMappings')
|
|
||||||
.orderBy('remote_role_name', 'asc');
|
|
||||||
|
|
||||||
return roleMappings;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getSamlAuthProviderRoleMappings;
|
|
@@ -9,7 +9,6 @@ import getDynamicFields from './queries/get-dynamic-fields.js';
|
|||||||
import getFlow from './queries/get-flow.js';
|
import getFlow from './queries/get-flow.js';
|
||||||
import getFlows from './queries/get-flows.js';
|
import getFlows from './queries/get-flows.js';
|
||||||
import getNotifications from './queries/get-notifications.js';
|
import getNotifications from './queries/get-notifications.js';
|
||||||
import getSamlAuthProviderRoleMappings from './queries/get-saml-auth-provider-role-mappings.ee.js';
|
|
||||||
import getStepWithTestExecutions from './queries/get-step-with-test-executions.js';
|
import getStepWithTestExecutions from './queries/get-step-with-test-executions.js';
|
||||||
import getUsers from './queries/get-users.js';
|
import getUsers from './queries/get-users.js';
|
||||||
import testConnection from './queries/test-connection.js';
|
import testConnection from './queries/test-connection.js';
|
||||||
@@ -26,7 +25,6 @@ const queryResolvers = {
|
|||||||
getFlow,
|
getFlow,
|
||||||
getFlows,
|
getFlows,
|
||||||
getNotifications,
|
getNotifications,
|
||||||
getSamlAuthProviderRoleMappings,
|
|
||||||
getStepWithTestExecutions,
|
getStepWithTestExecutions,
|
||||||
getUsers,
|
getUsers,
|
||||||
testConnection,
|
testConnection,
|
||||||
|
@@ -26,7 +26,6 @@ type Query {
|
|||||||
getBillingAndUsage: GetBillingAndUsage
|
getBillingAndUsage: GetBillingAndUsage
|
||||||
getConfig(keys: [String]): JSONObject
|
getConfig(keys: [String]): JSONObject
|
||||||
getNotifications: [Notification]
|
getNotifications: [Notification]
|
||||||
getSamlAuthProviderRoleMappings(id: String!): [SamlAuthProvidersRoleMapping]
|
|
||||||
getUsers(limit: Int!, offset: Int!): UserConnection
|
getUsers(limit: Int!, offset: Int!): UserConnection
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,11 +0,0 @@
|
|||||||
import { gql } from '@apollo/client';
|
|
||||||
export const GET_SAML_AUTH_PROVIDER_ROLE_MAPPINGS = gql`
|
|
||||||
query GetSamlAuthProviderRoleMappings($id: String!) {
|
|
||||||
getSamlAuthProviderRoleMappings(id: $id) {
|
|
||||||
id
|
|
||||||
samlAuthProviderId
|
|
||||||
roleId
|
|
||||||
remoteRoleName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`;
|
|
@@ -0,0 +1,24 @@
|
|||||||
|
import { useQuery } from '@tanstack/react-query';
|
||||||
|
|
||||||
|
import api from 'helpers/api';
|
||||||
|
|
||||||
|
export default function useAdminSamlAuthProviderRoleMappings({
|
||||||
|
adminSamlAuthProviderId,
|
||||||
|
}) {
|
||||||
|
const query = useQuery({
|
||||||
|
queryKey: ['adminSamlAuthProviderRoleMappings', adminSamlAuthProviderId],
|
||||||
|
queryFn: async ({ signal }) => {
|
||||||
|
const { data } = await api.get(
|
||||||
|
`/v1/admin/saml-auth-providers/${adminSamlAuthProviderId}/role-mappings`,
|
||||||
|
{
|
||||||
|
signal,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
enabled: !!adminSamlAuthProviderId,
|
||||||
|
});
|
||||||
|
|
||||||
|
return query;
|
||||||
|
}
|
@@ -1,21 +0,0 @@
|
|||||||
import * as React from 'react';
|
|
||||||
import { useLazyQuery } from '@apollo/client';
|
|
||||||
import { GET_SAML_AUTH_PROVIDER_ROLE_MAPPINGS } from 'graphql/queries/get-saml-auth-provider-role-mappings';
|
|
||||||
export default function useSamlAuthProviderRoleMappings(providerId) {
|
|
||||||
const [getSamlAuthProviderRoleMappings, { data, loading }] = useLazyQuery(
|
|
||||||
GET_SAML_AUTH_PROVIDER_ROLE_MAPPINGS,
|
|
||||||
);
|
|
||||||
React.useEffect(() => {
|
|
||||||
if (providerId) {
|
|
||||||
getSamlAuthProviderRoleMappings({
|
|
||||||
variables: {
|
|
||||||
id: providerId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, [providerId]);
|
|
||||||
return {
|
|
||||||
roleMappings: data?.getSamlAuthProviderRoleMappings || [],
|
|
||||||
loading,
|
|
||||||
};
|
|
||||||
}
|
|
@@ -5,29 +5,39 @@ import Stack from '@mui/material/Stack';
|
|||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar';
|
import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
import Form from 'components/Form';
|
import Form from 'components/Form';
|
||||||
import { UPSERT_SAML_AUTH_PROVIDERS_ROLE_MAPPINGS } from 'graphql/mutations/upsert-saml-auth-providers-role-mappings';
|
import { UPSERT_SAML_AUTH_PROVIDERS_ROLE_MAPPINGS } from 'graphql/mutations/upsert-saml-auth-providers-role-mappings';
|
||||||
import useFormatMessage from 'hooks/useFormatMessage';
|
import useFormatMessage from 'hooks/useFormatMessage';
|
||||||
import useSamlAuthProviderRoleMappings from 'hooks/useSamlAuthProviderRoleMappings';
|
import useAdminSamlAuthProviderRoleMappings from 'hooks/useAdminSamlAuthProviderRoleMappings';
|
||||||
import RoleMappingsFieldArray from './RoleMappingsFieldsArray';
|
import RoleMappingsFieldArray from './RoleMappingsFieldsArray';
|
||||||
|
|
||||||
function generateFormRoleMappings(roleMappings) {
|
function generateFormRoleMappings(roleMappings) {
|
||||||
if (roleMappings.length === 0) {
|
if (roleMappings?.length === 0) {
|
||||||
return [{ roleId: '', remoteRoleName: '' }];
|
return [{ roleId: '', remoteRoleName: '' }];
|
||||||
}
|
}
|
||||||
return roleMappings.map(({ roleId, remoteRoleName }) => ({
|
|
||||||
|
return roleMappings?.map(({ roleId, remoteRoleName }) => ({
|
||||||
roleId,
|
roleId,
|
||||||
remoteRoleName,
|
remoteRoleName,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
function RoleMappings({ provider, providerLoading }) {
|
function RoleMappings({ provider, providerLoading }) {
|
||||||
const formatMessage = useFormatMessage();
|
const formatMessage = useFormatMessage();
|
||||||
const enqueueSnackbar = useEnqueueSnackbar();
|
const enqueueSnackbar = useEnqueueSnackbar();
|
||||||
const { roleMappings, loading: roleMappingsLoading } =
|
|
||||||
useSamlAuthProviderRoleMappings(provider?.id);
|
const { data, isLoading: isAdminSamlAuthProviderRoleMappingsLoading } =
|
||||||
|
useAdminSamlAuthProviderRoleMappings({
|
||||||
|
adminSamlAuthProviderId: provider?.id,
|
||||||
|
});
|
||||||
|
const roleMappings = data?.data;
|
||||||
|
|
||||||
const [
|
const [
|
||||||
upsertSamlAuthProvidersRoleMappings,
|
upsertSamlAuthProvidersRoleMappings,
|
||||||
{ loading: upsertRoleMappingsLoading },
|
{ loading: upsertRoleMappingsLoading },
|
||||||
] = useMutation(UPSERT_SAML_AUTH_PROVIDERS_ROLE_MAPPINGS);
|
] = useMutation(UPSERT_SAML_AUTH_PROVIDERS_ROLE_MAPPINGS);
|
||||||
|
|
||||||
const handleRoleMappingsUpdate = async (values) => {
|
const handleRoleMappingsUpdate = async (values) => {
|
||||||
try {
|
try {
|
||||||
if (provider?.id) {
|
if (provider?.id) {
|
||||||
@@ -44,6 +54,7 @@ function RoleMappings({ provider, providerLoading }) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
enqueueSnackbar(formatMessage('roleMappingsForm.successfullySaved'), {
|
enqueueSnackbar(formatMessage('roleMappingsForm.successfullySaved'), {
|
||||||
variant: 'success',
|
variant: 'success',
|
||||||
SnackbarProps: {
|
SnackbarProps: {
|
||||||
@@ -55,15 +66,22 @@ function RoleMappings({ provider, providerLoading }) {
|
|||||||
throw new Error('Failed while saving!');
|
throw new Error('Failed while saving!');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultValues = useMemo(
|
const defaultValues = useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
roleMappings: generateFormRoleMappings(roleMappings),
|
roleMappings: generateFormRoleMappings(roleMappings),
|
||||||
}),
|
}),
|
||||||
[roleMappings],
|
[roleMappings],
|
||||||
);
|
);
|
||||||
if (providerLoading || !provider?.id || roleMappingsLoading) {
|
|
||||||
|
if (
|
||||||
|
providerLoading ||
|
||||||
|
!provider?.id ||
|
||||||
|
isAdminSamlAuthProviderRoleMappingsLoading
|
||||||
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Divider sx={{ pt: 2 }} />
|
<Divider sx={{ pt: 2 }} />
|
||||||
|
Reference in New Issue
Block a user