Commit 01aa7752 authored by Fatih Acet's avatar Fatih Acet

Debounce Autosave callback.

parent ef2b2546
/* eslint-disable no-param-reassign, prefer-template, no-void, consistent-return */ /* eslint-disable no-param-reassign, prefer-template, no-void, consistent-return */
import _ from 'underscore';
import AccessorUtilities from './lib/utils/accessor'; import AccessorUtilities from './lib/utils/accessor';
export default class Autosave { export default class Autosave {
...@@ -13,7 +14,13 @@ export default class Autosave { ...@@ -13,7 +14,13 @@ export default class Autosave {
this.key = 'autosave/' + key; this.key = 'autosave/' + key;
this.field.data('autosave', this); this.field.data('autosave', this);
this.restore(); this.restore();
this.field.on('input', () => this.save()); this.field.on('input', this.debounceInputHandler());
}
debounceInputHandler() {
return _.debounce(() => {
this.save();
}, Autosave.DEBOUNCE_TIMER);
} }
restore() { restore() {
...@@ -57,4 +64,6 @@ export default class Autosave { ...@@ -57,4 +64,6 @@ export default class Autosave {
dispose() { dispose() {
this.field.off('input'); this.field.off('input');
} }
static DEBOUNCE_TIMER = 300;
} }
import $ from 'jquery'; import $ from 'jquery';
import _ from 'underscore';
import Autosave from '~/autosave'; import Autosave from '~/autosave';
import AccessorUtilities from '~/lib/utils/accessor'; import AccessorUtilities from '~/lib/utils/accessor';
...@@ -10,12 +11,24 @@ describe('Autosave', () => { ...@@ -10,12 +11,24 @@ describe('Autosave', () => {
describe('class constructor', () => { describe('class constructor', () => {
beforeEach(() => { beforeEach(() => {
spyOn(AccessorUtilities, 'isLocalStorageAccessSafe').and.returnValue(true); spyOn(AccessorUtilities, 'isLocalStorageAccessSafe').and.returnValue(true);
spyOn(_, 'debounce');
spyOn(Autosave.prototype, 'save');
spyOn(Autosave.prototype, 'restore'); spyOn(Autosave.prototype, 'restore');
autosave = new Autosave(field, key);
}); });
it('should set .isLocalStorageAvailable', () => { it('should debounce the input handler', () => {
autosave = new Autosave(field, key); expect(_.debounce).toHaveBeenCalled();
expect(autosave.save).not.toHaveBeenCalled();
const [cb, timer] = _.debounce.calls.argsFor(0);
cb(); // execute debounced callback
expect(timer).toEqual(Autosave.DEBOUNCE_TIMER);
expect(autosave.save).toHaveBeenCalled();
});
it('should set .isLocalStorageAvailable', () => {
expect(AccessorUtilities.isLocalStorageAccessSafe).toHaveBeenCalled(); expect(AccessorUtilities.isLocalStorageAccessSafe).toHaveBeenCalled();
expect(autosave.isLocalStorageAvailable).toBe(true); expect(autosave.isLocalStorageAvailable).toBe(true);
}); });
...@@ -59,12 +72,10 @@ describe('Autosave', () => { ...@@ -59,12 +72,10 @@ describe('Autosave', () => {
Autosave.prototype.restore.call(autosave); Autosave.prototype.restore.call(autosave);
expect( expect(field.trigger).toHaveBeenCalled();
field.trigger,
).toHaveBeenCalled();
}); });
it('triggers native event', (done) => { it('triggers native event', done => {
autosave.field.get(0).addEventListener('change', () => { autosave.field.get(0).addEventListener('change', () => {
done(); done();
}); });
...@@ -81,9 +92,7 @@ describe('Autosave', () => { ...@@ -81,9 +92,7 @@ describe('Autosave', () => {
it('does not trigger event', () => { it('does not trigger event', () => {
spyOn(field, 'trigger').and.callThrough(); spyOn(field, 'trigger').and.callThrough();
expect( expect(field.trigger).not.toHaveBeenCalled();
field.trigger,
).not.toHaveBeenCalled();
}); });
}); });
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment