Skip to content

Commit f890938

Browse files
committed
feat: bind overridden value converters to the target
1 parent 090ae9b commit f890938

File tree

1 file changed

+13
-6
lines changed
  • packages/core/ui/core/properties

1 file changed

+13
-6
lines changed

packages/core/ui/core/properties/index.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ export class Property<T extends ViewBase, U> implements TypedPropertyDescriptor<
200200
let affectsLayout: boolean = options.affectsLayout;
201201
let valueChanged = options.valueChanged;
202202
let valueConverter = options.valueConverter;
203+
let overrideConverter = false;
203204

204205
this.overrideHandlers = function (options: PropertyOptions<T, U>) {
205206
if (typeof options.equalityComparer !== 'undefined') {
@@ -213,6 +214,7 @@ export class Property<T extends ViewBase, U> implements TypedPropertyDescriptor<
213214
}
214215
if (typeof options.valueConverter !== 'undefined') {
215216
valueConverter = options.valueConverter;
217+
overrideConverter = true;
216218
}
217219
};
218220

@@ -229,7 +231,7 @@ export class Property<T extends ViewBase, U> implements TypedPropertyDescriptor<
229231
value = wrapped ? WrappedValue.unwrap(boxedValue) : boxedValue;
230232

231233
if (valueConverter && typeof value === 'string') {
232-
value = valueConverter(value);
234+
value = overrideConverter ? valueConverter.call(this, value) : valueConverter(value);
233235
}
234236
}
235237

@@ -372,7 +374,7 @@ export class CoercibleProperty<T extends ViewBase, U> extends Property<T, U> imp
372374
let valueChanged = options.valueChanged;
373375
let valueConverter = options.valueConverter;
374376
let coerceCallback = options.coerceValue;
375-
377+
let overrideConverter = false;
376378
const property = this;
377379

378380
this.overrideHandlers = function (options: CoerciblePropertyOptions<T, U>) {
@@ -387,6 +389,7 @@ export class CoercibleProperty<T extends ViewBase, U> extends Property<T, U> imp
387389
}
388390
if (typeof options.valueConverter !== 'undefined') {
389391
valueConverter = options.valueConverter;
392+
overrideConverter = true;
390393
}
391394
if (typeof options.coerceValue !== 'undefined') {
392395
coerceCallback = options.coerceValue;
@@ -411,7 +414,7 @@ export class CoercibleProperty<T extends ViewBase, U> extends Property<T, U> imp
411414
value = wrapped ? WrappedValue.unwrap(boxedValue) : boxedValue;
412415

413416
if (valueConverter && typeof value === 'string') {
414-
value = valueConverter(value);
417+
value = overrideConverter ? valueConverter.call(this, value) : valueConverter(value);
415418
}
416419

417420
this[coerceKey] = value;
@@ -615,6 +618,7 @@ export class CssProperty<T extends Style, U> {
615618
let equalityComparer = options.equalityComparer;
616619
let valueChanged = options.valueChanged;
617620
let valueConverter = options.valueConverter;
621+
let overrideConverter = false;
618622

619623
this.overrideHandlers = function (options: CssPropertyOptions<T, U>) {
620624
if (typeof options.equalityComparer !== 'undefined') {
@@ -628,6 +632,7 @@ export class CssProperty<T extends Style, U> {
628632
}
629633
if (typeof options.valueConverter !== 'undefined') {
630634
valueConverter = options.valueConverter;
635+
overrideConverter = true;
631636
}
632637
};
633638

@@ -649,7 +654,7 @@ export class CssProperty<T extends Style, U> {
649654
delete this[sourceKey];
650655
} else {
651656
this[sourceKey] = ValueSource.Local;
652-
value = valueConverter && typeof newValue === 'string' ? valueConverter(newValue) : <U>newValue;
657+
value = valueConverter && typeof newValue === 'string' ? (overrideConverter ? valueConverter.call(view, newValue) : valueConverter(newValue)) : <U>newValue;
653658
}
654659

655660
const oldValue = <U>(key in this ? this[key] : defaultValue);
@@ -732,7 +737,7 @@ export class CssProperty<T extends Style, U> {
732737
value = defaultValue;
733738
delete this[sourceKey];
734739
} else {
735-
value = valueConverter && typeof newValue === 'string' ? valueConverter(newValue) : <U>newValue;
740+
value = valueConverter && typeof newValue === 'string' ? (overrideConverter ? valueConverter.call(view, newValue) : valueConverter(newValue)) : <U>newValue;
736741
this[sourceKey] = ValueSource.Css;
737742
}
738743

@@ -1071,6 +1076,7 @@ export class InheritedCssProperty<T extends Style, U> extends CssProperty<T, U>
10711076
let equalityComparer = options.equalityComparer;
10721077
let valueChanged = options.valueChanged;
10731078
let valueConverter = options.valueConverter;
1079+
let overrideHandlers = false;
10741080

10751081
const property = this;
10761082

@@ -1086,6 +1092,7 @@ export class InheritedCssProperty<T extends Style, U> extends CssProperty<T, U>
10861092
}
10871093
if (typeof options.valueConverter !== 'undefined') {
10881094
valueConverter = options.valueConverter;
1095+
overrideHandlers = true;
10891096
}
10901097
};
10911098

@@ -1132,7 +1139,7 @@ export class InheritedCssProperty<T extends Style, U> extends CssProperty<T, U>
11321139
} else {
11331140
this[sourceKey] = valueSource;
11341141
if (valueConverter && typeof boxedValue === 'string') {
1135-
value = valueConverter(boxedValue);
1142+
value = overrideHandlers ? valueConverter.call(this, boxedValue) : valueConverter(boxedValue);
11361143
} else {
11371144
value = boxedValue;
11381145
}

0 commit comments

Comments
 (0)