diff --git a/apps/oneclient/frontend/src/components/overlay/AccountPopup.tsx b/apps/oneclient/frontend/src/components/overlay/AccountPopup.tsx index fef75347..d3cf6579 100644 --- a/apps/oneclient/frontend/src/components/overlay/AccountPopup.tsx +++ b/apps/oneclient/frontend/src/components/overlay/AccountPopup.tsx @@ -1,76 +1,99 @@ import type { MinecraftCredentials } from '@/bindings.gen'; -import { AccountAvatar } from '@/components/AccountAvatar'; import { bindings } from '@/main'; -import { useCommandMut, useCommandSuspense } from '@onelauncher/common'; -import { useQueryClient } from '@tanstack/react-query'; -import { Button as AriaButton } from 'react-aria-components'; +import { useCommand, useCommandMut } from '@onelauncher/common'; +import { Button } from '@onelauncher/common/components'; +import { Link } from '@tanstack/react-router'; +import { PlusIcon, Settings01Icon } from '@untitled-theme/icons-react'; +import { DialogTrigger } from 'react-aria-components'; import { twMerge } from 'tailwind-merge'; +import { AccountAvatar } from '../AccountAvatar'; +import { AddAccountModal } from './AddAccountModal'; +import { Overlay } from './Overlay'; import { Popup } from './Popup'; export function AccountPopup() { - const { data: currentAccount } = useCommandSuspense(['getDefaultUser'], () => bindings.core.getDefaultUser(true)); - const { data: accounts } = useCommandSuspense(['getUsers', 'accountPopup'], bindings.core.getUsers, { - select(data) { - data.sort((a, b) => { - if (currentAccount?.id === a.id) - return -1; - else if (currentAccount?.id === b.id) - return 1; - return a.username.localeCompare(b.username); - }); + const users = useCommand(['getUsers'], bindings.core.getUsers); + const defaultUser = useCommand(['getDefaultUser'], () => bindings.core.getDefaultUser(false)); - return data; - }, - }); - - const queryClient = useQueryClient(); - const { mutate: setDefaultUser } = useCommandMut(bindings.core.setDefaultUser, { - onSuccess() { - queryClient.invalidateQueries({ - queryKey: ['getDefaultUser'], - }); - }, - }); + const setDefaultUser = (user: MinecraftCredentials) => { + bindings.core.setDefaultUser(user.id); + }; return ( -
- {accounts.map(profile => ( - setDefaultUser(profile.id)} - profile={profile} - selected={profile.id === currentAccount?.id} - /> + +
+ {defaultUser.data && ( +
+ { }} + user={defaultUser.data} + /> +
+ )} + + {users.data?.filter(user => user.id !== defaultUser.data?.id).map(user => ( +
+ setDefaultUser(user)} + user={user} + /> +
))} + +
+
+ + + + + + + + +
+
+ + + +
+
); } -function AccountRow({ - selected = false, - profile, - onPress, +export default AccountPopup; + +function AccountEntry({ + onClick, + user, + loggedIn = false, }: { - selected?: boolean; - profile: MinecraftCredentials; - onPress: () => void; + onClick: () => void; + user: MinecraftCredentials; + loggedIn?: boolean; }) { return ( - - - -
-

{profile.username}

+
+ +
+
+

{user.username}

+ {loggedIn &&

Logged in

} +
+
- +
); } diff --git a/apps/oneclient/frontend/src/components/overlay/Popup.tsx b/apps/oneclient/frontend/src/components/overlay/Popup.tsx index 8003fe82..dd60f3ce 100644 --- a/apps/oneclient/frontend/src/components/overlay/Popup.tsx +++ b/apps/oneclient/frontend/src/components/overlay/Popup.tsx @@ -18,7 +18,7 @@ const popupVariants = tv({ ], dialog: [ 'flex flex-col items-center p-1 gap-2 relative', - 'border border-component-border-hover bg-page-elevated shadow-md rounded-lg', + 'border border-component-border-hover bg-page-elevated shadow-md rounded-xl', ], }, });