fix: 6 getters → propriétés plain + _recompute() (étape 1)
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped

Alpine 3.14.9 ne supporte pas les getters dans le Proxy x-data.
Converti en propriétés mises à jour via _recompute() dans:
- init() après chargement tree
- _loadFolder() après chaque navigation
- doSort() / doFilter() après modifs

Getters remplacés:
- pathValue, canGoBack, canGoForward, flatTree,
  filteredTableItems, contentSnippetMap
- _computeFilteredTableItems() extrait de get filteredTableItems

Zéro getter restant, braces/parens équilibrés, 73 tests OK
This commit is contained in:
2026-07-12 22:24:24 -04:00
parent e34ef6193c
commit 3718ad488c
+27 -19
View File
@@ -944,9 +944,7 @@ window._wsInitData = (function() {
uploadStartTime: 0,
// Path bar
get pathValue() {
return '/workspace/' + this.folderStack.filter(function(b){return b.id > 0}).map(function(b){return b.name}).join('/');
},
pathValue: '/workspace/',
async navigateToRoot() {
this.folderStack = [];
@@ -986,8 +984,8 @@ window._wsInitData = (function() {
// Navigation history
navHistory: [],
navIndex: -1,
get canGoBack() { return this.navIndex > 0; },
get canGoForward() { return this.navIndex < this.folderStack.length - 1; },
canGoBack: false,
canGoForward: false,
// Preview popup
previewVisible: false,
@@ -1034,6 +1032,20 @@ window._wsInitData = (function() {
// Load workspace tags
this.loadWorkspaceTags();
} catch(e) { console.error('Tree load error:', e); this.loaded = true; }
this._recompute();
},
_recompute() {
// Recompute all former getters as plain properties
this.canGoBack = this.navIndex > 0;
this.canGoForward = this.navIndex < this.folderStack.length - 1;
this.pathValue = '/workspace/' + this.folderStack.filter(function(b){return b.id > 0}).map(function(b){return b.name}).join('/');
// flatTree
var ft = [];
this._flattenTree(this.tree, ft);
this.flatTree = ft;
// filteredTableItems
this._computeFilteredTableItems();
},
// ── Pin/Favorite items ──
@@ -1108,11 +1120,7 @@ window._wsInitData = (function() {
},
// ── Table view data ──
get flatTree() {
var result = [];
this._flattenTree(this.tree, result);
return result;
},
flatTree: [],
_flattenTree(nodes, out) {
for (var i=0; i<nodes.length; i++) {
out.push(nodes[i]);
@@ -1121,13 +1129,14 @@ window._wsInitData = (function() {
},
// ── Filtered table items (for enhanced filter/search table) ──
get filteredTableItems() {
filteredTableItems: [],
_computeFilteredTableItems() {
var self = this;
var q = (this.searchQuery || '').toLowerCase().trim();
var ft = this.filterType || '';
var tf = this.tagFilter || '';
// If no filter active, return empty (show regular views)
if (!q && !ft && !tf) return [];
if (!q && !ft && !tf) { this.filteredTableItems = []; return; }
// Flatten entire tree
var all = [];
this._flattenTree(this.tree, all);
@@ -1136,7 +1145,7 @@ window._wsInitData = (function() {
all[i]._path = self._getItemPath(all[i].id);
}
// Filter
return all.filter(function(n) {
this.filteredTableItems = all.filter(function(n) {
var nameMatch = !q || (n.name || '').toLowerCase().indexOf(q) !== -1;
var typeMatch = true;
if (ft) {
@@ -1258,10 +1267,7 @@ window._wsInitData = (function() {
},
// ── Content snippet for content view ──
get contentSnippetMap() {
// Preload snippets? Too expensive. Return empty, load on hover.
return {};
},
contentSnippetMap: {},
// ── Context menu ──
onContextMenu(ev) {
@@ -1522,6 +1528,7 @@ window._wsInitData = (function() {
this.currentFolder = folderId || 0;
this._saveExpandedState();
this.previewItem = null;
this._recompute();
} catch(e) { console.error('Load folder error:', e); }
},
@@ -1643,6 +1650,7 @@ window._wsInitData = (function() {
else if (s === 'date-desc') sorted.sort(function(a,b) { return (b.updated_at||'').localeCompare(a.updated_at||''); });
else if (s === 'type') sorted.sort(function(a,b) { return (a.is_folder===b.is_folder) ? 0 : a.is_folder ? -1 : 1; });
this.displayTree = sorted;
this._recompute();
},
// ── Undo delete ──
@@ -1862,9 +1870,9 @@ window._wsInitData = (function() {
doFilter() {
var q = (this.searchQuery || '').toLowerCase().trim();
var ft = this.filterType || '';
if (!q && !ft && !this.tagFilter) { this.displayTree = [...this.tree]; return; }
// filteredTableItems is a computed getter — just trigger reactivity
if (!q && !ft && !this.tagFilter) { this.displayTree = [...this.tree]; this._computeFilteredTableItems(); return; }
this.displayTree = [...this.tree];
this._computeFilteredTableItems();
},
filterByType(type) {
this.filterType = (this.filterType === type) ? '' : type;