Skip to content

Revert "Remove references to old onboarding service" and restore the components and strings it needs - #6130

Closed
michelinewu wants to merge 1 commit into
masterfrom
mw_restore_old_onboarding
Closed

Revert "Remove references to old onboarding service" and restore the components and strings it needs#6130
michelinewu wants to merge 1 commit into
masterfrom
mw_restore_old_onboarding

Conversation

@michelinewu

Copy link
Copy Markdown
Contributor

Revert "Remove References to Old Onboarding Service" and Restore the Components and Strings It Needs

Issues

#6109 (0cd4552a8) repointed every remaining OnboardingService call site at OnboardingV2Service and dropped OnboardingService from app-services.ts. The side nav login is broken as a result.

NavTools.tsx:116 calls UserService.actions.showLogin(). #6109 rewrote UserService.showLogin() to call onboardingV2Service.actions.showLogin() instead of onboardingService.start({ isLogin: true }), and the v2 path does not bring up a usable login for that entry point.

Reverting #6109 on its own does not build, because the code it reverts to depends on two earlier removals:

  • The onboarding page components are gone. OnboardingService.start() ends in navigationService.navigate('Onboarding'). Main.tsx:260 resolves the page with appPages[page] || appPages.Studio, and Remove deprecated components #6078 (511366ee7) deleted all 26 files under app/components-react/pages/onboarding/ and removed export { default as Onboarding } from app/components-react/pages/index.ts. So appPages.Onboarding is undefined and the lookup silently falls back to Studio — while Main.tsx separately hides SideNav and StudioFooter whenever page === 'Onboarding'. That combination is the visible symptom: the nav disappears and the editor is rendered underneath it, with no login anywhere.
  • Nine i18n keys the restored components resolve at runtime are gone. Remove stale translations and add missing ones #6075 (eb947b167) removed them as stale, which was correct at the time — the components using them were deleted a day later in Remove deprecated components #6078.

Fixes

Revert #6109. git revert 0cd4552a8 applies cleanly across all 11 files. app/services/onboarding.ts was never deleted, so services/onboarding resolves again as soon as the imports come back. This also removes the onboardingCompleted subject, showSingletonStep(), and fetchThemeData() that #6109 grafted onto onboarding-v2.ts purely to serve the migrated call sites; nothing else references them, verified by grep across app/ and test/.

Restore the 26 deleted files under app/components-react/pages/onboarding/ from 511366ee7^, and re-add the Onboarding export to app/components-react/pages/index.ts. Taking them from #6078's parent rather than an older commit matters: that tree is already past #6075, so Connect.tsx carries the joined Twitch 2FA literal #6075 introduced, and no #6075 code change is undone here.

Restore five i18n keys #6075 removed, verbatim, into the files they came from:

Key File
Check out 50+ amazing apps from independent developers, … onboarding.json
Only have one screen? Perfect! Enable our in-game overlay … onboarding.json
Importing Your Existing Settings From OBS onboarding.json
Importing Your Existing Settings From Twitch Studio twitch.json
Twitch requires two factor authentication to be enabled on your account … streaming.json

The first two are $t('a ' + 'b' + 'c') concatenations in ObsImport.tsx; the runtime key is the joined string, which is exactly the form #6075 deleted. The next two are the two resolutions of the template key `Importing Your Existing Settings From ${isObs ? 'OBS' : 'Twitch Studio'}` at ObsImport.tsx:33.

Add four keys that never existed. 1-Click Import, While we import your settings and scenes, check out these great features unique to Streamlabs, Something went wrong while importing. Please try again or skip to the next step. (all onboarding.json) and Log Out? (onboarding.json). These are pre-existing gaps, not #6075 regressions — the strings in ObsImport.tsx and FreshOrImport.tsx had already been genericised away from their … from OBS Studio wording before #6075, so the keys #6075 deleted were the older OBS-specific variants and the current wording was never in a dictionary. Confirmed absent at eb947b167^. Adding them costs nothing and stops the restored flow rendering four untranslatable strings in 25 locales.

Dictionary edits are append-only single lines at each file's tail, per the house convention that these files are never reserialized.

Files changed: 42 files. app/app-services.ts, app/services/app/app.ts, app/services/user/index.ts, app/services/onboarding/onboarding-v2.ts, app/components-react/highlighter/Export/StorageUpload.tsx, app/components-react/modals/onboarding/Themes.tsx, app/components-react/shared/DualOutputToggle.tsx, app/components-react/windows/go-live/platforms/TwitchTagsInput.tsx, app/components-react/windows/settings/General.tsx, app/components-react/windows/settings/Support.tsx, app/components/widgets/Poll.tsx, app/components-react/pages/index.ts, 26 restored files under app/components-react/pages/onboarding/, and app/i18n/en-US/{onboarding,twitch,streaming}.json.

Performance Implications

None meaningful. This restores the code that shipped through 0cd4552a8^, so runtime cost returns to that baseline: one more service registered in AppServices, and OnboardingService.init() runs setExistingCollections() once at startup, which reads sceneCollectionsService.loadableCollections — already in memory, no I/O.

Bundle size grows by the 26 restored files (~3,000 lines including LESS). They are reachable only from the Onboarding route, but the pages barrel is a static import in Main.tsx, so they land in the main chunk as they did before #6078.

Two $t() calls in ObsImport.tsx stop missing their dictionary entry, which removes a dev-mode console.error per render of the import step (app/app.ts:267); silent in production either way.

Verification

  • tsc --noEmit -p tsconfig.json — exit 0, no errors. Run from a throwaway worktree inside desktop/ so it could resolve the existing node_modules.
  • i18n-audit — the remaining findings are the two documented scanner limitations, both checked by hand. The concatenated $t() calls are reported as missing on their first fragment and as stale on the joined key; they are the same two strings, and the joined form is what runs. The ${isObs ? …} template is reported as two stale keys for the same reason. The 10 STRINGS MISSING $t() entries are platform brand names and product names in the restored files, unchanged from what Remove deprecated components #6078 deleted.
  • Not run: the app itself, and no e2e. The worktree has no node_modules and no bundles/. The side nav login needs a manual check after yarn install && yarn compile.
  • e2e should be unaffected by reasoning, not by execution. testingFakeAuth calls onboardingService.finish() again after the revert, and Use new onboarding for tests. #6004 (cb1d357f8) — which moved tests onto v2 onboarding — predates Remove references to old onboarding service #6109, so this restores the exact service pairing the suite was green against at 0cd4552a8^.

Notes

This is a straight revert, not a fix for whatever #6109 was trying to achieve. The old OnboardingService and OnboardingV2Service both exist again and both run, which is the state master was in before #6109 — v2 owns the modal flow via Main.tsx, the old service owns the full-page Onboarding route. Re-landing the migration needs the v2 login to actually work from the side nav entry point first.

app/components-react/pages/grow/ (Cards.tsx, Grow.tsx, Grow.m.less) and the Grow barrel export were also deleted by #6078 and are not restored here — nothing in the reverted code references them, and 'Grow' hitting the appPages.Studio fallback is a separate pre-existing issue on master.

General.tsx comes back with runAutoOptimizer() calling OnboardingService.actions.start({ isOptimize: true }) rather than the commented-out body #6109 left behind. The Optimize step is still disabled in ONBOARDING_STEPS, so views.singletonStep returns undefined for it and the route renders nothing — a dead button, but the same dead button that shipped before #6109.

Source Commits

Asana Link

N/A — reported directly: side nav login broken on master after #6109.

…ore its deps

Restores the pages/onboarding components deleted in #6078 and the i18n keys
deleted in #6075 that the reverted code depends on.
Copilot AI lite review requested due to automatic review settings August 27, 2026 18:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR reverts the migration that routed remaining “login/onboarding” entry points through OnboardingV2Service, restoring the legacy OnboardingService flow (including the full-page Onboarding route, its React page components, and the i18n keys those components resolve) to fix the broken side-nav login path.

Changes:

  • Repoint login/import entry points back to OnboardingService and re-register the service in app/app-services.ts.
  • Restore the legacy onboarding page implementation under app/components-react/pages/onboarding/ and re-export the Onboarding page.
  • Restore/add required English i18n keys for the restored onboarding/import/login UI.

Reviewed changes

Copilot reviewed 42 out of 42 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
app/app-services.ts Re-exports and registers OnboardingService in the central service registry.
app/services/app/app.ts Injects OnboardingService into AppService (restoring prior wiring).
app/services/user/index.ts Routes showLogin() and onboarding close/finish behavior back through OnboardingService.
app/services/onboarding/onboarding-v2.ts Removes v2-only helpers added to support migrated call sites (now reverted).
app/components-react/highlighter/Export/StorageUpload.tsx Uses OnboardingService.start({ isLogin: true }) for SLID login prompt.
app/components-react/modals/onboarding/Themes.tsx Fetches theme data via OnboardingService instead of v2 helper.
app/components-react/shared/DualOutputToggle.tsx Subscribes to legacy onboarding completion and re-triggers dual output enablement.
app/components-react/windows/go-live/platforms/TwitchTagsInput.tsx Uses legacy onboarding login flow for reauth.
app/components-react/windows/settings/General.tsx Restores legacy onboarding entry points for hardware/import/optimizer actions.
app/components-react/windows/settings/Support.tsx Restores legacy OBS import start flow and displays import-complete state.
app/components/widgets/Poll.tsx Routes poll reauth/login through OnboardingService.
app/components-react/pages/index.ts Restores Onboarding page export so route resolution works again.
app/components-react/pages/onboarding/Common.m.less Restored shared styling used by legacy onboarding steps.
app/components-react/pages/onboarding/Connect.m.less Restored styling for the legacy onboarding connect/login step.
app/components-react/pages/onboarding/Connect.tsx Restored legacy connect/login step and supporting auth module.
app/components-react/pages/onboarding/ExtraPlatformConnect.tsx Restored RTMP custom platform connect step within onboarding.
app/components-react/pages/onboarding/FreshOrImport.m.less Restored styling for “fresh vs import” step.
app/components-react/pages/onboarding/FreshOrImport.tsx Restored “1-click import / start fresh” decision step.
app/components-react/pages/onboarding/HardwareSetup.m.less Restored styling for webcam/mic setup step.
app/components-react/pages/onboarding/HardwareSetup.tsx Restored hardware setup step (devices + preview/volmeter).
app/components-react/pages/onboarding/MacPermissions.tsx Restored macOS permissions step.
app/components-react/pages/onboarding/ObsImport.m.less Restored styling for OBS/Twitch Studio import step.
app/components-react/pages/onboarding/ObsImport.tsx Restored importer step and related UI strings used by i18n keys.
app/components-react/pages/onboarding/ObsSvg.tsx Restored OBS logo SVG used by import UI.
app/components-react/pages/onboarding/Onboarding.m.less Restored top-level legacy onboarding page styling.
app/components-react/pages/onboarding/Onboarding.tsx Restored legacy onboarding page controller/module (step flow + footer/actions).
app/components-react/pages/onboarding/OnboardingContext.ts Restored skip-handler context used by onboarding steps.
app/components-react/pages/onboarding/Optimize.tsx Restored optimizer step UI and subscription to autoconfig progress.
app/components-react/pages/onboarding/PrimaryPlatformSelect.tsx Restored primary platform selection step for partial SL auth cases.
app/components-react/pages/onboarding/Prime.m.less Restored Ultra/Prime step styling.
app/components-react/pages/onboarding/Prime.tsx Restored Ultra/Prime upsell step in onboarding flow.
app/components-react/pages/onboarding/Signup.m.less Restored signup step styling.
app/components-react/pages/onboarding/Signup.tsx Restored signup step for Streamlabs ID within onboarding connect step.
app/components-react/pages/onboarding/StreamingOrRecording.m.less Restored styling for streaming vs recording mode choice step.
app/components-react/pages/onboarding/StreamingOrRecording.tsx Restored streaming vs recording mode selection step.
app/components-react/pages/onboarding/ThemeSelector.m.less Restored styling for theme selection step.
app/components-react/pages/onboarding/ThemeSelector.tsx Restored theme selection step (fetch themes + install overlay).
app/components-react/pages/onboarding/steps.ts Restored barrel export for onboarding step components.
app/i18n/en-US/onboarding.json Restores/adds onboarding keys needed by restored legacy pages.
app/i18n/en-US/twitch.json Restores Twitch Studio import title key used at runtime.
app/i18n/en-US/streaming.json Restores Twitch 2FA error message key used by login flow.
.vscode/settings.json Updates workspace editor settings (includes color customizations).
Suppressed comments (1)

app/components-react/pages/onboarding/Connect.tsx:251

  • This module-level call also uses UsageStatisticsService.recordAnalyticsEvent(...) from UI code, which triggers a synchronous service call. Switch to actions.recordAnalyticsEvent (matching app/components-react/modals/onboarding/Onboarding.tsx).
  async authPlatform(platform: TPlatform | 'streamlabs', onSuccess: () => void, merge = false) {
    this.UsageStatisticsService.recordAnalyticsEvent('PlatformLogin', platform);


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +29 to +38
function getFilteredMetadata() {
if (!showDetail) {
return themesMetadata;
}

return sortBy(
themesMetadata.filter(theme => theme.data.id !== showDetail),
['data', 'id'],
).slice(0, MAX_SIDEBAR_THEMES);
}
Comment on lines +40 to +42
const detailTheme = useMemo(() => {
return themesMetadata.find(theme => theme.data.id === showDetail);
}, [showDetail]);
Comment on lines +53 to +58
ctx.onSkip = onSkip;

function onSelectExtraPlatform(val: TExtraPlatform | undefined) {
UsageStatisticsService.recordAnalyticsEvent('PlatformLogin', val);
setExtraPlatform(val);
}
Comment on lines +68 to +71
transition-property: transform background-color border;
transition-duration: 0.5s;
transform: 0.6;

Comment on lines +1 to +7
.signup-subtitle {
max-width: 500px;
font-size: 22px;
text-align: center;
line-break: 150%;
margin-bottom: 32px;
}
Comment thread .vscode/settings.json
Comment on lines +4 to +23
"i18n-ally.keystyle": "nested",
"workbench.colorCustomizations": {
"terminal.border": "#ffffff",
"panel.border": "#ffffff",
"panelTitle.activeBorder": "#ffc600",
"terminal.tab.activeBorder": "#ffc600",
"terminalCursor.foreground": "#ffc600",
"terminal.selectionBackground": "#ffc60055",
"activityBar.background": "#053241",
"titleBar.activeBackground": "#07465B",
"titleBar.activeForeground": "#F3FBFE",
"titleBar.inactiveBackground": "#053241",
"titleBar.inactiveForeground": "#F3FBFE",
"statusBar.background": "#053241",
"statusBar.foreground": "#F3FBFE",
"statusBar.debuggingBackground": "#053241",
"statusBar.debuggingForeground": "#F3FBFE",
"statusBar.noFolderBackground": "#053241",
"statusBar.noFolderForeground": "#F3FBFE"
}
Comment on lines +55 to +77
progress.event === 'starting_step' ||
progress.event === 'progress' ||
progress.event === 'stopping_step'
) {
if (stepInfo && stepInfo.description === progress.description) {
stepInfo.percentage = progress.percentage;
} else {
setStepInfo({
description: progress.description,
summary: summaryForStep(progress)!,
percentage: progress.percentage,
});
}
} else if (progress.event === 'done') {
setProcessing(false);
sub.unsubscribe();
next();
} else {
console.error("AutoConfigService error:", progress.description);
setProcessing(false);
sub.unsubscribe();
setOptimizingState('error');
}
@bundlemon

bundlemon Bot commented Aug 27, 2026

Copy link
Copy Markdown

BundleMon

Files updated (1)
Status Path Size Limits
renderer.(hash).js
10.47MB (+153.3KB +1.45%) -
Unchanged files (3)
Status Path Size Limits
vendors~renderer.(hash).js
4.67MB -
updater.js
115.29KB -
guest-api.js
40.23KB -

Total files change +153.3KB +0.99%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@michelinewu
michelinewu deleted the mw_restore_old_onboarding branch August 27, 2026 19:27
michelinewu added a commit that referenced this pull request Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants