fix: 6 getters → propriétés plain + _recompute() (étape 1)
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user