mirror of
https://github.com/AppFlowy-IO/AppFlowy-Web.git
synced 2026-03-13 10:00:26 +08:00
f7c727fc61374a2a0f5aea96372e2a53f96dcf29
* chore: view history * chore: remove outdated collab version listing and add version preview api * chore: update collab history list api * chore: fixed revert collab http api data nesting * chore: integrated collab version into YDoc * chore: view history * chore: remove outdated collab version listing and add version preview api * feat: implement document history ui modal * fix: ai code review * chore: fixed doc preview * chore: move version to doc itself * chore: only update user mappings when current user made a change locally * chore: always restore doc version * chore: add version as part of the key to the document editor * chore: add cypress e2e tests for collab version history * fix: harden version history sync and preview flow - remove duplicate collab message handling in sync - await revert before refreshing version history state - guard and cancel stale preview fetches in history modal - show "Version History" action only for document views - clean up history list memoization/lint issues * fix: dedupe collab handling and stabilize history list item memoization - apply version-reset logic to broadcast-channel collab updates - avoid replaying the same collab message when non-message deps change - remove inline per-item callbacks to preserve VersionListItem memo benefits * fix: harden version reset and revert flows - use server-returned collab version after revert - drop queued local updates during version reset/revert instead of flushing stale edits - compare expectedVersion against persisted provider version in openCollabDBWithProvider - unregister sync destroy listeners during cleanup - document guid identity assignments for workspace/database/row docs * fix(sync): restore row API contract and harden reset flow - restore AppService methods to createRow/deleteRow - ensure version reset continues rebinding after teardown - keep doc reset handling scoped by view identity - simplify history modal preview path and update tests * fix(history): keep awareness/reset state consistent - update awarenessMap when Y.Doc is replaced during reset/revert - fail restore when sync context/workspace is unavailable - clear selected version when filters hide all versions * fix(sync): avoid legacy version reset data loss - skip destructive resets when local doc version is unknown and migrate to incoming version - remove duplicate collab proto declarations to keep schema canonical * fix(history-sync): harden version history reset flows and clean test/lint regressions * fix(sync): guard stale reset tasks and clear modal state on doc switch * fix(sync): harden version reset and restore flows - recreate a fresh Y.Doc after IndexedDB clear when expectedVersion mismatches - remove timeout-based deleteDB path that could race with reopen - keep old doc active until replacement doc is opened/applied successfully * fix(history): harden version flows and optimize modal render - persist learned collab versions and preserve deferred cleanup during resets - filter tombstoned history entries from modal state - lazy-load history modal and pass stable preview editor props * fix(sync): avoid dropped updates and isolate history preview - abort stale reset handlers on active-context replacement and apply guards before/after open - remove loadView/bindViewSync from history preview editor props to prevent live nested sync * fix(sync): align reset/update handling with desktop parity - reroute superseded reset messages to active context instead of dropping - enforce version match before applying rerouted updates - disable version-history entry in ViewModal host that lacks doc-reset rebinding * test(sync): cover version-gated updates and reset concurrency * fix(sync): serialize reset replay and recover context on reopen failure * chore(deps): upgrade uuid for collab version validation * fix(sync): harden restore flow and history API handling * fix(sync): tighten version-history reset and cleanup paths * refactor(history): simplify modal refs and preview props * chore: dismiss dialog after restore with correct editor state * refactor: make view vs collab ids explicit across sync flow * fix(sync): align unknown-version reset behavior with desktop * refactor(history): normalize tombstone field to deletedAt * fix(sync): scope incoming collab serialization per object Avoid global head-of-line blocking in useSync by replacing the single incoming-message queue with per-objectId queues and per-object processors. This preserves in-order processing for each document (required for reset/version safety) while allowing unrelated documents to continue syncing when one object is waiting on a slow reset/open path. Also adds a regression test to ensure a pending reset for object A does not block updates for object B. * chore(sync): remove extra inline comment * test(sync): expand useSync coverage and align version reset behavior Add a comprehensive useSync hook test matrix for notifications, queueing, public API methods, and revert/reset edge cases. Align version mismatch handling with desktop semantics for known/unknown version states and add force-reset support in openCollabDB APIs for mismatch resets without expectedVersion. * refactor: extract database identity logic into dedicated hook * chore: fix test * feat(history): show dialog when document is externally reverted * chore: fix sync * refactor: separate sync * fix: show dialog * refactor: stabilize hook deps, fix revert dialog timing, and clean up debug logging * chore: exract use row operation from view operation * refactor: remove duplicate extension * fix: prevent blank page when outline patch targets lazy-loaded children * fix: test --------- Co-authored-by: Richard Shiue <71320345+richardshiue@users.noreply.github.com> Co-authored-by: Nathan <nathan@appflowy.io>
…
…
…
…
…
…
…
…
…
…
…
AppFlowy Web
⭐️ The Open Source Notion Alternative ⭐️
Use AppFlowy right in your browser
Bring projects, wikis, and teams together with AI
Web • Apps • Discord • Twitter • Reddit • Forum
Table of Contents
Use cases
- Build and maintain a knowledge base for your team
- Create and publish documentation for your customers and audience
- Write, publish, and manage content with AI
- Manage tasks and projects for yourself and your team
Features
- Write beautiful documents with rich content types
- Create custom Grid & Kanban Board-view databases to manage and digest data
- Add a Quick Note to jot down lists, ideas, or to-dos
- Invite members to your workspace for seamless collaboration
- Create multiple public and private spaces to better organize your content
Installation
Cloud: we host AppFlowy for you
Sign up for a free account on appflowy.com—it's the fastest way to get started with AppFlowy without hassles
Self-hosted: host AppFlowy on your own server
Take charge of your data; no vendor lock-in. Follow our deployment guide to get started. Join our Discord server to get help!
Built with 🛠️
Development
Check out the development guide for more details
Deployment
Once AppFlowy Cloud has been setup, you can follow the deployment guide to deploy AppFlowy Web.
Documentation
- Deployment Guide - Detailed environment configuration, architecture diagrams, and troubleshooting
- AppFlowy Cloud Repository - Backend setup and configuration
- Official Documentation - Complete AppFlowy documentation
License
Distributed under the AGPLv3 License. See LICENSE.md for
more information.
Languages
TypeScript
90.6%
JavaScript
7.7%
CSS
0.6%
SCSS
0.6%
Shell
0.4%