diff --git a/demo-app/src/components/FileList.jsx b/demo-app/src/components/FileList.jsx index 5b46cb0..6465f9b 100644 --- a/demo-app/src/components/FileList.jsx +++ b/demo-app/src/components/FileList.jsx @@ -7,7 +7,7 @@ import { db, useLiveQuery } from '../store' const { Title } = Typography function FileTable() { - const files = useLiveQuery(() => db.files.where('$deleted').notEqual(1).sortBy('$created')) + const files = useLiveQuery(() => db.files.where('$deleted').notEqual(1).reverse().sortBy('$created')) const columns = [ { title: 'Preview', diff --git a/demo-app/src/components/TodoList.jsx b/demo-app/src/components/TodoList.jsx index 8c91e24..6e04224 100644 --- a/demo-app/src/components/TodoList.jsx +++ b/demo-app/src/components/TodoList.jsx @@ -17,7 +17,7 @@ function TaskItem(task) { function TodoList() { const [newTaskTitle, setNewTaskTitle] = useState('') - const tasks = useLiveQuery(() => db.tasks.where('$deleted').notEqual(1).sortBy('$created')) + const tasks = useLiveQuery(() => db.tasks.where('$deleted').notEqual(1).reverse().sortBy('$created')) function onAddTask() { db.tasks.add({ title: newTaskTitle }) setNewTaskTitle('') diff --git a/demo-app/src/components/UserManagement.jsx b/demo-app/src/components/UserManagement.jsx index aabca40..62cbbc8 100644 --- a/demo-app/src/components/UserManagement.jsx +++ b/demo-app/src/components/UserManagement.jsx @@ -1,7 +1,7 @@ /* eslint-disable react/prop-types */ import { useState, useEffect } from 'react' -import { Button, Typography, Input, Alert, Space } from 'antd' +import { Button, Typography, Input, Alert, Space, Form } from 'antd' import { sync } from '../store' const { Title } = Typography @@ -30,15 +30,21 @@ function Register({ user }) { ? : '' const form = ( - - setUsername(e.target.value)} /> - setPassword(e.target.value)} /> - - +
+ + setUsername(e.target.value)} /> + + + setPassword(e.target.value)} /> + + + + +
) return ( @@ -72,15 +78,21 @@ function Login({ user }) { ? : '' const form = ( - - setUsername(e.target.value)} /> - setPassword(e.target.value)} /> - - +
+ + setUsername(e.target.value)} /> + + + setPassword(e.target.value)} /> + + + + +
) return ( @@ -116,18 +128,26 @@ function ChangePassword({ user }) { ? : '' const form = ( - - setUsername(e.target.value)} /> - setPassword(e.target.value)} /> - setNewPassword(e.target.value)} /> - - +
+ + setUsername(e.target.value)} /> + + + setPassword(e.target.value)} /> + + + setNewPassword(e.target.value)} /> + + + + +
) return ( diff --git a/lib/add.js b/lib/add.js index 73ab08a..8eeffbc 100644 --- a/lib/add.js +++ b/lib/add.js @@ -55,19 +55,19 @@ export default async function add(table, path, options = {}) { const filter = path.replace(pathRegEx, '$3').replace('include=', 'include=id,$created,$updated,$deleted') // Run synchronization with interval - function runSync() { + async function runSync() { // User is online if (window.navigator.onLine) { // Sync from remote if (!path.startsWith('to:')) { - syncFromRemote(table, path, api, remoteTable, filter, localStorageKey) + await syncFromRemote(table, path, api, remoteTable, filter, localStorageKey) } // Sync to remote if (!path.startsWith('from:')) { - syncToRemote(table, api, remoteTable) + await syncToRemote(table, api, remoteTable) } // User is offline diff --git a/lib/syncFromRemote.js b/lib/syncFromRemote.js index e444d2d..619388e 100644 --- a/lib/syncFromRemote.js +++ b/lib/syncFromRemote.js @@ -9,7 +9,7 @@ export default async function syncFromRemote(table, path, api, remoteTable, filt // Remember sync start time const syncStartTime = Date.now() - // Get last sync time + // Get last sync time const lastSyncTime = parseInt(window.localStorage.getItem(localStorageKey) || 0) // Get not synchronized remote docs @@ -69,10 +69,14 @@ export default async function syncFromRemote(table, path, api, remoteTable, filt } - // Remember sync start time - // To respect syncReset(), use 0 if the item does not exist - const itemExists = window.localStorage.getItem(localStorageKey) !== null - window.localStorage.setItem(localStorageKey, itemExists ? syncStartTime : 0) + // Get last sync time now to check for a reset a in the meantime + const lastSyncTimeNow = parseInt(window.localStorage.getItem(localStorageKey) || 0) + const resetInTheMeantime = lastSyncTimeNow !== lastSyncTime + + // Remember the sync start time + if (!resetInTheMeantime) { + window.localStorage.setItem(localStorageKey, syncStartTime) + } } catch (error) { debug('sync from remote > failed', error) diff --git a/package-lock.json b/package-lock.json index e32a756..4d1e99b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dexie-mysql-sync", - "version": "5.0.5", + "version": "5.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dexie-mysql-sync", - "version": "5.0.5", + "version": "5.1.0", "license": "MIT", "dependencies": { "js-crud-api": "^0.4.0", diff --git a/package.json b/package.json index af7d848..a7abc80 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dexie-mysql-sync", - "version": "5.0.5", + "version": "5.1.0", "description": "", "main": "lib/index.js", "type": "module",