From 7db4d99fabdacc2d4f25eec507477b700190415e Mon Sep 17 00:00:00 2001 From: Nariman Jelveh Date: Fri, 23 Oct 2026 14:05:27 -0700 Subject: [PATCH] fix(dashboard): put a re-installed app back in its saved slot Uninstall keeps the app's name in the saved order so a re-install returns it to its place, but a deep-link landing appended the tile at the end of the grid. The install animation played on the last page and the tile then jumped back to its saved slot on the next refresh. The landing now places the tile through reconcileAppOrder like every other load. --- src/gui/src/UI/Dashboard/TabApps.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gui/src/UI/Dashboard/TabApps.js b/src/gui/src/UI/Dashboard/TabApps.js index ac65d3a17..52d2c55cf 100644 --- a/src/gui/src/UI/Dashboard/TabApps.js +++ b/src/gui/src/UI/Dashboard/TabApps.js @@ -3365,9 +3365,10 @@ const TabApps = { // what installs it (the launch grants the permission installedApps // reports), so the grid says so NOW rather than on some later refresh — // without this the user's first Back found no tile to minimize into and - // a grid without the app they were just using. The app joins _apps at - // the tail (where reconcileAppOrder appends new apps) with a tile drawn - // from the landing's own app-info prefetch, so only a confirmed-real + // a grid without the app they were just using. The app joins _apps + // where reconcileAppOrder puts it — its saved slot when uninstall left + // one, else the tail — with a tile drawn from the landing's own + // app-info prefetch, so only a confirmed-real // app ever materializes, with its real icon. `mark` parks the tile // invisible (.myapps-tile-installing) for the intro's arrival beat to // reveal; unmarked (no-intro paths) it simply appears. The @@ -3409,7 +3410,7 @@ const TabApps = { // A previously uninstalled app is being re-installed by this // landing; the removed record must not go on filtering it. this._setAppRemoved(appName, false); - this._apps.push(app); + this._apps = reconcileAppOrder([...this._apps, app], this._savedOrderNames); if ( mark ) this._arriving = { name: appName, $el_window }; // instant only when the pager is already on screen: this re-render // must not blink a revealed grid back through the load fade, nor