1
0
mirror of https://github.com/keeweb/keeweb.git synced 2024-06-28 07:50:55 +02:00

Model.reset

This commit is contained in:
antelle 2021-06-12 10:01:19 +02:00
parent acad35a52b
commit bf0192412a
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C
3 changed files with 46 additions and 8 deletions

View File

@ -43,12 +43,4 @@ export class Filter extends Model {
super();
Object.assign(this, values);
}
reset(): void {
this.batchSet(() => {
for (const key of Object.keys(this)) {
delete this[key as keyof Filter];
}
});
}
}

View File

@ -149,4 +149,24 @@ export class Model<EventSpec extends ListenerSignature<EventSpec> = DefaultModel
}
}
}
reset(): void {
const defaults = new (this.constructor as typeof Model)();
const props = new Map<string, unknown>();
for (const key of Object.keys(this)) {
props.set(key, undefined);
}
for (const [key, value] of Object.entries(defaults)) {
props.set(key, value);
}
this.batchSet(() => {
for (const [key, value] of props) {
if (value === undefined) {
delete (this as Record<string, unknown>)[key];
} else {
(this as Record<string, unknown>)[key] = value;
}
}
});
}
}

View File

@ -395,4 +395,30 @@ describe('Model', () => {
expect(changed).to.eql(1);
expect(changedNum).to.eql(1);
});
it('resets model properties', () => {
const model = new TestModel();
model.num = 2;
model.numOpt = 3;
let changed = 0;
let changedNum = 0;
let changedNumOpt = 0;
model.on('change', () => changed++);
model.onChange('num', () => changedNum++);
model.onChange('numOpt', () => changedNumOpt++);
model.reset();
expect(model.num).to.eql(42);
expect(model.numOpt).to.eql(undefined);
expect(model.str).to.eql('s');
expect(model.strOpt).to.eql(undefined);
expect(changed).to.eql(1);
expect(changedNum).to.eql(1);
expect(changedNumOpt).to.eql(1);
});
});