1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-07-16 00:14:34 +02:00

Mobile: Fixes #10188: Fix "new note" button is shown in the trash notebook (#10227)

This commit is contained in:
Henry Heino
2024-03-29 05:11:15 -07:00
committed by GitHub
parent 06aa64016f
commit 688d807eee
7 changed files with 29 additions and 27 deletions

View File

@ -1122,7 +1122,6 @@ packages/lib/services/trash/getTrashFolderId.js
packages/lib/services/trash/index.test.js
packages/lib/services/trash/index.js
packages/lib/services/trash/isTrashableItem.js
packages/lib/services/trash/isTrashableNoteOrFolder.js
packages/lib/services/trash/permanentlyDeleteOldItems.test.js
packages/lib/services/trash/permanentlyDeleteOldItems.js
packages/lib/services/trash/restoreItems.test.js

1
.gitignore vendored
View File

@ -1102,7 +1102,6 @@ packages/lib/services/trash/getTrashFolderId.js
packages/lib/services/trash/index.test.js
packages/lib/services/trash/index.js
packages/lib/services/trash/isTrashableItem.js
packages/lib/services/trash/isTrashableNoteOrFolder.js
packages/lib/services/trash/permanentlyDeleteOldItems.test.js
packages/lib/services/trash/permanentlyDeleteOldItems.js
packages/lib/services/trash/restoreItems.test.js

View File

@ -181,6 +181,7 @@ export default class Folder extends BaseItem {
user_updated_time: now,
share_id: '',
is_shared: 0,
deleted_time: 0,
};
}

View File

@ -1,5 +1,6 @@
import { getDisplayParentId, getTrashFolderId } from '.';
import { ModelType } from '../../BaseModel';
import Folder from '../../models/Folder';
describe('services/trash', () => {
@ -40,10 +41,32 @@ describe('services/trash', () => {
},
'1',
],
// should show non-deleted conflicts in the conflicts folder
[
{
deleted_time: 0,
is_conflict: 1,
parent_id: Folder.conflictFolderId(),
id: 'b',
},
Folder.conflictFolder(),
Folder.conflictFolderId(),
],
// should show deleted conflicts in the trash folder
[
{
deleted_time: 1000,
is_conflict: 1,
parent_id: Folder.conflictFolderId(),
id: 'someidhere',
},
Folder.conflictFolder(),
getTrashFolderId(),
],
])('should return the display parent ID (case %#)', (item, itemParent, expected) => {
const defaultProps = { type_: ModelType.Folder };
const actual = getDisplayParentId({ ...defaultProps, ...item }, { ...defaultProps, ...itemParent });
expect(actual).toBe(expected);
});
});

View File

@ -4,7 +4,6 @@ import { _ } from '../../locale';
import { FolderEntity, FolderIcon, FolderIconType, NoteEntity } from '../database/types';
import Folder from '../../models/Folder';
import getTrashFolderId from './getTrashFolderId';
import isTrashableNoteOrFolder from './isTrashableNoteOrFolder';
// When an item is deleted, all its properties are kept, including the parent ID
// so that it can potentially be restored to the right folder. However, when
@ -20,14 +19,11 @@ import isTrashableNoteOrFolder from './isTrashableNoteOrFolder';
// folder with ID = item.parent_id
export const getDisplayParentId = (item: FolderEntity | NoteEntity, originalItemParent: FolderEntity) => {
if (!('parent_id' in item)) throw new Error(`Missing "parent_id" property: ${JSON.stringify(item)}`);
if (!isTrashableNoteOrFolder(item)) {
return item.parent_id;
}
if (!('deleted_time' in item)) {
throw new Error(`Missing "deleted_time" property: ${JSON.stringify(item)}`);
}
if (originalItemParent && isTrashableNoteOrFolder(originalItemParent) && !('deleted_time' in originalItemParent)) {
if (originalItemParent && !('deleted_time' in originalItemParent)) {
throw new Error(`Missing "deleted_time" property: ${JSON.stringify(originalItemParent)}`);
}
@ -84,10 +80,7 @@ export const getTrashFolderIcon = (type: FolderIconType): FolderIcon => {
export const itemIsInTrash = (item: FolderEntity | NoteEntity) => {
if (!item) return false;
if (!isTrashableNoteOrFolder(item)) return false;
checkObjectHasProperties(item, ['id', 'deleted_time']);
return item.id === getTrashFolderId() || !!item.deleted_time;
};

View File

@ -1,6 +1,7 @@
import { checkObjectHasProperties } from '@joplin/utils/object';
import { ModelType } from '../../BaseModel';
import isTrashableNoteOrFolder from './isTrashableNoteOrFolder';
import conflictFolderId from '../../models/utils/getConflictFolderId';
import getTrashFolderId from './getTrashFolderId';
type ItemSlice = { id?: string };
const isTrashableItem = (itemType: ModelType, item: ItemSlice) => {
@ -10,7 +11,7 @@ const isTrashableItem = (itemType: ModelType, item: ItemSlice) => {
return false;
}
return isTrashableNoteOrFolder(item);
return item.id !== conflictFolderId() && item.id !== getTrashFolderId();
};
export default isTrashableItem;

View File

@ -1,14 +0,0 @@
import { checkObjectHasProperties } from '@joplin/utils/object';
import conflictFolderId from '../../models/utils/getConflictFolderId';
import getTrashFolderId from './getTrashFolderId';
type ItemSlice = { id?: string };
// This function is separate from isTrashableItem to handle the case where we know that an item
// is either a note or a folder, but don't know which.
const isTrashableNoteOrFolder = (item: ItemSlice) => {
checkObjectHasProperties(item, ['id']);
return item.id !== conflictFolderId() && item.id !== getTrashFolderId();
};
export default isTrashableNoteOrFolder;