mirror of
https://github.com/keeweb/keeweb.git
synced 2024-06-28 07:50:55 +02:00
Model.reset
This commit is contained in:
parent
acad35a52b
commit
bf0192412a
|
@ -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];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Block a user