From dcb92e197c3728a332181b6ad6fe1e7184ac30a6 Mon Sep 17 00:00:00 2001 From: Grog Date: Wed, 28 Oct 2026 12:14:40 +0300 Subject: [PATCH 1/6] refactoring --- web/src/layouts/CatalogueGroups.tsx | 37 +++++++++++++------ web/src/layouts/CatalogueJur.tsx | 4 +- web/src/layouts/ConsolidationReportPage.tsx | 2 +- web/src/layouts/Groups.tsx | 2 +- .../ArchiveCompanyGroupModal.tsx | 0 .../CatalogueCompanyGroupHeader.tsx} | 6 +-- .../CatalogueCompanyGroupTabs.css} | 0 .../CatalogueCompanyGroupTabs.tsx} | 16 ++++---- .../CompanyGroupForm/CompanyGroupForm.tsx | 12 +++--- .../CompanyGroupsList/CompanyGroupsList.css | 0 .../CompanyGroupsList/CompanyGroupsList.tsx | 10 ++--- .../CompanyGroupsTable/CompanyGroupsTable.tsx | 10 ++--- .../CompanyGroupsTable/config.tsx | 4 +- .../CatalogueJurForm/CatalogueJurForm.tsx | 16 ++++---- .../CatalogueJurMoveForm.tsx} | 12 +++--- .../CatalogueJurTable/CatalogueJurTable.tsx | 25 ++++++------- .../CatalogueJurTable/config.tsx | 8 ++-- .../CatalogueJurWithdrawForm.tsx} | 8 ++-- .../ConsolidatedChessContent.tsx | 12 +++--- .../ConsolidationChessFormatTableFilter.tsx | 0 .../ConsolidatedChessResTable.css | 0 .../ConsolidationChessResTable.tsx | 6 +-- .../ConsolidatedChessTable.css | 0 .../ConsolidationChessTable.tsx | 6 +-- .../ConsolidationChessTableFilter.tsx | 10 ++--- .../DeleteRelatedGroupModal.tsx | 0 .../RelatedGroupForm/RelatedGroupForm.tsx | 12 +++--- .../RelatedGroupTable/RelatedGroupTable.tsx | 14 +++---- .../RelatedGroupTable/config.tsx | 8 ++-- 29 files changed, 126 insertions(+), 114 deletions(-) rename web/src/widgets/{ => CatalogueCompanyGroup}/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx (100%) rename web/src/widgets/{CatalogueGroupHeader/CatalogueGroupHeader.tsx => CatalogueCompanyGroup/CatalogueCompanyGroupHeader/CatalogueCompanyGroupHeader.tsx} (93%) rename web/src/widgets/{CataloguGroupTabs/CataloguGroupTabs.css => CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css} (100%) rename web/src/widgets/{CataloguGroupTabs/CataloguGroupTabs.tsx => CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx} (53%) rename web/src/widgets/{ => CatalogueCompanyGroup}/CompanyGroupForm/CompanyGroupForm.tsx (90%) rename web/src/widgets/{ => CatalogueCompanyGroup}/CompanyGroupsList/CompanyGroupsList.css (100%) rename web/src/widgets/{ => CatalogueCompanyGroup}/CompanyGroupsList/CompanyGroupsList.tsx (92%) rename web/src/widgets/{ => CatalogueCompanyGroup}/CompanyGroupsTable/CompanyGroupsTable.tsx (87%) rename web/src/widgets/{ => CatalogueCompanyGroup}/CompanyGroupsTable/config.tsx (81%) rename web/src/widgets/{ => CatalogueJur}/CatalogueJurForm/CatalogueJurForm.tsx (94%) rename web/src/widgets/{MoveCatalogueJurForm/MoveCatalogueJurForm.tsx => CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx} (89%) rename web/src/widgets/{ => CatalogueJur}/CatalogueJurTable/CatalogueJurTable.tsx (90%) rename web/src/widgets/{ => CatalogueJur}/CatalogueJurTable/config.tsx (87%) rename web/src/widgets/{WithdrawCatalogueJurForm/WithdrawCatalogueJurForm.tsx => CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx} (91%) rename web/src/widgets/{ConsolidatedChessContent => ConsolidationChess/ConsolidationChessContent}/ConsolidatedChessContent.tsx (96%) rename web/src/widgets/{ => ConsolidationChess}/ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter.tsx (100%) rename web/src/widgets/{ => ConsolidationChess}/ConsolidationChessResTable/ConsolidatedChessResTable.css (100%) rename web/src/widgets/{ => ConsolidationChess}/ConsolidationChessResTable/ConsolidationChessResTable.tsx (95%) rename web/src/widgets/{ => ConsolidationChess}/ConsolidationChessTable/ConsolidatedChessTable.css (100%) rename web/src/widgets/{ => ConsolidationChess}/ConsolidationChessTable/ConsolidationChessTable.tsx (96%) rename web/src/widgets/{ => ConsolidationChess}/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx (94%) rename web/src/widgets/{ => RelatedGroup}/DeleteRelatedGroupModal/DeleteRelatedGroupModal.tsx (100%) rename web/src/widgets/{ => RelatedGroup}/RelatedGroupForm/RelatedGroupForm.tsx (90%) rename web/src/widgets/{ => RelatedGroup}/RelatedGroupTable/RelatedGroupTable.tsx (89%) rename web/src/widgets/{ => RelatedGroup}/RelatedGroupTable/config.tsx (80%) diff --git a/web/src/layouts/CatalogueGroups.tsx b/web/src/layouts/CatalogueGroups.tsx index a4f39bf..e9d8d20 100644 --- a/web/src/layouts/CatalogueGroups.tsx +++ b/web/src/layouts/CatalogueGroups.tsx @@ -21,16 +21,19 @@ import type { CatalogueJurFormProps } from '../types/catalogueJur/catalogueJur'; import type { CompanyGroupFormProps } from '../types/companyGroups/companyGroups'; import type { CreateEntityKind, RelatedGroupFormType } from '../types/relatedGroup/relatedGroup'; import { useNotificationApi } from '../utils/useNotification'; -import { ArchiveCompanyGroupModal } from '../widgets/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal'; -import { CataloguGroupTabs, type CatalogueGroupTabKey } from '../widgets/CataloguGroupTabs/CataloguGroupTabs'; -import { CompanyGroupHeader } from '../widgets/CatalogueGroupHeader/CatalogueGroupHeader'; -import { CatalogueJurForm } from '../widgets/CatalogueJurForm/CatalogueJurForm'; -import { CatalogueJurTable } from '../widgets/CatalogueJurTable/CatalogueJurTable'; -import { CompanyGroupForm } from '../widgets/CompanyGroupForm/CompanyGroupForm'; -import { CompanyGroupsList } from '../widgets/CompanyGroupsList/CompanyGroupsList'; +import { ArchiveCompanyGroupModal } from '../widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal'; +import { CompanyGroupHeader } from '../widgets/CatalogueCompanyGroup/CatalogueCompanyGroupHeader/CatalogueCompanyGroupHeader'; +import { + type CatalogueCompanyGroupTabKey, + CatalogueCompanyGroupTabs, +} from '../widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs'; +import { CompanyGroupForm } from '../widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm'; +import { CompanyGroupsList } from '../widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList'; +import { CatalogueJurForm } from '../widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm'; +import { CatalogueJurTable } from '../widgets/CatalogueJur/CatalogueJurTable/CatalogueJurTable'; import { CreateEntityPickerModal } from '../widgets/CreateEntityPickerModal/CreateEntityPickerModal'; -import { RelatedGroupForm } from '../widgets/RelatedGroupForm/RelatedGroupForm'; -import { RelatedGroupTable } from '../widgets/RelatedGroupTable/RelatedGroupTable'; +import { RelatedGroupForm } from '../widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm'; +import { RelatedGroupTable } from '../widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable'; export function CatalogueGroup() { const dispatch = useAppDispatch(); @@ -44,7 +47,7 @@ export function CatalogueGroup() { const [companyGroupEditFormOpen, setCompanyGroupEditFormOpen] = useState(false); const [companyGroupDeleteOpen, setCompanyGroupDeleteOpen] = useState(false); const [companyGroupDeleteLoading, setCompanyGroupDeleteLoading] = useState(false); - const [activeTab, setActiveTab] = useState('legal_entities'); + const [activeTab, setActiveTab] = useState('legal_entities'); const [gskData, setGskData] = useState([]); const [gszData, setGszData] = useState([]); const activeCompanyGroup = useAppSelector((state) => state.catalogue_jur.activeCompanyGroup); @@ -186,7 +189,12 @@ export function CatalogueGroup() { setActiveTab(val)} gskData={gskData} gszData={gszData} /> + setActiveTab(val)} + gskData={gskData} + gszData={gszData} + /> } /> )} @@ -196,7 +204,12 @@ export function CatalogueGroup() { data={activeTab === 'gsz' ? gszData : gskData} getData={() => getRelatedGroupsHandler()} tabsComponent={ - setActiveTab(val)} gskData={gskData} gszData={gszData} /> + setActiveTab(val)} + gskData={gskData} + gszData={gszData} + /> } loading={relatedGroupLoading} /> diff --git a/web/src/layouts/CatalogueJur.tsx b/web/src/layouts/CatalogueJur.tsx index 8919f11..537dd33 100644 --- a/web/src/layouts/CatalogueJur.tsx +++ b/web/src/layouts/CatalogueJur.tsx @@ -6,8 +6,8 @@ import { createCatalogueJur } from '../services/api/directories/catalogue_jur'; import { getCatalogueJurThunk } from '../store/slices/catalogueJurSlice/thunks'; import { useAppDispatch, useAppSelector } from '../store/store'; import type { CatalogueJurFormProps } from '../types/catalogueJur/catalogueJur'; -import { CatalogueJurForm } from '../widgets/CatalogueJurForm/CatalogueJurForm'; -import { CatalogueJurTable } from '../widgets/CatalogueJurTable/CatalogueJurTable'; +import { CatalogueJurForm } from '../widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm'; +import { CatalogueJurTable } from '../widgets/CatalogueJur/CatalogueJurTable/CatalogueJurTable'; export function CatalogueJur() { const dispatch = useAppDispatch(); diff --git a/web/src/layouts/ConsolidationReportPage.tsx b/web/src/layouts/ConsolidationReportPage.tsx index 187a12a..fb5a054 100644 --- a/web/src/layouts/ConsolidationReportPage.tsx +++ b/web/src/layouts/ConsolidationReportPage.tsx @@ -12,9 +12,9 @@ import type { VersionCard } from '../types/consolidations/version_members'; import { CONS_STATUS_LABEL, canChangeStatus, consStatusDescription, isLockedBy } from '../utils/consolidations'; import { quarterShortLabel } from '../utils/labels'; import { statusColorMapping } from '../widgets/ConsoleTable/consts'; -import { ChessContent } from '../widgets/ConsolidatedChessContent/ConsolidatedChessContent'; import { OsvTabs } from '../widgets/ConsolidatedOsv/OsvTabs'; import { OsvContent } from '../widgets/ConsolidatedOsvContent/ConsolidatedOsvContent'; +import { ChessContent } from '../widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent'; import ChangeStatusModal from '../widgets/StatusChangeModal/ChangeStatusModal'; function ReportContent() { diff --git a/web/src/layouts/Groups.tsx b/web/src/layouts/Groups.tsx index 16e7e70..c13c8ef 100644 --- a/web/src/layouts/Groups.tsx +++ b/web/src/layouts/Groups.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import PageTitle from '../components/PageTitle'; import { useAppSelector } from '../store/store'; -import { CompanyGroupsTable } from '../widgets/CompanyGroupsTable/CompanyGroupsTable'; +import { CompanyGroupsTable } from '../widgets/CatalogueCompanyGroup/CompanyGroupsTable/CompanyGroupsTable'; export function GroupsLayout() { const totalGroupsNum = useAppSelector((state) => state.company_groups.total_groups); diff --git a/web/src/widgets/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx b/web/src/widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx similarity index 100% rename from web/src/widgets/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx rename to web/src/widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx diff --git a/web/src/widgets/CatalogueGroupHeader/CatalogueGroupHeader.tsx b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupHeader/CatalogueCompanyGroupHeader.tsx similarity index 93% rename from web/src/widgets/CatalogueGroupHeader/CatalogueGroupHeader.tsx rename to web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupHeader/CatalogueCompanyGroupHeader.tsx index b7c1bf4..f7cbb6e 100644 --- a/web/src/widgets/CatalogueGroupHeader/CatalogueGroupHeader.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupHeader/CatalogueCompanyGroupHeader.tsx @@ -3,8 +3,8 @@ import { Button, Dropdown, Space } from 'antd'; import Text from 'antd/es/typography/Text'; import Title from 'antd/es/typography/Title'; import { useNavigate } from 'react-router-dom'; -import { useAppSelector } from '../../store/store'; -import { pluralRu } from '../../utils/labels'; +import { useAppSelector } from '../../../store/store'; +import { pluralRu } from '../../../utils/labels'; interface CompanyGroupHeaderI { setDeleteConfirmOpen: (el: boolean) => void; @@ -36,7 +36,7 @@ export const CompanyGroupHeader = ({ setEditFormOpen, setDeleteConfirmOpen }: Co key: 'delete', icon: activeCompanyGroup?.is_archived ? : , label: activeCompanyGroup?.is_archived ? 'Разархивировать' : 'Архивировать', - danger: activeCompanyGroup?.is_archived, + danger: !activeCompanyGroup?.is_archived, onClick: () => { setDeleteConfirmOpen(true); }, diff --git a/web/src/widgets/CataloguGroupTabs/CataloguGroupTabs.css b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css similarity index 100% rename from web/src/widgets/CataloguGroupTabs/CataloguGroupTabs.css rename to web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css diff --git a/web/src/widgets/CataloguGroupTabs/CataloguGroupTabs.tsx b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx similarity index 53% rename from web/src/widgets/CataloguGroupTabs/CataloguGroupTabs.tsx rename to web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx index 679e474..4593d85 100644 --- a/web/src/widgets/CataloguGroupTabs/CataloguGroupTabs.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx @@ -1,23 +1,23 @@ import { Tabs } from 'antd'; -import { useAppSelector } from '../../store/store'; -import type { RelatedGroupOut } from '../../types/api'; -import './CataloguGroupTabs.css'; +import { useAppSelector } from '../../../store/store'; +import type { RelatedGroupOut } from '../../../types/api'; +import './CatalogueCompanyGroupTabs.css'; interface CataloguGroupTabsI { - activeTab: CatalogueGroupTabKey; - setActiveTab: (val: CatalogueGroupTabKey) => void; + activeTab: CatalogueCompanyGroupTabKey; + setActiveTab: (val: CatalogueCompanyGroupTabKey) => void; gskData: RelatedGroupOut[]; gszData: RelatedGroupOut[]; } -export type CatalogueGroupTabKey = 'legal_entities' | 'gsk' | 'gsz'; +export type CatalogueCompanyGroupTabKey = 'legal_entities' | 'gsk' | 'gsz'; -export const CataloguGroupTabs = ({ activeTab, setActiveTab, gskData, gszData }: CataloguGroupTabsI) => { +export const CatalogueCompanyGroupTabs = ({ activeTab, setActiveTab, gskData, gszData }: CataloguGroupTabsI) => { const activeCompanyGroup = useAppSelector((state) => state.catalogue_jur.activeCompanyGroup); return ( setActiveTab(key as CatalogueGroupTabKey)} + onChange={(key) => setActiveTab(key as CatalogueCompanyGroupTabKey)} tabBarStyle={{ margin: 0, marginBottom: 0 }} style={{ marginBottom: 0 }} items={[ diff --git a/web/src/widgets/CompanyGroupForm/CompanyGroupForm.tsx b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx similarity index 90% rename from web/src/widgets/CompanyGroupForm/CompanyGroupForm.tsx rename to web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx index e7df042..5f39795 100644 --- a/web/src/widgets/CompanyGroupForm/CompanyGroupForm.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx @@ -1,12 +1,12 @@ import { Col, Form, Input, Modal, Row, Select } from 'antd'; import type React from 'react'; import { useEffect, useState } from 'react'; -import { ApiError } from '../../api/client'; -import { useMe } from '../../auth/useMe'; -import { fetchOneCompanyGroup } from '../../services/api/directories/company_groups'; -import type { CompanyGroupFormProps } from '../../types/companyGroups/companyGroups'; -import { useNotificationApi } from '../../utils/useNotification'; -import { loadOffices } from '../Admin/UsersTable'; +import { ApiError } from '../../../api/client'; +import { useMe } from '../../../auth/useMe'; +import { fetchOneCompanyGroup } from '../../../services/api/directories/company_groups'; +import type { CompanyGroupFormProps } from '../../../types/companyGroups/companyGroups'; +import { useNotificationApi } from '../../../utils/useNotification'; +import { loadOffices } from '../../Admin/UsersTable'; type Props = { open: boolean; diff --git a/web/src/widgets/CompanyGroupsList/CompanyGroupsList.css b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.css similarity index 100% rename from web/src/widgets/CompanyGroupsList/CompanyGroupsList.css rename to web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.css diff --git a/web/src/widgets/CompanyGroupsList/CompanyGroupsList.tsx b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx similarity index 92% rename from web/src/widgets/CompanyGroupsList/CompanyGroupsList.tsx rename to web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx index 68d136f..5155763 100644 --- a/web/src/widgets/CompanyGroupsList/CompanyGroupsList.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx @@ -1,11 +1,11 @@ import { FolderOpenOutlined, SearchOutlined } from '@ant-design/icons'; import { Checkbox, Empty, Input, List, Space, Spin, Tag, Typography } from 'antd'; import { useEffect, useMemo, useState } from 'react'; -import { useVirtualList } from '../../hooks/useVirtualList'; -import { setActiveCompanyGroup } from '../../store/slices/catalogueJurSlice/catalogueJurSlice'; -import { setIsGettingArchive } from '../../store/slices/companyGroupsSlice/companyGroupsSlice'; -import { getCompanyGroupsThunk } from '../../store/slices/companyGroupsSlice/thunks'; -import { useAppDispatch, useAppSelector } from '../../store/store'; +import { useVirtualList } from '../../../hooks/useVirtualList'; +import { setActiveCompanyGroup } from '../../../store/slices/catalogueJurSlice/catalogueJurSlice'; +import { setIsGettingArchive } from '../../../store/slices/companyGroupsSlice/companyGroupsSlice'; +import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/thunks'; +import { useAppDispatch, useAppSelector } from '../../../store/store'; const { Text } = Typography; diff --git a/web/src/widgets/CompanyGroupsTable/CompanyGroupsTable.tsx b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsTable/CompanyGroupsTable.tsx similarity index 87% rename from web/src/widgets/CompanyGroupsTable/CompanyGroupsTable.tsx rename to web/src/widgets/CatalogueCompanyGroup/CompanyGroupsTable/CompanyGroupsTable.tsx index a43905e..3865e48 100644 --- a/web/src/widgets/CompanyGroupsTable/CompanyGroupsTable.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsTable/CompanyGroupsTable.tsx @@ -3,11 +3,11 @@ import { Button, Input, Space, Tooltip } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { useEffect, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; -import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../components/GenericTable'; -import { useTableFilters } from '../../components/GenericTable/useTableFilters'; -import { getCompanyGroupsThunk } from '../../store/slices/companyGroupsSlice/thunks'; -import { useAppDispatch, useAppSelector } from '../../store/store'; -import type { ICompanyGroup } from '../../types/companyGroups/companyGroups'; +import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../../components/GenericTable'; +import { useTableFilters } from '../../../components/GenericTable/useTableFilters'; +import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/thunks'; +import { useAppDispatch, useAppSelector } from '../../../store/store'; +import type { ICompanyGroup } from '../../../types/companyGroups/companyGroups'; import { groupsConfig } from './config'; export function CompanyGroupsTable() { diff --git a/web/src/widgets/CompanyGroupsTable/config.tsx b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsTable/config.tsx similarity index 81% rename from web/src/widgets/CompanyGroupsTable/config.tsx rename to web/src/widgets/CatalogueCompanyGroup/CompanyGroupsTable/config.tsx index e7494ec..db4aa4b 100644 --- a/web/src/widgets/CompanyGroupsTable/config.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsTable/config.tsx @@ -1,5 +1,5 @@ -import type { TableConfig } from '../../components/GenericTable'; -import type { ICompanyGroup } from '../../types/companyGroups/companyGroups'; +import type { TableConfig } from '../../../components/GenericTable'; +import type { ICompanyGroup } from '../../../types/companyGroups/companyGroups'; export const groupsConfig: TableConfig = { rowKey: 'id', diff --git a/web/src/widgets/CatalogueJurForm/CatalogueJurForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx similarity index 94% rename from web/src/widgets/CatalogueJurForm/CatalogueJurForm.tsx rename to web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx index 2a78176..bb98ed5 100644 --- a/web/src/widgets/CatalogueJurForm/CatalogueJurForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx @@ -1,14 +1,14 @@ import { Col, Form, Input, Modal, Row, Select } from 'antd'; import type React from 'react'; import { useEffect, useMemo, useState } from 'react'; -import { ApiError } from '../../api/client'; -import { fetchOneCatalogueJur } from '../../services/api/directories/catalogue_jur'; -import { fetchRelatedGroups } from '../../services/api/directories/company_groups'; -import { useAppSelector } from '../../store/store'; -import type { RelatedGroupOut } from '../../types/api'; -import type { CatalogueJurFormProps } from '../../types/catalogueJur/catalogueJur'; -import { useNotificationApi } from '../../utils/useNotification'; -import { loadOffices } from '../Admin/UsersTable'; +import { ApiError } from '../../../api/client'; +import { fetchOneCatalogueJur } from '../../../services/api/directories/catalogue_jur'; +import { fetchRelatedGroups } from '../../../services/api/directories/company_groups'; +import { useAppSelector } from '../../../store/store'; +import type { RelatedGroupOut } from '../../../types/api'; +import type { CatalogueJurFormProps } from '../../../types/catalogueJur/catalogueJur'; +import { useNotificationApi } from '../../../utils/useNotification'; +import { loadOffices } from '../../Admin/UsersTable'; type Props = { open: boolean; diff --git a/web/src/widgets/MoveCatalogueJurForm/MoveCatalogueJurForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx similarity index 89% rename from web/src/widgets/MoveCatalogueJurForm/MoveCatalogueJurForm.tsx rename to web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx index 4e68770..f7b16a5 100644 --- a/web/src/widgets/MoveCatalogueJurForm/MoveCatalogueJurForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx @@ -3,12 +3,12 @@ import FormItem from 'antd/es/form/FormItem'; import dayjs from 'dayjs'; import type React from 'react'; import { useEffect, useState } from 'react'; -import { ApiError } from '../../api/client'; -import { fetchOneCatalogueJur } from '../../services/api/directories/catalogue_jur'; -import { getCompanyGroupsThunk } from '../../store/slices/companyGroupsSlice/thunks'; -import { useAppDispatch, useAppSelector } from '../../store/store'; -import type { MoveCatalogueJurProps } from '../../types/catalogueJur/catalogueJur'; -import { useNotificationApi } from '../../utils/useNotification'; +import { ApiError } from '../../../api/client'; +import { fetchOneCatalogueJur } from '../../../services/api/directories/catalogue_jur'; +import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/thunks'; +import { useAppDispatch, useAppSelector } from '../../../store/store'; +import type { MoveCatalogueJurProps } from '../../../types/catalogueJur/catalogueJur'; +import { useNotificationApi } from '../../../utils/useNotification'; type FormValues = { name: string; diff --git a/web/src/widgets/CatalogueJurTable/CatalogueJurTable.tsx b/web/src/widgets/CatalogueJur/CatalogueJurTable/CatalogueJurTable.tsx similarity index 90% rename from web/src/widgets/CatalogueJurTable/CatalogueJurTable.tsx rename to web/src/widgets/CatalogueJur/CatalogueJurTable/CatalogueJurTable.tsx index 0f1bfc2..90b0b94 100644 --- a/web/src/widgets/CatalogueJurTable/CatalogueJurTable.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurTable/CatalogueJurTable.tsx @@ -11,25 +11,24 @@ import { Button, Checkbox, Dropdown, Input, Space } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { type ReactNode, useEffect, useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { ApiError } from '../../api/client'; -import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../components/GenericTable'; -import { useTableFilters } from '../../components/GenericTable/useTableFilters'; -import { editCatalogueJur, moveCatalogueJur, withdrawCatalogueJur } from '../../services/api/directories/catalogue_jur'; -import { setIsGettingArchive, setRelatedGroupFilter } from '../../store/slices/catalogueJurSlice/catalogueJurSlice'; -import { getCatalogueJurThunk } from '../../store/slices/catalogueJurSlice/thunks'; -import { getCompanyGroupsThunk } from '../../store/slices/companyGroupsSlice/thunks'; -import { useAppDispatch, useAppSelector } from '../../store/store'; +import { ApiError } from '../../../api/client'; +import { ColumnSettings, DataTable, useFilteredRows, useTableFilters, useVisibleColumns } from '../../../components/GenericTable'; +import { editCatalogueJur, moveCatalogueJur, withdrawCatalogueJur } from '../../../services/api/directories/catalogue_jur'; +import { setIsGettingArchive, setRelatedGroupFilter } from '../../../store/slices/catalogueJurSlice/catalogueJurSlice'; +import { getCatalogueJurThunk } from '../../../store/slices/catalogueJurSlice/thunks'; +import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/thunks'; +import { useAppDispatch, useAppSelector } from '../../../store/store'; import type { CatalogueJurFormProps, ICatalogueJur, MoveCatalogueJurProps, WithdrawCatalogueJurProps, -} from '../../types/catalogueJur/catalogueJur'; -import { pluralRu } from '../../utils/labels'; -import { useNotificationApi } from '../../utils/useNotification'; +} from '../../../types/catalogueJur/catalogueJur'; +import { pluralRu } from '../../../utils/labels'; +import { useNotificationApi } from '../../../utils/useNotification'; import { CatalogueJurForm } from '../CatalogueJurForm/CatalogueJurForm'; -import { MoveCatalogueJurForm } from '../MoveCatalogueJurForm/MoveCatalogueJurForm'; -import { WithdrawCatalogueJurForm } from '../WithdrawCatalogueJurForm/WithdrawCatalogueJurForm'; +import { MoveCatalogueJurForm } from '../CatalogueJurMoveForm/CatalogueJurMoveForm'; +import { WithdrawCatalogueJurForm } from '../CatalogueJurWithdrawForm/CatalogueJurWithdrawForm'; import { catalogueJurConfig } from './config'; interface CatalogueJurTableI { diff --git a/web/src/widgets/CatalogueJurTable/config.tsx b/web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx similarity index 87% rename from web/src/widgets/CatalogueJurTable/config.tsx rename to web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx index 4edc4bf..6b35a1e 100644 --- a/web/src/widgets/CatalogueJurTable/config.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx @@ -1,7 +1,7 @@ -import type { TableConfig } from '../../components/GenericTable'; -import { TableTag } from '../../components/TableTag/TableTag'; -import { TAG_PRESETS } from '../../components/TableTag/presets'; -import type { ICatalogueJur } from '../../types/catalogueJur/catalogueJur'; +import type { TableConfig } from '../../../components/GenericTable'; +import { TableTag } from '../../../components/TableTag/TableTag'; +import { TAG_PRESETS } from '../../../components/TableTag/presets'; +import type { ICatalogueJur } from '../../../types/catalogueJur/catalogueJur'; export const catalogueJurConfig: TableConfig = { rowKey: 'id', diff --git a/web/src/widgets/WithdrawCatalogueJurForm/WithdrawCatalogueJurForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx similarity index 91% rename from web/src/widgets/WithdrawCatalogueJurForm/WithdrawCatalogueJurForm.tsx rename to web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx index 966f02d..bd776da 100644 --- a/web/src/widgets/WithdrawCatalogueJurForm/WithdrawCatalogueJurForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx @@ -4,10 +4,10 @@ import TextArea from 'antd/es/input/TextArea'; import dayjs from 'dayjs'; import type React from 'react'; import { useEffect, useState } from 'react'; -import { ApiError } from '../../api/client'; -import { fetchOneCatalogueJur } from '../../services/api/directories/catalogue_jur'; -import type { WithdrawCatalogueJurProps } from '../../types/catalogueJur/catalogueJur'; -import { useNotificationApi } from '../../utils/useNotification'; +import { ApiError } from '../../../api/client'; +import { fetchOneCatalogueJur } from '../../../services/api/directories/catalogue_jur'; +import type { WithdrawCatalogueJurProps } from '../../../types/catalogueJur/catalogueJur'; +import { useNotificationApi } from '../../../utils/useNotification'; interface FormValues extends WithdrawCatalogueJurProps { name: string; diff --git a/web/src/widgets/ConsolidatedChessContent/ConsolidatedChessContent.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx similarity index 96% rename from web/src/widgets/ConsolidatedChessContent/ConsolidatedChessContent.tsx rename to web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx index 8e38d37..e235781 100644 --- a/web/src/widgets/ConsolidatedChessContent/ConsolidatedChessContent.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx @@ -2,7 +2,7 @@ import { DownloadOutlined, FullscreenExitOutlined, FullscreenOutlined } from '@a import { Button, ConfigProvider } from 'antd'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useParams } from 'react-router-dom'; -import { ApiError } from '../../api/client'; +import { ApiError } from '../../../api/client'; import { exportChessConsolidationsResult, exportChessTableAll, @@ -10,11 +10,11 @@ import { fetchChessConsolidations, fetchChessConsolidationsManual, fetchChessConsolidationsResult, -} from '../../services/api/intercompanyMatrix'; -import type { IntercompanyMatrixResponse, IntercompanyMatrixResultResponse } from '../../types/api'; -import type { VersionCard } from '../../types/consolidations/version_members'; -import { saveBlob, xlsxFilename } from '../../utils/download'; -import { useNotificationApi } from '../../utils/useNotification'; +} from '../../../services/api/intercompanyMatrix'; +import type { IntercompanyMatrixResponse, IntercompanyMatrixResultResponse } from '../../../types/api'; +import type { VersionCard } from '../../../types/consolidations/version_members'; +import { saveBlob, xlsxFilename } from '../../../utils/download'; +import { useNotificationApi } from '../../../utils/useNotification'; import { ConsolidationChessFormatTableFilter } from '../ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter'; import { ConsolidationChessResTable } from '../ConsolidationChessResTable/ConsolidationChessResTable'; import { ConsolidationChessTable } from '../ConsolidationChessTable/ConsolidationChessTable'; diff --git a/web/src/widgets/ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter.tsx similarity index 100% rename from web/src/widgets/ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter.tsx rename to web/src/widgets/ConsolidationChess/ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter.tsx diff --git a/web/src/widgets/ConsolidationChessResTable/ConsolidatedChessResTable.css b/web/src/widgets/ConsolidationChess/ConsolidationChessResTable/ConsolidatedChessResTable.css similarity index 100% rename from web/src/widgets/ConsolidationChessResTable/ConsolidatedChessResTable.css rename to web/src/widgets/ConsolidationChess/ConsolidationChessResTable/ConsolidatedChessResTable.css diff --git a/web/src/widgets/ConsolidationChessResTable/ConsolidationChessResTable.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessResTable/ConsolidationChessResTable.tsx similarity index 95% rename from web/src/widgets/ConsolidationChessResTable/ConsolidationChessResTable.tsx rename to web/src/widgets/ConsolidationChess/ConsolidationChessResTable/ConsolidationChessResTable.tsx index a8440de..b46eeac 100644 --- a/web/src/widgets/ConsolidationChessResTable/ConsolidationChessResTable.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessResTable/ConsolidationChessResTable.tsx @@ -2,10 +2,10 @@ import { Table, Typography } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import type React from 'react'; import { useMemo } from 'react'; -import type { IntercompanyMatrixResultResponse, MatrixResCell } from '../../types/api'; +import type { IntercompanyMatrixResultResponse, MatrixResCell } from '../../../types/api'; import './ConsolidatedChessResTable.css'; -import { chessTableCellFormatValue } from '../../utils/chessTableCellFormatValue'; -import { sumAmounts } from '../../utils/money'; +import { chessTableCellFormatValue } from '../../../utils/chessTableCellFormatValue'; +import { sumAmounts } from '../../../utils/money'; const { Text } = Typography; diff --git a/web/src/widgets/ConsolidationChessTable/ConsolidatedChessTable.css b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css similarity index 100% rename from web/src/widgets/ConsolidationChessTable/ConsolidatedChessTable.css rename to web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css diff --git a/web/src/widgets/ConsolidationChessTable/ConsolidationChessTable.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx similarity index 96% rename from web/src/widgets/ConsolidationChessTable/ConsolidationChessTable.tsx rename to web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx index a9d1cc4..7f8a8db 100644 --- a/web/src/widgets/ConsolidationChessTable/ConsolidationChessTable.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx @@ -3,10 +3,10 @@ import { Table, Tooltip, Typography } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import type React from 'react'; import { useMemo } from 'react'; -import type { IntercompanyMatrixResponse, MatrixCell, MatrixCompany } from '../../types/api'; +import type { IntercompanyMatrixResponse, MatrixCell, MatrixCompany } from '../../../types/api'; import './ConsolidatedChessTable.css'; -import { chessTableCellFormatValue } from '../../utils/chessTableCellFormatValue'; -import { sumAmounts } from '../../utils/money'; +import { chessTableCellFormatValue } from '../../../utils/chessTableCellFormatValue'; +import { sumAmounts } from '../../../utils/money'; const { Text } = Typography; diff --git a/web/src/widgets/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx similarity index 94% rename from web/src/widgets/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx rename to web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx index d9ab17b..fe3ff96 100644 --- a/web/src/widgets/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx @@ -1,11 +1,11 @@ import { Button, Select, Space } from 'antd'; import type React from 'react'; import { useEffect, useState } from 'react'; -import { ApiError, api } from '../../api/client'; -import { type OptionType, TreeFilterDropdown } from '../../components/TreeFilterDropdown/TreeFilterDropdown'; -import type { Account, MatrixCompany, Quarter } from '../../types/api'; -import { quarterShortLabel } from '../../utils/labels'; -import { useNotificationApi } from '../../utils/useNotification'; +import { ApiError, api } from '../../../api/client'; +import { type OptionType, TreeFilterDropdown } from '../../../components/TreeFilterDropdown/TreeFilterDropdown'; +import type { Account, MatrixCompany, Quarter } from '../../../types/api'; +import { quarterShortLabel } from '../../../utils/labels'; +import { useNotificationApi } from '../../../utils/useNotification'; interface ConsolidationChessTableFilterI { companies: string[]; diff --git a/web/src/widgets/DeleteRelatedGroupModal/DeleteRelatedGroupModal.tsx b/web/src/widgets/RelatedGroup/DeleteRelatedGroupModal/DeleteRelatedGroupModal.tsx similarity index 100% rename from web/src/widgets/DeleteRelatedGroupModal/DeleteRelatedGroupModal.tsx rename to web/src/widgets/RelatedGroup/DeleteRelatedGroupModal/DeleteRelatedGroupModal.tsx diff --git a/web/src/widgets/RelatedGroupForm/RelatedGroupForm.tsx b/web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx similarity index 90% rename from web/src/widgets/RelatedGroupForm/RelatedGroupForm.tsx rename to web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx index b60cfea..7dc817e 100644 --- a/web/src/widgets/RelatedGroupForm/RelatedGroupForm.tsx +++ b/web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx @@ -3,12 +3,12 @@ import FormItem from 'antd/es/form/FormItem'; import dayjs from 'dayjs'; import type React from 'react'; import { useEffect, useMemo, useState } from 'react'; -import { ApiError } from '../../api/client'; -import { fetchRelatedGroup } from '../../services/api/directories/company_groups'; -import { getCompanyGroupsThunk } from '../../store/slices/companyGroupsSlice/thunks'; -import { useAppDispatch, useAppSelector } from '../../store/store'; -import type { RelatedGroupFormType } from '../../types/relatedGroup/relatedGroup'; -import { useNotificationApi } from '../../utils/useNotification'; +import { ApiError } from '../../../api/client'; +import { fetchRelatedGroup } from '../../../services/api/directories/company_groups'; +import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/thunks'; +import { useAppDispatch, useAppSelector } from '../../../store/store'; +import type { RelatedGroupFormType } from '../../../types/relatedGroup/relatedGroup'; +import { useNotificationApi } from '../../../utils/useNotification'; type Props = { open: boolean; diff --git a/web/src/widgets/RelatedGroupTable/RelatedGroupTable.tsx b/web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx similarity index 89% rename from web/src/widgets/RelatedGroupTable/RelatedGroupTable.tsx rename to web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx index d5819a4..1c45a40 100644 --- a/web/src/widgets/RelatedGroupTable/RelatedGroupTable.tsx +++ b/web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx @@ -2,13 +2,13 @@ import { DeleteOutlined, EditOutlined, EllipsisOutlined } from '@ant-design/icon import { Button, Dropdown, Space } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { type ReactNode, useMemo, useState } from 'react'; -import { ApiError } from '../../api/client'; -import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../components/GenericTable'; -import { useTableFilters } from '../../components/GenericTable/useTableFilters'; -import { deleteRelatedGroup, editRelatedGroup } from '../../services/api/directories/related-groups'; -import type { RelatedGroupOut } from '../../types/api'; -import type { RelatedGroupFormType } from '../../types/relatedGroup/relatedGroup'; -import { useNotificationApi } from '../../utils/useNotification'; +import { ApiError } from '../../../api/client'; +import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../../components/GenericTable'; +import { useTableFilters } from '../../../components/GenericTable/useTableFilters'; +import { deleteRelatedGroup, editRelatedGroup } from '../../../services/api/directories/related-groups'; +import type { RelatedGroupOut } from '../../../types/api'; +import type { RelatedGroupFormType } from '../../../types/relatedGroup/relatedGroup'; +import { useNotificationApi } from '../../../utils/useNotification'; import { DeleteRelatedGroupModal } from '../DeleteRelatedGroupModal/DeleteRelatedGroupModal'; import { RelatedGroupForm } from '../RelatedGroupForm/RelatedGroupForm'; import { relateGroupConfig } from './config'; diff --git a/web/src/widgets/RelatedGroupTable/config.tsx b/web/src/widgets/RelatedGroup/RelatedGroupTable/config.tsx similarity index 80% rename from web/src/widgets/RelatedGroupTable/config.tsx rename to web/src/widgets/RelatedGroup/RelatedGroupTable/config.tsx index fe4f8cb..4557126 100644 --- a/web/src/widgets/RelatedGroupTable/config.tsx +++ b/web/src/widgets/RelatedGroup/RelatedGroupTable/config.tsx @@ -1,9 +1,9 @@ import { VerticalAlignTopOutlined } from '@ant-design/icons'; import { Button } from 'antd'; -import type { TableConfig } from '../../components/GenericTable'; -import { setRelatedGroupFilter } from '../../store/slices/catalogueJurSlice/catalogueJurSlice'; -import { store } from '../../store/store'; -import type { RelatedGroupOut } from '../../types/api'; +import type { TableConfig } from '../../../components/GenericTable'; +import { setRelatedGroupFilter } from '../../../store/slices/catalogueJurSlice/catalogueJurSlice'; +import { store } from '../../../store/store'; +import type { RelatedGroupOut } from '../../../types/api'; export const relateGroupConfig: TableConfig = { rowKey: 'id', searchableKeys: ['code', 'crm_id', 'name', 'members_count', 'created_date'], -- 2.47.2 From b0a6cdedd016c025745dd1e13f5f7ddf42d56617 Mon Sep 17 00:00:00 2001 From: Grog Date: Thu, 29 Oct 2026 10:59:54 +0300 Subject: [PATCH 2/6] =?UTF-8?q?aurora-1799=20=D0=BE=D1=82=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BA=D0=B8=20=D0=B2=20=D1=81=D0=BB=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B4=D1=82=20=D0=B8=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BA=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConsolidatedChessContent.tsx | 8 ++-- .../ConsolidatedChessResTable.css | 6 +-- .../ConsolidationChessResTable.tsx | 2 +- .../ConsolidatedChessTable.css | 16 +++++++ .../ConsolidationChessTable.tsx | 48 +++++++++++-------- 5 files changed, 52 insertions(+), 28 deletions(-) diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx index e235781..66e42a9 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx @@ -76,10 +76,6 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { const loadData = useCallback( async (vId: string, dIds: string[], cIds: string[], isActual: () => boolean) => { - if (isHalfFiltered) { - notification.info({ description: 'Для сравнений по Дт и Кт нужно заполнить оба фильтра' }); - return; - } setLoading(true); try { let res: IntercompanyMatrixResponse; @@ -206,7 +202,7 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { style={{ backgroundColor: isChessFullscreen ? '#fff' : 'transparent', padding: isChessFullscreen ? 6 : 0, - height: isChessFullscreen ? '100vh' : 'auto', + height: isChessFullscreen ? '100vh' : '100%', overflow: isChessFullscreen ? 'hidden' : 'visible', display: 'flex', flexDirection: 'column', @@ -217,6 +213,7 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { decimals={decimals} units={units} isFullscreen={isChessFullscreen} + isHalfFiltered={isHalfFiltered} toolbar={
{ decimals={chessResDecimals} units={chessResUnits} isFullscreen={isResFullscreen} + toolbar={
= return ( - className='chessTable' + className='chessResTable' dataSource={data?.articles || []} columns={columns} rowKey='code' diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css index 0bfdefa..09b6c8f 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css @@ -16,3 +16,19 @@ .chessTable .resRow { background-color: #e6f4ea !important ; } + + +.chessTable .ant-table-container{ + display: flex; + flex-direction: column; + +} + +.chessTable.customHeight .ant-table-container{ + height: 550px !important; + +} + +.chessTable .ant-table-summary{ + margin-top: auto; +} \ No newline at end of file diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx index 7f8a8db..86434cc 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx @@ -17,6 +17,7 @@ interface ConsolidationChessTableI { units: string; toolbar?: React.ReactNode; isFullscreen?: boolean; + isHalfFiltered?: boolean; } type TotalRow = { @@ -32,6 +33,7 @@ export const ConsolidationChessTable: React.FC = ({ units, toolbar, isFullscreen = false, + isHalfFiltered = false, }) => { const matrixData = useMemo(() => { if (!data?.cells) return {}; @@ -109,20 +111,19 @@ export const ConsolidationChessTable: React.FC = ({ } }); - // сумму, которую не удалось сложить, не выдумываем нулём — ячейка покажет «—» totalRow[colCompany.id] = sumAmounts(amountsToSum) ?? ''; }); return totalRow as MatrixCompany; }, [data?.companies, matrixData]); - const scrollY = isFullscreen ? 'calc(100vh - 150px)' : 436; + const scrollY = isFullscreen ? 'calc(100vh - 200px)' : 436; return ( - className='chessTable' - dataSource={data?.companies || []} - columns={columns} + className={!isFullscreen ? 'chessTable customHeight' : 'chessTable'} + dataSource={isHalfFiltered ? [] : data?.companies || []} + columns={isHalfFiltered ? [] : columns || []} rowKey='id' pagination={false} loading={loading} @@ -130,26 +131,35 @@ export const ConsolidationChessTable: React.FC = ({ size='small' bordered title={() => toolbar} + locale={{ + emptyText: isHalfFiltered ? ( +
Для получения данных выберите счета по Дт и Кт
+ ) : ( + 'Нет данных' + ), + }} summary={() => { if (!totalRowData) return null; return ( - - - -
- Итого -
-
- - {data?.companies.map((company, index) => ( - -
- {chessTableCellFormatValue((totalRowData as TotalRow)[company.id], units, decimals) || '—'} + + {!isHalfFiltered && ( + + +
+ Итого
- ))} -
+ + {data?.companies.map((company, index) => ( + +
+ {chessTableCellFormatValue((totalRowData as TotalRow)[company.id], units, decimals) || '—'} +
+
+ ))} + + )}
); }} -- 2.47.2 From 7feebcbdca56ba99ad70308acf5db942728a2bb6 Mon Sep 17 00:00:00 2001 From: Grog Date: Thu, 29 Oct 2026 11:01:07 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConsolidatedChessContent.tsx | 1 - .../ConsolidatedChessTable.css | 13 +++++-------- .../ConsolidationChessTable.tsx | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx index 66e42a9..23b7244 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx @@ -281,7 +281,6 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { decimals={chessResDecimals} units={chessResUnits} isFullscreen={isResFullscreen} - toolbar={
= ({ if (!totalRowData) return null; return ( - + {!isHalfFiltered && ( - +
Итого -- 2.47.2 From 0e536b78677b43d2ab2097f4a3a95db96badc35b Mon Sep 17 00:00:00 2001 From: Grog Date: Thu, 29 Oct 2026 11:07:22 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=BB=D0=B8?= =?UTF-8?q?=D0=BA=D1=82=D0=B0=20=D1=81=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CompanyGroupsList/CompanyGroupsList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx index b3326b3..8055d14 100644 --- a/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupsList/CompanyGroupsList.tsx @@ -4,7 +4,7 @@ import { useEffect, useMemo, useState } from 'react'; import { useVirtualList } from '../../../hooks/useVirtualList'; import { setActiveCompanyGroup } from '../../../store/slices/catalogueJurSlice/catalogueJurSlice'; import { setIsGettingArchive } from '../../../store/slices/companyGroupsSlice/companyGroupsSlice'; -import { visibleCompanyGroups } from '../../store/slices/companyGroupsSlice/selectors'; +import { visibleCompanyGroups } from '../../../store/slices/companyGroupsSlice/selectors'; import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/thunks'; import { useAppDispatch, useAppSelector } from '../../../store/store'; -- 2.47.2 From 65c44978bd6a902f65cd306cb0194e048c3bfe87 Mon Sep 17 00:00:00 2001 From: Grog Date: Thu, 29 Oct 2026 11:19:02 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D0=B2=20shouldWarnCounterP?= =?UTF-8?q?airs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/utils/consolidations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/utils/consolidations.ts b/web/src/utils/consolidations.ts index 592e5ad..4a3c0f4 100644 --- a/web/src/utils/consolidations.ts +++ b/web/src/utils/consolidations.ts @@ -140,7 +140,7 @@ export const shouldWarnCounterPairs = ( pairs: readonly CounterPairOut[], storage: Pick | null, ): boolean => { - if (pairs.length === 0) return false; + if (pairs?.length === 0) return false; if (status && FINISHED_STATUSES.includes(status)) return false; try { return storage?.getItem(`${COUNTER_PAIRS_STORAGE_PREFIX}${versionId}`) !== counterPairsKey(pairs); -- 2.47.2 From d3c4d35dca8c69e31078e4d847abad9ca2478cb9 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Thu, 29 Oct 2026 21:38:40 +0400 Subject: [PATCH 6/6] =?UTF-8?q?=D0=A8=D0=B0=D1=85=D0=BC=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D0=B0:=20=D0=BF=D1=80=D0=B8=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=B5=20=D0=BE=D0=B4=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D1=8B=20=D0=94=D1=82/=D0=9A=D1=82=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D1=88=D0=BB=D1=91=D0=BC=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=20(=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20#207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - режим запроса вынесен в utils/chessMatrixMode (all / manual / half) с тестами; при «одна сторона» запрос матрицы не уходит, индикатор загрузки снимается; - подсказка по спеке intercompany-matrix-ui: один текст в таблице и у фильтров, у фильтров — только в состоянии «одна сторона»; - высота шахматки: min-height только для состояния подсказки, обёртка снова auto (в обычном режиме «Итого» сразу под строками); - откат pairs?.length в shouldWarnCounterPairs (маскировал старый API); - вернули комментарий про сумму, лишний columns || [] и дубль CSS убраны; опечатка CataloguGroupTabsI. Co-Authored-By: Claude Sonnet 5.5 --- web/src/utils/chessMatrixMode.test.ts | 17 +++++++++++++++++ web/src/utils/chessMatrixMode.ts | 16 ++++++++++++++++ web/src/utils/consolidations.ts | 2 +- .../CatalogueCompanyGroupTabs.tsx | 4 ++-- .../ConsolidatedChessContent.tsx | 17 ++++++++++------- .../ConsolidatedChessTable.css | 11 +---------- .../ConsolidationChessTable.tsx | 8 +++++--- .../ConsolidationChessTableFilter.tsx | 4 +++- 8 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 web/src/utils/chessMatrixMode.test.ts create mode 100644 web/src/utils/chessMatrixMode.ts diff --git a/web/src/utils/chessMatrixMode.test.ts b/web/src/utils/chessMatrixMode.test.ts new file mode 100644 index 0000000..d065c4b --- /dev/null +++ b/web/src/utils/chessMatrixMode.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from 'vitest'; +import { chessMatrixMode } from './chessMatrixMode'; + +describe('chessMatrixMode', () => { + it('фильтры пусты — полная матрица', () => { + expect(chessMatrixMode([], [])).toBe('all'); + }); + it('выбраны Дт и Кт — ручной расчёт', () => { + expect(chessMatrixMode(['62'], ['60'])).toBe('manual'); + }); + it('только Дт — одна сторона', () => { + expect(chessMatrixMode(['62'], [])).toBe('half'); + }); + it('только Кт — одна сторона', () => { + expect(chessMatrixMode([], ['60'])).toBe('half'); + }); +}); diff --git a/web/src/utils/chessMatrixMode.ts b/web/src/utils/chessMatrixMode.ts new file mode 100644 index 0000000..a5e08b6 --- /dev/null +++ b/web/src/utils/chessMatrixMode.ts @@ -0,0 +1,16 @@ +/** + * Режим запроса шахматки по фильтрам счетов: + * - `all` — фильтры пусты, берём полную матрицу; + * - `manual` — выбраны и Дт, и Кт, считаем по выбранным счетам; + * - `half` — выбрана только одна сторона: запрос не шлём, показываем подсказку. + */ +export type ChessMatrixMode = 'all' | 'manual' | 'half'; + +/** Текст для состояния «выбрана одна сторона» — в таблице и у фильтров один и тот же (openspec intercompany-matrix-ui). */ +export const CHESS_HALF_FILTER_HINT = 'Для расчёта по счетам выберите счета и в Дт, и в Кт'; + +export const chessMatrixMode = (debit: readonly string[], credit: readonly string[]): ChessMatrixMode => { + if (debit.length > 0 && credit.length > 0) return 'manual'; + if (debit.length === 0 && credit.length === 0) return 'all'; + return 'half'; +}; diff --git a/web/src/utils/consolidations.ts b/web/src/utils/consolidations.ts index 4a3c0f4..592e5ad 100644 --- a/web/src/utils/consolidations.ts +++ b/web/src/utils/consolidations.ts @@ -140,7 +140,7 @@ export const shouldWarnCounterPairs = ( pairs: readonly CounterPairOut[], storage: Pick | null, ): boolean => { - if (pairs?.length === 0) return false; + if (pairs.length === 0) return false; if (status && FINISHED_STATUSES.includes(status)) return false; try { return storage?.getItem(`${COUNTER_PAIRS_STORAGE_PREFIX}${versionId}`) !== counterPairsKey(pairs); diff --git a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx index 4593d85..b6f770b 100644 --- a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx @@ -2,7 +2,7 @@ import { Tabs } from 'antd'; import { useAppSelector } from '../../../store/store'; import type { RelatedGroupOut } from '../../../types/api'; import './CatalogueCompanyGroupTabs.css'; -interface CataloguGroupTabsI { +interface CatalogueCompanyGroupTabsI { activeTab: CatalogueCompanyGroupTabKey; setActiveTab: (val: CatalogueCompanyGroupTabKey) => void; gskData: RelatedGroupOut[]; @@ -11,7 +11,7 @@ interface CataloguGroupTabsI { export type CatalogueCompanyGroupTabKey = 'legal_entities' | 'gsk' | 'gsz'; -export const CatalogueCompanyGroupTabs = ({ activeTab, setActiveTab, gskData, gszData }: CataloguGroupTabsI) => { +export const CatalogueCompanyGroupTabs = ({ activeTab, setActiveTab, gskData, gszData }: CatalogueCompanyGroupTabsI) => { const activeCompanyGroup = useAppSelector((state) => state.catalogue_jur.activeCompanyGroup); return ( diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx index 23b7244..a64b8c3 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessContent/ConsolidatedChessContent.tsx @@ -13,6 +13,7 @@ import { } from '../../../services/api/intercompanyMatrix'; import type { IntercompanyMatrixResponse, IntercompanyMatrixResultResponse } from '../../../types/api'; import type { VersionCard } from '../../../types/consolidations/version_members'; +import { chessMatrixMode } from '../../../utils/chessMatrixMode'; import { saveBlob, xlsxFilename } from '../../../utils/download'; import { useNotificationApi } from '../../../utils/useNotification'; import { ConsolidationChessFormatTableFilter } from '../ConsolidationChessFormatTableFilter/ConsolidationChessFormatTableFilter'; @@ -72,14 +73,15 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { return () => document.removeEventListener('fullscreenchange', handleFullscreenChange); }, []); - const isHalfFiltered = (debit.length > 0 && credit.length === 0) || (debit.length === 0 && credit.length > 0); + const matrixMode = chessMatrixMode(debit, credit); + const isHalfFiltered = matrixMode === 'half'; const loadData = useCallback( async (vId: string, dIds: string[], cIds: string[], isActual: () => boolean) => { setLoading(true); try { let res: IntercompanyMatrixResponse; - if (dIds?.length && cIds?.length) { + if (chessMatrixMode(dIds, cIds) === 'manual') { res = await fetchChessConsolidationsManual(vId, { debit_account_ids: dIds, credit_account_ids: cIds }); } else { res = await fetchChessConsolidations(vId); @@ -97,7 +99,7 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { } } }, - [notification, isHalfFiltered], + [notification], ); const loadResData = useCallback( async (vid: string) => { @@ -124,7 +126,7 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { } setMatrixExportLoading(true); try { - if (debit?.length && credit?.length) { + if (matrixMode === 'manual') { const { blob, filename } = await exportChessTableManual(version_id, { debit_account_ids: debit, credit_account_ids: credit }); saveBlob(blob, filename ?? xlsxFilename('Шахматка', versionInfo)); } else { @@ -167,7 +169,8 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { }, [data, companies]); useEffect(() => { - if (!version_id) return; + // выбрана только одна сторона Дт/Кт — запрос не шлём, таблица показывает подсказку + if (!version_id || isHalfFiltered) return; let isMounted = true; const isActual = () => isMounted; @@ -178,7 +181,7 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { isMounted = false; setLoading(false); }; - }, [version_id, debit, credit, loadData]); + }, [version_id, debit, credit, isHalfFiltered, loadData]); useEffect(() => { if (!version_id) return; @@ -202,7 +205,7 @@ export const ChessContent = ({ card }: { card: VersionCard | null }) => { style={{ backgroundColor: isChessFullscreen ? '#fff' : 'transparent', padding: isChessFullscreen ? 6 : 0, - height: isChessFullscreen ? '100vh' : '100%', + height: isChessFullscreen ? '100vh' : 'auto', overflow: isChessFullscreen ? 'hidden' : 'visible', display: 'flex', flexDirection: 'column', diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css index bd5b3ec..71f3fb9 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidatedChessTable.css @@ -17,15 +17,6 @@ background-color: #e6f4ea !important ; } -.chessTable .ant-table-container { - display: flex; - flex-direction: column; -} - .chessTable.customHeight .ant-table-container { - height: 550px !important; -} - -.chessTable .ant-table-summary { - margin-top: auto; + min-height: 550px; } diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx index 3850c73..b657f42 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTable/ConsolidationChessTable.tsx @@ -5,6 +5,7 @@ import type React from 'react'; import { useMemo } from 'react'; import type { IntercompanyMatrixResponse, MatrixCell, MatrixCompany } from '../../../types/api'; import './ConsolidatedChessTable.css'; +import { CHESS_HALF_FILTER_HINT } from '../../../utils/chessMatrixMode'; import { chessTableCellFormatValue } from '../../../utils/chessTableCellFormatValue'; import { sumAmounts } from '../../../utils/money'; @@ -111,6 +112,7 @@ export const ConsolidationChessTable: React.FC = ({ } }); + // сумму, которую не удалось сложить, не выдумываем нулём — ячейка покажет «—» totalRow[colCompany.id] = sumAmounts(amountsToSum) ?? ''; }); @@ -121,9 +123,9 @@ export const ConsolidationChessTable: React.FC = ({ return ( - className={!isFullscreen ? 'chessTable customHeight' : 'chessTable'} + className={isHalfFiltered && !isFullscreen ? 'chessTable customHeight' : 'chessTable'} dataSource={isHalfFiltered ? [] : data?.companies || []} - columns={isHalfFiltered ? [] : columns || []} + columns={isHalfFiltered ? [] : columns} rowKey='id' pagination={false} loading={loading} @@ -133,7 +135,7 @@ export const ConsolidationChessTable: React.FC = ({ title={() => toolbar} locale={{ emptyText: isHalfFiltered ? ( -
Для получения данных выберите счета по Дт и Кт
+
{CHESS_HALF_FILTER_HINT}
) : ( 'Нет данных' ), diff --git a/web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx b/web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx index fe3ff96..dc61696 100644 --- a/web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx +++ b/web/src/widgets/ConsolidationChess/ConsolidationChessTableFilter/ConsolidationChessTableFilter.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from 'react'; import { ApiError, api } from '../../../api/client'; import { type OptionType, TreeFilterDropdown } from '../../../components/TreeFilterDropdown/TreeFilterDropdown'; import type { Account, MatrixCompany, Quarter } from '../../../types/api'; +import { CHESS_HALF_FILTER_HINT, chessMatrixMode } from '../../../utils/chessMatrixMode'; import { quarterShortLabel } from '../../../utils/labels'; import { useNotificationApi } from '../../../utils/useNotification'; @@ -109,7 +110,8 @@ export const ConsolidationChessTableFilter: React.FCВыберите счета по Дт и Кт для фильтрации; + const warningBlock = + chessMatrixMode(debit, credit) === 'half' ? {CHESS_HALF_FILTER_HINT} : null; return ( -- 2.47.2