Add share modal
This commit is contained in:
parent
9256c75621
commit
6ae3406644
@ -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'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>
|
||||||
|
Loading…
Reference in New Issue
Block a user