Merge pull request #1738 from automatisch/AUT-849

refactor: rewrite useAdminSamlAuthProviderRoleMappings with RQ
This commit is contained in:
Ali BARIN
2024-03-18 15:19:33 +01:00
committed by GitHub
7 changed files with 48 additions and 58 deletions

View File

@@ -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;

View File

@@ -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,

View File

@@ -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
} }

View File

@@ -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
}
}
`;

View File

@@ -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;
}

View File

@@ -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,
};
}

View File

@@ -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 }} />