Nuno23C opened a new issue, #40375:
URL: https://github.com/apache/superset/issues/40375

   ### Bug description
   
   ## How to reproduce the bug
   
   1. Start from a stock Superset 6.1.0 deployment (e.g. 
`apache/superset:6.1.0`).
   2. Add the following to `superset_config.py` — a minimal partial override of 
`THEME_DEFAULT`, matching the pattern shown in PR #35220's own testing 
instructions:
   
      ```python
      THEME_DEFAULT = {
          "token": {
              "colorPrimary": "#ff0000",
          },
          "algorithm": "default",
      }
      ```
   
   3. Restart the web container.
   4. Open `/login/` in a browser with DevTools → Console open.
   
   ### Expected results
   
   The login page renders with the customized `colorPrimary`. Unspecified token 
fields fall back to the built-in defaults (consistent with what the official 
theming docs promise: *"Superset validates theme JSON… falls back to the 
built-in default theme rather than applying a broken configuration."*).
   
   ### Actual results
   
   The page is blank. The console shows:
   
   ```
   Failed to apply theme: TypeError: Cannot read properties of undefined 
(reading 'startsWith')
       at n (vendors.<hash>.entry.js:8:21553)
       at es (8085.<hash>.entry.js:8:735:950)
       at ii (vendors.<hash>.entry.js:550:51407)
       at iW (vendors.<hash>.entry.js:550:60874)
       at c (vendors.<hash>.entry.js:554:22700)
       ...
   ```
   
   The React app crashes during boot. Subsequent calls to 
`/api/v1/theme/?q=(filters:!((col:is_system_default,opr:eq,value:!t)))` return 
`401 Unauthorized` (unauthenticated, because the user is on the login page) but 
those are downstream of the crash, not its cause.
   
   ### Evidence
   
   In a working pod, the partial-override config produces this 
`bootstrapData?.common?.theme` (queryable via 
`JSON.parse(document.querySelector('#app').dataset.bootstrap)` in the console):
   
   ```js
   {
     default: {
       algorithm: "default",
       token: {
         colorPrimary: "#ff0000",   // ← only the user-supplied field
       }                            // ← ~22 expected fields missing
     },
     dark: {
       algorithm: "dark",
       token: {
         brandAppName: "Apache Superset",
         brandLogoHref: "/",
         fontFamily: "Inter, Helvetica, Arial, sans-serif",
         // ... 22 more fields, all populated from upstream defaults
       }
     }
   }
   ```
   
   The active `default.token` has **1 field** (the user override) and 
`dark.token` has the full upstream set. Dark mode renders correctly (with 
upstream blue colors, not the user override) because its token was constructed 
in `config.py` via `{**THEME_DEFAULT, "token": {**THEME_DEFAULT["token"], ...}, 
"algorithm": "dark"}` *before* the user override took effect, so the snapshot 
is complete.
   
   ### Environment
   
   - Superset 6.1.0 (apache/superset:6.1.0 official image)
   - Reproducible with any partial `THEME_DEFAULT` override in 
`superset_config.py`
   - Not specific to any browser, OS, database, or deployment topology
   
   ---
   
   ## Regression analysis
   
   On 6.0.0, `THEME_DEFAULT` in `superset/config.py` was effectively empty 
(`{"algorithm": "default"}`) and the same partial-override pattern worked. On 
6.1.0, [PR #35220](https://github.com/apache/superset/pull/35220) populated 
`THEME_DEFAULT` with ~22 token fields and reframed it as the canonical base 
theme for the application. After that PR, a partial override no longer falls 
back gracefully — the React app crashes on boot because token fields it expects 
to be present are `undefined`. We have not pinpointed which specific frontend 
code path calls `.startsWith()` on which missing field.
   
   ---
   
   ## Suggested fix
   
   A partial override of `THEME_DEFAULT` in `superset_config.py` should 
preserve unspecified token fields from the upstream default — matching what 
users reasonably expect from a "base theme" customization. Concretely: setting 
only `THEME_DEFAULT["token"]["colorPrimary"]` should still leave the other 21 
upstream token fields in the effective theme that ships to the frontend.
   
   ---
   
   ## Workaround (for anyone who lands here via search)
   
   Until this is fixed upstream, extend the default theme rather than replace 
it:
   
   ```python
   from superset.config import THEME_DEFAULT as _UPSTREAM_THEME_DEFAULT
   
   THEME_DEFAULT = {
       **_UPSTREAM_THEME_DEFAULT,
       "token": {
           **_UPSTREAM_THEME_DEFAULT["token"],
           # your overrides here:
           "colorPrimary": "#ff0000",
       },
   }
   ```
   
   This restores the full 22-field token while applying your customizations on 
top.
   
   ### Screenshots/recordings
   
   _No response_
   
   ### Superset version
   
   master / latest-dev
   
   ### Python version
   
   3.9
   
   ### Node version
   
   16
   
   ### Browser
   
   Chrome
   
   ### Additional context
   
   _No response_
   
   ### Checklist
   
   - [ ] I have searched Superset docs and Slack and didn't find a solution to 
my problem.
   - [x] I have searched the GitHub issue tracker and didn't find a similar bug 
report.
   - [ ] I have checked Superset's logs for errors and if I found a relevant 
Python stacktrace, I included it here as text in the "additional context" 
section.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to