X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a4fbde9185bf03db0b0d6e0ca278b235987c2035..refs/pull/4467/head:/resources/js/services/drawio.js diff --git a/resources/js/services/drawio.js b/resources/js/services/drawio.js index 10943ab57..46e10327a 100644 --- a/resources/js/services/drawio.js +++ b/resources/js/services/drawio.js @@ -67,18 +67,43 @@ function drawReceive(event) { } } +/** + * Attempt to prompt and restore unsaved drawing content if existing. + * @returns {Promise} + */ +async function attemptRestoreIfExists() { + const backupVal = await store.get(saveBackupKey); + const dialogEl = document.getElementById('unsaved-drawing-dialog'); + + if (!dialogEl) { + console.error('Missing expected unsaved-drawing dialog'); + } + + if (backupVal) { + /** @var {ConfirmDialog} */ + const dialog = window.$components.firstOnElement(dialogEl, 'confirm-dialog'); + const restore = await dialog.show(); + if (restore) { + onInit = async () => backupVal; + } + } +} + /** * Show the draw.io editor. * onSaveCallback must return a promise that resolves on successful save and errors on failure. * onInitCallback must return a promise with the xml to load for the editor. + * Will attempt to provide an option to restore unsaved changes if found to exist. * @param {String} drawioUrl * @param {Function>} onInitCallback * @param {Function} onSaveCallback - Is called with the drawing data on save. */ -export function show(drawioUrl, onInitCallback, onSaveCallback) { +export async function show(drawioUrl, onInitCallback, onSaveCallback) { onInit = onInitCallback; onSave = onSaveCallback; + await attemptRestoreIfExists(); + iFrame = document.createElement('iframe'); iFrame.setAttribute('frameborder', '0'); window.addEventListener('message', drawReceive);