From 48c0535c8fa0aa935b733990f4cb96b3b3205daa Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Wed, 24 Apr 2024 11:50:23 -0500 Subject: [PATCH] Tweak to allow localdb not to sync to cloud and generate unique IDs for databases. --- src/integration/pouchdbPersistenceManager.ts | 21 ++++++++------------ src/react/webApp.tsx | 14 +++++++++---- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/integration/pouchdbPersistenceManager.ts b/src/integration/pouchdbPersistenceManager.ts index c9bbf9f..a202740 100644 --- a/src/integration/pouchdbPersistenceManager.ts +++ b/src/integration/pouchdbPersistenceManager.ts @@ -6,7 +6,6 @@ import {DiagramEventObserverMask, DiagramManager} from "../diagram/diagramManage import log, {Logger} from "loglevel"; import {ascii_to_hex} from "./functions/hexFunctions"; import {getPath} from "../util/functions/getPath"; -import {v4 as uuidv4} from 'uuid'; const logger: Logger = log.getLogger('PouchdbPersistenceManager'); export class PouchdbPersistenceManager { @@ -97,21 +96,17 @@ export class PouchdbPersistenceManager { private async initLocal(): Promise { try { + let sync = false; let current = getPath(); - if (!current) { - const locallyStored = localStorage.getItem('currentDiagram'); - if (!locallyStored) { - const newId = uuidv4().replaceAll('-', '_'); - localStorage.setItem('currentDiagram', newId); - window.history.replaceState(null, null, '/db/' + newId); - current = newId; - } else { - current = locallyStored; - window.history.replaceState(null, null, '/db/' + current); - } + if (current && current != 'localdb') { + sync = true; + } else { + current = 'localdb'; } this.db = new PouchDB(current); - await this.beginSync(current); + if (sync) { + await this.beginSync(current); + } return true; } catch (err) { logger.error(err); diff --git a/src/react/webApp.tsx b/src/react/webApp.tsx index 115ed1d..57efbab 100644 --- a/src/react/webApp.tsx +++ b/src/react/webApp.tsx @@ -16,8 +16,10 @@ function CreateMenu({display, toggleCreateMenu}) { const onCreateClick = (evt) => { evt.preventDefault(); const name = (document.querySelector('#createName') as HTMLInputElement).value; + const id = window.crypto.randomUUID().replace(/-/g, '_'); + localStorage.setItem(id, name); if (name && name.length > 4) { - document.location.href = '/db/' + name; + document.location.href = '/db/' + id; } else { window.alert('Name must be longer than 4 characters'); } @@ -26,7 +28,6 @@ function CreateMenu({display, toggleCreateMenu}) {
-
Create
Cancel
@@ -69,7 +70,12 @@ function DiagramList({display, onClick}) { const data = await indexedDB.databases(); let i = 0; setDbList(data.filter((item) => item.name.indexOf('_pouch_') > -1).map((item) => { - return {key: i++, name: item.name.replace('_pouch_', '')} + const dbid = item.name.replace('_pouch_', ''); + let friendlyName = localStorage.getItem(dbid); + if (!friendlyName) { + friendlyName = dbid; + } + return {key: dbid, name: friendlyName} })); }; listDb(); @@ -82,7 +88,7 @@ function DiagramList({display, onClick}) {