You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-26 22:41:17 +02:00
Chore: Refactor folder related functions to TypeScript
This commit is contained in:
73
packages/lib/folders-screen-utils.ts
Normal file
73
packages/lib/folders-screen-utils.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { Dispatch } from 'redux';
|
||||
import Folder from './models/Folder';
|
||||
import Setting from './models/Setting';
|
||||
import shim from './shim';
|
||||
import { FolderLoadOptions } from './models/utils/types';
|
||||
|
||||
const refreshCalls_: boolean[] = [];
|
||||
let scheduleRefreshFoldersIID_: any = null;
|
||||
|
||||
export const allForDisplay = async (options: FolderLoadOptions = {}) => {
|
||||
const orderDir = Setting.value('folders.sortOrder.reverse') ? 'DESC' : 'ASC';
|
||||
|
||||
const folderOptions: FolderLoadOptions = {
|
||||
caseInsensitive: true,
|
||||
order: [
|
||||
{
|
||||
by: 'title',
|
||||
dir: orderDir,
|
||||
},
|
||||
],
|
||||
...options,
|
||||
};
|
||||
|
||||
let folders = await Folder.all(folderOptions);
|
||||
|
||||
if (Setting.value('folders.sortOrder.field') === 'last_note_user_updated_time') {
|
||||
folders = await Folder.orderByLastModified(folders, orderDir);
|
||||
}
|
||||
|
||||
if (Setting.value('showNoteCounts')) {
|
||||
await Folder.addNoteCounts(folders,
|
||||
Setting.value('showCompletedTodos'));
|
||||
}
|
||||
|
||||
return folders;
|
||||
};
|
||||
|
||||
export const refreshFolders = async (dispatch: Dispatch) => {
|
||||
refreshCalls_.push(true);
|
||||
try {
|
||||
const folders = await allForDisplay({ includeConflictFolder: true });
|
||||
|
||||
dispatch({
|
||||
type: 'FOLDER_UPDATE_ALL',
|
||||
items: folders,
|
||||
});
|
||||
} finally {
|
||||
refreshCalls_.pop();
|
||||
}
|
||||
};
|
||||
|
||||
export const scheduleRefreshFolders = async (dispatch: Dispatch) => {
|
||||
if (scheduleRefreshFoldersIID_) shim.clearTimeout(scheduleRefreshFoldersIID_);
|
||||
scheduleRefreshFoldersIID_ = shim.setTimeout(() => {
|
||||
scheduleRefreshFoldersIID_ = null;
|
||||
void refreshFolders(dispatch);
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
export const cancelTimers = async () => {
|
||||
if (scheduleRefreshFoldersIID_) {
|
||||
shim.clearTimeout(scheduleRefreshFoldersIID_);
|
||||
scheduleRefreshFoldersIID_ = null;
|
||||
}
|
||||
return new Promise((resolve) => {
|
||||
const iid = shim.setInterval(() => {
|
||||
if (!refreshCalls_.length) {
|
||||
shim.clearInterval(iid);
|
||||
resolve(null);
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user