error of merging

parent 68ea51f6
...@@ -12,11 +12,11 @@ interface Organization { ...@@ -12,11 +12,11 @@ interface Organization {
export const apiSlice = createApi({ export const apiSlice = createApi({
reducerPath: 'api', reducerPath: 'api',
baseQuery: fetchBaseQuery({ baseUrl: "https://669f8d88b132e2c136fe5106.mockapi.io/api/v1" }), baseQuery: fetchBaseQuery({ baseUrl: "https://669f8d88b132e2c136fe5106.mockapi.io/api/v1" }),
tagTypes: ["organizations"], tagTypes: ["organizations"], // Определяет типы тегов для инвалидации кэша или инвалидации данных, связанных с конкретными запросами или мутациями.
endpoints: (builder) => ({ endpoints: (builder) => ({
getOrganizations: builder.query<Organization[], void>({ getOrganizations: builder.query<Organization[], void>({
query: () => '/organizations', query: () => '/organizations',
providesTags: ["organizations"], providesTags: ["organizations"], // Определяет теги, которые будут инвалидированы при получении данных, чтобы обновить кэш, связанный с этими данными.
}), }),
getOrganization: builder.query<Organization, string>({ getOrganization: builder.query<Organization, string>({
query: (orgId) => `/organizations/${orgId}`, query: (orgId) => `/organizations/${orgId}`,
...@@ -27,14 +27,14 @@ export const apiSlice = createApi({ ...@@ -27,14 +27,14 @@ export const apiSlice = createApi({
method: 'POST', method: 'POST',
body: initialOrg, body: initialOrg,
}), }),
invalidatesTags: ["organizations"], invalidatesTags: ["organizations"], // при успешном выполнении этой мутации необходимо инвалидировать теги, связанные с организациями, чтобы обновить кэш.
}), }),
editOrganization: builder.mutation<Organization, Partial<Organization>>({ editOrganization: builder.mutation<Organization, Partial<Organization>>({
query: ({ id, ...rest }) => ({ query: ({ id, ...rest }) => ({
url: `/organizations/${id}`, url: `/organizations/${id}`,
method: 'PUT', method: 'PUT',
body: rest, body: rest,
}), })
}), }),
deleteOrganization: builder.mutation<{ success: boolean; id: number }, number>({ deleteOrganization: builder.mutation<{ success: boolean; id: number }, number>({
query: (orgId) => ({ query: (orgId) => ({
......
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import { useNavigate } from 'react-router'; import { useNavigate } from 'react-router';
import { MaterialSymbol } from 'react-material-symbols'; import { MaterialSymbol } from 'react-material-symbols';
import { Button, Pagination, Space, Spin, Table, Tag, Modal } from 'antd'; import { Button, Pagination, Space, Spin, Table, Tag, Modal } from 'antd';
...@@ -74,7 +74,7 @@ const ActionColumn: React.FC<{ data: any }> = ({ data }) => { ...@@ -74,7 +74,7 @@ const ActionColumn: React.FC<{ data: any }> = ({ data }) => {
const showDeleteModal = () => { const showDeleteModal = () => {
setOpen(true); setOpen(true);
}; };
const handleDeleteModalOk = () => { const handleDeleteModalOk = () => {
setOpen(false); setOpen(false);
}; };
...@@ -95,8 +95,8 @@ const ActionColumn: React.FC<{ data: any }> = ({ data }) => { ...@@ -95,8 +95,8 @@ const ActionColumn: React.FC<{ data: any }> = ({ data }) => {
open={open} open={open}
title={`Вы уверены в том, что хотите удалить ${data.organization_name}?`} title={`Вы уверены в том, что хотите удалить ${data.organization_name}?`}
footer={() => { footer={() => {
return <div style={{textAlign: 'start', marginTop: '1rem'}}> return <div style={{ textAlign: 'start', marginTop: '1rem' }}>
<Button key="submit" type="primary" danger onClick={handleDeleteModalOk} style={{marginRight: '.5rem'}}> <Button key="submit" type="primary" danger onClick={handleDeleteModalOk} style={{ marginRight: '.5rem' }}>
Удалить Удалить
</Button> </Button>
<Button key="back" onClick={handleDeleteModalCancel}> <Button key="back" onClick={handleDeleteModalCancel}>
...@@ -104,22 +104,31 @@ const ActionColumn: React.FC<{ data: any }> = ({ data }) => { ...@@ -104,22 +104,31 @@ const ActionColumn: React.FC<{ data: any }> = ({ data }) => {
</Button> </Button>
</div>; </div>;
}} }}
/> />
</Space> </Space>
) )
} }
const HomePage: React.FC = () => { const HomePage: React.FC = () => {
const [totalOrgNumber, setTotalOrgNumber] = useState(0);
const [currentPage, setCurrentPage] = useState(1);
const ORG_NUMBER_PER_PAGE = 15;
const navigate = useNavigate(); const navigate = useNavigate();
const handleAddClick = () => { const handleAddClick = () => {
navigate("/add"); navigate("/add");
}; };
const handlePaginationChange = (page: number | string | null) => { const handlePaginationChange = (page: React.SetStateAction<number>) => {
console.log("Current page:", page); setCurrentPage(page);
}; };
const paginatedData = (dataSource: DataType[]) => {
const startIndex = (currentPage - 1) * ORG_NUMBER_PER_PAGE;
const endIndex = Math.min(startIndex + ORG_NUMBER_PER_PAGE, totalOrgNumber);
return dataSource.slice(startIndex, endIndex);
}
const { const {
data: orgs = [], data: orgs = [],
isLoading, isLoading,
...@@ -134,11 +143,17 @@ const HomePage: React.FC = () => { ...@@ -134,11 +143,17 @@ const HomePage: React.FC = () => {
table = <Spin /> table = <Spin />
} else if (isSuccess) { } else if (isSuccess) {
const dataSource = orgs.map((org) => ({ ...org, key: org.id })); const dataSource = orgs.map((org) => ({ ...org, key: org.id }));
table = <Table dataSource={dataSource} columns={columns} pagination={false} /> table = <Table dataSource={paginatedData(dataSource)} columns={columns} pagination={false} />
} else if (isError) { } else if (isError) {
table = <div>{error.toString()}</div> table = <div>{error.toString()}</div>
} }
useEffect(() => {
if (isSuccess) {
setTotalOrgNumber(orgs.length);
}
}, [isSuccess, orgs]);
return ( return (
<div className="container"> <div className="container">
<section className='section'> <section className='section'>
...@@ -151,11 +166,11 @@ const HomePage: React.FC = () => { ...@@ -151,11 +166,11 @@ const HomePage: React.FC = () => {
{table} {table}
</div> </div>
<div className='pagination-container'> <div className='pagination-container'>
<Pagination current={1} defaultCurrent={1} pageSize={1} total={10} onChange={handlePaginationChange} /> <Pagination current={currentPage} defaultCurrent={1} pageSize={ORG_NUMBER_PER_PAGE} total={totalOrgNumber} onChange={handlePaginationChange} />
</div> </div>
</section> </section>
</div> </div>
); );
} }
export default HomePage; export default HomePage;
\ No newline at end of file
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