mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-11-28 13:10:24 +08:00
57 lines
2.1 KiB
TypeScript
57 lines
2.1 KiB
TypeScript
// Copyright 2025, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import { NewInstallOnboardingModal } from "@/app/onboarding/onboarding";
|
|
import { CurrentOnboardingVersion } from "@/app/onboarding/onboarding-common";
|
|
import { UpgradeOnboardingModal } from "@/app/onboarding/onboarding-upgrade";
|
|
import { atoms, globalPrimaryTabStartup, globalStore } from "@/store/global";
|
|
import { modalsModel } from "@/store/modalmodel";
|
|
import * as jotai from "jotai";
|
|
import { useEffect } from "react";
|
|
import * as semver from "semver";
|
|
import { getModalComponent } from "./modalregistry";
|
|
|
|
const ModalsRenderer = () => {
|
|
const clientData = jotai.useAtomValue(atoms.client);
|
|
const [newInstallOnboardingOpen, setNewInstallOnboardingOpen] = jotai.useAtom(modalsModel.newInstallOnboardingOpen);
|
|
const [upgradeOnboardingOpen, setUpgradeOnboardingOpen] = jotai.useAtom(modalsModel.upgradeOnboardingOpen);
|
|
const [modals] = jotai.useAtom(modalsModel.modalsAtom);
|
|
const rtn: React.ReactElement[] = [];
|
|
for (const modal of modals) {
|
|
const ModalComponent = getModalComponent(modal.displayName);
|
|
if (ModalComponent) {
|
|
rtn.push(<ModalComponent key={modal.displayName} {...modal.props} />);
|
|
}
|
|
}
|
|
if (newInstallOnboardingOpen) {
|
|
rtn.push(<NewInstallOnboardingModal key={NewInstallOnboardingModal.displayName} />);
|
|
}
|
|
if (upgradeOnboardingOpen) {
|
|
rtn.push(<UpgradeOnboardingModal key={UpgradeOnboardingModal.displayName} />);
|
|
}
|
|
useEffect(() => {
|
|
if (!clientData.tosagreed) {
|
|
setNewInstallOnboardingOpen(true);
|
|
}
|
|
}, [clientData]);
|
|
|
|
useEffect(() => {
|
|
if (!globalPrimaryTabStartup) {
|
|
return;
|
|
}
|
|
if (!clientData.tosagreed) {
|
|
return;
|
|
}
|
|
const lastVersion = clientData.meta?.["onboarding:lastversion"] ?? "v0.0.0";
|
|
if (semver.lt(lastVersion, CurrentOnboardingVersion)) {
|
|
setUpgradeOnboardingOpen(true);
|
|
}
|
|
}, []);
|
|
useEffect(() => {
|
|
globalStore.set(atoms.modalOpen, rtn.length > 0);
|
|
}, [rtn]);
|
|
|
|
return <>{rtn}</>;
|
|
};
|
|
|
|
export { ModalsRenderer };
|