Prevent creating duplicates when loading from gist

This commit is contained in:
1ilit 2024-09-01 19:15:58 +04:00
parent c6c24d02b9
commit 9aec2f02d0
4 changed files with 38 additions and 5 deletions

View File

@ -388,7 +388,9 @@ export default function Modal({
((modal === MODAL.IMG || modal === MODAL.CODE) && !exportData.data) || ((modal === MODAL.IMG || modal === MODAL.CODE) && !exportData.data) ||
(modal === MODAL.SAVEAS && saveAsTitle === "") || (modal === MODAL.SAVEAS && saveAsTitle === "") ||
(modal === MODAL.IMPORT_SRC && importSource.src === ""), (modal === MODAL.IMPORT_SRC && importSource.src === ""),
hidden: modal === MODAL.SHARE,
}} }}
hasCancel={modal !== MODAL.SHARE}
cancelText={t("cancel")} cancelText={t("cancel")}
width={getModalWidth(modal)} width={getModalWidth(modal)}
bodyStyle={{ bodyStyle={{

View File

@ -9,6 +9,7 @@ import {
useDiagram, useDiagram,
useEnums, useEnums,
useNotes, useNotes,
useTransform,
useTypes, useTypes,
} from "../../../hooks"; } from "../../../hooks";
import { databases } from "../../../data/databases"; import { databases } from "../../../data/databases";
@ -22,6 +23,7 @@ export default function Share({ title }) {
const { areas } = useAreas(); const { areas } = useAreas();
const { types } = useTypes(); const { types } = useTypes();
const { enums } = useEnums(); const { enums } = useEnums();
const { transform } = useTransform();
const userToken = localStorage.getItem("github_token"); const userToken = localStorage.getItem("github_token");
const octokit = useMemo(() => { const octokit = useMemo(() => {
@ -44,8 +46,19 @@ export default function Share({ title }) {
...(databases[database].hasTypes && { types: types }), ...(databases[database].hasTypes && { types: types }),
...(databases[database].hasEnums && { enums: enums }), ...(databases[database].hasEnums && { enums: enums }),
title: title, title: title,
transform: transform,
}); });
}, [areas, notes, tables, relationships, database, title, enums, types]); }, [
areas,
notes,
tables,
relationships,
database,
title,
enums,
types,
transform,
]);
const updateGist = useCallback(async () => { const updateGist = useCallback(async () => {
setLoading(true); setLoading(true);

View File

@ -37,6 +37,7 @@ export const IdContext = createContext({ gistId: "" });
export default function WorkSpace() { export default function WorkSpace() {
const [id, setId] = useState(0); const [id, setId] = useState(0);
const [gistId, setGistId] = useState(""); const [gistId, setGistId] = useState("");
const [loadedFromGistId, setLoadedFromGistId] = useState("");
const [title, setTitle] = useState("Untitled Diagram"); const [title, setTitle] = useState("Untitled Diagram");
const [resize, setResize] = useState(false); const [resize, setResize] = useState(false);
const [width, setWidth] = useState(340); const [width, setWidth] = useState(340);
@ -98,6 +99,7 @@ export default function WorkSpace() {
todos: tasks, todos: tasks,
pan: transform.pan, pan: transform.pan,
zoom: transform.zoom, zoom: transform.zoom,
loadedFromGistId: loadedFromGistId,
...(databases[database].hasEnums && { enums: enums }), ...(databases[database].hasEnums && { enums: enums }),
...(databases[database].hasTypes && { types: types }), ...(databases[database].hasTypes && { types: types }),
}) })
@ -121,6 +123,7 @@ export default function WorkSpace() {
gistId: gistId ?? "", gistId: gistId ?? "",
pan: transform.pan, pan: transform.pan,
zoom: transform.zoom, zoom: transform.zoom,
loadedFromGistId: loadedFromGistId,
...(databases[database].hasEnums && { enums: enums }), ...(databases[database].hasEnums && { enums: enums }),
...(databases[database].hasTypes && { types: types }), ...(databases[database].hasTypes && { types: types }),
}) })
@ -166,6 +169,7 @@ export default function WorkSpace() {
database, database,
enums, enums,
gistId, gistId,
loadedFromGistId,
]); ]);
const load = useCallback(async () => { const load = useCallback(async () => {
@ -182,6 +186,7 @@ export default function WorkSpace() {
} }
setId(d.id); setId(d.id);
setGistId(d.gistId); setGistId(d.gistId);
setLoadedFromGistId(d.loadedFromGistId);
setTitle(d.name); setTitle(d.name);
setTables(d.tables); setTables(d.tables);
setRelationships(d.references); setRelationships(d.references);
@ -218,6 +223,7 @@ export default function WorkSpace() {
} }
setId(diagram.id); setId(diagram.id);
setGistId(diagram.gistId); setGistId(diagram.gistId);
setLoadedFromGistId(diagram.loadedFromGistId);
setTitle(diagram.name); setTitle(diagram.name);
setTables(diagram.tables); setTables(diagram.tables);
setRelationships(diagram.references); setRelationships(diagram.references);
@ -323,6 +329,13 @@ export default function WorkSpace() {
const loadFromGist = useCallback( const loadFromGist = useCallback(
async (shareId) => { async (shareId) => {
const d = await db.diagrams.get({ loadedFromGistId: shareId });
if (d) {
window.name = "d " + d.id;
} else {
window.name = "";
}
try { try {
const res = await octokit.request(`GET /gists/${shareId}`, { const res = await octokit.request(`GET /gists/${shareId}`, {
gist_id: shareId, gist_id: shareId,
@ -332,14 +345,16 @@ export default function WorkSpace() {
}); });
const diagramSrc = res.data.files["share.json"].content; const diagramSrc = res.data.files["share.json"].content;
const d = JSON.parse(diagramSrc); const d = JSON.parse(diagramSrc);
console.log(d); setUndoStack([]);
window.name = ""; setRedoStack([]);
setLoadedFromGistId(shareId);
setDatabase(d.database); setDatabase(d.database);
setTitle(d.title); setTitle(d.title);
setTables(d.tables); setTables(d.tables);
setRelationships(d.relationships); setRelationships(d.relationships);
setNotes(d.notes); setNotes(d.notes);
setAreas(d.subjectAreas); setAreas(d.subjectAreas);
setTransform(d.transform);
if (databases[d.database].hasTypes) { if (databases[d.database].hasTypes) {
setTypes(d.types ?? []); setTypes(d.types ?? []);
} }
@ -359,6 +374,9 @@ export default function WorkSpace() {
setRelationships, setRelationships,
setTables, setTables,
setTypes, setTypes,
setTransform,
setRedoStack,
setUndoStack,
], ],
); );

View File

@ -3,8 +3,8 @@ import { templateSeeds } from "./seeds";
export const db = new Dexie("drawDB"); export const db = new Dexie("drawDB");
db.version(5).stores({ db.version(6).stores({
diagrams: "++id, lastModified", diagrams: "++id, lastModified, &loadedFromGistId",
templates: "++id, custom", templates: "++id, custom",
}); });