|
12 | 12 | (mark-performance! "app:init:start") |
13 | 13 | (schedule-startup-summary-log!)) |
14 | 14 |
|
15 | | -(defn restore-persisted-ui-state! |
| 15 | +(defn restore-critical-ui-state! |
16 | 16 | [{:keys [store |
17 | 17 | restore-ui-font-preference! |
18 | 18 | restore-ui-locale-preference! |
19 | | - restore-asset-selector-sort-settings! |
20 | 19 | restore-chart-options! |
21 | 20 | restore-orderbook-ui! |
22 | | - restore-portfolio-summary-time-range! |
23 | 21 | restore-vaults-snapshot-range! |
24 | 22 | restore-agent-storage-mode! |
25 | 23 | restore-agent-passkey-capability! |
|
28 | 26 | restore-spectate-mode-url! |
29 | 27 | restore-trade-route-tab! |
30 | 28 | restore-active-asset! |
31 | | - restore-asset-selector-markets-cache! |
32 | | - restore-leaderboard-preferences! |
33 | | - restore-open-orders-sort-settings! |
34 | | - restore-funding-history-pagination-settings! |
35 | | - restore-trade-history-pagination-settings! |
36 | | - restore-order-history-pagination-settings!]}] |
| 29 | + restore-asset-selector-markets-cache!]}] |
37 | 30 | ;; Restore root typography preference (system default, optional Inter override). |
38 | 31 | (restore-ui-font-preference!) |
39 | 32 | ;; Restore UI locale preference for number/date formatting ownership. |
40 | 33 | (restore-ui-locale-preference! store) |
41 | | - ;; Restore asset selector sort settings from localStorage. |
42 | | - (restore-asset-selector-sort-settings! store) |
43 | 34 | ;; Restore chart options from localStorage. |
44 | 35 | (restore-chart-options! store) |
45 | 36 | ;; Restore orderbook UI options from localStorage. |
46 | 37 | (restore-orderbook-ui! store) |
47 | | - ;; Restore portfolio summary range selector from localStorage. |
48 | | - (restore-portfolio-summary-time-range! store) |
49 | 38 | ;; Restore vault snapshot range selector from localStorage. |
50 | 39 | (restore-vaults-snapshot-range! store) |
51 | 40 | ;; Restore agent storage preference from localStorage. |
|
65 | 54 | ;; Restore selected asset from localStorage (default to BTC). |
66 | 55 | (restore-active-asset! store) |
67 | 56 | ;; Restore cached selector market symbols for immediate dropdown population. |
68 | | - (restore-asset-selector-markets-cache! store) |
| 57 | + (restore-asset-selector-markets-cache! store)) |
| 58 | + |
| 59 | +(defn restore-deferred-ui-state! |
| 60 | + [{:keys [store |
| 61 | + restore-asset-selector-sort-settings! |
| 62 | + restore-portfolio-summary-time-range! |
| 63 | + restore-leaderboard-preferences! |
| 64 | + restore-open-orders-sort-settings! |
| 65 | + restore-funding-history-pagination-settings! |
| 66 | + restore-trade-history-pagination-settings! |
| 67 | + restore-order-history-pagination-settings!]}] |
| 68 | + ;; Restore asset selector sort settings from localStorage. |
| 69 | + (restore-asset-selector-sort-settings! store) |
| 70 | + ;; Restore portfolio summary range selector from localStorage. |
| 71 | + (restore-portfolio-summary-time-range! store) |
69 | 72 | ;; Restore leaderboard timeframe, sort, and page-size preferences from IndexedDB. |
70 | 73 | (when (fn? restore-leaderboard-preferences!) |
71 | 74 | (restore-leaderboard-preferences! store)) |
|
91 | 94 | mark-post-render-trade-secondary-panels-ready! |
92 | 95 | initialize-remote-data-streams! |
93 | 96 | load-post-render-route-effects! |
| 97 | + restore-deferred-ui-state! |
| 98 | + yield-to-main! |
94 | 99 | kick-render! |
95 | 100 | schedule-post-render-startup!]}] |
96 | 101 | (set-on-connected-handler! handle-wallet-connected) |
|
105 | 110 | (kick-render! store) |
106 | 111 | (let [post-render-startup! |
107 | 112 | (fn [] |
108 | | - ;; Install global keyboard shortcuts that should work regardless of focus target. |
109 | | - (when (fn? install-asset-selector-shortcuts!) |
110 | | - (install-asset-selector-shortcuts!)) |
111 | | - ;; Install click-away behavior for positioned overlays (TP/SL, Reduce, Margin, Spectate Mode). |
112 | | - (when (fn? install-position-tpsl-clickaway!) |
113 | | - (install-position-tpsl-clickaway!)) |
114 | | - ;; Register icon cache service worker for cross-reload symbol icon caching. |
115 | | - (register-icon-service-worker!) |
116 | | - ;; Reveal lower desktop trade surfaces after the first paint has landed. |
117 | | - (when (fn? mark-post-render-trade-secondary-panels-ready!) |
118 | | - (mark-post-render-trade-secondary-panels-ready! store)) |
119 | | - ;; Defer route-specific heavyweight work until after the initial shell paint. |
120 | | - (when (fn? load-post-render-route-effects!) |
121 | | - (load-post-render-route-effects! store)) |
122 | | - ;; Initialize remote data streams. |
123 | | - (initialize-remote-data-streams!))] |
| 113 | + (-> (js/Promise.resolve nil) |
| 114 | + (.then (fn [_] |
| 115 | + ;; Install global keyboard shortcuts that should work regardless of focus target. |
| 116 | + (when (fn? install-asset-selector-shortcuts!) |
| 117 | + (install-asset-selector-shortcuts!)) |
| 118 | + ;; Install click-away behavior for positioned overlays (TP/SL, Reduce, Margin, Spectate Mode). |
| 119 | + (when (fn? install-position-tpsl-clickaway!) |
| 120 | + (install-position-tpsl-clickaway!)) |
| 121 | + ;; Reveal lower desktop trade surfaces after the first paint has landed. |
| 122 | + (when (fn? mark-post-render-trade-secondary-panels-ready!) |
| 123 | + (mark-post-render-trade-secondary-panels-ready! store)) |
| 124 | + ;; Defer route-specific heavyweight work until after the initial shell paint. |
| 125 | + (when (fn? load-post-render-route-effects!) |
| 126 | + (load-post-render-route-effects! store)) |
| 127 | + ;; Initialize remote data streams. |
| 128 | + (initialize-remote-data-streams!))) |
| 129 | + (.then (fn [_] |
| 130 | + (if (fn? yield-to-main!) |
| 131 | + (yield-to-main!) |
| 132 | + (js/Promise.resolve nil)))) |
| 133 | + (.then (fn [_] |
| 134 | + ;; Restore clearly non-visible UI state after first paint has settled. |
| 135 | + (when (fn? restore-deferred-ui-state!) |
| 136 | + (restore-deferred-ui-state!)) |
| 137 | + ;; Register icon cache service worker for cross-reload symbol icon caching. |
| 138 | + (register-icon-service-worker!)))))] |
124 | 139 | ;; Ensure first render is enqueued before expensive subscriptions/fetch startup work. |
125 | 140 | (if (fn? schedule-post-render-startup!) |
126 | 141 | (schedule-post-render-startup! post-render-startup!) |
|
130 | 145 | [{:keys [log-fn] :as deps}] |
131 | 146 | (log-fn "Initializing Hyperopen...") |
132 | 147 | (reset-startup-state! deps) |
133 | | - (restore-persisted-ui-state! deps) |
134 | | - (initialize-systems! deps)) |
| 148 | + (restore-critical-ui-state! deps) |
| 149 | + (initialize-systems! |
| 150 | + (assoc deps |
| 151 | + :restore-deferred-ui-state! |
| 152 | + (fn [] |
| 153 | + (restore-deferred-ui-state! deps))))) |
0 commit comments