Add and Edit functional

parent 3e749018
......@@ -31,24 +31,11 @@ export const organizationApiSlice = apiSlice.injectEndpoints({
invalidatesTags: ["organizations"],
}),
editOrganization: builder.mutation<Organization, Partial<Organization>>({
query: ({ id, ...rest }) => ({
url: `organizations/save?id=${id}`,
query: ({ ...rest }) => ({
url: `organizations/save`,
method: 'POST',
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"],
}),
deleteOrganization: builder.mutation<{ success: boolean; id: number }, number>({
......
import React, { useEffect } from 'react';
import { useNavigate, useParams } from 'react-router';
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 { useSelector, useDispatch } from 'react-redux';
import './style.css';
......@@ -26,6 +26,7 @@ const AddEditPage: React.FC = () => {
const { id } = useParams<{ id: string }>();
const isEdit = Boolean(id);
const { data, isLoading, isError } = useGetOrganizationQuery(id!, { skip: !isEdit });
const { data: organizations } = useGetOrganizationsQuery();
const [addNewOrganization] = useAddNewOrganizationMutation();
const [editOrganization] = useEditOrganizationMutation();
const [form] = Form.useForm();
......@@ -41,13 +42,23 @@ const AddEditPage: React.FC = () => {
}
}, [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 normalizedValues = {
...values,
status: values.status === 'active' ? 2 : values.status === 'blocked' ? 1 : 0,
deleted: null,
id: id ? parseInt(id) : undefined,
};
if (checkCodeExists(values.code)) {
message.error('Код организации уже существует!');
return;
}
try {
if (isEdit) {
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