refactor(profile): slim ProfilePage and CareerProfilePage to their own concerns
Complete the Phase 2.2 split. Each dedicated component now carries only its own state, effects, and JSX; the shared-copy duplication from the split checkpoint is removed. - ProfilePage (/profile): 1372 -> ~495 lines. Dropped the 700-line master-CV block, all CV/rewrite/PDF state + helpers + the extraction-run polling effects. loadProfile now fetches only /auth/me (no runs/jobs). Saves identity only. - CareerProfilePage (/career): dropped identity fields, password, 2FA/sessions and their state; loadProfile no longer sets identity fields. Saves the master profile only. Owns the master-CV editing surface. Both save through the partial-update PUT /auth/profile, so neither can overwrite the other's data. The master career profile stays the only editable source of truth on /career. Tests: the CV-editing tests in profile-page.test.tsx now render CareerProfilePage (where that surface lives) — all 5 pass, fixing 4 pre-existing failures that were caused by the display:none shared block. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -87,11 +87,12 @@ function renderWith(Component: React.ComponentType) {
|
||||
);
|
||||
}
|
||||
|
||||
// /profile (account identity) — the CV-editing surface still renders here (display:none) because
|
||||
// the two components share the same underlying implementation; these tests exercise that surface.
|
||||
// These exercise the master-CV editing surface, which lives on /career (CareerProfilePage) after
|
||||
// the Phase 2.2 split. ProfilePage no longer carries it.
|
||||
function renderPage() {
|
||||
return renderWith(ProfilePage);
|
||||
return renderWith(CareerProfilePage);
|
||||
}
|
||||
void ProfilePage;
|
||||
|
||||
beforeEach(() => {
|
||||
mockedApi.get.mockImplementation((url: string) => {
|
||||
|
||||
Reference in New Issue
Block a user