|
|
|
@ -365,38 +365,56 @@ export const useHandleLibrary = ({
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const importLibraryFromURL = ({
|
|
|
|
|
const importLibraryFromURL = async ({
|
|
|
|
|
libraryUrl,
|
|
|
|
|
idToken,
|
|
|
|
|
}: {
|
|
|
|
|
libraryUrl: string;
|
|
|
|
|
idToken: string | null;
|
|
|
|
|
}) => {
|
|
|
|
|
if (window.location.hash.includes(URL_HASH_KEYS.addLibrary)) {
|
|
|
|
|
const hash = new URLSearchParams(window.location.hash.slice(1));
|
|
|
|
|
hash.delete(URL_HASH_KEYS.addLibrary);
|
|
|
|
|
window.history.replaceState({}, APP_NAME, `#${hash.toString()}`);
|
|
|
|
|
} else if (window.location.search.includes(URL_QUERY_KEYS.addLibrary)) {
|
|
|
|
|
const query = new URLSearchParams(window.location.search);
|
|
|
|
|
query.delete(URL_QUERY_KEYS.addLibrary);
|
|
|
|
|
window.history.replaceState({}, APP_NAME, `?${query.toString()}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
excalidrawAPI.updateLibrary({
|
|
|
|
|
libraryItems: new Promise<Blob>(async (resolve, reject) => {
|
|
|
|
|
try {
|
|
|
|
|
const request = await fetch(decodeURIComponent(libraryUrl));
|
|
|
|
|
const blob = await request.blob();
|
|
|
|
|
resolve(blob);
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
reject(error);
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
prompt: idToken !== excalidrawAPI.id,
|
|
|
|
|
merge: true,
|
|
|
|
|
defaultStatus: "published",
|
|
|
|
|
openLibraryMenu: true,
|
|
|
|
|
const libraryPromise = new Promise<Blob>(async (resolve, reject) => {
|
|
|
|
|
try {
|
|
|
|
|
const request = await fetch(decodeURIComponent(libraryUrl));
|
|
|
|
|
const blob = await request.blob();
|
|
|
|
|
resolve(blob);
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
reject(error);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const shouldPrompt = idToken !== excalidrawAPI.id;
|
|
|
|
|
|
|
|
|
|
// wait for the tab to be focused before continuing in case we'll prompt
|
|
|
|
|
// for confirmation
|
|
|
|
|
await (shouldPrompt && document.hidden
|
|
|
|
|
? new Promise<void>((resolve) => {
|
|
|
|
|
window.addEventListener("focus", () => resolve(), {
|
|
|
|
|
once: true,
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
: null);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await excalidrawAPI.updateLibrary({
|
|
|
|
|
libraryItems: libraryPromise,
|
|
|
|
|
prompt: shouldPrompt,
|
|
|
|
|
merge: true,
|
|
|
|
|
defaultStatus: "published",
|
|
|
|
|
openLibraryMenu: true,
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
throw error;
|
|
|
|
|
} finally {
|
|
|
|
|
if (window.location.hash.includes(URL_HASH_KEYS.addLibrary)) {
|
|
|
|
|
const hash = new URLSearchParams(window.location.hash.slice(1));
|
|
|
|
|
hash.delete(URL_HASH_KEYS.addLibrary);
|
|
|
|
|
window.history.replaceState({}, APP_NAME, `#${hash.toString()}`);
|
|
|
|
|
} else if (window.location.search.includes(URL_QUERY_KEYS.addLibrary)) {
|
|
|
|
|
const query = new URLSearchParams(window.location.search);
|
|
|
|
|
query.delete(URL_QUERY_KEYS.addLibrary);
|
|
|
|
|
window.history.replaceState({}, APP_NAME, `?${query.toString()}`);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const onHashChange = (event: HashChangeEvent) => {
|
|
|
|
|
event.preventDefault();
|
|
|
|
|