import { useQueryClient } from '@tanstack/react-query'; import { forwardRef, useState } from 'react'; import { Text, View } from 'react-native'; import { useBridgeMutation, usePlausibleEvent } from '@sd/client'; import { ModalInput } from '~/components/form/Input'; import { Modal, ModalRef } from '~/components/layout/Modal'; import { Button } from '~/components/primitive/Button'; import useForwardedRef from '~/hooks/useForwardedRef'; import { tw } from '~/lib/tailwind'; import { currentLibraryStore } from '~/utils/nav'; const CreateLibraryModal = forwardRef((_, ref) => { const modalRef = useForwardedRef(ref); const queryClient = useQueryClient(); const [libName, setLibName] = useState(''); const submitPlausibleEvent = usePlausibleEvent(); const { mutate: createLibrary, isLoading: createLibLoading } = useBridgeMutation( 'library.create', { onSuccess: (lib) => { // Reset form setLibName(''); // We do this instead of invalidating the query because it triggers a full app re-render?? queryClient.setQueryData(['library.list'], (libraries: any) => { // The invalidation system beat us to it if (libraries.find((l: any) => l.uuid === lib.uuid)) return libraries; return [...(libraries || []), lib]; }); // Switch to the new library currentLibraryStore.id = lib.uuid; submitPlausibleEvent({ event: { type: 'libraryCreate' } }); }, onSettled: () => { modalRef.current?.dismiss(); } } ); return ( { // Resets form onDismiss setLibName(''); }} showCloseButton // Disable panning gestures enableHandlePanningGesture={false} enableContentPanningGesture={false} > setLibName(text)} placeholder="My Cool Library" /> ); }); export default CreateLibraryModal;