Skip to content

Commit 23c4197

Browse files
Loredana SpataruLoredana Spataru
Loredana Spataru
authored and
Loredana Spataru
committed
fix: remove changes
1 parent 9eb5056 commit 23c4197

File tree

1 file changed

+104
-8
lines changed

1 file changed

+104
-8
lines changed

packages/textfield/src/Textfield.ts

+104-8
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,17 @@ export class TextfieldBase extends ManageHelpText(
204204
return this.inputElement;
205205
}
206206

207+
private _eventHandlers = {
208+
input: this.handleInput.bind(this),
209+
change: this.handleChange.bind(this),
210+
focus: this.onFocus.bind(this),
211+
blur: this.onBlur.bind(this),
212+
};
213+
214+
protected _firstUpdateAfterConnected = false;
215+
216+
protected abortController?: AbortController;
217+
207218
/**
208219
* Sets the start and end positions of the current selection.
209220
*
@@ -316,10 +327,6 @@ export class TextfieldBase extends ManageHelpText(
316327
pattern=${ifDefined(this.pattern)}
317328
placeholder=${this.placeholder}
318329
.value=${this.displayValue}
319-
@change=${this.handleChange}
320-
@input=${this.handleInput}
321-
@focus=${this.onFocus}
322-
@blur=${this.onBlur}
323330
?disabled=${this.disabled}
324331
?required=${this.required}
325332
?readonly=${this.readonly}
@@ -351,10 +358,6 @@ export class TextfieldBase extends ManageHelpText(
351358
pattern=${ifDefined(this.pattern)}
352359
placeholder=${this.placeholder}
353360
.value=${live(this.displayValue)}
354-
@change=${this.handleChange}
355-
@input=${this.handleInput}
356-
@focus=${this.onFocus}
357-
@blur=${this.onBlur}
358361
?disabled=${this.disabled}
359362
?required=${this.required}
360363
?readonly=${this.readonly}
@@ -389,6 +392,54 @@ export class TextfieldBase extends ManageHelpText(
389392
super.update(changedProperties);
390393
}
391394

395+
public override connectedCallback(): void {
396+
super.connectedCallback();
397+
this._firstUpdateAfterConnected = true;
398+
this.requestUpdate();
399+
}
400+
401+
public override disconnectedCallback(): void {
402+
// Cleanup all event listeners and and remove input element from DOM
403+
this.abortController?.abort();
404+
super.disconnectedCallback();
405+
}
406+
407+
protected firstUpdateAfterConnected(): void {
408+
this.abortController = new AbortController();
409+
const { signal } = this.abortController;
410+
411+
this.inputElement.addEventListener(
412+
'change',
413+
this._eventHandlers['change'],
414+
{ signal }
415+
);
416+
this.inputElement.addEventListener(
417+
'input',
418+
this._eventHandlers['input'],
419+
{ signal }
420+
);
421+
this.inputElement.addEventListener(
422+
'focus',
423+
this._eventHandlers['focus'],
424+
{ signal }
425+
);
426+
this.inputElement.addEventListener(
427+
'blur',
428+
this._eventHandlers['blur'] as EventListener,
429+
{ signal }
430+
);
431+
}
432+
433+
protected override updated(changedProperties: PropertyValues): void {
434+
super.updated(changedProperties);
435+
// Adding this here instead of firstUpdated because we want to make sure
436+
// this is called again on the first update after a previous disconnect
437+
if (this._firstUpdateAfterConnected) {
438+
this._firstUpdateAfterConnected = false;
439+
this.firstUpdateAfterConnected();
440+
}
441+
}
442+
392443
public checkValidity(): boolean {
393444
let validity = this.inputElement.checkValidity();
394445
if (this.required || (this.value && this.pattern)) {
@@ -413,6 +464,9 @@ export class TextfieldBase extends ManageHelpText(
413464
* @slot negative-help-text - negative help text to associate to your form element when `invalid`
414465
*/
415466
export class Textfield extends TextfieldBase {
467+
@query('#form')
468+
public form!: HTMLFormElement;
469+
416470
@property({ type: String })
417471
public override set value(value: string) {
418472
if (value === this.value) {
@@ -428,4 +482,46 @@ export class Textfield extends TextfieldBase {
428482
}
429483

430484
protected override _value = '';
485+
486+
private handleSubmit(event: Event): void {
487+
event.preventDefault();
488+
this.dispatchEvent(
489+
new Event('submit', {
490+
cancelable: true,
491+
bubbles: true,
492+
})
493+
);
494+
}
495+
496+
protected override renderField(): TemplateResult {
497+
return html`
498+
<form id="form">${super.renderField()}</form>
499+
`;
500+
}
501+
502+
public override connectedCallback(): void {
503+
super.connectedCallback();
504+
this._firstUpdateAfterConnected = true;
505+
this.requestUpdate();
506+
}
507+
508+
public override disconnectedCallback(): void {
509+
// Cleanup form event listener and remove form element from DOM
510+
this.form.removeEventListener('submit', this.handleSubmit.bind(this));
511+
this.form.remove();
512+
super.disconnectedCallback();
513+
}
514+
515+
protected override firstUpdateAfterConnected(): void {
516+
super.firstUpdateAfterConnected();
517+
this.form.addEventListener('submit', this.handleSubmit.bind(this));
518+
}
519+
520+
protected override updated(changes: PropertyValues<this>): void {
521+
super.updated(changes);
522+
if (this._firstUpdateAfterConnected) {
523+
this._firstUpdateAfterConnected = false;
524+
this.firstUpdateAfterConnected();
525+
}
526+
}
431527
}

0 commit comments

Comments
 (0)