Fix custom UI validation bugs (#1583)

This commit is contained in:
Matt Irvine
2018-06-08 15:32:21 -07:00
committed by GitHub
parent 02af7e9299
commit 20c4f085c8
3 changed files with 17 additions and 3 deletions

View File

@@ -429,9 +429,9 @@ class ComponentWrapper implements sqlops.Component {
public onEvent(eventArgs: IComponentEventArgs) { public onEvent(eventArgs: IComponentEventArgs) {
if (eventArgs && eventArgs.eventType === ComponentEventType.PropertiesChanged) { if (eventArgs && eventArgs.eventType === ComponentEventType.PropertiesChanged) {
this.properties = eventArgs.args; this.properties = eventArgs.args;
} } else if (eventArgs && eventArgs.eventType === ComponentEventType.validityChanged) {
else if (eventArgs && eventArgs.eventType === ComponentEventType.validityChanged) {
this._valid = eventArgs.args; this._valid = eventArgs.args;
this._onValidityChangedEmitter.fire(this._valid);
} else if (eventArgs) { } else if (eventArgs) {
let emitter = this._emitterMap.get(eventArgs.eventType); let emitter = this._emitterMap.get(eventArgs.eventType);
if (emitter) { if (emitter) {

View File

@@ -118,4 +118,14 @@ suite('ExtHostModelView Validation Tests', () => {
}); });
assert.equal(inputBox.valid, true, 'Input box did not update validity to true based on the validityChanged event'); assert.equal(inputBox.valid, true, 'Input box did not update validity to true based on the validityChanged event');
}); });
test('Main thread validityChanged events cause component to fire validity changed events', () => {
let validityFromEvent: boolean = undefined;
inputBox.onValidityChanged(valid => validityFromEvent = valid);
extHostModelView.$handleEvent(handle, inputBox.id, {
eventType: ComponentEventType.validityChanged,
args: false
});
assert.equal(validityFromEvent, false, 'Main thread validityChanged event did not cause component to fire its own event');
});
}); });

View File

@@ -364,7 +364,11 @@ export class InputBox extends Widget {
}; };
} }
if (!errorMsg) { if (errorMsg) {
this.inputElement.setAttribute('aria-invalid', 'true');
this.showMessage(errorMsg);
}
else if (this.inputElement.hasAttribute('aria-invalid')) {
this.inputElement.removeAttribute('aria-invalid'); this.inputElement.removeAttribute('aria-invalid');
this.hideMessage(); this.hideMessage();
} }