export default function OnboardingModal()

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;
}