1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-25 07:47:55 +01:00

72 lines
2.0 KiB
JavaScript
Raw Normal View History

import {TextField as MWCTextField} from '@material/mwc-textfield';
import {waitUntil} from 'async-wait-until';
import classnames from 'classnames';
import {
html,
type TemplateResult
} from 'lit';
// noinspection JSCheckFunctionSignatures
export default class TextField extends MWCTextField {
async connectedCallback() {
super.connectedCallback();
await waitUntil(() => this.shadowRoot.querySelectorAll('slot[name^=icon]').length > 0);
const slots = this.shadowRoot.querySelectorAll('slot[name^=icon]');
for (const slot: HTMLSlotElement of slots) {
if (slot.assignedNodes().length > 0) {
this[slot.name] = ' ';
}
}
}
get nativeValidationMessage() {
return this.formElement.validationMessage;
}
/**
* Fix mwc-textfield when handling validation message
* It gets native input validation message when no default validationMessage is set.
*
* Related issue:
* https://github.com/material-components/material-components-web-components/issues/971
*
*/
firstUpdated() {
if (this.validationMessage) {
this._initialValidationMessage = this.validationMessage;
}
super.firstUpdated();
}
reportValidity() {
const isValid = super.reportValidity();
// Note(cg): override validationMessage only if no initial message set.
if (!this._initialValidationMessage && !isValid) {
this.validationMessage = this.nativeValidationMessage;
}
return isValid;
}
renderLeadingIcon() {
return this.renderIcon();
}
renderTrailingIcon() {
return this.renderIcon(true);
}
renderIcon(isTrailingIcon: boolean = false): TemplateResult {
const classes = {
'mdc-text-field__icon--leading': !isTrailingIcon,
'mdc-text-field__icon--trailing': isTrailingIcon
};
return html`
<span class="mdc-text-field__icon ${classnames(classes)}">
<slot name="icon${isTrailingIcon ? 'Trailing' : ''}"></slot>
</span>`;
}
}
window.customElements.define('text-field', TextField);