|
|
@@ -1,6 +1,7 @@
|
|
|
import { useDebouncedCallback } from "use-debounce";
|
|
|
import OpenAPIClientAxios from "openapi-client-axios";
|
|
|
import yaml from "js-yaml";
|
|
|
+import { PLUGINS_REPO_URL } from "../constant";
|
|
|
import { IconButton } from "./button";
|
|
|
import { ErrorBoundary } from "./error";
|
|
|
|
|
|
@@ -14,6 +15,7 @@ import DeleteIcon from "../icons/delete.svg";
|
|
|
import EyeIcon from "../icons/eye.svg";
|
|
|
import ConfirmIcon from "../icons/confirm.svg";
|
|
|
import ReloadIcon from "../icons/reload.svg";
|
|
|
+import GithubIcon from "../icons/github.svg";
|
|
|
|
|
|
import { Plugin, usePluginStore, FunctionToolService } from "../store/plugin";
|
|
|
import {
|
|
|
@@ -129,6 +131,15 @@ export function PluginPage() {
|
|
|
</div>
|
|
|
|
|
|
<div className="window-actions">
|
|
|
+ <div className="window-action-button">
|
|
|
+ <a
|
|
|
+ href={PLUGINS_REPO_URL}
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener noreferrer"
|
|
|
+ >
|
|
|
+ <IconButton icon={<GithubIcon />} bordered />
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
<div className="window-action-button">
|
|
|
<IconButton
|
|
|
icon={<CloseIcon />}
|
|
|
@@ -162,6 +173,26 @@ export function PluginPage() {
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
+ {plugins.length == 0 && (
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ display: "flex",
|
|
|
+ margin: "60px auto",
|
|
|
+ alignItems: "center",
|
|
|
+ justifyContent: "center",
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {Locale.Plugin.Page.Find}
|
|
|
+ <a
|
|
|
+ href={PLUGINS_REPO_URL}
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener noreferrer"
|
|
|
+ style={{ marginLeft: 16 }}
|
|
|
+ >
|
|
|
+ <IconButton icon={<GithubIcon />} bordered />
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
{plugins.map((m) => (
|
|
|
<div className={styles["mask-item"]} key={m.id}>
|
|
|
<div className={styles["mask-header"]}>
|