Skip to content

Commit

Permalink
feat(reference): debounce for save file
Browse files Browse the repository at this point in the history
  • Loading branch information
alimd committed Dec 28, 2023
1 parent c92749e commit b40f9e9
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 11 deletions.
3 changes: 2 additions & 1 deletion packages/reference/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@
},
"dependencies": {
"@alwatr/flat-string": "^1.0.10",
"@alwatr/logger": "^2.4.1"
"@alwatr/logger": "^2.4.1",
"@alwatr/wait": "^1.1.1"
},
"devDependencies": {
"@alwatr/nano-build": "^1.2.2",
Expand Down
14 changes: 10 additions & 4 deletions packages/reference/src/collection-reference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
type StoreFileMeta,
} from '@alwatr/store-types';
import {Dictionary} from '@alwatr/type-helper';
import { waitForTimeout } from '@alwatr/wait';

import {logger} from './logger';
import {getStoreId, getStorePath} from './util';
Expand Down Expand Up @@ -469,11 +470,16 @@ export class CollectionReference<TItem extends Dictionary = Dictionary> {
private async updated__(id?: string | number): Promise<void> {
this.logger__.logMethodArgs?.('updated__', {delayed: this.updateDelayed__});
this.updateMeta__(id);
if (this.updateDelayed__) return;

if (this.updateDelayed__ === true) return;
// else
this.updateDelayed__ = true;
await new Promise((resolve) => setImmediate(resolve));
this.updateDelayed__ = false;

if (this.context__.meta.changeDebounce !== undefined) {
this.updateDelayed__ = true;
await waitForTimeout(this.context__.meta.changeDebounce);
this.updateDelayed__ = false;
}

this.updatedCallback__.call(null, this);
}

Expand Down
13 changes: 9 additions & 4 deletions packages/reference/src/document-reference.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {createLogger} from '@alwatr/logger';
import {StoreFileType, StoreFileId, StoreFileExtension, type DocumentContext, type StoreFileMeta} from '@alwatr/store-types';
import {waitForTimeout} from '@alwatr/wait';

import {logger} from './logger';
import { getStoreId, getStorePath } from './util';
Expand Down Expand Up @@ -249,11 +250,15 @@ export class DocumentReference<TDoc extends Dictionary = Dictionary> {
*/
private async updated__(): Promise<void> {
this.logger__.logMethodArgs?.('updated__', {delayed: this.updateDelayed__});
if (this.updateDelayed__) return;
if (this.updateDelayed__ === true) return;
// else
this.updateDelayed__ = true;
await new Promise((resolve) => setImmediate(resolve));
this.updateDelayed__ = false;

if (this.context__.meta.changeDebounce !== undefined) {
this.updateDelayed__ = true;
await waitForTimeout(this.context__.meta.changeDebounce);
this.updateDelayed__ = false;
}

this.updateMeta__();
this.updatedCallback__.call(null, this);
}
Expand Down
5 changes: 3 additions & 2 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,9 @@ __metadata:
languageName: unknown
linkType: soft

"@alwatr/store-reference@workspace:^, @alwatr/store-reference@workspace:packages/store-reference":
"@alwatr/store-reference@workspace:^, @alwatr/store-reference@workspace:packages/reference":
version: 0.0.0-use.local
resolution: "@alwatr/store-reference@workspace:packages/store-reference"
resolution: "@alwatr/store-reference@workspace:packages/reference"
dependencies:
"@alwatr/flat-string": "npm:^1.0.10"
"@alwatr/logger": "npm:^2.4.1"
Expand All @@ -96,6 +96,7 @@ __metadata:
"@alwatr/store-types": "workspace:^"
"@alwatr/tsconfig-base": "npm:^1.0.5"
"@alwatr/type-helper": "npm:^1.0.1"
"@alwatr/wait": "npm:^1.1.1"
"@types/node": "npm:^20.10.5"
typescript: "npm:^5.3.3"
languageName: unknown
Expand Down

0 comments on commit b40f9e9

Please sign in to comment.