import { useQueryClient } from '@tanstack/react-query'; import { useNavigate } from 'react-router'; import { LibraryConfigWrapped, useBridgeMutation, useBridgeQuery, useClientContext, useLibraryContext, usePlausibleEvent, useZodForm } from '@sd/client'; import { Button, Dialog, Select, SelectOption, toast, useDialog, UseDialogProps, z } from '@sd/ui'; import { useLocale } from '~/hooks'; import { usePlatform } from '~/util/Platform'; const schema = z.object({ libraryId: z.string().refine((value) => value !== 'select_library', { message: 'Please select a library' }) }); export default (props: UseDialogProps & { librariesCtx: LibraryConfigWrapped[] | undefined }) => { const cloudLibraries = useBridgeQuery(['cloud.library.list']); const joinLibrary = useBridgeMutation(['cloud.library.join']); const { t } = useLocale(); const navigate = useNavigate(); const platform = usePlatform(); const queryClient = useQueryClient(); const form = useZodForm({ schema, defaultValues: { libraryId: 'select_library' } }); // const queryClient = useQueryClient(); // const submitPlausibleEvent = usePlausibleEvent(); // const platform = usePlatform(); const onSubmit = form.handleSubmit(async (data) => { try { const library = await joinLibrary.mutateAsync(data.libraryId); queryClient.setQueryData(['library.list'], (libraries: any) => { // The invalidation system beat us to it if ((libraries || []).find((l: any) => l.uuid === library.uuid)) return libraries; return [...(libraries || []), library]; }); platform.refreshMenuBar && platform.refreshMenuBar(); navigate(`/${library.uuid}`, { replace: true }); } catch (e: any) { console.error(e); toast.error(e); } }); return (
{cloudLibraries.isLoading && {t('loading')}...} {cloudLibraries.data && ( )}
); };