This is an automated email from the ASF dual-hosted git repository.

tai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 45fee60  fix: remove FAB rendered menu in favor of react based one 
(#10401)
45fee60 is described below

commit 45fee60b62a093981613b53cc17b2378ae773269
Author: ʈᵃᵢ <[email protected]>
AuthorDate: Fri Aug 21 17:19:00 2020 -0700

    fix: remove FAB rendered menu in favor of react based one (#10401)
---
 superset-frontend/package-lock.json           | 114 +++++++++++++-------------
 superset-frontend/src/views/menu.tsx          |  33 ++++++++
 superset-frontend/webpack.config.js           |   1 +
 superset/security/manager.py                  |  12 ---
 superset/templates/appbuilder/baselayout.html |   5 +-
 superset/templates/appbuilder/navbar.html     |  51 +++++-------
 superset/templates/superset/base.html         |   1 +
 superset/templates/superset/basic.html        |   5 +-
 superset/views/base.py                        |  11 +++
 9 files changed, 127 insertions(+), 106 deletions(-)

diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index e3512e9..18da52a 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -21111,28 +21111,28 @@
           "dependencies": {
             "abbrev": {
               "version": "1.1.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";,
               "integrity": 
"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
               "dev": true,
               "optional": true
             },
             "ansi-regex": {
               "version": "2.1.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";,
               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
               "dev": true,
               "optional": true
             },
             "aproba": {
               "version": "1.2.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";,
               "integrity": 
"sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
               "dev": true,
               "optional": true
             },
             "are-we-there-yet": {
               "version": "1.1.5",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";,
               "integrity": 
"sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
               "dev": true,
               "optional": true,
@@ -21143,14 +21143,14 @@
             },
             "balanced-match": {
               "version": "1.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";,
               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
               "dev": true,
               "optional": true
             },
             "brace-expansion": {
               "version": "1.1.11",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";,
               "integrity": 
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
               "dev": true,
               "optional": true,
@@ -21161,35 +21161,35 @@
             },
             "code-point-at": {
               "version": "1.1.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";,
               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
               "dev": true,
               "optional": true
             },
             "concat-map": {
               "version": "0.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";,
               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
               "dev": true,
               "optional": true
             },
             "console-control-strings": {
               "version": "1.1.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";,
               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
               "dev": true,
               "optional": true
             },
             "core-util-is": {
               "version": "1.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";,
               "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
               "dev": true,
               "optional": true
             },
             "debug": {
               "version": "4.1.1",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz";,
               "integrity": 
"sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
               "dev": true,
               "optional": true,
@@ -21199,35 +21199,35 @@
             },
             "deep-extend": {
               "version": "0.6.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";,
               "integrity": 
"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
               "dev": true,
               "optional": true
             },
             "delegates": {
               "version": "1.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";,
               "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
               "dev": true,
               "optional": true
             },
             "detect-libc": {
               "version": "1.0.3",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz";,
               "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
               "dev": true,
               "optional": true
             },
             "fs.realpath": {
               "version": "1.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";,
               "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
               "dev": true,
               "optional": true
             },
             "gauge": {
               "version": "2.7.4",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";,
               "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
               "dev": true,
               "optional": true,
@@ -21244,7 +21244,7 @@
             },
             "glob": {
               "version": "7.1.3",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz";,
               "integrity": 
"sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
               "dev": true,
               "optional": true,
@@ -21259,14 +21259,14 @@
             },
             "has-unicode": {
               "version": "2.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";,
               "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
               "dev": true,
               "optional": true
             },
             "iconv-lite": {
               "version": "0.4.24",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";,
               "integrity": 
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
               "dev": true,
               "optional": true,
@@ -21276,7 +21276,7 @@
             },
             "ignore-walk": {
               "version": "3.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz";,
               "integrity": 
"sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
               "dev": true,
               "optional": true,
@@ -21286,7 +21286,7 @@
             },
             "inflight": {
               "version": "1.0.6",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";,
               "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
               "dev": true,
               "optional": true,
@@ -21297,21 +21297,21 @@
             },
             "inherits": {
               "version": "2.0.3",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";,
               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
               "dev": true,
               "optional": true
             },
             "ini": {
               "version": "1.3.5",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";,
               "integrity": 
"sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
               "dev": true,
               "optional": true
             },
             "is-fullwidth-code-point": {
               "version": "1.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";,
               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
               "dev": true,
               "optional": true,
@@ -21321,14 +21321,14 @@
             },
             "isarray": {
               "version": "1.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";,
               "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
               "dev": true,
               "optional": true
             },
             "minimatch": {
               "version": "3.0.4",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";,
               "integrity": 
"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
               "dev": true,
               "optional": true,
@@ -21345,14 +21345,14 @@
             },
             "ms": {
               "version": "2.1.1",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz";,
               "integrity": 
"sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
               "dev": true,
               "optional": true
             },
             "needle": {
               "version": "2.3.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/needle/-/needle-2.3.0.tgz";,
               "integrity": 
"sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==",
               "dev": true,
               "optional": true,
@@ -21364,7 +21364,7 @@
             },
             "node-pre-gyp": {
               "version": "0.12.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz";,
               "integrity": 
"sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
               "dev": true,
               "optional": true,
@@ -21383,7 +21383,7 @@
             },
             "nopt": {
               "version": "4.0.1",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz";,
               "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
               "dev": true,
               "optional": true,
@@ -21394,14 +21394,14 @@
             },
             "npm-bundled": {
               "version": "1.0.6",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz";,
               "integrity": 
"sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
               "dev": true,
               "optional": true
             },
             "npm-packlist": {
               "version": "1.4.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz";,
               "integrity": 
"sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
               "dev": true,
               "optional": true,
@@ -21412,7 +21412,7 @@
             },
             "npmlog": {
               "version": "4.1.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";,
               "integrity": 
"sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
               "dev": true,
               "optional": true,
@@ -21425,21 +21425,21 @@
             },
             "number-is-nan": {
               "version": "1.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";,
               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
               "dev": true,
               "optional": true
             },
             "object-assign": {
               "version": "4.1.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";,
               "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
               "dev": true,
               "optional": true
             },
             "once": {
               "version": "1.4.0",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz";,
               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
               "dev": true,
               "optional": true,
@@ -21449,21 +21449,21 @@
             },
             "os-homedir": {
               "version": "1.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";,
               "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
               "dev": true,
               "optional": true
             },
             "os-tmpdir": {
               "version": "1.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";,
               "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
               "dev": true,
               "optional": true
             },
             "osenv": {
               "version": "0.1.5",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";,
               "integrity": 
"sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
               "dev": true,
               "optional": true,
@@ -21474,21 +21474,21 @@
             },
             "path-is-absolute": {
               "version": "1.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";,
               "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
               "dev": true,
               "optional": true
             },
             "process-nextick-args": {
               "version": "2.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz";,
               "integrity": 
"sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
               "dev": true,
               "optional": true
             },
             "rc": {
               "version": "1.2.8",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";,
               "integrity": 
"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
               "dev": true,
               "optional": true,
@@ -21501,7 +21501,7 @@
             },
             "readable-stream": {
               "version": "2.3.6",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";,
               "integrity": 
"sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
               "dev": true,
               "optional": true,
@@ -21517,7 +21517,7 @@
             },
             "rimraf": {
               "version": "2.6.3",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";,
               "integrity": 
"sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
               "dev": true,
               "optional": true,
@@ -21527,49 +21527,49 @@
             },
             "safe-buffer": {
               "version": "5.1.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";,
               "integrity": 
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
               "dev": true,
               "optional": true
             },
             "safer-buffer": {
               "version": "2.1.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";,
               "integrity": 
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
               "dev": true,
               "optional": true
             },
             "sax": {
               "version": "1.2.4",
-              "resolved": "",
+              "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";,
               "integrity": 
"sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
               "dev": true,
               "optional": true
             },
             "semver": {
               "version": "5.7.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/semver/-/semver-5.7.0.tgz";,
               "integrity": 
"sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
               "dev": true,
               "optional": true
             },
             "set-blocking": {
               "version": "2.0.0",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";,
               "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
               "dev": true,
               "optional": true
             },
             "signal-exit": {
               "version": "3.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";,
               "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
               "dev": true,
               "optional": true
             },
             "string-width": {
               "version": "1.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";,
               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
               "dev": true,
               "optional": true,
@@ -21581,7 +21581,7 @@
             },
             "string_decoder": {
               "version": "1.1.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";,
               "integrity": 
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
               "dev": true,
               "optional": true,
@@ -21591,7 +21591,7 @@
             },
             "strip-ansi": {
               "version": "3.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";,
               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
               "dev": true,
               "optional": true,
@@ -21601,21 +21601,21 @@
             },
             "strip-json-comments": {
               "version": "2.0.1",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";,
               "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
               "dev": true,
               "optional": true
             },
             "util-deprecate": {
               "version": "1.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";,
               "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
               "dev": true,
               "optional": true
             },
             "wide-align": {
               "version": "1.1.3",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";,
               "integrity": 
"sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
               "dev": true,
               "optional": true,
@@ -21625,7 +21625,7 @@
             },
             "wrappy": {
               "version": "1.0.2",
-              "resolved": "",
+              "resolved": 
"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";,
               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
               "dev": true,
               "optional": true
diff --git a/superset-frontend/src/views/menu.tsx 
b/superset-frontend/src/views/menu.tsx
new file mode 100644
index 0000000..3a6c9dd
--- /dev/null
+++ b/superset-frontend/src/views/menu.tsx
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { supersetTheme, ThemeProvider } from '@superset-ui/style';
+import Menu from 'src/components/Menu/Menu';
+
+const container = document.getElementById('app');
+const bootstrapJson = container?.getAttribute('data-bootstrap') ?? '{}';
+const bootstrap = JSON.parse(bootstrapJson);
+const menu = { ...bootstrap.common.menu_data };
+const app = (
+  <ThemeProvider theme={supersetTheme}>
+    <Menu data={menu} />
+  </ThemeProvider>
+);
+ReactDOM.render(app, document.getElementById('app-menu'));
diff --git a/superset-frontend/webpack.config.js 
b/superset-frontend/webpack.config.js
index 84d0479..97d3536 100644
--- a/superset-frontend/webpack.config.js
+++ b/superset-frontend/webpack.config.js
@@ -181,6 +181,7 @@ const config = {
     dashboard: addPreamble('/src/dashboard/index.jsx'),
     sqllab: addPreamble('/src/SqlLab/index.tsx'),
     crudViews: addPreamble('/src/views/index.tsx'),
+    menu: addPreamble('src/views/menu.tsx'),
     profile: addPreamble('/src/profile/index.tsx'),
     showSavedQuery: [path.join(APP_DIR, '/src/showSavedQuery/index.jsx')],
   },
diff --git a/superset/security/manager.py b/superset/security/manager.py
index da92d16..f939d6d 100644
--- a/superset/security/manager.py
+++ b/superset/security/manager.py
@@ -399,18 +399,6 @@ class SupersetSecurityManager(  # pylint: 
disable=too-many-public-methods
 
         return True
 
-    def get_public_role(self) -> Optional[Any]:  # Optional[self.role_model]
-        from superset import conf
-
-        if not conf.get("PUBLIC_ROLE_LIKE_GAMMA", False):
-            return None
-
-        return (
-            self.get_session.query(self.role_model)
-            .filter_by(name="Public")
-            .one_or_none()
-        )
-
     def user_view_menu_names(self, permission_name: str) -> Set[str]:
         base_query = (
             self.get_session.query(self.viewmenu_model.name)
diff --git a/superset/templates/appbuilder/baselayout.html 
b/superset/templates/appbuilder/baselayout.html
index a08a052..f2c4c64 100644
--- a/superset/templates/appbuilder/baselayout.html
+++ b/superset/templates/appbuilder/baselayout.html
@@ -24,9 +24,7 @@
     {% include 'appbuilder/general/alert.html' %}
 
     {% block navbar %}
-        <header class="top" role="header">
-        {% include 'appbuilder/navbar.html' %}
-        </header>
+      {% include 'appbuilder/navbar.html' %}
     {% endblock %}
 
     {% block uncontained %}{% endblock %}
@@ -44,6 +42,7 @@
         {% block content_fluid %}
         {% endblock %}
     </div>
+    <div id="app" data-bootstrap="{{ bootstrap_data() }}"></div>
 
     {% block footer %}
         <footer>
diff --git a/superset/templates/appbuilder/navbar.html 
b/superset/templates/appbuilder/navbar.html
index 3125966..4ad74ff 100644
--- a/superset/templates/appbuilder/navbar.html
+++ b/superset/templates/appbuilder/navbar.html
@@ -17,40 +17,29 @@
   under the License.
 #}
 {% set menu = appbuilder.menu %}
-{% set languages = appbuilder.languages %}
-{% set WARNING_MSG = appbuilder.app.config['WARNING_MSG'] %}
 {% set app_icon_width = appbuilder.app.config['APP_ICON_WIDTH'] %}
 {% set logo_target_path = appbuilder.app.config['LOGO_TARGET_PATH'] or 
'/profile/{}/'.format(current_user.username) %}
 {% set root_path = logo_target_path if not logo_target_path.startswith('/') 
else '/superset' + logo_target_path if current_user.username is defined else 
'#'  %}
 
-<div class="navbar navbar-static-top {{menu.extra_classes}}" role="navigation">
-  <div class="container-fluid">
-    <div class="navbar-header">
-      <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target=".navbar-collapse">
-        <span class="icon-bar"></span>
-        <span class="icon-bar"></span>
-        <span class="icon-bar"></span>
-      </button>
-      <a class="navbar-brand" href="{{ root_path }}">
-        <img
-          width="{{ app_icon_width }}"
-          src="{{ appbuilder.app_icon }}"
-          alt="{{ appbuilder.app_name }}"
-        />
-      </a>
-    </div>
-    <div class="navbar-collapse collapse">
-      <ul class="nav navbar-nav">
-        {% if WARNING_MSG %}
-          <li class="alert alert-danger">
-            {{ WARNING_MSG | safe }}
-          </li>
-        {% endif %}
-        {% include 'appbuilder/navbar_menu.html' %}
-      </ul>
-      <ul class="nav navbar-nav navbar-right">
-        {% include 'appbuilder/navbar_right.html' %}
-      </ul>
+{% block navbar %}
+  <div id="app-menu">
+    <div class="navbar navbar-static-top {{menu.extra_classes}}" 
role="navigation">
+      <div class="container-fluid">
+        <div class="navbar-header">
+          <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target=".navbar-collapse">
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a class="navbar-brand" href="{{ root_path }}">
+            <img
+              width="{{ app_icon_width }}"
+              src="{{ appbuilder.app_icon }}"
+              alt="{{ appbuilder.app_name }}"
+            />
+          </a>
+        </div>
+      </div>
     </div>
   </div>
-</div>
+{% endblock %}
diff --git a/superset/templates/superset/base.html 
b/superset/templates/superset/base.html
index 5da2530..30cb416 100644
--- a/superset/templates/superset/base.html
+++ b/superset/templates/superset/base.html
@@ -33,4 +33,5 @@
 {% block tail_js %}
   {{ super() }}
   {{ js_bundle("preamble") }}
+  {{ js_bundle('menu') }}
 {% endblock %}
diff --git a/superset/templates/superset/basic.html 
b/superset/templates/superset/basic.html
index 8d2cf9a..810f206 100644
--- a/superset/templates/superset/basic.html
+++ b/superset/templates/superset/basic.html
@@ -67,9 +67,7 @@
   <body {% if standalone_mode %}class="standalone"{% endif %}>
     {% block navbar %}
       {% if not standalone_mode %}
-        <header class="top" role="header">
-          {% include 'appbuilder/navbar.html' %}
-        </header>
+        {% include 'appbuilder/navbar.html' %}
       {% endif %}
     {% endblock %}
 
@@ -99,6 +97,7 @@
     </div>
 
     {% block tail_js %}
+      {{ js_bundle('menu') }}
       {% if entry %}
         {{ js_bundle(entry) }}
       {% endif %}
diff --git a/superset/views/base.py b/superset/views/base.py
index e139df0..0b31afa 100644
--- a/superset/views/base.py
+++ b/superset/views/base.py
@@ -319,6 +319,17 @@ def common_bootstrap_payload() -> Dict[str, Any]:
     }
 
 
+@superset_app.context_processor
+def get_common_bootstrap_data() -> Dict[str, Any]:
+    def serialize_bootstrap_data() -> str:
+        return json.dumps(
+            {"common": common_bootstrap_payload()},
+            default=utils.pessimistic_json_iso_dttm_ser,
+        )
+
+    return {"bootstrap_data": serialize_bootstrap_data}
+
+
 class SupersetListWidget(ListWidget):  # pylint: disable=too-few-public-methods
     template = "superset/fab_overrides/list.html"
 

Reply via email to