visuddhinanda 2 лет назад
Родитель
Сommit
46b2b9470c
1 измененных файлов с 163 добавлено и 0 удалено
  1. 163 0
      dashboard/src/components/webhook/WebhookTpl.tsx

+ 163 - 0
dashboard/src/components/webhook/WebhookTpl.tsx

@@ -0,0 +1,163 @@
+import { Button, Space, Tag, Tree } from "antd";
+import { useEffect, useState } from "react";
+import { useAppSelector } from "../../hooks";
+import { currentUser } from "../../reducers/current-user";
+import ArticleListModal from "../article/ArticleListModal";
+
+export interface IWebhookEvent {
+  key: string;
+  tpl?: string;
+  tplTitle?: string;
+}
+
+interface DataNode {
+  title: string;
+  key: string;
+  isLeaf?: boolean;
+  children?: DataNode[];
+}
+
+interface IWidget {
+  value?: IWebhookEvent[];
+  onChange?: Function;
+}
+const WebhookTplWidget = ({ value = [], onChange }: IWidget) => {
+  const [event, setEvent] = useState(value);
+  const user = useAppSelector(currentUser);
+
+  useEffect(() => {
+    if (typeof onChange !== "undefined") {
+      onChange(event);
+    }
+  }, [event]);
+
+  const treeData: DataNode[] = [
+    {
+      title: "事件",
+      key: "event",
+      children: [
+        {
+          title: "discussion",
+          key: "discussion",
+          children: [
+            {
+              title: "create",
+              key: "discussion-create",
+              isLeaf: true,
+            },
+            {
+              title: "replay",
+              key: "discussion-replay",
+              isLeaf: true,
+            },
+            {
+              title: "edit",
+              key: "discussion-edit",
+              isLeaf: true,
+            },
+          ],
+        },
+        {
+          title: "pr",
+          key: "pr",
+          children: [
+            {
+              title: "create",
+              key: "pr-create",
+              isLeaf: true,
+            },
+            {
+              title: "edit",
+              key: "pr-edit",
+              isLeaf: true,
+            },
+          ],
+        },
+        {
+          title: "content",
+          key: "content",
+          children: [
+            {
+              title: "create",
+              key: "content-create",
+              isLeaf: true,
+            },
+            {
+              title: "edit",
+              key: "content-edit",
+              isLeaf: true,
+            },
+          ],
+        },
+      ],
+    },
+  ];
+
+  return (
+    <Tree
+      treeData={treeData}
+      checkable
+      titleRender={(node) => {
+        const tpl = event?.find((value) => value.key === node.key);
+        return (
+          <Space>
+            {node.title}
+            {node.key === "event" ? `自定义模版${event.length}` : ""}
+            {node.isLeaf ? (
+              <ArticleListModal
+                studioName={user?.realName}
+                trigger={
+                  <Button type="text">
+                    {tpl ? (
+                      <Tag
+                        closable
+                        onClose={() => {
+                          setEvent((origin) => {
+                            const index = origin.findIndex(
+                              (value) => value.key === node.key
+                            );
+                            if (index >= 0) {
+                              origin.splice(index, 1);
+                              console.log("origin", origin);
+                            }
+                            return origin;
+                          });
+                        }}
+                      >
+                        {tpl.tplTitle}
+                      </Tag>
+                    ) : (
+                      "默认模版"
+                    )}
+                  </Button>
+                }
+                multiple={false}
+                onSelect={(id: string, title: string) => {
+                  setEvent((origin) => {
+                    const index = origin.findIndex(
+                      (value) => value.key === node.key
+                    );
+                    if (index >= 0) {
+                      origin[index].tpl = id;
+                      origin[index].tplTitle = title;
+                      return origin;
+                    } else {
+                      return [
+                        ...origin,
+                        { key: node.key, tpl: id, tplTitle: title },
+                      ];
+                    }
+                  });
+                }}
+              />
+            ) : (
+              ""
+            )}
+          </Space>
+        );
+      }}
+    />
+  );
+};
+
+export default WebhookTplWidget;