Skip to content

Commit

Permalink
fix: review error for dataset and distirbution
Browse files Browse the repository at this point in the history
  • Loading branch information
EmmanuelDemey committed Jan 16, 2025
1 parent f119fa3 commit 9344801
Show file tree
Hide file tree
Showing 7 changed files with 186 additions and 111 deletions.
90 changes: 88 additions & 2 deletions src/packages/modules-datasets/datasets.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { useQuery } from '@tanstack/react-query';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { useNavigate } from 'react-router-dom';

import { DatasetsApi, DistributionApi } from '@sdk/index';

import { PartialDistribution } from '../model/Dataset';
import { useGoBack } from '@utils/hooks/useGoBack';

import { Distribution, PartialDistribution } from '../model/Dataset';

export const useDatasets = () => {
return useQuery({
Expand Down Expand Up @@ -40,3 +43,86 @@ export const useDataset = (id: string) => {
queryFn: () => DatasetsApi.getById(id),
});
};

export const useDatasetPublisher = (id: string) => {
const queryClient = useQueryClient();

const {
isPending: isPublishing,
mutate: publish,
error: validationServerSideError,
} = useMutation({
mutationFn: () => {
return DistributionApi.publish(id);
},

onSuccess: (id) => {
queryClient.invalidateQueries({
queryKey: ['distributions', id],
});
},
});

return { isPublishing, publish, validationServerSideError };
};

export const useDatasetDeleter = (id: string) => {
const queryClient = useQueryClient();
const navigate = useNavigate();

const {
isPending: isDeleting,
mutate: remove,
error: deleteServerSideError,
} = useMutation({
mutationFn: () => {
return DistributionApi.deleteDistribution(id);
},

onSuccess: (id) => {
return Promise.all([
queryClient.removeQueries({ queryKey: ['distributions', id] }),
queryClient.invalidateQueries({ queryKey: ['distributions'] }),
]).then(() => navigate('/datasets/distributions'));
},
});

return { isDeleting, remove, deleteServerSideError };
};

export const useCreateOrUpdateDistribution = (
isEditing: boolean,
distribution: Distribution,
) => {
const queryClient = useQueryClient();
const goBack = useGoBack();

const {
isPending: isSaving,
mutate: save,
error: serverSideError,
} = useMutation({
mutationFn: () => {
const promise = isEditing
? DistributionApi.putDistribution
: DistributionApi.postDistribution;
return promise(distribution).catch((e: unknown) => {
throw e;
});
},
onSuccess: (id) => {
if (isEditing) {
queryClient.invalidateQueries({
queryKey: ['distributions', id],
});
}
queryClient.invalidateQueries({
queryKey: ['distributions'],
});

goBack(`/datasets/distributions/${id}`, !isEditing);
},
});

return { isSaving, save, serverSideError };
};
9 changes: 7 additions & 2 deletions src/packages/modules-datasets/datasets/edit/edit.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
CancelButton,
SaveButton,
} from '@components/buttons/buttons-with-icons';
import { GlobalClientSideErrorBloc } from '@components/errors-bloc';
import { ErrorBloc, GlobalClientSideErrorBloc } from '@components/errors-bloc';
import { Loading, Saving } from '@components/loading';
import { PageTitleBlock } from '@components/page-title-block';

Expand Down Expand Up @@ -67,7 +67,11 @@ export const Component = () => {

const queryClient = useQueryClient();

const { isPending: isSaving, mutate: save } = useMutation({
const {
isPending: isSaving,
mutate: save,
error: serverSideError,
} = useMutation({
mutationFn: () => {
const formattedDataset = { themes: [], ...editingDataset };
if (isEditing) {
Expand Down Expand Up @@ -222,6 +226,7 @@ export const Component = () => {
D={D}
/>
)}
{serverSideError && <ErrorBloc error={[serverSideError]} D={D} />}

<form>
<LayoutWithLateralMenu layoutConfiguration={layoutConfiguration}>
Expand Down
19 changes: 13 additions & 6 deletions src/packages/modules-datasets/datasets/view/view.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import { StatisticalInformations } from './StatisticalInformations';
import { ViewMenu } from './menu';

const Dataset = (props) => {
const [serverSideError, setServerSideError] = useState();
const { id } = useParams();
const navigate = useNavigate();
const [archivageUnits, setArchivageUnits] = useState([]);
Expand All @@ -43,7 +42,11 @@ const Dataset = (props) => {
const [secondLang] = useSecondLang();
const queryClient = useQueryClient();

const { isPending: isPublishing, mutate: publish } = useMutation({
const {
isPending: isPublishing,
mutate: publish,
error: publishServerSideError,
} = useMutation({
mutationFn: () => {
return DatasetsApi.publish(id);
},
Expand All @@ -53,13 +56,14 @@ const Dataset = (props) => {
},
});

const { isPending: isDeleting, mutate: remove } = useMutation({
const {
isPending: isDeleting,
mutate: remove,
error: serverSideError,
} = useMutation({
mutationFn: () => {
return DatasetsApi.deleteDataset(id);
},
onError: (error) => {
setServerSideError(error);
},
onSuccess: (id) => {
return Promise.all([
queryClient.removeQueries(['datasets', id]),
Expand Down Expand Up @@ -87,6 +91,9 @@ const Dataset = (props) => {
{serverSideError && (
<ErrorBloc error={[serverSideError]} D={DatasetDictionary} />
)}
{publishServerSideError && (
<ErrorBloc error={[publishServerSideError]} D={DatasetDictionary} />
)}

<CheckSecondLang />

Expand Down
34 changes: 11 additions & 23 deletions src/packages/modules-datasets/distributions/edit.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
import { default as ReactSelect } from 'react-select';
Expand All @@ -10,6 +9,7 @@ import {
} from '@components/buttons/buttons-with-icons';
import {
ClientSideError,
ErrorBloc,
GlobalClientSideErrorBloc,
} from '@components/errors-bloc';
import { TextInput, UrlInput } from '@components/form/input';
Expand All @@ -19,14 +19,16 @@ import { Loading, Saving } from '@components/loading';
import { PageTitleBlock } from '@components/page-title-block';
import { MDEditor } from '@components/rich-editor/react-md-editor';

import { DistributionApi } from '@sdk/index';

import { useGoBack } from '@utils/hooks/useGoBack';
import { useTitle } from '@utils/hooks/useTitle';

import { D1, D2 } from '../../deprecated-locales';
import D from '../../deprecated-locales/build-dictionary';
import { useDatasetsForDistributions, useDistribution } from '../datasets';
import {
useCreateOrUpdateDistribution,
useDatasetsForDistributions,
useDistribution,
} from '../datasets';
import { ByteSizeInput } from './edit/byte-size-input';
import { validate } from './validation';

Expand Down Expand Up @@ -55,25 +57,10 @@ export const Component = () => {
label: dataset.label,
})) ?? [];

const queryClient = useQueryClient();

const { isPending: isSaving, mutate: save } = useMutation({
mutationFn: () => {
if (isEditing) {
return DistributionApi.putDistribution(editingDistribution);
}
return DistributionApi.postDistribution(editingDistribution);
},

onSuccess: (id) => {
if (isEditing) {
queryClient.invalidateQueries(['distributions', id]);
}
queryClient.invalidateQueries(['distributions']);

goBack(`/datasets/distributions/${id}`, !isEditing);
},
});
const { isSaving, save, serverSideError } = useCreateOrUpdateDistribution(
isEditing,
editingDistribution,
);

useTitle(D.distributionsTitle, editingDistribution?.labelLg1);

Expand Down Expand Up @@ -117,6 +104,7 @@ export const Component = () => {
D={D}
/>
)}
{serverSideError && <ErrorBloc error={serverSideError} D={D} />}
<form>
<Row>
<div className="col-md-12 form-group">
Expand Down
77 changes: 0 additions & 77 deletions src/packages/modules-datasets/distributions/view/view.jsx

This file was deleted.

67 changes: 67 additions & 0 deletions src/packages/modules-datasets/distributions/view/view.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { useParams } from 'react-router-dom';

import { CheckSecondLang } from '@components/check-second-lang';
import { ErrorBloc } from '@components/errors-bloc';
import { Deleting, Loading, Publishing } from '@components/loading';
import { PageTitleBlock } from '@components/page-title-block';

import { useTitle } from '@utils/hooks/useTitle';

import D from '../../../deprecated-locales/build-dictionary';
import {
useDataset,
useDatasetDeleter,
useDatasetPublisher,
useDistribution,
} from '../../datasets';
import { ViewMenu } from './menu';
import { ViewMainBlock } from './view-main-block';

export const Component = (props) => {
const { id } = useParams<{ id: string }>();

const { data: distribution, isLoading } = useDistribution(id!);

const { data: dataset, isLoading: isLoadingDataSet } = useDataset(
distribution?.idDataset,
);

const { isPublishing, publish, validationServerSideError } =
useDatasetPublisher(id!);

const { isDeleting, remove, deleteServerSideError } = useDatasetDeleter(id!);

useTitle(D.distributionsTitle, distribution?.labelLg1);

if (isLoading || isLoadingDataSet) return <Loading />;
if (isDeleting) return <Deleting />;
if (isPublishing) return <Publishing />;

return (
<div className="container">
<PageTitleBlock
titleLg1={distribution.labelLg1}
titleLg2={distribution.labelLg1}
/>

<ViewMenu
distribution={distribution}
dataset={dataset}
onPublish={publish}
onDelete={remove}
{...props}
/>

{validationServerSideError && (
<ErrorBloc error={validationServerSideError} D={D} />
)}
{deleteServerSideError && (
<ErrorBloc error={deleteServerSideError} D={D} />
)}

<CheckSecondLang />

<ViewMainBlock distribution={distribution} />
</div>
);
};
Loading

0 comments on commit 9344801

Please sign in to comment.