feat(pwa): app icon shortcuts for Quick Dump, new task and shopping list open their input
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m31s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m31s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c6a2cfb85c
commit
3d367ce633
9 files changed
+74
-13
No files matched your search
@@ -245,6 +245,34 @@ export const App: React.FC = () => {
|
||||
};
|
||||
|
||||
const { isMenuOpen, setIsMenuOpen, closeMenu, setGroups, primaryAction, setPrimaryAction } = useMobileActions();
|
||||
const primaryActionRef = useRef(primaryAction);
|
||||
primaryActionRef.current = primaryAction;
|
||||
|
||||
// App icon shortcuts (manifest "shortcuts", long-press on the icon): open the tab and its input right away.
|
||||
// ?shortcut=quickdump|task|list; the old links (?mode=capture, ?tab=triage) still lead to the Quick Dump.
|
||||
const [pendingShortcut, setPendingShortcut] = useState<ActiveTab | null>(() => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const target = params.get('shortcut') || (params.get('mode') === 'capture' || params.get('tab') === 'triage' ? 'quickdump' : '');
|
||||
return ({ quickdump: 'triage', task: 'tasks', list: 'lists' } as Record<string, ActiveTab>)[target] || null;
|
||||
});
|
||||
useEffect(() => {
|
||||
if (!pendingShortcut || !user) return;
|
||||
if (activeTab !== pendingShortcut) {
|
||||
setActiveTab(pendingShortcut);
|
||||
return;
|
||||
}
|
||||
const target = pendingShortcut;
|
||||
setPendingShortcut(null);
|
||||
const url = new URL(window.location.href);
|
||||
['shortcut', 'mode', 'tab'].forEach((k) => url.searchParams.delete(k));
|
||||
window.history.replaceState({}, '', url.pathname + url.search + url.hash);
|
||||
// The view registers its "+" action once it is mounted, so wait a moment (no cleanup: resetting
|
||||
// pendingShortcut above re-runs this effect and must not cancel the timer)
|
||||
window.setTimeout(() => {
|
||||
if (target === 'triage') handleTriggerAddButton();
|
||||
else if (window.innerWidth < 640 || target === 'lists') primaryActionRef.current?.();
|
||||
}, 400);
|
||||
}, [pendingShortcut, user?.id, activeTab]);
|
||||
|
||||
useEffect(() => {
|
||||
closeMenu();
|
||||
|
||||
Reference in new issue
Block a user