forked from github/plane
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { FC, ReactNode } from "react";
|
|
import { observer } from "mobx-react-lite";
|
|
import useSWR from "swr";
|
|
// components
|
|
import { LogoSpinner } from "@/components/common";
|
|
import { InstanceSetupForm, InstanceFailureView } from "@/components/instance";
|
|
// hooks
|
|
import { useInstance } from "@/hooks/store";
|
|
// layout
|
|
import { DefaultLayout } from "@/layouts/default-layout";
|
|
|
|
type InstanceProviderProps = {
|
|
children: ReactNode;
|
|
};
|
|
|
|
export const InstanceProvider: FC<InstanceProviderProps> = observer((props) => {
|
|
const { children } = props;
|
|
// store hooks
|
|
const { instance, error, fetchInstanceInfo } = useInstance();
|
|
// fetching instance details
|
|
useSWR("INSTANCE_DETAILS", () => fetchInstanceInfo(), {
|
|
revalidateOnFocus: false,
|
|
revalidateIfStale: false,
|
|
errorRetryCount: 0,
|
|
});
|
|
|
|
if (!instance && !error)
|
|
return (
|
|
<div className="flex h-screen min-h-[500px] w-full justify-center items-center">
|
|
<LogoSpinner />
|
|
</div>
|
|
);
|
|
|
|
if (error) {
|
|
return (
|
|
<DefaultLayout>
|
|
<div className="relative h-full w-full overflow-y-auto px-6 py-10 mx-auto flex justify-center items-center">
|
|
<InstanceFailureView />
|
|
</div>
|
|
</DefaultLayout>
|
|
);
|
|
}
|
|
|
|
if (!instance?.is_setup_done) {
|
|
return (
|
|
<DefaultLayout>
|
|
<div className="relative h-full w-full overflow-y-auto px-6 py-10 mx-auto flex justify-center items-center">
|
|
<InstanceSetupForm />
|
|
</div>
|
|
</DefaultLayout>
|
|
);
|
|
}
|
|
|
|
return <>{children}</>;
|
|
});
|