import { useLocation, useNavigate } from "react-router-dom"; import { LNVpsApi, VmOsImage, VmTemplate } from "../api"; import { useEffect, useState } from "react"; import CostLabel from "../components/cost"; import { ApiUrl } from "../const"; import useLogin from "../hooks/login"; import { AsyncButton } from "../components/button"; import classNames from "classnames"; import VpsResources from "../components/vps-resources"; import OsImageName from "../components/os-image-name"; import SSHKeySelector from "../components/ssh-keys"; export default function OrderPage() { const { state } = useLocation(); const login = useLogin(); const navigate = useNavigate(); const template = state as VmTemplate | undefined; const [useImage, setUseImage] = useState(-1); const [useSshKey, setUseSshKey] = useState(-1); const [images, setImages] = useState>([]); const [orderError, setOrderError] = useState(""); useEffect(() => { if (!login?.builder) return; const api = new LNVpsApi(ApiUrl, login.builder); api.listOsImages().then((a) => setImages(a)); }, [login]); async function createOrder() { if (!login?.builder || !template) return; const api = new LNVpsApi(ApiUrl, login.builder); setOrderError(""); try { const newVm = await api.orderVm(template.id, useImage, useSshKey); navigate("/vm/renew", { state: newVm, }); } catch (e) { if (e instanceof Error) { setOrderError(e.message); } } } const sortedImages = images.sort( (a, b) => new Date(b.release_date).getTime() - new Date(a.release_date).getTime(), ); if (!template || !login) { return

No order found

; } return (
New Order
{template.name}
{template.cost_plan && }

Select OS: {sortedImages.map((a) => (
setUseImage(a.id)} >
))}

Create Order {orderError && {orderError}}
); }