fix: extra indexed db update on mount (reload) causing repeated popups of unsaved changes (#4808)

* docs: update self-host guide link in README (#4704)

found via:

- https://github.com/makeplane/docs/issues/48
- https://github.com/makeplane/plane/pull/3109

* fix: extra indexed db update on mount causing repeated popups on unload

* revert: old stuff

---------

Co-authored-by: jon ⚝ <jon@allmende.io>
This commit is contained in:
M. Palanikannan 2024-06-14 17:01:36 +05:30 committed by GitHub
parent c5b1d95c76
commit 71c77d30a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 14 additions and 1 deletions

View File

@ -48,7 +48,7 @@ Meet [Plane](https://dub.sh/plane-website-readme), an open-source project manage
The easiest way to get started with Plane is by creating a [Plane Cloud](https://app.plane.so) account.
If you would like to self-host Plane, please see our [deployment guide](https://docs.plane.so/self-hosting/overview).
If you would like to self-host Plane, please see our [deployment guide](https://docs.plane.so/docker-compose).
| Installation methods | Docs link |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |

View File

@ -59,6 +59,9 @@ export const useDocumentEditor = ({
// indexedDB provider
useLayoutEffect(() => {
const localProvider = new IndexeddbPersistence(id, provider.document);
localProvider.on("synced", () => {
provider.setHasIndexedDBSynced(true);
});
return () => {
localProvider?.destroy();
};

View File

@ -13,6 +13,10 @@ export interface CompleteCollaboratorProviderConfiguration {
* onChange callback
*/
onChange: (updates: Uint8Array) => void;
/**
* Whether connection to the database has been established and all available content has been loaded or not.
*/
hasIndexedDBSynced: boolean;
}
export type CollaborationProviderConfiguration = Required<Pick<CompleteCollaboratorProviderConfiguration, "name">> &
@ -24,6 +28,7 @@ export class CollaborationProvider {
// @ts-expect-error cannot be undefined
document: undefined,
onChange: () => {},
hasIndexedDBSynced: false,
};
constructor(configuration: CollaborationProviderConfiguration) {
@ -45,7 +50,12 @@ export class CollaborationProvider {
return this.configuration.document;
}
setHasIndexedDBSynced(hasIndexedDBSynced: boolean) {
this.configuration.hasIndexedDBSynced = hasIndexedDBSynced;
}
documentUpdateHandler(update: Uint8Array, origin: any) {
if (!this.configuration.hasIndexedDBSynced) return;
// return if the update is from the provider itself
if (origin === this) return;