diff --git a/src/js/account/dictionaryManagement.js b/src/js/account/dictionaryManagement.js new file mode 100644 index 0000000..6e2777c --- /dev/null +++ b/src/js/account/dictionaryManagement.js @@ -0,0 +1,25 @@ +import { saveEditModal } from "../dictionaryManagement"; +import { syncDetails } from "./sync"; +import { addMessage } from "../utilities"; + +export function saveEditModalAndSync() { + saveEditModal(); + + return syncDetails().then(successful => { + if (successful) { + addMessage('Synced Successfully'); + } else { + addMessage('Could Not Sync'); + } + }) + .catch(err => { + console.error(err); + addMessage('Could not connect'); + }); +} + +export function saveAndCloseEditModalAndSync() { + saveEditModalAndSync().then(() => { + document.getElementById('editModal').style.display = 'none'; + }); +} \ No newline at end of file diff --git a/src/js/account/login.js b/src/js/account/login.js index ae3e35c..dc9b436 100644 --- a/src/js/account/login.js +++ b/src/js/account/login.js @@ -1,6 +1,6 @@ import { request, saveToken } from "./helpers"; import { addMessage } from "../utilities"; -import { setupLogoutButton } from "./setupListeners"; +import { setupLogoutButton, setupEditFormButtonOverrides } from "./setupListeners"; import { renderAccountSettings } from "./render"; import { uploadWholeDictionary } from "./sync"; @@ -119,6 +119,7 @@ export function triggerLoginChanges() { loginButton.parentElement.appendChild(logoutButton); loginButton.parentElement.removeChild(loginButton); setupLogoutButton(logoutButton); + setupEditFormButtonOverrides(); renderAccountSettings(); } \ No newline at end of file diff --git a/src/js/account/setupListeners.js b/src/js/account/setupListeners.js index 317aa4d..0bd9146 100644 --- a/src/js/account/setupListeners.js +++ b/src/js/account/setupListeners.js @@ -1,4 +1,6 @@ import { logIn, createAccount } from "./login"; +import { saveEditModal, saveAndCloseEditModal } from "../dictionaryManagement"; +import { saveEditModalAndSync, saveAndCloseEditModalAndSync } from "./dictionaryManagement"; export function setupLoginModal(modal) { const closeElements = modal.querySelectorAll('.modal-background, .close-button'); @@ -19,4 +21,19 @@ export function setupLogoutButton(logoutButton) { document.cookie = 'token=;expires=' + expire.toGMTString() + ';domain=' + document.domain + ';path=' + path; // + in front of `new Date` converts to a number window.location.reload(); }); +} + +export function setupEditFormButtonOverrides() { + document.getElementById('editSave').removeEventListener('click', saveEditModal); + document.getElementById('editSave').addEventListener('click', saveEditModalAndSync); + document.getElementById('editSaveAndClose').removeEventListener('click', saveAndCloseEditModal); + document.getElementById('editSaveAndClose').addEventListener('click', saveAndCloseEditModalAndSync); + + // document.getElementById('importDictionaryFile').addEventListener('change', importDictionary); + // document.getElementById('importWordsCSV').addEventListener('change', importWords); + // document.getElementById('exportDictionaryButton').addEventListener('click', exportDictionary); + // document.getElementById('exportWordsButton').addEventListener('click', exportWords); + // document.getElementById('deleteDictionaryButton').addEventListener('click', confirmDeleteDictionary); + + // setupMaximizeButtons(); } \ No newline at end of file diff --git a/src/js/account/sync.js b/src/js/account/sync.js index f299b66..dac33fc 100644 --- a/src/js/account/sync.js +++ b/src/js/account/sync.js @@ -33,19 +33,25 @@ export function syncDictionary() { if (!window.currentDictionary.hasOwnProperty('externalId')) { uploadWholeDictionary(true); } else { - console.log('Do a sync comparison!'); - // request({ - // action: 'get-current-dictionary', - // }, remote => { - // console.log(remote); - // syncDetails(remote.details).then(success => { - // if (success) { - - // } - // }); - // }, error => { - // console.error(error); - // }).catch(err => console.error(err)); + addMessage('Syncing...'); + request({ + action: 'get-current-dictionary', + }, remote => { + console.log(remote); + const detailsSynced = syncDetails(remote.details); + + if (detailsSynced === false) { + addMessage('Could not sync'); + } else { + detailsSynced.then(success => { + if (success) { + console.log('Do a word comparison!'); + } + }); + } + }, error => { + console.error(error); + }).catch(err => console.error(err)); } } @@ -84,10 +90,27 @@ export function uploadWholeDictionary(asNew = false) { .catch(err => console.error('create-new-dictionary: ', err)); } -export function syncDetails(remoteDetails) { - if (remoteDetails.hasOwnProperty('lastUpdated') && remoteDetails.lastUpdated > window.currentDictionary.lastUpdated) { - +export function syncDetails(remoteDetails = false) { + if (remoteDetails === false || remoteDetails.lastUpdated < window.currentDictionary.lastUpdated) { + const details = Object.assign({}, window.currentDictionary); + delete details.words; + return request({ + action: 'set-dictionary-details', + details, + }, successful => { + addMessage('Saved Details to Server'); + return successful; + }, error => { + console.error(error); + addMessage('Could not sync dictionary'); + return false; + }); + } else if (remoteDetails.lastUpdated > window.currentDictionary.lastUpdated) { + window.currentDictionary = Object.assign(window.currentDictionary, remoteDetails); + saveDictionary(); } + addMessage('Dictionary details synchronized'); + return Promise.resolve(); } export function syncWords(remoteWords, deletedWords) {