in packages/dashboard-app/src/components/installs/modal/index.tsx [15:118]
export default function OnboardingModal() {
const [step, setStep] = useState(0);
const check = onboarding[step] as InstallCheck;
const [migrationStarted] = useLocalState("desktop.migratedFromFig");
const [migrationEnded, setMigrationEnded] = useLocalState(
"desktop.migratedFromFig.UiComplete",
);
const [dotfilesCheck, refreshDotfiles] = useStatusCheck("dotfiles");
const [accessibilityCheck, refreshAccessibility] =
useStatusCheck("accessibility");
const [_desktopEntryCheck, refreshDesktopEntry] =
useStatusCheck("desktopEntry");
const [_gnomeExtensionCheck, refreshGnomeExtension] =
useStatusCheck("gnomeExtension");
const refreshLocalState = useRefreshLocalState();
const platformInfo = usePlatformInfo();
const [_dotfiles, setDotfiles] = useState(dotfilesCheck);
const [_accessibility, setAccessibility] = useState(accessibilityCheck);
const isMigrating =
Boolean(migrationStarted) === true && Boolean(migrationEnded) === false;
useEffect(() => {
refreshAccessibility();
refreshDotfiles();
refreshDesktopEntry();
refreshGnomeExtension();
}, [
refreshAccessibility,
refreshDotfiles,
refreshDesktopEntry,
refreshGnomeExtension,
]);
function nextStep() {
if (migrationStarted && !migrationEnded) {
setMigrationEnded(true);
}
setStep(step + 1);
}
function finish() {
refreshAccessibility();
refreshDotfiles();
refreshDesktopEntry();
refreshGnomeExtension();
Internal.sendOnboardingRequest({
action: Fig.OnboardingAction.FINISH_ONBOARDING,
})
.then(() => {
refreshLocalState().catch((err) => console.error(err));
})
.catch((err) => console.error(err));
}
function skipInstall() {
if (!check.id) return;
if (check.id === "dotfiles") {
setDotfiles(true);
setStep(step + 1);
}
if (check.id === "accessibility") {
setAccessibility(true);
setStep(step + 1);
}
if (check.id === "desktopEntry" || check.id === "gnomeExtension") {
setStep(step + 1);
}
}
if (
platformInfo &&
!matchesPlatformRestrictions(platformInfo, check.platformRestrictions)
) {
setStep(step + 1);
}
if (check.id === "welcome" && isMigrating) {
return <WelcomeModal figMigration next={nextStep} />;
}
if (check.id === "welcome") {
return <WelcomeModal next={nextStep} />;
}
if (
["dotfiles", "accessibility", "gnomeExtension", "desktopEntry"].includes(
check.id,
)
) {
return <InstallModal check={check} skip={skipInstall} next={nextStep} />;
}
if (check.id === "login") {
return <LoginModal next={finish} />;
}
return null;
}