добавлен роутинг между категориями

This commit is contained in:
egortriston
2025-07-08 01:54:26 +03:00
parent 212e3f5dda
commit 029dbb7732
3 changed files with 126 additions and 14 deletions

View File

@ -309,6 +309,73 @@ const VehicleDetailsPage = () => {
ogDescription: `Найдите и купите запчасти для ${vehicleName}. Широкий выбор оригинальных и аналоговых запчастей.`
};
// --- Синхронизация selectedQuickGroup с URL ---
// Функция для открытия VinQuick и добавления quickgroup в URL
const openQuickGroup = (group: any) => {
setSelectedQuickGroup(group);
router.push(
{ pathname: router.pathname, query: { ...router.query, quickgroup: group.quickgroupid } },
undefined,
{ shallow: true }
);
};
// Функция для закрытия VinQuick и удаления quickgroup из URL
const closeQuickGroup = () => {
setSelectedQuickGroup(null);
const { quickgroup, ...rest } = router.query;
router.push(
{ pathname: router.pathname, query: rest },
undefined,
{ shallow: true }
);
};
// Следим за изменением quickgroup в URL и обновляем selectedQuickGroup
useEffect(() => {
const quickgroupId = router.query.quickgroup as string;
if (quickgroupId) {
// Найти группу по id (в openedPath или где-то ещё)
// Для простоты: если есть selectedQuickGroup и id совпадает — ничего не делаем
if (selectedQuickGroup && selectedQuickGroup.quickgroupid === quickgroupId) return;
// Иначе ищем в openedPath или в категориях (можно доработать)
// Пока просто создаём объект-заглушку
setSelectedQuickGroup({ quickgroupid: quickgroupId });
} else {
setSelectedQuickGroup(null);
}
}, [router.query.quickgroup]);
// --- Синхронизация selectedNode (KnotIn) с URL ---
// Открыть KnotIn и добавить unitid в URL
const openKnot = (node: any) => {
setSelectedNode(node);
router.push(
{ pathname: router.pathname, query: { ...router.query, unitid: node.unitid || node.id } },
undefined,
{ shallow: true }
);
};
// Закрыть KnotIn и удалить unitid из URL
const closeKnot = () => {
setSelectedNode(null);
const { unitid, ...rest } = router.query;
router.push(
{ pathname: router.pathname, query: rest },
undefined,
{ shallow: true }
);
};
// Следить за изменением unitid в URL и обновлять selectedNode
useEffect(() => {
const unitid = router.query.unitid as string;
if (unitid) {
if (selectedNode && (selectedNode.unitid === unitid || selectedNode.id === unitid)) return;
// Можно доработать: искать node по unitid в категориях/группах
setSelectedNode({ unitid });
} else {
setSelectedNode(null);
}
}, [router.query.unitid]);
return (
<>
<MetaTags {...metaData} />
@ -339,9 +406,9 @@ const VehicleDetailsPage = () => {
setFoundParts(results);
setSearchState({ loading, error, query, isSearching: isSearching || false });
}}
onNodeSelect={setSelectedNode}
onNodeSelect={openKnot}
onActiveTabChange={(tab) => setActiveTab(tab)}
onQuickGroupSelect={setSelectedQuickGroup}
onQuickGroupSelect={openQuickGroup}
activeTab={activeTab}
openedPath={openedPath}
setOpenedPath={setOpenedPath}
@ -404,17 +471,17 @@ const VehicleDetailsPage = () => {
catalogCode={vehicleInfo.catalog}
vehicleId={vehicleInfo.vehicleid}
ssd={vehicleInfo.ssd}
onBack={() => setSelectedQuickGroup(null)}
onNodeSelect={setSelectedNode}
onBack={closeQuickGroup}
onNodeSelect={openKnot}
/>
) : (
<VinCategory
catalogCode={vehicleInfo.catalog}
vehicleId={vehicleInfo.vehicleid}
ssd={vehicleInfo.ssd}
onNodeSelect={setSelectedNode}
onNodeSelect={openKnot}
activeTab={activeTab}
onQuickGroupSelect={setSelectedQuickGroup}
onQuickGroupSelect={openQuickGroup}
openedPath={openedPath}
setOpenedPath={setOpenedPath}
/>
@ -441,10 +508,11 @@ const VehicleDetailsPage = () => {
<KnotIn
catalogCode={vehicleInfo.catalog}
vehicleId={vehicleInfo.vehicleid}
ssd={selectedNode.ssd || vehicleInfo.ssd} // ИСПРАВЛЕНИЕ: Используем SSD узла, fallback на родительский SSD
ssd={selectedNode.ssd || vehicleInfo.ssd}
unitId={selectedNode.unitid}
unitName={selectedNode.name}
parts={unitDetails}
onBack={closeKnot}
/>
{unitDetailsLoading ? (
<div style={{ padding: 24, textAlign: 'center' }}>Загружаем детали узла...</div>