Add share modal

This commit is contained in:
1ilit 2024-01-13 20:36:13 +02:00
parent 9256c75621
commit 6ae3406644

View File

@ -30,6 +30,7 @@ import {
Upload, Upload,
Banner, Banner,
Toast, Toast,
TagInput,
} from "@douyinfe/semi-ui"; } from "@douyinfe/semi-ui";
import { toPng, toJpeg, toSvg } from "html-to-image"; import { toPng, toJpeg, toSvg } from "html-to-image";
import { saveAs } from "file-saver"; import { saveAs } from "file-saver";
@ -63,6 +64,8 @@ import { Editor } from "@monaco-editor/react";
import { db } from "../data/db"; import { db } from "../data/db";
import { useLiveQuery } from "dexie-react-hooks"; import { useLiveQuery } from "dexie-react-hooks";
import { socket } from "../data/socket"; import { socket } from "../data/socket";
import { useCookies } from "react-cookie";
import axios from "axios";
export default function ControlPanel({ export default function ControlPanel({
diagramId, diagramId,
@ -82,6 +85,7 @@ export default function ControlPanel({
OPEN: 5, OPEN: 5,
SAVEAS: 6, SAVEAS: 6,
NEW: 7, NEW: 7,
SHARE: 8,
}; };
const STATUS = { const STATUS = {
NONE: 0, NONE: 0,
@ -106,6 +110,8 @@ export default function ControlPanel({
message: "", message: "",
}); });
const [data, setData] = useState(null); const [data, setData] = useState(null);
const [cookies] = useCookies(["logged_in"]);
const [addPeople, setAddPeople] = useState([])
const { layout, setLayout } = useContext(LayoutContext); const { layout, setLayout } = useContext(LayoutContext);
const { settings, setSettings } = useContext(SettingsContext); const { settings, setSettings } = useContext(SettingsContext);
const { const {
@ -796,7 +802,7 @@ export default function ControlPanel({
}, },
}, },
Share: { Share: {
function: () => { }, function: () => setVisible(MODAL.SHARE),
}, },
Rename: { Rename: {
function: () => { function: () => {
@ -1209,6 +1215,8 @@ export default function ControlPanel({
return "Save as"; return "Save as";
case MODAL.NEW: case MODAL.NEW:
return "New diagram"; return "New diagram";
case MODAL.SHARE:
return "Share \"" + title + '"'
default: default:
return ""; return "";
} }
@ -1234,7 +1242,7 @@ export default function ControlPanel({
} }
}; };
const getModalOnOk = () => { const getModalOnOk = async () => {
switch (visible) { switch (visible) {
case MODAL.IMG: case MODAL.IMG:
saveAs( saveAs(
@ -1284,6 +1292,29 @@ export default function ControlPanel({
setVisible(MODAL.NONE); setVisible(MODAL.NONE);
createNewDiagram(selectedTemplateId); createNewDiagram(selectedTemplateId);
return; return;
case MODAL.SHARE:
await axios
.post(
`${import.meta.env.VITE_API_BACKEND_URL}/share`,
{
people: addPeople,
diagram: {
name: title,
tables: tables,
references: relationships,
types: types,
notes: notes,
areas: areas,
}
},
{ withCredentials: true }
)
.then((res) => {
console.log(res)
})
.catch((e) => console.log(e));
setVisible(MODAL.NONE)
return;
default: default:
setVisible(MODAL.NONE); setVisible(MODAL.NONE);
return; return;
@ -1551,6 +1582,31 @@ export default function ControlPanel({
</div> </div>
); );
} }
case MODAL.SHARE:
if (cookies.logged_in) {
return <div>
<TagInput
placeholder='Add people'
onChange={v => setAddPeople(v)}
size="large"
/>
<div className="my-3 text-base font-semibold">People with access</div>
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
<Avatar alt="hi" size="default">hi</Avatar>
<div>
<div>Username (you)</div>
<div className="opacity-60">Email@gmail.com</div>
</div>
</div>
<div className="opacity-60">Owner</div>
</div>
</div>
} else {
return <div>
You&apos;ll need to <Link to="/login" target="_blank" className="text-blue-600 font-bold hover:underline">log in</Link> before you can share this diagram.
</div>
}
default: default:
return <></>; return <></>;
} }
@ -1904,6 +1960,7 @@ export default function ControlPanel({
}} }}
size="large" size="large"
icon={<IconShareStroked />} icon={<IconShareStroked />}
onClick={() => setVisible(MODAL.SHARE)}
> >
Share Share
</Button> </Button>