Add modal for github token
This commit is contained in:
parent
75f930ba76
commit
488641ddcc
@ -1290,6 +1290,9 @@ export default function ControlPanel({
|
|||||||
language: {
|
language: {
|
||||||
function: () => setModal(MODAL.LANGUAGE),
|
function: () => setModal(MODAL.LANGUAGE),
|
||||||
},
|
},
|
||||||
|
github_token: {
|
||||||
|
function: () => setModal(MODAL.GITHUB_TOKEN),
|
||||||
|
},
|
||||||
flush_storage: {
|
flush_storage: {
|
||||||
warning: {
|
warning: {
|
||||||
title: t("flush_storage"),
|
title: t("flush_storage"),
|
||||||
|
43
src/components/EditorHeader/Modal/GithubToken.jsx
Normal file
43
src/components/EditorHeader/Modal/GithubToken.jsx
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import { Button, Input } from "@douyinfe/semi-ui";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
export default function GithubToken({ token, setToken }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const clearToken = () => {
|
||||||
|
localStorage.removeItem("github_token");
|
||||||
|
setToken("");
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div className="mb-3">
|
||||||
|
Set your{" "}
|
||||||
|
<a
|
||||||
|
href="https://github.com/settings/tokens"
|
||||||
|
className="text-blue-500 hover:underline font-semibold"
|
||||||
|
>
|
||||||
|
personal access token
|
||||||
|
</a>{" "}
|
||||||
|
here if you wish to save diagrams to your gists.
|
||||||
|
</div>
|
||||||
|
<div className="flex gap-2">
|
||||||
|
<Input
|
||||||
|
className="w-full"
|
||||||
|
placeholder={t("github_token")}
|
||||||
|
value={token}
|
||||||
|
onChange={(v) => setToken(v)}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
icon={<i className="fa-solid fa-xmark" />}
|
||||||
|
type="danger"
|
||||||
|
title={t("clear")}
|
||||||
|
onClick={clearToken}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="mt-1 text-xs">
|
||||||
|
*This will be stored in the local storage
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
@ -43,6 +43,7 @@ import { importSQL } from "../../../utils/importSQL";
|
|||||||
import { databases } from "../../../data/databases";
|
import { databases } from "../../../data/databases";
|
||||||
import { isRtl } from "../../../i18n/utils/rtl";
|
import { isRtl } from "../../../i18n/utils/rtl";
|
||||||
import Share from "./Share";
|
import Share from "./Share";
|
||||||
|
import GithubToken from "./GithubToken";
|
||||||
|
|
||||||
const languageExtension = {
|
const languageExtension = {
|
||||||
sql: [sql()],
|
sql: [sql()],
|
||||||
@ -82,6 +83,9 @@ export default function Modal({
|
|||||||
const [selectedTemplateId, setSelectedTemplateId] = useState(-1);
|
const [selectedTemplateId, setSelectedTemplateId] = useState(-1);
|
||||||
const [selectedDiagramId, setSelectedDiagramId] = useState(0);
|
const [selectedDiagramId, setSelectedDiagramId] = useState(0);
|
||||||
const [saveAsTitle, setSaveAsTitle] = useState(title);
|
const [saveAsTitle, setSaveAsTitle] = useState(title);
|
||||||
|
const [token, setToken] = useState(
|
||||||
|
localStorage.getItem("github_token") ?? "",
|
||||||
|
);
|
||||||
|
|
||||||
const overwriteDiagram = () => {
|
const overwriteDiagram = () => {
|
||||||
setTables(importData.tables);
|
setTables(importData.tables);
|
||||||
@ -238,6 +242,14 @@ export default function Modal({
|
|||||||
setModal(MODAL.NONE);
|
setModal(MODAL.NONE);
|
||||||
createNewDiagram(selectedTemplateId);
|
createNewDiagram(selectedTemplateId);
|
||||||
return;
|
return;
|
||||||
|
case MODAL.GITHUB_TOKEN:
|
||||||
|
setModal(MODAL.NONE);
|
||||||
|
if (token !== "") {
|
||||||
|
localStorage.setItem("github_token", token);
|
||||||
|
} else {
|
||||||
|
localStorage.removeItem("github_token");
|
||||||
|
}
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
setModal(MODAL.NONE);
|
setModal(MODAL.NONE);
|
||||||
return;
|
return;
|
||||||
@ -320,7 +332,7 @@ export default function Modal({
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
<div className="text-center my-3">
|
<div className="text-center my-3 text-sky-600">
|
||||||
<Spin tip={t("loading")} size="large" />
|
<Spin tip={t("loading")} size="large" />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@ -330,7 +342,9 @@ export default function Modal({
|
|||||||
case MODAL.LANGUAGE:
|
case MODAL.LANGUAGE:
|
||||||
return <Language />;
|
return <Language />;
|
||||||
case MODAL.SHARE:
|
case MODAL.SHARE:
|
||||||
return <Share />;
|
return <Share setModal={setModal} />;
|
||||||
|
case MODAL.GITHUB_TOKEN:
|
||||||
|
return <GithubToken token={token} setToken={setToken} />;
|
||||||
default:
|
default:
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,21 @@
|
|||||||
import { Button, Banner } from "@douyinfe/semi-ui";
|
import { Banner, Button, Spin } from "@douyinfe/semi-ui";
|
||||||
import { IconLink } from "@douyinfe/semi-icons";
|
import { IconLink } from "@douyinfe/semi-icons";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Octokit } from "octokit";
|
import { Octokit } from "octokit";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { MODAL } from "../../../data/constants";
|
||||||
|
|
||||||
export default function Share() {
|
export default function Share({ setModal }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
const generateLink = async () => {
|
const generateLink = async () => {
|
||||||
|
setLoading(true);
|
||||||
|
const userToken = localStorage.getItem("github_token");
|
||||||
|
|
||||||
const octokit = new Octokit({
|
const octokit = new Octokit({
|
||||||
auth: import.meta.env.VITE_GITHUB_ACCESS_TOKEN,
|
auth:
|
||||||
|
userToken ?? import.meta.env.VITE_GITHUB_ACCESS_TOKEN,
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -27,30 +34,52 @@ export default function Share() {
|
|||||||
console.log(res);
|
console.log(res);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-4">
|
<div id="share" className="space-y-4">
|
||||||
<Banner
|
<Banner
|
||||||
fullMode={false}
|
fullMode={false}
|
||||||
type="info"
|
type="info"
|
||||||
icon={null}
|
icon={null}
|
||||||
closeIcon={null}
|
closeIcon={null}
|
||||||
description="When you generate a link a gist with the JSON representation of the
|
description={
|
||||||
diagram will get created. This will not start a real-time collaboration
|
<ul className="list-disc ms-4">
|
||||||
session."
|
<li>
|
||||||
|
Generating a link will create a gist with the JSON representation
|
||||||
|
of the diagram.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
You can create the gist from your account by providing your token
|
||||||
|
<button
|
||||||
|
onClick={() => setModal(MODAL.GITHUB_TOKEN)}
|
||||||
|
className="ms-1 text-sky-500 hover:underline font-semibold"
|
||||||
|
>
|
||||||
|
here
|
||||||
|
</button>
|
||||||
|
.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Sharing will not create a live real-time collaboration session.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
|
<div className="text-center">
|
||||||
<Button
|
<Button
|
||||||
type="primary"
|
type="primary"
|
||||||
theme="solid"
|
theme="solid"
|
||||||
className="text-base me-2 pe-6 ps-5 py-[18px] rounded-md"
|
className="text-base me-2 pe-6 ps-5 py-[18px] rounded-md"
|
||||||
size="default"
|
size="default"
|
||||||
icon={<IconLink />}
|
icon={loading ? <Spin /> : <IconLink />}
|
||||||
onClick={generateLink}
|
onClick={generateLink}
|
||||||
>
|
>
|
||||||
{t("generate_link")}
|
{t("generate_link")}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -92,6 +92,7 @@ export const MODAL = {
|
|||||||
TABLE_WIDTH: 9,
|
TABLE_WIDTH: 9,
|
||||||
LANGUAGE: 10,
|
LANGUAGE: 10,
|
||||||
SHARE: 11,
|
SHARE: 11,
|
||||||
|
GITHUB_TOKEN: 12,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const STATUS = {
|
export const STATUS = {
|
||||||
|
@ -237,7 +237,8 @@ const en = {
|
|||||||
didnt_find_diagram: "Oops! Didn't find the diagram.",
|
didnt_find_diagram: "Oops! Didn't find the diagram.",
|
||||||
unsigned: "Unsigned",
|
unsigned: "Unsigned",
|
||||||
share: "Share",
|
share: "Share",
|
||||||
generate_link: "Generate link"
|
generate_link: "Generate link",
|
||||||
|
github_token: "GitHub Token",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -58,6 +58,10 @@
|
|||||||
background-color: rgba(var(--semi-blue-6), 1);
|
background-color: rgba(var(--semi-blue-6), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.semi-spin-wrapper{
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
|
@ -25,6 +25,8 @@ export const getModalTitle = (modal) => {
|
|||||||
return i18n.t("language");
|
return i18n.t("language");
|
||||||
case MODAL.SHARE:
|
case MODAL.SHARE:
|
||||||
return i18n.t("share");
|
return i18n.t("share");
|
||||||
|
case MODAL.GITHUB_TOKEN:
|
||||||
|
return i18n.t("github_token");
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user