一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
32 行
992 B
TypeScript
32 行
992 B
TypeScript
import { useEffect, useRef, useState } from 'react';
|
|
import usePrevious from '@joplin/lib/hooks/usePrevious';
|
|
|
|
const useActiveDescendantId = (selectedFolderId: string, selectedNoteIds: string[]) => {
|
|
const selectedNoteIdsRef = useRef(selectedNoteIds);
|
|
selectedNoteIdsRef.current = selectedNoteIds;
|
|
|
|
const [focusedNoteId, setFocusedNoteId] = useState('');
|
|
|
|
useEffect(() => {
|
|
setFocusedNoteId(selectedNoteIdsRef.current?.[0] ?? '');
|
|
}, [selectedFolderId]);
|
|
|
|
const previousSelectedNoteIds = usePrevious(selectedNoteIds, []);
|
|
let activeNoteId = focusedNoteId;
|
|
|
|
if (!selectedNoteIds.includes(activeNoteId)) {
|
|
// Prefer added items
|
|
activeNoteId = selectedNoteIds.find(id => !previousSelectedNoteIds.includes(id)) ?? selectedNoteIds[0] ?? '';
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (focusedNoteId !== activeNoteId) {
|
|
setFocusedNoteId(activeNoteId);
|
|
}
|
|
}, [focusedNoteId, activeNoteId]);
|
|
|
|
return { activeNoteId, setActiveNoteId: setFocusedNoteId };
|
|
};
|
|
|
|
export default useActiveDescendantId;
|