fix(ui): add RecentItem type + ad protection while building items
This commit is contained in:
+10
-2
@@ -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
@@ -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 +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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user