You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ur...@apache.org on 2023/04/12 06:34:10 UTC

[pulsar-site] 05/10: update

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

urfree pushed a commit to branch matrix-page
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git

commit 1715991377dc9af29de904f5b767af6c0305fd10
Author: Li Li <ur...@apache.org>
AuthorDate: Wed Apr 12 11:12:14 2023 +0800

    update
    
    Signed-off-by: Li Li <ur...@apache.org>
---
 data/matrix.js      | 81 ++++++++++++++++++++++++++++++++++++++++++--
 src/css/custom.css  |  4 +--
 src/pages/matrix.js | 97 ++++++++++++++++++++++++++++++++---------------------
 3 files changed, 139 insertions(+), 43 deletions(-)

diff --git a/data/matrix.js b/data/matrix.js
index 51dbcc10492..c0460e56f81 100644
--- a/data/matrix.js
+++ b/data/matrix.js
@@ -1,3 +1,80 @@
 module.exports = {
-  
-}
\ No newline at end of file
+  languages: [
+    "Java",
+    "C++",
+    "Go",
+    "Python",
+    "Node.js",
+    "C#/DotPulsar",
+    "Websocket",
+    "REST",
+    ".NET (C#/F#/VB)",
+  ],
+  client: [
+    {
+      Feature: "TLS encryption",
+      Java: 2,
+      "C++": 2,
+      Go: 2,
+      Python: 2,
+      Nodejs: 2,
+      "C#/DotPulsar": 2,
+      Websocket: 0,
+      REST: 0,
+      "NET(C#/F#/VB)": 2,
+    },
+    {
+      Feature: "Authentication",
+      Children: [
+        {
+          Feature: "JWT",
+          Java: 2,
+          "C++": 2,
+          Go: 2,
+          Python: 2,
+          Nodejs: 2,
+          "C#/DotPulsar": 2,
+          Websocket: 0,
+          REST: 0,
+          "NET(C#/F#/VB)": 2,
+        },
+        {
+          Feature: "mTLS",
+          Java: 2,
+          "C++": 2,
+          Go: 2,
+          Python: 2,
+          Nodejs: 2,
+          "C#/DotPulsar": 2,
+          Websocket: 0,
+          REST: 0,
+          "NET(C#/F#/VB)": 2,
+        },
+        {
+          Feature: "Kerberos",
+          Java: 2,
+          "C++": 0,
+          Go: 0,
+          Python: 0,
+          Nodejs: 0,
+          "C#/DotPulsar": 0,
+          Websocket: 0,
+          REST: 0,
+          "NET(C#/F#/VB)": 0,
+        },
+      ],
+    },
+    {
+      Feature: "Transaction",
+      Java: 2,
+      "C++": 2,
+      Go: 2,
+      Python: 2,
+      Nodejs: 2,
+      "C#/DotPulsar": 2,
+      Websocket: 0,
+      REST: 0,
+      "NET(C#/F#/VB)": 2,
+    },
+  ],
+};
diff --git a/src/css/custom.css b/src/css/custom.css
index d2cd0deda9b..1fd9a6ebd7e 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -1303,5 +1303,5 @@ table td {
 }
 
 .BaseTable__row-cell {
-  border-bottom: 1px solid rgb(209 213 219) !important;
-}
\ No newline at end of file
+  border-bottom: 1px solid rgb(209 213 219);
+}
diff --git a/src/pages/matrix.js b/src/pages/matrix.js
index a49c1d3bfc0..f30c1d9814c 100644
--- a/src/pages/matrix.js
+++ b/src/pages/matrix.js
@@ -12,61 +12,81 @@ import BaseTable, {
   TableRow as BaseTableRow,
 } from "react-base-table";
 
-const generateColumns = (count = 10, prefix = "column-", props) =>
-  new Array(count).fill(0).map((column, columnIndex) => ({
-    ...props,
-    key: `${prefix}${columnIndex}`,
-    dataKey: `${prefix}${columnIndex}`,
-    title: `Column ${columnIndex}`,
-    width: 150,
-  }));
+import { languages, client } from "../../data/matrix.js";
 
-const generateData = (columns, count = 200, prefix = "row-") =>
-  new Array(count).fill(0).map((row, rowIndex) => {
-    return columns.reduce(
-      (rowData, column, columnIndex) => {
-        if (columnIndex == 0 && rowIndex % 2 == 1) {
-          rowData[column.dataKey] = ``;
-        } else {
-          rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`;
-        }
-        return rowData;
-      },
-      {
-        id: `${prefix}${rowIndex}`,
-        parentId: null,
-      }
-    );
+const _key = (language) => language.replace(".", "").replace(" ", "");
+const genColomns = () => {
+  return ["Feature", "Sub"].concat(languages).map((language, index) => {
+    return {
+      key: _key(language),
+      dataKey: _key(language),
+      title: language === "Sub" ? "" : language,
+      width: index > 1 ? 120 : 150,
+    };
+  });
+};
+
+const genData = () => {
+  const datas = [];
+  client.forEach((feature) => {
+    if (feature.Children) {
+      feature.Children.forEach((child, index) => {
+        const data = {
+          id: feature.Feature + "-" + child.Feature,
+          Feature: index > 0 ? "" : feature.Feature,
+          Sub: child.Feature,
+          rowSpan: () => (index > 0 ? 1 : feature.Children.length),
+          isLast: index === feature.Children.length - 1,
+        };
+        languages.forEach((language) => {
+          if (language === "Feature") {
+            data["Sub"] = child["Feature"];
+          } else {
+            data[_key(language)] = child[_key(language)];
+          }
+        });
+        datas.push(data);
+      });
+    } else {
+      const data = {
+        id: feature.Feature,
+        Feature: feature.Feature,
+        Sub: "",
+        rowSpan: () => 1,
+      };
+      languages.forEach((language) => {
+        data[_key(language)] = feature[_key(language)];
+      });
+      datas.push(data);
+    }
   });
+  return datas;
+};
 
-const columns = generateColumns(10);
-const data = generateData(columns, 100);
+const columns = genColomns();
+const data = genData();
 
 const fixedColumns = columns.map((column, columnIndex) => {
   let frozen;
   if (columnIndex < 2) frozen = Column.FrozenDirection.LEFT;
+  if (columnIndex === 0) {
+    return { ...column, frozen, rowSpan: ({ rowData }) => rowData.rowSpan() };
+  }
   return { ...column, frozen };
 });
 
-const rowSpanIndex = 0;
-fixedColumns[rowSpanIndex].rowSpan = ({ rowData, rowIndex }) =>
-  rowIndex % 2 === 0 && rowIndex <= data.length - 2 ? 2 : 1;
-
-// console.log(JSON.stringify(fixedColumns, null, 2));
-// console.log(JSON.stringify(data, null, 2));
-// console.log('...', fixedColumns[rowSpanIndex]);
-
 const rowRenderer = ({ rowData, rowIndex, cells, columns }) => {
-  const rowSpan = columns[rowSpanIndex].rowSpan({ rowData, rowIndex });
-  if (rowSpan > 1) {
-    const cell = cells[rowSpanIndex];
+  const rowSpan = columns[0].rowSpan({ rowData, rowIndex });
+  if (rowData.Sub.length > 0 && !rowData.isLast) {
+    const cell = cells[0];
     const style = {
       ...cell.props.style,
       height: rowSpan * 50,
       alignSelf: "flex-start",
       zIndex: 1,
+      borderBottom: "0px",
     };
-    cells[rowSpanIndex] = React.cloneElement(cell, { style });
+    cells[0] = React.cloneElement(cell, { style });
   }
   return cells;
 };
@@ -86,7 +106,6 @@ export default function Matrix() {
                   columns={fixedColumns}
                   data={data}
                   rowRenderer={rowRenderer}
-                  // overscanRowCount={2}
                 />
               )}
             </AutoResizer>