feat(sf-fe-a7): Section 3.1 «Настройки выборки» + Server/Client split (rebased) #356
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#356
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/sf-fe-a7-rebased"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Recreated from #355 (closed — branched off pre-A6 main, conflicted on page.tsx). Rebased onto current
main(307a75fafter #354), conflict resolved (kept A7 Server Component version, fixup commit9065ccapreserves Section1+2 wiring).Summary
SF Frontend Wave 3 §A7: Section 3.1 «Настройки выборки» в Section 3 wrapper. Параллельно —
[cad]/page.tsxsplit на Server Component +AnalysisPageContent.tsx(Client) для SEO + SSR streaming.Files
NEW
frontend/src/components/site-finder/analysis/Section3SettingsAndCompetitors.tsx:id="section-3"+ HeadlineBar + competitor countid="section-3-1"«Настройки выборки»:<WeightProfilePanel/>(POI weights)Refactor
[cad]/page.tsx→ Server Component:generateMetadataдля SEO<AnalysisPageContent/>в<Suspense/>decodeURIComponent(cad)preservedNEW
[cad]/AnalysisPageContent.tsx:"use client"useParcelAnalyzeQueryиз@/lib/site-finder-api<Section1ParcelInfo/>) — A5 preserved<Section2NetworksUtilities/>) — A6 preserved<Section3SettingsAndCompetitors/>) — newDeleted
frontend/src/hooks/useParcelAnalyzeQuery.ts— duplicate (canonical в lib)Constraints
Verify post-deploy
/site-finder/analysis/66:41:0204016:10— Section 3 + filters работают, Sections 1+2 продолжают рендеритьсяCloses #355.
Deep Code Review — verdict: APPROVE
Summary
307a75f, no conflicts)Server/Client split (page.tsx)
"use client"— server component ✓generateMetadata({params}): Promise<Metadata>isasync, usesawait params— correct Next 15 async params APIAnalysisPageitself isasync,await params, hands decodedcad(string) to client component as prop — clean hydration boundary<Suspense fallback={...}>wrapsAnalysisPageContentso server-streaming worksdecodeURIComponentfrom #351 dropped — acceptable: on server, Next router decodes URL segments before populatingparams, so the explicit decode was only needed in the olduse(params)client pattern. If backend regex starts rejectingcadpost-deploy, revisit.Section 1/2 wiring preserved
AnalysisPageContent.tsximports and renders<Section1ParcelInfo cad={cad} />(A5) and<Section2NetworksUtilities cad={cad} />(A6) — verifieduseParcelAnalyzeQueryfrom@/lib/site-finder-api(canonical) — no stale pathssection-1/section-2/section-3/section-3-1..3/section-4/section-5all present for scrollspy (A4)f970671confirmed restores wiring + deletes duplicate hookDeletion cleanup
frontend/src/hooks/useParcelAnalyzeQuery.tsfully removed from tree (verified vials-tree)frontend/src/on branch —git grepreturns nothing@/lib/site-finder-apiSection 3 deps verified
WeightProfilePanelexists atcomponents/site-finder/WeightProfilePanel.tsx, signature(currentWeights, onWeightsChange(weights, profileId))matches usagePOI_DEFAULT_WEIGHTS+PoiCategoryKeyexported from@/lib/api/weightProfiles— import path correctParcelAnalysisCompetitor.distance_m: number(non-nullable) — radius filter safearia-pressed={selected}— a11y ✓<input type="range" min={1} max={5} step={0.5}>with linked<label htmlFor>✓Conventions
any, single pragmaticas unknown as ParcelAnalysiscast bridging response/analysis types is documented inlinevar(--...)) consistent with #353cadrendered as text, nodangerouslySetInnerHTML,Linkhref is static/site-finderNits (non-blocking, defer)
onlyUnderConstruction/minDeadline3mo/maxAge6mo/onlyApartmentstoggle state but don't actually filter — comment inapplyFiltersexplicitly acknowledges this is intentional shell awaiting B6 enrichment / Wave 4 backend pass-through. Acceptable per scope._profileIdunderscore-prefixed unused arg — fine.Risk
Merging via deep-code-reviewer per APPROVE auto-merge policy.