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.SAVEAS && saveAsTitle === "") ||
(modal === MODAL.IMPORT_SRC && importSource.src === ""),
hidden: modal === MODAL.SHARE,
}}
hasCancel={modal !== MODAL.SHARE}
cancelText={t("cancel")}
width={getModalWidth(modal)}
bodyStyle={{

View File

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

View File

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

View File

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