From 7c7c1b9f90773bca337c5fb93da1dc4fadd77ad1 Mon Sep 17 00:00:00 2001 From: Henry Heino Date: Tue, 14 May 2024 10:19:18 -0700 Subject: [PATCH] Desktop: Fixes #10230: Fix new note and to-do buttons greyed when initial selection is all notes/a tag --- packages/app-desktop/app.ts | 4 ++++ .../app-mobile/components/screens/Notes.tsx | 23 +++---------------- packages/app-mobile/root.tsx | 4 ++++ packages/lib/reducer.ts | 6 +++++ 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/packages/app-desktop/app.ts b/packages/app-desktop/app.ts index d49ca86e105..6f8d41559c0 100644 --- a/packages/app-desktop/app.ts +++ b/packages/app-desktop/app.ts @@ -513,6 +513,10 @@ class Application extends BaseApplication { }); } + this.store().dispatch({ + type: 'INITIAL_SELECTION_SET', + }); + this.store().dispatch({ type: 'FOLDER_SET_COLLAPSED_ALL', ids: Setting.value('collapsedFolderIds'), diff --git a/packages/app-mobile/components/screens/Notes.tsx b/packages/app-mobile/components/screens/Notes.tsx index ce440735cf9..4de1ab756aa 100644 --- a/packages/app-mobile/components/screens/Notes.tsx +++ b/packages/app-mobile/components/screens/Notes.tsx @@ -18,7 +18,6 @@ const { BackButtonService } = require('../../services/back-button.js'); import { AppState } from '../../utils/types'; import { NoteEntity } from '@joplin/lib/services/database/types'; import { itemIsInTrash } from '@joplin/lib/services/trash'; -const { ALL_NOTES_FILTER_ID } = require('@joplin/lib/reserved-ids.js'); // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied class NotesScreenComponent extends BaseScreenComponent { @@ -230,34 +229,19 @@ class NotesScreenComponent extends BaseScreenComponent { let buttonFolderId = this.props.selectedFolderId !== Folder.conflictFolderId() ? this.props.selectedFolderId : null; if (!buttonFolderId) buttonFolderId = this.props.activeFolderId; - const isAllNotes = - this.props.notesParentType === 'SmartFilter' - && this.props.selectedSmartFilterId === ALL_NOTES_FILTER_ID; - - // Usually, when showing all notes, activeFolderId/selectedFolderId is set to the last - // active folder. - // If the app starts showing all notes, activeFolderId/selectedFolderId are - // empty or null. As such, we need a special case to show the buttons: - const addFolderNoteButtons = !!buttonFolderId || isAllNotes; + const addFolderNoteButtons = !!buttonFolderId; const thisComp = this; const makeActionButtonComp = () => { if ((this.props.notesParentType === 'Folder' && itemIsInTrash(parent)) || !Folder.atLeastOneRealFolderExists(this.props.folders)) return null; - const getTargetFolderId = async () => { - if (!buttonFolderId && isAllNotes) { - return (await Folder.defaultFolder()).id; - } - return buttonFolderId; - }; if (addFolderNoteButtons && this.props.folders.length > 0) { const buttons = []; buttons.push({ label: _('New to-do'), onPress: async () => { - const folderId = await getTargetFolderId(); const isTodo = true; - void this.newNoteNavigate(folderId, isTodo); + void this.newNoteNavigate(buttonFolderId, isTodo); }, color: '#9b59b6', icon: 'checkbox-outline', @@ -266,9 +250,8 @@ class NotesScreenComponent extends BaseScreenComponent { buttons.push({ label: _('New note'), onPress: async () => { - const folderId = await getTargetFolderId(); const isTodo = false; - void this.newNoteNavigate(folderId, isTodo); + void this.newNoteNavigate(buttonFolderId, isTodo); }, color: '#9b59b6', icon: 'document', diff --git a/packages/app-mobile/root.tsx b/packages/app-mobile/root.tsx index 5b42946c35a..5aa1f21d892 100644 --- a/packages/app-mobile/root.tsx +++ b/packages/app-mobile/root.tsx @@ -710,6 +710,10 @@ async function initialize(dispatch: Function) { }); } + this.store().dispatch({ + type: 'INITIAL_SELECTION_SET', + }); + await clearSharedFilesCache(); } catch (error) { alert(`Initialization error: ${error.message}`); diff --git a/packages/lib/reducer.ts b/packages/lib/reducer.ts index cd7f632c0f6..fa95516395b 100644 --- a/packages/lib/reducer.ts +++ b/packages/lib/reducer.ts @@ -883,6 +883,12 @@ const reducer = produce((draft: Draft = defaultState, action: any) => { break; } + case 'INITIAL_SELECTION_SET': + // To allow creating notes when opening the app with all notes and/or tags, + // we also need a "last selected folder ID". + draft.selectedFolderId ??= draft.settings.activeFolderId; + break; + case 'SMART_FILTER_SELECT': draft.notesParentType = 'SmartFilter'; draft.selectedSmartFilterId = action.id;