From 65c47189f973b4ecd56d5746912c794a6ebddc46 Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Thu, 25 Apr 2024 05:34:32 -0700 Subject: [PATCH] Mobile,Desktop: Fixes #10191: Do not invite user to create new notes in the trash folder (#10356) --- .eslintignore | 1 + .gitignore | 1 + .../app-desktop/gui/NoteList/NoteList2.tsx | 4 ++-- packages/app-mobile/components/NoteList.tsx | 9 +++++--- .../shared/NoteList/getEmptyFolderMessage.ts | 21 +++++++++++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 packages/lib/components/shared/NoteList/getEmptyFolderMessage.ts diff --git a/.eslintignore b/.eslintignore index 75b4314a2..165384b7e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -796,6 +796,7 @@ packages/lib/commands/index.js packages/lib/commands/openMasterPasswordDialog.js packages/lib/commands/synchronize.js packages/lib/components/EncryptionConfigScreen/utils.js +packages/lib/components/shared/NoteList/getEmptyFolderMessage.js packages/lib/components/shared/config/config-shared.js packages/lib/components/shared/config/plugins/types.js packages/lib/components/shared/config/plugins/useOnDeleteHandler.js diff --git a/.gitignore b/.gitignore index dbc43d626..01090396f 100644 --- a/.gitignore +++ b/.gitignore @@ -776,6 +776,7 @@ packages/lib/commands/index.js packages/lib/commands/openMasterPasswordDialog.js packages/lib/commands/synchronize.js packages/lib/components/EncryptionConfigScreen/utils.js +packages/lib/components/shared/NoteList/getEmptyFolderMessage.js packages/lib/components/shared/config/config-shared.js packages/lib/components/shared/config/plugins/types.js packages/lib/components/shared/config/plugins/useOnDeleteHandler.js diff --git a/packages/app-desktop/gui/NoteList/NoteList2.tsx b/packages/app-desktop/gui/NoteList/NoteList2.tsx index c3ad5ca06..997a7351b 100644 --- a/packages/app-desktop/gui/NoteList/NoteList2.tsx +++ b/packages/app-desktop/gui/NoteList/NoteList2.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { _ } from '@joplin/lib/locale'; import { useMemo, useRef, useEffect } from 'react'; import { AppState } from '../../app.reducer'; import BaseModel, { ModelType } from '@joplin/lib/BaseModel'; @@ -22,6 +21,7 @@ import * as focusElementNoteList from './commands/focusElementNoteList'; import CommandService from '@joplin/lib/services/CommandService'; import useDragAndDrop from './utils/useDragAndDrop'; import { itemIsInTrash } from '@joplin/lib/services/trash'; +import getEmptyFolderMessage from '@joplin/lib/components/shared/NoteList/getEmptyFolderMessage'; import Folder from '@joplin/lib/models/Folder'; const { connect } = require('react-redux'); @@ -187,7 +187,7 @@ const NoteList = (props: Props) => { const renderEmptyList = () => { if (props.notes.length) return null; - return
{props.folders.length ? _('No notes in here. Create one by clicking on "New note".') : _('There is currently no notebook. Create one by clicking on "New notebook".')}
; + return
{getEmptyFolderMessage(props.folders, props.selectedFolderId)}
; }; const renderFiller = (key: string, style: React.CSSProperties) => { diff --git a/packages/app-mobile/components/NoteList.tsx b/packages/app-mobile/components/NoteList.tsx index 8376675f7..e5a6b9dd8 100644 --- a/packages/app-mobile/components/NoteList.tsx +++ b/packages/app-mobile/components/NoteList.tsx @@ -6,6 +6,7 @@ import { connect } from 'react-redux'; import { FlatList, Text, StyleSheet, Button, View } from 'react-native'; import { FolderEntity, NoteEntity } from '@joplin/lib/services/database/types'; import { AppState } from '../utils/types'; +import getEmptyFolderMessage from '@joplin/lib/components/shared/NoteList/getEmptyFolderMessage'; import Folder from '@joplin/lib/models/Folder'; const { _ } = require('@joplin/lib/locale'); @@ -20,7 +21,7 @@ interface NoteListProps { items: NoteEntity[]; folders: FolderEntity[]; noteSelectionEnabled?: boolean; - selectedFolderId?: string; + selectedFolderId: string|null; } class NoteListComponent extends Component { @@ -102,8 +103,9 @@ class NoteListComponent extends Component { ); } else { - const noItemMessage = _('There are currently no notes. Create one by clicking on the (+) button.'); - return {noItemMessage}; + return + {getEmptyFolderMessage(this.props.folders, this.props.selectedFolderId)} + ; } } } @@ -117,6 +119,7 @@ const NoteList = connect((state: AppState) => { notesSource: state.notesSource, themeId: state.settings.theme, noteSelectionEnabled: state.noteSelectionEnabled, + selectedFolderId: state.selectedFolderId, }; })(NoteListComponent); diff --git a/packages/lib/components/shared/NoteList/getEmptyFolderMessage.ts b/packages/lib/components/shared/NoteList/getEmptyFolderMessage.ts new file mode 100644 index 000000000..b4e14c14e --- /dev/null +++ b/packages/lib/components/shared/NoteList/getEmptyFolderMessage.ts @@ -0,0 +1,21 @@ +import { _ } from '../../../locale'; +import Folder from '../../../models/Folder'; +import Setting from '../../../models/Setting'; +import { FolderEntity } from '../../../services/database/types'; +import { getTrashFolderId, itemIsInTrash } from '../../../services/trash'; + +const getEmptyFolderMessage = (folders: FolderEntity[], selectedFolderId: string|null) => { + if (selectedFolderId === getTrashFolderId()) { + return _('There are no notes in the trash folder.'); + } else if (selectedFolderId && itemIsInTrash(Folder.byId(folders, selectedFolderId))) { + return _('This subfolder of the trash has no notes.'); + } + + if (Setting.value('appType') === 'desktop') { + return _('No notes in here. Create one by clicking on "New note".'); + } else { + return _('There are currently no notes. Create one by clicking on the (+) button.'); + } +}; + +export default getEmptyFolderMessage;