diff --git a/server/src/index.ts b/server/src/index.ts index 324e1dd..c4ba47f 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -59,7 +59,6 @@ import { getMaxSeq, truncateDeliveredOps, createTransfer, - getPendingTransfers, getTransfer, approveTransfer, updateTransferStatus, diff --git a/src/App.tsx b/src/App.tsx index 570bb66..dc36c14 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,7 +4,8 @@ import type { Note, FbPostInfo, MediaRef } from './types' import { SettingsPanel } from './components/SettingsPanel' import { FacebookFeed } from './components/FacebookFeed' import { FacebookInsights } from './components/FacebookInsights' -import { MediaThumb, useMediaUrl } from './components/MediaThumb' +import { MediaThumb } from './components/MediaThumb' +import { useMediaUrl } from './hooks/useMediaUrl' import { InstallPrompt } from './components/InstallPrompt' import { LockScreen } from './components/LockScreen' import { PhotoGallery } from './components/PhotoGallery' @@ -133,7 +134,7 @@ export default function App() { notes, createNote, updateNote, deleteNote, addMedia, removeMedia, restoreNotes, setFbPost, clearFbPost, - galleryItems, addToGalleryItems, removeGalleryItem, useGalleryItem, + galleryItems, addToGalleryItems, removeGalleryItem, attachGalleryItem, syncState, initSync, stopSyncEngine, triggerSync, schedulePush, loadFromVault, loadGallery, } = useNotes() @@ -699,7 +700,7 @@ export default function App() { onRemove={removeGalleryItem} onUse={(item) => { if (selectedNote) { - useGalleryItem(item, selectedNote.id) + attachGalleryItem(item, selectedNote.id) } }} hasActiveNote={!!selectedNote} diff --git a/src/components/MediaThumb.tsx b/src/components/MediaThumb.tsx index 182cecb..85fdd64 100644 --- a/src/components/MediaThumb.tsx +++ b/src/components/MediaThumb.tsx @@ -1,30 +1,6 @@ -import { useEffect, useState } from 'react' -import { getMediaUrl, releaseMediaUrl } from '../utils/media' +import { useMediaUrl } from '../hooks/useMediaUrl' import type { MediaRef } from '../types' -/** Returns a refcounted blob URL for the given media id (or `null` while loading). */ -export function useMediaUrl(id: string | undefined | null): string | null { - const [url, setUrl] = useState(null) - useEffect(() => { - if (!id) { setUrl(null); return } - let cancelled = false - let acquired = false - getMediaUrl(id).then((u) => { - if (cancelled) { - if (u) releaseMediaUrl(id) - return - } - acquired = !!u - setUrl(u) - }) - return () => { - cancelled = true - if (acquired) releaseMediaUrl(id) - } - }, [id]) - return url -} - interface ThumbProps { refItem: MediaRef className?: string diff --git a/src/components/SettingsPanel.tsx b/src/components/SettingsPanel.tsx index 3299b36..6bd6e7c 100644 --- a/src/components/SettingsPanel.tsx +++ b/src/components/SettingsPanel.tsx @@ -685,7 +685,6 @@ export function SettingsPanel({ value={password} onChange={e => { setPassword(e.target.value); setPwdError('') }} onKeyDown={e => e.key === 'Enter' && !opRunning && submitPassword()} - // eslint-disable-next-line jsx-a11y/no-autofocus autoFocus autoComplete="new-password" /> diff --git a/src/hooks/useMediaUrl.ts b/src/hooks/useMediaUrl.ts new file mode 100644 index 0000000..67488da --- /dev/null +++ b/src/hooks/useMediaUrl.ts @@ -0,0 +1,25 @@ +import { useEffect, useState } from 'react' +import { getMediaUrl, releaseMediaUrl } from '../utils/media' + +/** Returns a refcounted blob URL for the given media id (or `null` while loading). */ +export function useMediaUrl(id: string | undefined | null): string | null { + const [url, setUrl] = useState(null) + useEffect(() => { + if (!id) { setUrl(null); return } + let cancelled = false + let acquired = false + getMediaUrl(id).then((u) => { + if (cancelled) { + if (u) releaseMediaUrl(id) + return + } + acquired = !!u + setUrl(u) + }) + return () => { + cancelled = true + if (acquired) releaseMediaUrl(id) + } + }, [id]) + return url +} diff --git a/src/hooks/useNotes.ts b/src/hooks/useNotes.ts index f5b08e8..34c8652 100644 --- a/src/hooks/useNotes.ts +++ b/src/hooks/useNotes.ts @@ -351,7 +351,7 @@ export function useNotes() { * Move a gallery item into a note: adds it to the note's media array and * removes it from the gallery manifest (blob stays in the media store). */ - const useGalleryItem = useCallback((item: GalleryItem, noteId: string) => { + const attachGalleryItem = useCallback((item: GalleryItem, noteId: string) => { // Add to note const ref: MediaRef = { id: item.id, @@ -486,7 +486,7 @@ export function useNotes() { galleryItems, addToGalleryItems, removeGalleryItem, - useGalleryItem, + attachGalleryItem, syncState, setSyncState, notesLoaded,