Skip to content

Commit

Permalink
[frontend] Fix of #6404
Browse files Browse the repository at this point in the history
  • Loading branch information
Kedae committed Apr 17, 2024
1 parent c71292d commit f12de02
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 22 deletions.
38 changes: 20 additions & 18 deletions opencti-platform/opencti-front/src/relay/environment.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,25 @@ export const defaultCommitMutation = {
setSubmitting: undefined,
};

export const relayErrorHandling = (error, setSubmitting, onError) => {
if (setSubmitting) setSubmitting(false);
if (error && error.res && error.res.errors) {
const authRequired = R.filter(
(e) => R.pathOr(e.message, ['data', 'type'], e) === 'authentication',
error.res.errors,
);
if (!R.isEmpty(authRequired)) {
MESSAGING$.notifyError('Unauthorized action, please refresh your browser');
} else if (onError) {
const messages = buildErrorMessages(error);
onError(error, messages);
} else {
const messages = buildErrorMessages(error);
MESSAGING$.messages.next(messages);
}
}
};

// Relay functions
export const commitMutation = ({
mutation,
Expand All @@ -122,24 +141,7 @@ export const commitMutation = ({
optimisticUpdater,
optimisticResponse,
onCompleted,
onError: (error) => {
if (setSubmitting) setSubmitting(false);
if (error && error.res && error.res.errors) {
const authRequired = R.filter(
(e) => R.pathOr(e.message, ['data', 'type'], e) === 'authentication',
error.res.errors,
);
if (!R.isEmpty(authRequired)) {
MESSAGING$.notifyError('Unauthorized action, please refresh your browser');
} else if (onError) {
const messages = buildErrorMessages(error);
onError(error, messages);
} else {
const messages = buildErrorMessages(error);
MESSAGING$.messages.next(messages);
}
}
},
onError: (error) => relayErrorHandling(error, setSubmitting, onError),
});

export const requestSubscription = (args) => RS(environment, args);
Expand Down
23 changes: 19 additions & 4 deletions opencti-platform/opencti-front/src/utils/hooks/useFormEditor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import { useMutation, UseMutationConfig } from 'react-relay';
import { ObjectSchema, SchemaObjectDescription } from 'yup';
import { MutationParameters } from 'relay-runtime';
import { Option } from '@components/common/form/ReferenceField';
import { useCallback } from 'react';
import { convertAssignees, convertExternalReferences, convertKillChainPhases, convertMarkings, convertParticipants } from '../edition';
import useConfidenceLevel from './useConfidenceLevel';
import { relayErrorHandling } from '../../relay/environment';

export interface GenericData {
id: string;
Expand Down Expand Up @@ -52,12 +54,25 @@ const useFormEditor = (
queries: Queries,
validator: ObjectSchema<{ [p: string]: unknown }>,
) => {
const [commitRelationAdd] = useMutation(queries.relationAdd);
const [commitRelationDelete] = useMutation(queries.relationDelete);
const [commitFieldPatch] = useMutation(queries.fieldPatch);
const [commitEditionFocus] = useMutation(queries.editionFocus);
const [internalRelationAdd] = useMutation(queries.relationAdd);
const [internalRelationDelete] = useMutation(queries.relationDelete);
const [internalFieldPatch] = useMutation(queries.fieldPatch);
const [internalEditionFocus] = useMutation(queries.editionFocus);
const schemaFields = (validator.describe() as SchemaObjectDescription).fields;

const commitRelationAdd = useCallback((args: UseMutationConfig<MutationParameters>) => {
internalRelationAdd({ ...args, onError: relayErrorHandling as UseMutationConfig<MutationParameters>['onError'] });
}, [internalRelationAdd]);
const commitRelationDelete = useCallback((args: UseMutationConfig<MutationParameters>) => {
internalRelationDelete({ ...args, onError: relayErrorHandling as UseMutationConfig<MutationParameters>['onError'] });
}, [internalRelationDelete]);
const commitFieldPatch = useCallback((args: UseMutationConfig<MutationParameters>) => {
internalFieldPatch({ ...args, onError: relayErrorHandling as UseMutationConfig<MutationParameters>['onError'] });
}, [internalFieldPatch]);
const commitEditionFocus = useCallback((args: UseMutationConfig<MutationParameters>) => {
internalEditionFocus({ ...args, onError: relayErrorHandling as UseMutationConfig<MutationParameters>['onError'] });
}, [internalEditionFocus]);

const validate = (
name: string,
values: number | number[] | string | Date | Option | Option[],
Expand Down

0 comments on commit f12de02

Please sign in to comment.