Tweak to allow localdb not to sync to cloud and generate unique IDs for databases.
This commit is contained in:
parent
f87190af86
commit
48c0535c8f
@ -6,7 +6,6 @@ import {DiagramEventObserverMask, DiagramManager} from "../diagram/diagramManage
|
|||||||
import log, {Logger} from "loglevel";
|
import log, {Logger} from "loglevel";
|
||||||
import {ascii_to_hex} from "./functions/hexFunctions";
|
import {ascii_to_hex} from "./functions/hexFunctions";
|
||||||
import {getPath} from "../util/functions/getPath";
|
import {getPath} from "../util/functions/getPath";
|
||||||
import {v4 as uuidv4} from 'uuid';
|
|
||||||
|
|
||||||
const logger: Logger = log.getLogger('PouchdbPersistenceManager');
|
const logger: Logger = log.getLogger('PouchdbPersistenceManager');
|
||||||
export class PouchdbPersistenceManager {
|
export class PouchdbPersistenceManager {
|
||||||
@ -97,21 +96,17 @@ export class PouchdbPersistenceManager {
|
|||||||
|
|
||||||
private async initLocal(): Promise<boolean> {
|
private async initLocal(): Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
|
let sync = false;
|
||||||
let current = getPath();
|
let current = getPath();
|
||||||
if (!current) {
|
if (current && current != 'localdb') {
|
||||||
const locallyStored = localStorage.getItem('currentDiagram');
|
sync = true;
|
||||||
if (!locallyStored) {
|
|
||||||
const newId = uuidv4().replaceAll('-', '_');
|
|
||||||
localStorage.setItem('currentDiagram', newId);
|
|
||||||
window.history.replaceState(null, null, '/db/' + newId);
|
|
||||||
current = newId;
|
|
||||||
} else {
|
} else {
|
||||||
current = locallyStored;
|
current = 'localdb';
|
||||||
window.history.replaceState(null, null, '/db/' + current);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
this.db = new PouchDB(current);
|
this.db = new PouchDB(current);
|
||||||
|
if (sync) {
|
||||||
await this.beginSync(current);
|
await this.beginSync(current);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error(err);
|
logger.error(err);
|
||||||
|
|||||||
@ -16,8 +16,10 @@ function CreateMenu({display, toggleCreateMenu}) {
|
|||||||
const onCreateClick = (evt) => {
|
const onCreateClick = (evt) => {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
const name = (document.querySelector('#createName') as HTMLInputElement).value;
|
const name = (document.querySelector('#createName') as HTMLInputElement).value;
|
||||||
|
const id = window.crypto.randomUUID().replace(/-/g, '_');
|
||||||
|
localStorage.setItem(id, name);
|
||||||
if (name && name.length > 4) {
|
if (name && name.length > 4) {
|
||||||
document.location.href = '/db/' + name;
|
document.location.href = '/db/' + id;
|
||||||
} else {
|
} else {
|
||||||
window.alert('Name must be longer than 4 characters');
|
window.alert('Name must be longer than 4 characters');
|
||||||
}
|
}
|
||||||
@ -26,7 +28,6 @@ function CreateMenu({display, toggleCreateMenu}) {
|
|||||||
<div className="overlay" id="create" style={{'display': display}}>
|
<div className="overlay" id="create" style={{'display': display}}>
|
||||||
<div>
|
<div>
|
||||||
<div><input id="createName" placeholder="Enter a name for your diagram" type="text"/></div>
|
<div><input id="createName" placeholder="Enter a name for your diagram" type="text"/></div>
|
||||||
<div><input id="createPassword" placeholder="Enter a password (optional)" type="text"/></div>
|
|
||||||
<div><a href="#" id="createActionLink" onClick={onCreateClick}>Create</a></div>
|
<div><a href="#" id="createActionLink" onClick={onCreateClick}>Create</a></div>
|
||||||
<div><a className="cancel" onClick={toggleCreateMenu} href="#" id="cancelCreateLink">Cancel</a></div>
|
<div><a className="cancel" onClick={toggleCreateMenu} href="#" id="cancelCreateLink">Cancel</a></div>
|
||||||
</div>
|
</div>
|
||||||
@ -69,7 +70,12 @@ function DiagramList({display, onClick}) {
|
|||||||
const data = await indexedDB.databases();
|
const data = await indexedDB.databases();
|
||||||
let i = 0;
|
let i = 0;
|
||||||
setDbList(data.filter((item) => item.name.indexOf('_pouch_') > -1).map((item) => {
|
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();
|
listDb();
|
||||||
@ -82,7 +88,7 @@ function DiagramList({display, onClick}) {
|
|||||||
<div id="startCreate"><a href="#" id="startCreateLink" onClick={onClick}>New</a></div>
|
<div id="startCreate"><a href="#" id="startCreateLink" onClick={onClick}>New</a></div>
|
||||||
<div id="diagramListContent">
|
<div id="diagramListContent">
|
||||||
<ul>
|
<ul>
|
||||||
{dbList.map((item) => <li key={item.key}><a href={`/db/${item.name}`}>{item.name}</a></li>)}
|
{dbList.map((item) => <li key={item.key}><a href={`/db/${item.key}`}>{item.name}</a></li>)}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user