import { useMutation, useQuery } from "@tanstack/react-query"; import { useThoriumAccount } from "@thorium/context/ThoriumAccountContext"; import { toast } from "@thorium/context/ToastContext"; import { useConfirm, usePrompt } from "@thorium/ui/AlertDialog"; import Dropdown, { DropdownItem } from "@thorium/ui/Dropdown"; import { Icon } from "@thorium/ui/Icon"; import { Model } from "@thorium/utils/FlexLayout"; import { useContext, useState } from "react"; import { Button } from "react-aria-components"; import { CoreFlexLayoutContext, defaultJson } from "./CoreFlexLayoutContext"; export function CoreFlexLayoutDropdown() { const { layoutModel, setLayoutModel } = useContext(CoreFlexLayoutContext); const { account } = useThoriumAccount(); const [selectedLayout, setSelectedLayout] = useState(null); const coreLayoutQuery = useQuery({ queryKey: ["coreLayout", account?.user_id], queryFn: () => { return fetch(`${process.env.THORIUMSIM_URL}/api/coreLayouts`, { method: "GET", headers: { "Content-Type": "application/json", Authorization: `Bearer ${account?.access_token}`, }, }).then((res) => res.json()) as Promise<{ coreLayouts: { id: number; name: string; layout_json: string; }[]; }>; }, enabled: account?.user_id !== undefined, }); const coreLayoutMutation = useMutation({ mutationFn: ({ method, body }: { method: "POST" | "PUT" | "DELETE"; body: any }) => { return fetch(`${process.env.THORIUMSIM_URL}/api/coreLayouts`, { method, body: JSON.stringify(body), headers: { "Content-Type": "application/json", Authorization: `Bearer ${account?.access_token}`, }, }).then((res) => res.json()) as Promise<{ coreLayout: { id: number } }>; }, onSettled: () => { coreLayoutQuery.refetch(); }, }); const prompt = usePrompt(); const confirm = useConfirm(); if (coreLayoutQuery.isLoading && coreLayoutQuery.fetchStatus === "idle") { return null; } return ( {coreLayoutQuery.isLoading ? "Loading Flex Layouts..." : "Change Flex Layout"} ); }