import { CheckCircle, XCircle } from '@phosphor-icons/react';
import { Suspense, useMemo } from 'react';
import {
auth,
CloudInstance,
CloudLibrary,
HardwareModel,
useLibraryContext,
useLibraryMutation,
useLibraryQuery
} from '@sd/client';
import { Button, Card, Loader, tw } from '@sd/ui';
import { Icon } from '~/components';
import { AuthRequiredOverlay } from '~/components/AuthRequiredOverlay';
import { LoginButton } from '~/components/LoginButton';
import { useLocale, useRouteTitle } from '~/hooks';
import { hardwareModelToIcon } from '~/util/hardware';
const DataBox = tw.div`max-w-[300px] rounded-md border border-app-line/50 bg-app-lightBox/20 p-2`;
const Count = tw.div`min-w-[20px] flex h-[20px] px-1 items-center justify-center rounded-full border border-app-button/40 text-[9px]`;
export const Component = () => {
useRouteTitle('Cloud');
const authState = auth.useStateSnapshot();
const authSensitiveChild = () => {
if (authState.status === 'loggedIn') return ;
if (authState.status === 'notLoggedIn' || authState.status === 'loggingIn')
return (
To access cloud related features, please login
);
return null;
};
return {authSensitiveChild()}
;
};
// million-ignore
function Authenticated() {
const { library } = useLibraryContext();
const cloudLibrary = useLibraryQuery(['cloud.library.get'], { suspense: true, retry: false });
const createLibrary = useLibraryMutation(['cloud.library.create']);
const { t } = useLocale();
const thisInstance = useMemo(() => {
if (!cloudLibrary.data) return undefined;
return cloudLibrary.data.instances.find(
(instance) => instance.uuid === library.instance_id
);
}, [cloudLibrary.data, library.instance_id]);
return (
}
>
{cloudLibrary.data ? (
{thisInstance && }
) : (
{t('cloud_connect_description')}
)}
);
}
// million-ignore
const Instances = ({ instances }: { instances: CloudInstance[] }) => {
const { library } = useLibraryContext();
const filteredInstances = instances.filter((instance) => instance.uuid !== library.instance_id);
return (
Instances
{filteredInstances.length}
{filteredInstances.map((instance) => (
Id:{' '}
{instance.id}
UUID:{' '}
{instance.uuid}
Public Key:{' '}
{instance.identity}
))}
);
};
interface LibraryProps {
cloudLibrary: CloudLibrary;
thisInstance: CloudInstance | undefined;
}
// million-ignore
const Library = ({ thisInstance, cloudLibrary }: LibraryProps) => {
const syncLibrary = useLibraryMutation(['cloud.library.sync']);
return (
Library
Name: {cloudLibrary.name}
);
};
interface ThisInstanceProps {
instance: CloudInstance;
}
// million-ignore
const ThisInstance = ({ instance }: ThisInstanceProps) => {
return (
This Instance
Id: {instance.id}
UUID: {instance.uuid}
Public Key:{' '}
{instance.identity}
);
};