This is an automated email from the ASF dual-hosted git repository. maximebeauchemin pushed a commit to branch template_less in repository https://gitbox.apache.org/repos/asf/superset.git
commit 344c8f5c37cdfed6d9617e6c3656c78b401df077 Author: Maxime Beauchemin <maximebeauche...@gmail.com> AuthorDate: Tue Mar 25 09:44:17 2025 -0700 theming react-code-highlighter or whatev it's called --- .../src/SqlLab/components/HighlightedSql/index.tsx | 75 ++++++++++++++++------ 1 file changed, 57 insertions(+), 18 deletions(-) diff --git a/superset-frontend/src/SqlLab/components/HighlightedSql/index.tsx b/superset-frontend/src/SqlLab/components/HighlightedSql/index.tsx index ff0b472a21..3334265188 100644 --- a/superset-frontend/src/SqlLab/components/HighlightedSql/index.tsx +++ b/superset-frontend/src/SqlLab/components/HighlightedSql/index.tsx @@ -16,13 +16,33 @@ * specific language governing permissions and limitations * under the License. */ -import SyntaxHighlighter from 'react-syntax-highlighter/dist/cjs/light'; +import SyntaxHighlighterBase from 'react-syntax-highlighter/dist/cjs/light'; import sql from 'react-syntax-highlighter/dist/cjs/languages/hljs/sql'; import github from 'react-syntax-highlighter/dist/cjs/styles/hljs/github'; -import { t } from '@superset-ui/core'; +import atomOneDark from 'react-syntax-highlighter/dist/cjs/styles/hljs/atom-one-dark'; +import { t, themeObject } from '@superset-ui/core'; import ModalTrigger from 'src/components/ModalTrigger'; -SyntaxHighlighter.registerLanguage('sql', sql); +SyntaxHighlighterBase.registerLanguage('sql', sql); + +const ThemedSyntaxHighlighter = ({ + children, + style, +}: { + children: string; + style: any; +}) => ( + <SyntaxHighlighterBase + language="sql" + style={style} + customStyle={{ + background: 'transparent', + padding: themeObject.theme.sizeUnit, + }} + > + {children} + </SyntaxHighlighterBase> +); export interface HighlightedSqlProps { sql: string; @@ -35,6 +55,7 @@ export interface HighlightedSqlProps { interface HighlightedSqlModalTypes { rawSql?: string; sql: string; + syntaxTheme: any; } interface TriggerNodeProps { @@ -42,6 +63,7 @@ interface TriggerNodeProps { sql: string; maxLines: number; maxWidth: number; + syntaxTheme: any; } const shrinkSql = (sql: string, maxLines: number, maxWidth: number) => { @@ -52,36 +74,43 @@ const shrinkSql = (sql: string, maxLines: number, maxWidth: number) => { lines.push('{...}'); } return lines - .map(line => { - if (line.length > maxWidth) { - return `${line.slice(0, maxWidth)}{...}`; - } - return line; - }) + .map(line => + line.length > maxWidth ? `${line.slice(0, maxWidth)}{...}` : line, + ) .join('\n'); }; -function TriggerNode({ shrink, sql, maxLines, maxWidth }: TriggerNodeProps) { +function TriggerNode({ + shrink, + sql, + maxLines, + maxWidth, + syntaxTheme, +}: TriggerNodeProps) { return ( - <SyntaxHighlighter language="sql" style={github}> + <ThemedSyntaxHighlighter style={syntaxTheme}> {shrink ? shrinkSql(sql, maxLines, maxWidth) : sql} - </SyntaxHighlighter> + </ThemedSyntaxHighlighter> ); } -function HighlightSqlModal({ rawSql, sql }: HighlightedSqlModalTypes) { +function HighlightSqlModal({ + rawSql, + sql, + syntaxTheme, +}: HighlightedSqlModalTypes) { return ( <div> <h4>{t('Source SQL')}</h4> - <SyntaxHighlighter language="sql" style={github}> + <ThemedSyntaxHighlighter style={syntaxTheme}> {sql} - </SyntaxHighlighter> + </ThemedSyntaxHighlighter> {rawSql && rawSql !== sql && ( <div> <h4>{t('Executed SQL')}</h4> - <SyntaxHighlighter language="sql" style={github}> + <ThemedSyntaxHighlighter style={syntaxTheme}> {rawSql} - </SyntaxHighlighter> + </ThemedSyntaxHighlighter> </div> )} </div> @@ -95,16 +124,26 @@ function HighlightedSql({ maxLines = 5, shrink = false, }: HighlightedSqlProps) { + const isDark = themeObject.isThemeDark(); + const syntaxTheme = isDark ? atomOneDark : github; + return ( <ModalTrigger modalTitle={t('SQL')} - modalBody={<HighlightSqlModal rawSql={rawSql} sql={sql} />} + modalBody={ + <HighlightSqlModal + rawSql={rawSql} + sql={sql} + syntaxTheme={syntaxTheme} + /> + } triggerNode={ <TriggerNode shrink={shrink} sql={sql} maxLines={maxLines} maxWidth={maxWidth} + syntaxTheme={syntaxTheme} /> } />