Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 1a131f4

Browse files
Goamandmo-odoo
authored andcommitted
[IMP] Core: Separate EventMixin/VersionableObject
1 parent 20ce823 commit 1a131f4

File tree

9 files changed

+32
-9
lines changed

9 files changed

+32
-9
lines changed

packages/core/src/Modifier.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Constructor } from '../../utils/src/utils';
22
import { VNode } from './VNodes/VNode';
33
import { EventMixin } from '../../utils/src/EventMixin';
4+
import { makeVersionable } from './Memory/Versionable';
45

56
export enum ModifierLevel {
67
LOW,
@@ -24,6 +25,11 @@ export class Modifier extends EventMixin {
2425
preserveAfterLineBreak = true; // True to preserve modifier after a line break.
2526
level = ModifierLevel.MEDIUM;
2627

28+
constructor() {
29+
super();
30+
return makeVersionable(this);
31+
}
32+
2733
get name(): string {
2834
return '';
2935
}

packages/core/src/Modifiers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Modifier } from './Modifier';
22
import { Constructor, isConstructor } from '../../utils/src/utils';
33
import { EventMixin } from '../../utils/src/EventMixin';
44
import { VersionableArray } from './Memory/VersionableArray';
5+
import { makeVersionable } from './Memory/Versionable';
56

67
export class Modifiers extends EventMixin {
78
private _contents: Modifier[];
@@ -11,6 +12,7 @@ export class Modifiers extends EventMixin {
1112
return mod instanceof Modifier ? mod.clone() : mod;
1213
});
1314
this.append(...clonedModifiers);
15+
return makeVersionable(this);
1416
}
1517

1618
//--------------------------------------------------------------------------

packages/core/src/VNodes/AbstractNode.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { Modifiers } from '../Modifiers';
1111
import { EventMixin } from '../../../utils/src/EventMixin';
1212
import { Modifier } from '../Modifier';
1313
import { markAsDiffRoot } from '../Memory/Memory';
14+
import { makeVersionable } from '../Memory/Versionable';
1415

1516
export interface AbstractNodeParams {
1617
modifiers?: Modifiers | Array<Modifier | Constructor<Modifier>>;
@@ -80,7 +81,9 @@ export abstract class AbstractNode extends EventMixin {
8081
this.modifiers.append(...params.modifiers);
8182
}
8283
}
83-
markAsDiffRoot(this);
84+
const node = makeVersionable(this);
85+
markAsDiffRoot(node);
86+
return node;
8487
}
8588

8689
get modifiers(): Modifiers {

packages/plugin-odoo-field/src/OdooField.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Parser } from '../../plugin-parser/src/Parser';
44
import { Renderer } from '../../plugin-renderer/src/Renderer';
55
import { OdooFieldDomObjectRenderer } from './OdooFieldDomObjectRenderer';
66
import { OdooFieldXmlDomParser } from './OdooFieldXmlDomParser';
7-
import { ReactiveValue } from '../../utils/src/ReactiveValue';
7+
import { ReactiveValueVersionable } from '../../utils/src/ReactiveValueVersionable';
88
import { OdooFieldMap } from './OdooFieldMap';
99
import { OdooMonetaryFieldXmlDomParser } from './OdooMonetaryFieldXmlDomParser';
1010
import { OdooMonetaryFieldDomObjectRenderer } from './OdooMonetaryFieldDomObjectRenderer';
@@ -18,8 +18,8 @@ export interface OdooFieldDefinition {
1818

1919
export interface OdooFieldInfo extends OdooFieldDefinition {
2020
readonly originalValue: string;
21-
value: ReactiveValue<string>;
22-
isValid: ReactiveValue<boolean>;
21+
value: ReactiveValueVersionable<string>;
22+
isValid: ReactiveValueVersionable<boolean>;
2323
}
2424

2525
/**
@@ -53,8 +53,8 @@ export class OdooField<T extends JWPluginConfig = JWPluginConfig> extends JWPlug
5353
register(field: OdooFieldDefinition, type: string, value: string): OdooFieldInfo {
5454
if (!this._registry.get(field)) {
5555
// TODO: Retrieve the field from Odoo through RPC.
56-
const reactiveValue = new ReactiveValue<string>();
57-
const isValid = new ReactiveValue(true);
56+
const reactiveValue = new ReactiveValueVersionable<string>();
57+
const isValid = new ReactiveValueVersionable<boolean>(true);
5858
if (Object.keys(fieldValidators).includes(type)) {
5959
reactiveValue.on('set', (newValue: string): void => {
6060
isValid.set(!!newValue.match(fieldValidators[type]));

packages/plugin-xml/src/ClassList.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { VersionableObject } from '../../core/src/Memory/VersionableObject';
22
import { EventMixin } from '../../utils/src/EventMixin';
3+
import { makeVersionable } from '../../core/src/Memory/Versionable';
34

45
export class ClassList extends EventMixin {
56
private _classList: Record<string, boolean>;
@@ -8,6 +9,7 @@ export class ClassList extends EventMixin {
89
for (const className of classList) {
910
this.add(className);
1011
}
12+
return makeVersionable(this);
1113
}
1214

1315
//--------------------------------------------------------------------------

packages/plugin-xml/src/CssStyle.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export class CssStyle extends EventMixin {
88
if (style) {
99
this.reset(style);
1010
}
11+
return makeVersionable(this);
1112
}
1213

1314
//--------------------------------------------------------------------------

packages/utils/src/EventMixin.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import { VersionableObject } from '../../core/src/Memory/VersionableObject';
21
import { VersionableArray } from '../../core/src/Memory/VersionableArray';
32
import { makeVersionable } from '../../core/src/Memory/Versionable';
43
import { VersionableSet } from '../../core/src/Memory/VersionableSet';
54

65
/**
76
* Abstract class to add event mechanism.
87
*/
9-
export class EventMixin extends VersionableObject {
8+
export class EventMixin {
109
_eventCallbacks: Record<string, Function[]>;
1110
_callbackWorking: Set<Function>;
1211

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { makeVersionable } from '../../core/src/Memory/Versionable';
2+
import { Constructor } from './utils';
3+
import { ReactiveValue } from './ReactiveValue';
4+
5+
export class ReactiveValueVersionable<T> extends ReactiveValue<T> {
6+
constructor(...args: ConstructorParameters<Constructor<ReactiveValue<T>>>) {
7+
super(...args);
8+
return makeVersionable(this);
9+
}
10+
}

packages/utils/test/ReactiveValue.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { ReactiveValue } from '../src/ReactiveValue';
21
import { fake } from 'sinon';
32
import { expect } from 'chai';
3+
import { ReactiveValue } from '../src/ReactiveValue';
44
describe('utils', () => {
55
describe('ReactiveValue', () => {
66
it('should set/get a value and fire', () => {

0 commit comments

Comments
 (0)