feat(tab_navigation): hide buttons if launcher ones are used

This commit is contained in:
Elian Doran 2025-12-09 15:30:46 +02:00
parent 9e094f1d96
commit 82d97ef26f
No known key found for this signature in database
2 changed files with 33 additions and 4 deletions

View File

@ -6,28 +6,31 @@ import { t } from "../services/i18n";
import { dynamicRequire } from "../services/utils";
import { handleHistoryContextMenu } from "./launch_bar/HistoryNavigation";
import ActionButton from "./react/ActionButton";
import { useLauncherVisibility } from "./react/hooks";
export default function TabHistoryNavigationButtons() {
const webContents = useMemo(() => dynamicRequire("@electron/remote").getCurrentWebContents(), []);
const onContextMenu = handleHistoryContextMenu(webContents);
const { canGoBack, canGoForward } = useBackForwardState(webContents);
const legacyBackVisible = useLauncherVisibility("_lbBackInHistory");
const legacyForwardVisible = useLauncherVisibility("_lbForwardInHistory");
return (
<div className="tab-history-navigation-buttons">
<ActionButton
{!legacyBackVisible && <ActionButton
icon="bx bx-left-arrow-alt"
text={t("tab_history_navigation_buttons.go-back")}
triggerCommand="backInNoteHistory"
onContextMenu={onContextMenu}
disabled={!canGoBack}
/>
<ActionButton
/>}
{!legacyForwardVisible && <ActionButton
icon="bx bx-right-arrow-alt"
text={t("tab_history_navigation_buttons.go-forward")}
triggerCommand="forwardInNoteHistory"
onContextMenu={onContextMenu}
disabled={!canGoForward}
/>
/>}
</div>
);
}

View File

@ -901,3 +901,29 @@ export function useChildNotes(parentNoteId: string | undefined) {
return childNotes;
}
export function useLauncherVisibility(launchNoteId: string) {
const note = froca.getNoteFromCache(launchNoteId);
const [ isVisible, setIsVisible ] = useState<boolean>(checkIfVisible(note));
// React to note not being available in the cache.
useEffect(() => {
if (!note) return;
froca.getNote(launchNoteId).then(fetchedNote => setIsVisible(checkIfVisible(fetchedNote)));
}, [ note, launchNoteId ]);
// React to changes.
useTriliumEvent("entitiesReloaded", ({ loadResults }) => {
if (!note) return;
if (loadResults.getBranchRows().some(branch => branch.noteId === launchNoteId)) {
setIsVisible(checkIfVisible(note));
}
});
function checkIfVisible(note: FNote | undefined | null) {
return note?.getParentBranches().some(branch =>
[ "_lbVisibleLaunchers", "_lbMobileVisibleLaunchers" ].includes(branch.parentNoteId)) ?? false;
}
return isVisible;
}