Add and Edit functional

parent 3e749018
...@@ -31,24 +31,11 @@ export const organizationApiSlice = apiSlice.injectEndpoints({ ...@@ -31,24 +31,11 @@ export const organizationApiSlice = apiSlice.injectEndpoints({
invalidatesTags: ["organizations"], invalidatesTags: ["organizations"],
}), }),
editOrganization: builder.mutation<Organization, Partial<Organization>>({ editOrganization: builder.mutation<Organization, Partial<Organization>>({
query: ({ id, ...rest }) => ({ query: ({ ...rest }) => ({
url: `organizations/save?id=${id}`, url: `organizations/save`,
method: 'POST', method: 'POST',
body: rest, body: rest,
}), }),
async onQueryStarted(_arg, { dispatch, queryFulfilled }) {
try {
const { data } = await queryFulfilled;
dispatch(organizationApiSlice.util.updateQueryData('getOrganizations', undefined, (draft) => {
const index = draft.findIndex(org => org.id === data.id);
if (index !== -1) {
draft[index] = data;
}
}));
} catch {
// handle error
}
},
invalidatesTags: ["organizations"], invalidatesTags: ["organizations"],
}), }),
deleteOrganization: builder.mutation<{ success: boolean; id: number }, number>({ deleteOrganization: builder.mutation<{ success: boolean; id: number }, number>({
......
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { useNavigate, useParams } from 'react-router'; import { useNavigate, useParams } from 'react-router';
import { Form, Input, Button, Select, message } from 'antd'; import { Form, Input, Button, Select, message } from 'antd';
import { useAddNewOrganizationMutation, useEditOrganizationMutation, useGetOrganizationQuery } from '../../features/api/organizationApiSlice'; import { useAddNewOrganizationMutation, useEditOrganizationMutation, useGetOrganizationQuery, useGetOrganizationsQuery } from '../../features/api/organizationApiSlice';
import { setTotalOrgNumber, setCurrentPage } from '../../features/pagination/mainPagination'; import { setTotalOrgNumber, setCurrentPage } from '../../features/pagination/mainPagination';
import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';
import './style.css'; import './style.css';
...@@ -26,6 +26,7 @@ const AddEditPage: React.FC = () => { ...@@ -26,6 +26,7 @@ const AddEditPage: React.FC = () => {
const { id } = useParams<{ id: string }>(); const { id } = useParams<{ id: string }>();
const isEdit = Boolean(id); const isEdit = Boolean(id);
const { data, isLoading, isError } = useGetOrganizationQuery(id!, { skip: !isEdit }); const { data, isLoading, isError } = useGetOrganizationQuery(id!, { skip: !isEdit });
const { data: organizations } = useGetOrganizationsQuery();
const [addNewOrganization] = useAddNewOrganizationMutation(); const [addNewOrganization] = useAddNewOrganizationMutation();
const [editOrganization] = useEditOrganizationMutation(); const [editOrganization] = useEditOrganizationMutation();
const [form] = Form.useForm(); const [form] = Form.useForm();
...@@ -41,13 +42,23 @@ const AddEditPage: React.FC = () => { ...@@ -41,13 +42,23 @@ const AddEditPage: React.FC = () => {
} }
}, [data, form]); }, [data, form]);
const checkCodeExists = (code: string) => {
return organizations?.some(org => (org.code === code) && (org.id !== (id ? parseInt(id) : null)));
};
const onFinish = async (values: OrganizationValues) => { const onFinish = async (values: OrganizationValues) => {
const normalizedValues = { const normalizedValues = {
...values, ...values,
status: values.status === 'active' ? 2 : values.status === 'blocked' ? 1 : 0, status: values.status === 'active' ? 2 : values.status === 'blocked' ? 1 : 0,
deleted: null, deleted: null,
id: id ? parseInt(id) : undefined,
}; };
if (checkCodeExists(values.code)) {
message.error('Код организации уже существует!');
return;
}
try { try {
if (isEdit) { if (isEdit) {
await editOrganization({ ...normalizedValues }).unwrap(); await editOrganization({ ...normalizedValues }).unwrap();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment