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

jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c50f8a  add tooltip and modal for table status (#7899)
8c50f8a is described below

commit 8c50f8a3779e816cbe484511dc4b9a9f1687fd57
Author: Johan Adami <4760722+jadam...@users.noreply.github.com>
AuthorDate: Mon Dec 20 19:11:16 2021 -0500

    add tooltip and modal for table status (#7899)
---
 .../src/main/resources/app/components/Table.tsx    |  60 ++++-
 .../src/main/resources/app/utils/Utils.tsx         |  40 +++-
 .../src/main/resources/package-lock.json           | 264 +++++++++++++++++++--
 pinot-controller/src/main/resources/package.json   |   1 +
 4 files changed, 330 insertions(+), 35 deletions(-)

diff --git a/pinot-controller/src/main/resources/app/components/Table.tsx 
b/pinot-controller/src/main/resources/app/components/Table.tsx
index 8ea6c88..6809c6e 100644
--- a/pinot-controller/src/main/resources/app/components/Table.tsx
+++ b/pinot-controller/src/main/resources/app/components/Table.tsx
@@ -26,6 +26,7 @@ import {
   makeStyles,
   useTheme,
 } from '@material-ui/core/styles';
+import Dialog from '@material-ui/core/Dialog';
 import Table from '@material-ui/core/Table';
 import TableBody from '@material-ui/core/TableBody';
 import TableCell from '@material-ui/core/TableCell';
@@ -152,7 +153,7 @@ const useStyles = makeStyles((theme) => ({
   spacer: {
     flex: '0 1 auto',
   },
-  cellSatusGood: {
+  cellStatusGood: {
     color: '#4CAF50',
     border: '1px solid #4CAF50',
   },
@@ -332,7 +333,7 @@ export default function CustomizedTables({
       return (
         <StyledChip
           label={str}
-          className={classes.cellSatusGood}
+          className={classes.cellStatusGood}
           variant="outlined"
         />
       );
@@ -376,6 +377,56 @@ export default function CustomizedTables({
     return (<span>{str.toString()}</span>);
   };
 
+  const [isModalOpen, setModalOpen] = React.useState(false);
+  const handleModalOpen = () => setModalOpen(true);
+  const handleModalClose = () => setModalOpen(false);
+
+  const makeCell = (cellData) => {
+    if (Object.prototype.toString.call(cellData) === '[object Object]') {
+      if (_.has(cellData, 'component') && cellData.component) {
+        let cell = (styleCell(cellData.value))
+        let statusModal = (
+            <Dialog
+                maxWidth="xl"
+                onClose={handleModalClose}
+                open={isModalOpen}
+                scroll="paper"
+            >
+              {cellData.component}
+            </Dialog>
+        )
+        cell = (
+            React.cloneElement(
+                cell,
+                {onClick: handleModalOpen},
+            )
+        );
+        if (_.has(cellData, 'tooltip') && cellData.tooltip) {
+          cell = (
+              <Tooltip title={cellData.tooltip} placement="top" arrow>
+                {cell}
+              </Tooltip>
+          )
+        };
+        return (
+            <>
+              {cell}
+              {statusModal}
+            </>
+        );
+      } else if (_.has(cellData, 'tooltip') && cellData.tooltip) {
+        return (
+            <Tooltip title={cellData.tooltip} placement="top" arrow>
+              {styleCell(cellData.value)}
+            </Tooltip>
+        );
+      } else {
+        return styleCell(cellData.value);
+      }
+    }
+    return styleCell(cellData.toString());
+  }
+
   const renderTableComponent = () => {
     return (
       <>
@@ -460,10 +511,7 @@ export default function CustomizedTables({
                             className={isCellClickable ? 
classes.isCellClickable : (isSticky ? classes.isSticky : '')}
                             onClick={() => {cellClickCallback && 
cellClickCallback(cell);}}
                           >
-                            {Object.prototype.toString.call(cell) === '[object 
Object]' ?
-                              <Tooltip title={cell?.tooltip || ''} 
placement="top" arrow>{styleCell(cell.value.toString())}</Tooltip>
-                            : styleCell(cell.toString())
-                            }
+                            {makeCell(cell)}
                           </StyledTableCell>
                         );
                       })}
diff --git a/pinot-controller/src/main/resources/app/utils/Utils.tsx 
b/pinot-controller/src/main/resources/app/utils/Utils.tsx
index dabfcc3..20b42a7 100644
--- a/pinot-controller/src/main/resources/app/utils/Utils.tsx
+++ b/pinot-controller/src/main/resources/app/utils/Utils.tsx
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import React from 'react';
+import ReactDiffViewer, {DiffMethod} from 'react-diff-viewer';
 import _ from 'lodash';
 
 const sortArray = function (sortingArr, keyName, ascendingFlag) {
@@ -66,14 +68,44 @@ const getSegmentStatus = (idealStateObj, externalViewObj) 
=> {
   const externalSegmentCount = externalSegmentKeys.length;
 
   if (idealSegmentCount !== externalSegmentCount) {
-    return 'Bad';
+    let segmentStatusComponent = (
+        <ReactDiffViewer
+            oldValue={JSON.stringify(idealStateObj)}
+            newValue={JSON.stringify(externalViewObj)}
+            splitView={true}
+            hideLineNumbers
+            leftTitle={"Ideal State"}
+            rightTitle={"External View"}
+            compareMethod={DiffMethod.WORDS}
+        />
+    )
+    return {
+      value: 'Bad',
+      tooltip: `Ideal Segment Count: ${idealSegmentCount} does not match 
external Segment Count: ${externalSegmentCount}`,
+      component: segmentStatusComponent,
+    };
   }
 
-  let segmentStatus = 'Good';
+  let segmentStatus = {value: 'Good', tooltip: null, component: null};
   idealSegmentKeys.map((segmentKey) => {
-    if (segmentStatus === 'Good') {
+    if (segmentStatus.value === 'Good') {
       if (!_.isEqual(idealStateObj[segmentKey], externalViewObj[segmentKey])) {
-        segmentStatus = 'Bad';
+        let segmentStatusComponent = (
+            <ReactDiffViewer
+                oldValue={JSON.stringify(idealStateObj)}
+                newValue={JSON.stringify(externalViewObj)}
+                splitView={true}
+                hideLineNumbers
+                leftTitle={"Ideal State"}
+                rightTitle={"External View"}
+                compareMethod={DiffMethod.WORDS}
+            />
+        )
+        segmentStatus = {
+          value: 'Bad',
+          tooltip: "Ideal Status does not match external status",
+          component: segmentStatusComponent
+        };
       }
     }
   });
diff --git a/pinot-controller/src/main/resources/package-lock.json 
b/pinot-controller/src/main/resources/package-lock.json
index 5da5671..2cdb455 100644
--- a/pinot-controller/src/main/resources/package-lock.json
+++ b/pinot-controller/src/main/resources/package-lock.json
@@ -8,22 +8,27 @@
       "version": "7.12.13",
       "resolved": 
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz";,
       "integrity": 
"sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
-      "dev": true,
       "requires": {
         "@babel/highlight": "^7.12.13"
       }
     },
+    "@babel/helper-module-imports": {
+      "version": "7.16.0",
+      "resolved": 
"https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz";,
+      "integrity": 
"sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
+      "requires": {
+        "@babel/types": "^7.16.0"
+      }
+    },
     "@babel/helper-validator-identifier": {
       "version": "7.12.11",
       "resolved": 
"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz";,
-      "integrity": 
"sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
-      "dev": true
+      "integrity": 
"sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
     },
     "@babel/highlight": {
       "version": "7.13.10",
       "resolved": 
"https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz";,
       "integrity": 
"sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
-      "dev": true,
       "requires": {
         "@babel/helper-validator-identifier": "^7.12.11",
         "chalk": "^2.0.0",
@@ -34,7 +39,6 @@
           "version": "3.2.1",
           "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";,
           "integrity": 
"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
           "requires": {
             "color-convert": "^1.9.0"
           }
@@ -43,7 +47,6 @@
           "version": "2.4.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";,
           "integrity": 
"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
           "requires": {
             "ansi-styles": "^3.2.1",
             "escape-string-regexp": "^1.0.5",
@@ -54,7 +57,6 @@
           "version": "5.5.0",
           "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";,
           "integrity": 
"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -79,11 +81,80 @@
         "regenerator-runtime": "^0.13.4"
       }
     },
+    "@babel/types": {
+      "version": "7.16.0",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz";,
+      "integrity": 
"sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.15.7",
+        "to-fast-properties": "^2.0.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.15.7",
+          "resolved": 
"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz";,
+          "integrity": 
"sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
+        }
+      }
+    },
+    "@emotion/cache": {
+      "version": "10.0.29",
+      "resolved": 
"https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz";,
+      "integrity": 
"sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==",
+      "requires": {
+        "@emotion/sheet": "0.9.4",
+        "@emotion/stylis": "0.8.5",
+        "@emotion/utils": "0.11.3",
+        "@emotion/weak-memoize": "0.2.5"
+      }
+    },
     "@emotion/hash": {
       "version": "0.8.0",
       "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz";,
       "integrity": 
"sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
     },
+    "@emotion/memoize": {
+      "version": "0.7.4",
+      "resolved": 
"https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz";,
+      "integrity": 
"sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="
+    },
+    "@emotion/serialize": {
+      "version": "0.11.16",
+      "resolved": 
"https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz";,
+      "integrity": 
"sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==",
+      "requires": {
+        "@emotion/hash": "0.8.0",
+        "@emotion/memoize": "0.7.4",
+        "@emotion/unitless": "0.7.5",
+        "@emotion/utils": "0.11.3",
+        "csstype": "^2.5.7"
+      }
+    },
+    "@emotion/sheet": {
+      "version": "0.9.4",
+      "resolved": 
"https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz";,
+      "integrity": 
"sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA=="
+    },
+    "@emotion/stylis": {
+      "version": "0.8.5",
+      "resolved": 
"https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz";,
+      "integrity": 
"sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
+    },
+    "@emotion/unitless": {
+      "version": "0.7.5",
+      "resolved": 
"https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz";,
+      "integrity": 
"sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
+    },
+    "@emotion/utils": {
+      "version": "0.11.3",
+      "resolved": 
"https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz";,
+      "integrity": 
"sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw=="
+    },
+    "@emotion/weak-memoize": {
+      "version": "0.2.5",
+      "resolved": 
"https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz";,
+      "integrity": 
"sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
+    },
     "@fortawesome/fontawesome-common-types": {
       "version": "0.2.35",
       "resolved": 
"https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz";,
@@ -267,6 +338,11 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz";,
       "integrity": 
"sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw=="
     },
+    "@types/parse-json": {
+      "version": "4.0.0",
+      "resolved": 
"https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz";,
+      "integrity": 
"sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+    },
     "@types/prop-types": {
       "version": "15.7.3",
       "resolved": 
"https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz";,
@@ -951,6 +1027,38 @@
       "integrity": 
"sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
       "dev": true
     },
+    "babel-plugin-emotion": {
+      "version": "10.2.2",
+      "resolved": 
"https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz";,
+      "integrity": 
"sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@emotion/hash": "0.8.0",
+        "@emotion/memoize": "0.7.4",
+        "@emotion/serialize": "^0.11.16",
+        "babel-plugin-macros": "^2.0.0",
+        "babel-plugin-syntax-jsx": "^6.18.0",
+        "convert-source-map": "^1.5.0",
+        "escape-string-regexp": "^1.0.5",
+        "find-root": "^1.1.0",
+        "source-map": "^0.5.7"
+      }
+    },
+    "babel-plugin-macros": {
+      "version": "2.8.0",
+      "resolved": 
"https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz";,
+      "integrity": 
"sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "cosmiconfig": "^6.0.0",
+        "resolve": "^1.12.0"
+      }
+    },
+    "babel-plugin-syntax-jsx": {
+      "version": "6.18.0",
+      "resolved": 
"https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz";,
+      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+    },
     "balanced-match": {
       "version": "1.0.2",
       "resolved": 
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";,
@@ -1321,8 +1429,7 @@
     "callsites": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";,
-      "integrity": 
"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true
+      "integrity": 
"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
     },
     "camel-case": {
       "version": "3.0.0",
@@ -1442,6 +1549,11 @@
         }
       }
     },
+    "classnames": {
+      "version": "2.3.1",
+      "resolved": 
"https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz";,
+      "integrity": 
"sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
+    },
     "clean-css": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz";,
@@ -1588,7 +1700,6 @@
       "version": "1.9.3",
       "resolved": 
"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";,
       "integrity": 
"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
       "requires": {
         "color-name": "1.1.3"
       }
@@ -1596,8 +1707,7 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": 
"https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";,
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-      "dev": true
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
     "commander": {
       "version": "2.17.1",
@@ -1762,6 +1872,21 @@
       "resolved": 
"https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz";,
       "integrity": 
"sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
     },
+    "convert-source-map": {
+      "version": "1.8.0",
+      "resolved": 
"https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz";,
+      "integrity": 
"sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": 
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";,
+          "integrity": 
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+        }
+      }
+    },
     "cookie": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz";,
@@ -1922,6 +2047,36 @@
       "resolved": 
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";,
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
+    "cosmiconfig": {
+      "version": "6.0.0",
+      "resolved": 
"https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz";,
+      "integrity": 
"sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+      "requires": {
+        "@types/parse-json": "^4.0.0",
+        "import-fresh": "^3.1.0",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0",
+        "yaml": "^1.7.2"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "5.2.0",
+          "resolved": 
"https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz";,
+          "integrity": 
"sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+          "requires": {
+            "@babel/code-frame": "^7.0.0",
+            "error-ex": "^1.3.1",
+            "json-parse-even-better-errors": "^2.3.0",
+            "lines-and-columns": "^1.1.6"
+          }
+        },
+        "path-type": {
+          "version": "4.0.0",
+          "resolved": 
"https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";,
+          "integrity": 
"sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+        }
+      }
+    },
     "create-ecdh": {
       "version": "4.0.4",
       "resolved": 
"https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz";,
@@ -1940,6 +2095,17 @@
         }
       }
     },
+    "create-emotion": {
+      "version": "10.0.27",
+      "resolved": 
"https://registry.npmjs.org/create-emotion/-/create-emotion-10.0.27.tgz";,
+      "integrity": 
"sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg==",
+      "requires": {
+        "@emotion/cache": "^10.0.27",
+        "@emotion/serialize": "^0.11.15",
+        "@emotion/sheet": "0.9.4",
+        "@emotion/utils": "0.11.3"
+      }
+    },
     "create-hash": {
       "version": "1.2.0",
       "resolved": 
"https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz";,
@@ -2258,6 +2424,11 @@
       "resolved": 
"https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz";,
       "integrity": 
"sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw=="
     },
+    "diff": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz";,
+      "integrity": 
"sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
+    },
     "diffie-hellman": {
       "version": "5.0.3",
       "resolved": 
"https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz";,
@@ -2519,6 +2690,15 @@
       "resolved": 
"https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz";,
       "integrity": 
"sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
     },
+    "emotion": {
+      "version": "10.0.27",
+      "resolved": "https://registry.npmjs.org/emotion/-/emotion-10.0.27.tgz";,
+      "integrity": 
"sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g==",
+      "requires": {
+        "babel-plugin-emotion": "^10.0.27",
+        "create-emotion": "^10.0.27"
+      }
+    },
     "encodeurl": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";,
@@ -2608,7 +2788,6 @@
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";,
       "integrity": 
"sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
       "requires": {
         "is-arrayish": "^0.2.1"
       }
@@ -2663,8 +2842,7 @@
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": 
"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";,
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "dev": true
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
     },
     "eslint": {
       "version": "6.8.0",
@@ -3670,6 +3848,11 @@
         }
       }
     },
+    "find-root": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz";,
+      "integrity": 
"sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+    },
     "find-up": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz";,
@@ -4518,7 +4701,6 @@
       "version": "3.3.0",
       "resolved": 
"https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz";,
       "integrity": 
"sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dev": true,
       "requires": {
         "parent-module": "^1.0.0",
         "resolve-from": "^4.0.0"
@@ -4527,8 +4709,7 @@
         "resolve-from": {
           "version": "4.0.0",
           "resolved": 
"https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";,
-          "integrity": 
"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-          "dev": true
+          "integrity": 
"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
         }
       }
     },
@@ -4772,8 +4953,7 @@
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": 
"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";,
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
     },
     "is-bigint": {
       "version": "1.0.1",
@@ -4810,7 +4990,6 @@
       "version": "2.2.0",
       "resolved": 
"https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz";,
       "integrity": 
"sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
-      "dev": true,
       "requires": {
         "has": "^1.0.3"
       }
@@ -5029,6 +5208,11 @@
       "integrity": 
"sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
       "dev": true
     },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": 
"https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz";,
+      "integrity": 
"sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+    },
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": 
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";,
@@ -5195,6 +5379,11 @@
         "type-check": "~0.3.2"
       }
     },
+    "lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": 
"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz";,
+      "integrity": 
"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+    },
     "load-json-file": {
       "version": "2.0.0",
       "resolved": 
"https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz";,
@@ -5412,6 +5601,11 @@
         "p-is-promise": "^2.0.0"
       }
     },
+    "memoize-one": {
+      "version": "5.2.1",
+      "resolved": 
"https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz";,
+      "integrity": 
"sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
+    },
     "memory-fs": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz";,
@@ -6281,7 +6475,6 @@
       "version": "1.0.1",
       "resolved": 
"https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";,
       "integrity": 
"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
       "requires": {
         "callsites": "^3.0.0"
       }
@@ -6386,8 +6579,7 @@
     "path-parse": {
       "version": "1.0.6",
       "resolved": 
"https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";,
-      "integrity": 
"sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-      "dev": true
+      "integrity": 
"sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
     },
     "path-to-regexp": {
       "version": "1.8.0",
@@ -7722,6 +7914,19 @@
       "resolved": 
"https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-7.2.1.tgz";,
       "integrity": 
"sha512-t7YFmz1AXdlImgHXA9Ja0T6AWuopilub24jRaQdPVbzUJVNKIYuy3uCFZYa7CE5S3UW6SrSa5nAqVQvtzRF9gw=="
     },
+    "react-diff-viewer": {
+      "version": "3.1.1",
+      "resolved": 
"https://registry.npmjs.org/react-diff-viewer/-/react-diff-viewer-3.1.1.tgz";,
+      "integrity": 
"sha512-rmvwNdcClp6ZWdS11m1m01UnBA4OwYaLG/li0dB781e/bQEzsGyj+qewVd6W5ztBwseQ72pO7nwaCcq5jnlzcw==",
+      "requires": {
+        "classnames": "^2.2.6",
+        "create-emotion": "^10.0.14",
+        "diff": "^4.0.1",
+        "emotion": "^10.0.14",
+        "memoize-one": "^5.0.4",
+        "prop-types": "^15.6.2"
+      }
+    },
     "react-dom": {
       "version": "16.13.1",
       "resolved": 
"https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz";,
@@ -8011,7 +8216,6 @@
       "version": "1.20.0",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz";,
       "integrity": 
"sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
-      "dev": true,
       "requires": {
         "is-core-module": "^2.2.0",
         "path-parse": "^1.0.6"
@@ -9248,6 +9452,11 @@
       "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
       "dev": true
     },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": 
"https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz";,
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+    },
     "to-object-path": {
       "version": "0.3.0",
       "resolved": 
"https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz";,
@@ -10377,6 +10586,11 @@
       "integrity": 
"sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
       "dev": true
     },
+    "yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz";,
+      "integrity": 
"sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+    },
     "yargs": {
       "version": "12.0.2",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz";,
diff --git a/pinot-controller/src/main/resources/package.json 
b/pinot-controller/src/main/resources/package.json
index 3fbea22..1c49679 100644
--- a/pinot-controller/src/main/resources/package.json
+++ b/pinot-controller/src/main/resources/package.json
@@ -80,6 +80,7 @@
     "re-resizable": "^6.9.0",
     "react": "16.13.1",
     "react-codemirror2": "^7.2.1",
+    "react-diff-viewer": "^3.1.1",
     "react-dom": "16.13.1",
     "react-hook-form": "^6.15.4",
     "react-router-dom": "^5.2.0",

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to