import type { ClusterModel } from '@/bindings.gen'; import type { ModalProps } from '@/components/overlay/Modal'; import Modal from '@/components/overlay/Modal'; import { bindings } from '@/main'; import { useCommand } from '@onelauncher/common'; import { Button, Dropdown } from '@onelauncher/common/components'; import { useEffect, useState } from 'react'; import { Heading } from 'react-aria-components'; export function useRecentCluster() { const result = useCommand('getClusters', bindings.core.getClusters); const [cluster, setCluster] = useState(); useEffect(() => { if (!result.data) return; let mostRecentCluster: ClusterModel | undefined; for (const c of result.data) { if (!mostRecentCluster) { mostRecentCluster = c; continue; } const currentPlayed = mostRecentCluster.last_played; const newPlayed = c.last_played; if (typeof currentPlayed !== 'string' && typeof newPlayed === 'string') { mostRecentCluster = c; } else if (typeof currentPlayed === 'string' && typeof newPlayed === 'string') { const playedAt = new Date(currentPlayed); const clusterPlayedAt = new Date(newPlayed); if (clusterPlayedAt > playedAt) mostRecentCluster = c; } } setCluster(mostRecentCluster); }, [result.data]); return cluster; } export function useClusters() { const result = useCommand('getClusters', bindings.core.getClusters); const [clusters, setClusters] = useState | undefined>(); useEffect(() => { if (!result.data) return; setClusters(result.data); }, [result.data]); return clusters; } type ChooseClusterModalProps = ModalProps & { clusters?: Array; confirmText?: string; selected?: (clusters: Array) => number; onSelected?: (cluster: ClusterModel) => void; }; export function ChooseClusterModal({ clusters: clusterList, selected: defaultSelected, onSelected, confirmText, ...props }: ChooseClusterModalProps) { const clusters = useClusters(); const [selected, setSelected] = useState(0); useEffect(() => { if (!clusters) return; const newSelected = defaultSelected?.(clusters); if (newSelected) setSelected(newSelected); }, [clusters, defaultSelected]); function chooseCluster() { if (clusters !== undefined) { const cluster = clusters[selected] as ClusterModel | undefined; if (cluster !== undefined) onSelected?.(cluster); } } return (
Select a Cluster { setSelected(index as number); }} selectedKey={selected} > {clusters?.map((cluster, index) => ( {cluster.name} ))}
); // return ( // , //