fix(workspace): remove transient duplicate warning

This commit is contained in:
NI0317
2026-07-27 15:52:35 +08:00
parent 7bd96af5eb
commit 4701373fc2
9 changed files with 155 additions and 17 deletions

View File

@@ -133,7 +133,7 @@ export class WorkspaceManager {
*/
async delete(workspaceId: WorkspaceId): Promise<RpcResult<{ deleted: true }>> {
const { result } = await this.api.workspace.delete({ workspaceId })
if (result.ok) this.remove(workspaceId)
if (result.ok) this.remove(workspaceId, true)
return result
}
@@ -224,14 +224,21 @@ export class WorkspaceManager {
}
/** Remove one id idempotently and retain a tombstone against late echoes. */
private remove(workspaceId: WorkspaceId): void {
private remove(workspaceId: WorkspaceId, direct = false): void {
this.refreshFrames?.push({ type: 'remove', workspaceId })
this.removedIds.add(workspaceId)
const items = this.items.filter(item =>
item.getSnapshot().view?.workspaceId !== workspaceId)
if (items.length === this.items.length) return
if (items.length === this.items.length) {
// The Host frame may have removed the row first but left its batched
// notification pending. A successful unary echo still flushes that
// committed state before the user action resolves.
if (direct) this.notifier.notifyNow()
return
}
this.items = items
this.notifier.markDirty()
if (direct) this.notifier.notifyNow()
else this.notifier.markDirty()
}
private installViews(views: readonly WorkspaceView[]): void {