diff --git a/web/src/layouts/CatalogueJur.tsx b/web/src/layouts/CatalogueJur.tsx index 537dd33..6c01029 100644 --- a/web/src/layouts/CatalogueJur.tsx +++ b/web/src/layouts/CatalogueJur.tsx @@ -45,6 +45,7 @@ export function CatalogueJur() { {createFormOpen && ( { setCreateFormOpen(false); }} diff --git a/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts b/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts index 7abf90b..e863b79 100644 --- a/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts +++ b/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts @@ -10,6 +10,7 @@ const initialState: CatalogueJurSliceType = { total_groups: 0, loading: false, error: null, + currentRequestId: null, isGettingArchive: false, relatedGroupFilter: null, activeCompanyGroup: null, @@ -29,21 +30,33 @@ const catalogueJurSlice = createSlice({ state.activeCompanyGroup = action.payload; state.relatedGroupFilter = null; }, + resetRows(state) { + state.raw_rows = []; + state.total_groups = 0; + // Запрос, начатый до сброса, больше не нужен: его ответ отбросится в fulfilled/rejected + state.currentRequestId = null; + state.loading = false; + }, }, extraReducers: (builder) => { builder - .addCase(getCatalogueJurThunk.pending, (state, _) => { + .addCase(getCatalogueJurThunk.pending, (state, action) => { + state.currentRequestId = action.meta.requestId; state.loading = true; state.error = null; }) .addCase(getCatalogueJurThunk.fulfilled, (state, action) => { + if (action.meta.requestId !== state.currentRequestId) return; state.raw_rows = action.payload.items; state.total_groups = action.payload.total; state.loading = false; + state.currentRequestId = null; }) .addCase(getCatalogueJurThunk.rejected, (state, action) => { + if (action.meta.requestId !== state.currentRequestId) return; state.error = action.payload ?? 'Неизвестная ошибка'; state.loading = false; + state.currentRequestId = null; }) // Выбранная ГК — копия строки списка ГК: после перезагрузки списка берём свежую (счётчик ЮЛ в шапке и вкладке) .addCase(getCompanyGroupsThunk.fulfilled, (state, action) => { @@ -54,5 +67,5 @@ const catalogueJurSlice = createSlice({ }, }); -export const { setIsGettingArchive, setRelatedGroupFilter, setActiveCompanyGroup } = catalogueJurSlice.actions; +export const { setIsGettingArchive, setRelatedGroupFilter, setActiveCompanyGroup, resetRows } = catalogueJurSlice.actions; export default catalogueJurSlice.reducer; diff --git a/web/src/store/slices/catalogueJurSlice/types.ts b/web/src/store/slices/catalogueJurSlice/types.ts index 7227c33..9048d8a 100644 --- a/web/src/store/slices/catalogueJurSlice/types.ts +++ b/web/src/store/slices/catalogueJurSlice/types.ts @@ -7,6 +7,7 @@ export interface CatalogueJurSliceType { raw_rows: ICatalogueJur[]; loading: boolean; error: string | null; + currentRequestId: string | null; isGettingArchive: boolean; relatedGroupFilter?: RelatedGroupOut | null; activeCompanyGroup?: ICompanyGroup | null; diff --git a/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx index afce0b8..9c338b6 100644 --- a/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx @@ -16,6 +16,7 @@ type Props = { onCancel: () => void; onOk: (values: CatalogueJurFormProps) => void | Promise; jurId?: string; + outsideGroup?: boolean; }; // Ошибки сервера, относящиеся к одному полю, показываем у этого поля @@ -26,7 +27,7 @@ const FIELD_BY_ERROR_CODE: Record = { CRM_ID_EXISTS: 'crm_id', }; -export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId }) => { +export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId, outsideGroup = false }) => { const [form] = Form.useForm(); const notification = useNotificationApi(); const [initialDataLoading, setInitialDataLoading] = useState(false); @@ -67,7 +68,9 @@ export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId } finally { setInitialDataLoading(false); } - } else { + } else if (!outsideGroup) { + // Создание из карточки ГК: подставляем выбранную ГК. В «ЮЛ вне ГК» не подставляем — + // выбранная ГК остаётся в сторе после ухода со страницы «ГК и организации». form.setFieldsValue({ company_group_id: activeCompanyGroup?.id ?? undefined, }); @@ -253,7 +256,7 @@ export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId } - placeholder='Поиск по ГК, CRM ID или РФ' + placeholder='Поиск по ЮЛ или ИНН' value={rawQuery} onChange={(e) => setRawQuery(e.target.value)} style={{ maxWidth: 320 }}