fix(ui): add RecentItem type + ad protection while building items

This commit is contained in:
Edouard Vanbelle
2026-05-18 23:06:50 +02:00
parent 79a12018b1
commit 82561a2b90
3 changed files with 41 additions and 10 deletions
+10 -2
View File
@@ -744,7 +744,11 @@ const ui = {
const frag = document.createDocumentFragment(); const frag = document.createDocumentFragment();
for (const folder of folders) { for (const folder of folders) {
frag.appendChild(this._createFolderItem(folder)); try {
frag.appendChild(this._createFolderItem(folder));
} catch (e) {
console.warn(`Error building folder item `, folder, `reason: `, e);
}
} }
target.appendChild(frag); target.appendChild(frag);
}, },
@@ -759,7 +763,11 @@ const ui = {
const frag = document.createDocumentFragment(); const frag = document.createDocumentFragment();
for (const file of files) { for (const file of files) {
frag.appendChild(this._createFileItem(file)); try {
frag.appendChild(this._createFileItem(file));
} catch (e) {
console.warn(`Error building file item `, file, `reason: `, e);
}
} }
target.appendChild(frag); target.appendChild(frag);
}, },
+19 -1
View File
@@ -14,7 +14,7 @@
//FIXME: rename into FolderItem //FIXME: rename into FolderItem
/** /**
* @typedef {Object} FolderItem * @typedef {Object} FolderItem
* @property {string} category * @property {string} category (folder)
* @property {number} created_at - timestamp * @property {number} created_at - timestamp
* @property {string} icon_class * @property {string} icon_class
* @property {string} icon_special_class * @property {string} icon_special_class
@@ -105,6 +105,24 @@
* @property {String} size_formatted * @property {String} size_formatted
*/ */
/**
* @typedef {Object} RecentItem
* @property {string} id
* @property {string} user_id
* @property {string} item_id /// ID of the favorited item (file or folder)
* @property {ItemTypeEnum} item_type
* @property {number} accessed_at
* @property {string|null} item_name: null if folder
* @property {number|null} item_size null if folder
* @property {string|null} item_mime_type if file
* @property {string|null} parent_id
* @property {String} item_path Full human-readable path (e.g. "Documents/Work" for a folder, "Documents/Work/report.pdf" for a file)
* @property {String} icon_class
* @property {String} icon_special_class
* @property {String} category
* @property {String} size_formatted
*/
/** /**
* @typedef {Object} TrashItem * @typedef {Object} TrashItem
* @property {string} id * @property {string} id
+12 -7
View File
@@ -12,7 +12,7 @@ import { i18n } from '../../core/i18n.js';
import { multiSelect } from '../files/multiSelect.js'; import { multiSelect } from '../files/multiSelect.js';
import * as pathTooltip from '../pathTooltip.js'; import * as pathTooltip from '../pathTooltip.js';
/** @import {FileItem, FolderItem, ItemTypeEnum} from '../../core/types.js' */ /** @import {FileItem, FolderItem, ItemTypeEnum, RecentItem} from '../../core/types.js' */
const recent = { const recent = {
/** Maximum items to request from the server */ /** Maximum items to request from the server */
@@ -95,7 +95,7 @@ const recent = {
throw new Error(`Server returned ${response.status}`); throw new Error(`Server returned ${response.status}`);
} }
const recentItems = await response.json(); const recentItems = /** @type {RecentItem[]} */ (await response.json());
ui.resetFilesList(); // ensure also list visible & error hidden ui.resetFilesList(); // ensure also list visible & error hidden
const filesList = document.getElementById('files-list'); const filesList = document.getElementById('files-list');
@@ -141,13 +141,18 @@ const recent = {
modified_at: item.accessed_at, modified_at: item.accessed_at,
path: item.item_path || '', path: item.item_path || '',
category: 'folder', category: 'folder',
created_at: item.created_at, created_at: item.accessed_at, //Wrong information
icon_class: '', icon_class: item.icon_class,
icon_special_class: '', icon_special_class: item.icon_special_class,
owner_id: '', owner_id: '',
is_root: false is_root: false
}); });
} else { } else {
if (item.item_mime_type === undefined || item.item_mime_type === null) {
// FIXME: this case should not be possible, is it an information badly cleaned up on server ?
console.warn('Broken information for RecentItem: ', item);
//continue;
}
files.push({ files.push({
id: item.item_id, id: item.item_id,
name: item.item_name || item.item_id, name: item.item_name || item.item_id,
@@ -161,8 +166,8 @@ const recent = {
modified_at: item.accessed_at, modified_at: item.accessed_at,
path: item.item_path || '', path: item.item_path || '',
owner_id: '', owner_id: '',
created_at: item.created_at, created_at: item.accessed_at, //wrong information
sort_date: item.created_at sort_date: item.accessed_at
}); });
} }
} }