Reload tree after sync

This commit is contained in:
Magnus Åhall 2025-01-22 21:35:37 +01:00
parent 02a8e10d11
commit 0bd5d08edf
3 changed files with 36 additions and 6 deletions

View file

@ -109,6 +109,9 @@ export class NodeStore {
getRequest.onerror = (event) => reject(event.target.error) getRequest.onerror = (event) => reject(event.target.error)
}) })
}//}}} }//}}}
purgeCache() {//{{{
this.nodes = {}
}//}}}
node(uuid, dataIfUndefined, newLevel) {//{{{ node(uuid, dataIfUndefined, newLevel) {//{{{
let n = this.nodes[uuid] let n = this.nodes[uuid]
@ -229,7 +232,6 @@ export class NodeStore {
const nodeData = event.target.result[i] const nodeData = event.target.result[i]
const node = this.node(nodeData.UUID, nodeData, newLevel) const node = this.node(nodeData.UUID, nodeData, newLevel)
nodes.push(node) nodes.push(node)
} }
resolve(nodes) resolve(nodes)
} }

View file

@ -9,6 +9,7 @@ export class Notes2 extends Component {
constructor() {//{{{ constructor() {//{{{
super() super()
this.nodeUI = createRef() this.nodeUI = createRef()
this.reloadTree = signal(0)
this.state = { this.state = {
startNode: null, startNode: null,
} }
@ -19,11 +20,15 @@ export class Notes2 extends Component {
this.getStartNode() this.getStartNode()
}//}}} }//}}}
render(_props, { startNode }) {//{{{ render(_props, { startNode }) {//{{{
console.log('notes2 render')
const treeKey = `tree-${this.reloadTree}`
console.log('treeKey', treeKey)
if (startNode === null) if (startNode === null)
return return
return html` return html`
<${Tree} app=${this} startNode=${startNode} /> <${Tree} app=${this} key=${treeKey} startNode=${startNode} />
<div id="nodeui"> <div id="nodeui">
<${NodeUI} app=${this} ref=${this.nodeUI} startNode=${startNode} /> <${NodeUI} app=${this} ref=${this.nodeUI} startNode=${startNode} />
@ -69,6 +74,7 @@ export class Notes2 extends Component {
class Tree extends Component { class Tree extends Component {
constructor(props) {//{{{ constructor(props) {//{{{
super(props) super(props)
console.log('new tree')
this.treeNodeComponents = {} this.treeNodeComponents = {}
this.treeTrunk = [] this.treeTrunk = []
this.selectedNode = null this.selectedNode = null
@ -89,6 +95,14 @@ class Tree extends Component {
${renderedTreeTrunk} ${renderedTreeTrunk}
</div>` </div>`
}//}}} }//}}}
componentDidMount() {//{{{
// This will show and select the treenode that is selected in the node UI.
const node = _notes2.current?.nodeUI.current?.node.value
if (node === null)
return
_notes2.current.tree.expandToTrunk(node)
this.setSelected(node)
}//}}}
populateFirstLevel(callback = null) {//{{{ populateFirstLevel(callback = null) {//{{{
nodeStore.getTreeNodes('', 0) nodeStore.getTreeNodes('', 0)

View file

@ -1,6 +1,6 @@
import { API } from 'api' import { API } from 'api'
import { Node } from 'node' import { Node } from 'node'
import { h, Component, createRef } from 'preact' import { h, Component } from 'preact'
import htm from 'htm' import htm from 'htm'
const html = htm.bind(h) const html = htm.bind(h)
@ -171,14 +171,16 @@ export class Sync {
export class SyncProgress extends Component { export class SyncProgress extends Component {
constructor() {//{{{ constructor() {//{{{
super() super()
this.reset()
}//}}}
reset() {//{{{
this.forceUpdateRequest = null this.forceUpdateRequest = null
this.state = { this.state = {
nodesToSync: 0, nodesToSync: 0,
nodesSynced: 0, nodesSynced: 0,
syncedDone: false, syncedDone: false,
} }
document.getElementById('sync-progress')?.classList.remove('hidden')
}//}}} }//}}}
componentDidMount() {//{{{ componentDidMount() {//{{{
window._sync.addListener(msg => this.progressHandler(msg), true) window._sync.addListener(msg => this.progressHandler(msg), true)
@ -210,9 +212,19 @@ export class SyncProgress extends Component {
this.state.nodesSynced += msg.count this.state.nodesSynced += msg.count
break break
case SYNC_DONE: case SYNC_DONE:
// Hides the progress bar.
this.setState({ syncedDone: true }) this.setState({ syncedDone: true })
// Don't update anything if nothing was synced.
if (this.state.nodesSynced === 0)
break
// Reload the tree nodes to reflect the new/updated nodes.
if (window._notes2?.current?.reloadTree.value !== null) {
nodeStore.purgeCache()
window._notes2.current.reloadTree.value = window._notes2.current.reloadTree.value + 1
}
break break
} }
}//}}} }//}}}
@ -228,3 +240,5 @@ export class SyncProgress extends Component {
` `
}//}}} }//}}}
} }
// vim: foldmethod=marker