Fix/reuse UUID missing parent callback disabled property (#2090)

* refactor: reuse uuid function from the core

* fix: invoke parent class callback

* fix: do not run disabled property reflection unless it was part of the changeset
This commit is contained in:
Sergey Ilinsky 2023-11-27 14:07:18 +01:00 committed by GitHub
parent 322b06521c
commit bf782223a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 25 additions and 9 deletions

View file

@ -0,0 +1,5 @@
---
'@lion/ui': patch
---
do not run disabled property reflection unless it was part of the changeset in LionSwitchButton

View file

@ -0,0 +1,5 @@
---
'@lion/ui': patch
---
reuse uuid function from the core in LionButton and LionInputDatepicker

View file

@ -0,0 +1,5 @@
---
'@lion/ui': patch
---
invoke parent class updated callback in LionCollapsible, LionDrawer and LionSwitchButton

View file

@ -1,5 +1,5 @@
import { html, LitElement, css } from 'lit'; import { html, LitElement, css } from 'lit';
import { browserDetection, DisabledWithTabIndexMixin } from '@lion/ui/core.js'; import { browserDetection, DisabledWithTabIndexMixin, uuid } from '@lion/ui/core.js';
const isKeyboardClickEvent = (/** @type {KeyboardEvent} */ e) => e.key === ' ' || e.key === 'Enter'; const isKeyboardClickEvent = (/** @type {KeyboardEvent} */ e) => e.key === ' ' || e.key === 'Enter';
const isSpaceKeyboardClickEvent = (/** @type {KeyboardEvent} */ e) => e.key === ' '; const isSpaceKeyboardClickEvent = (/** @type {KeyboardEvent} */ e) => e.key === ' ';
@ -124,7 +124,7 @@ export class LionButton extends DisabledWithTabIndexMixin(LitElement) {
this.type = 'button'; this.type = 'button';
this.active = false; this.active = false;
this._buttonId = `button-${Math.random().toString(36).substr(2, 10)}`; this._buttonId = uuid('button');
if (browserDetection.isIE11) { if (browserDetection.isIE11) {
this.updateComplete.then(() => { this.updateComplete.then(() => {
if (!this.hasAttribute('aria-labelledby')) { if (!this.hasAttribute('aria-labelledby')) {

View file

@ -68,6 +68,7 @@ export class LionCollapsible extends LitElement {
* @param {import('lit').PropertyValues } changedProperties * @param {import('lit').PropertyValues } changedProperties
*/ */
updated(changedProperties) { updated(changedProperties) {
super.updated(changedProperties);
if (changedProperties.has('opened')) { if (changedProperties.has('opened')) {
this.__openedChanged(); this.__openedChanged();
} }

View file

@ -53,6 +53,7 @@ export class LionDrawer extends LionCollapsible {
* @param {import('lit').PropertyValues } changedProperties * @param {import('lit').PropertyValues } changedProperties
*/ */
updated(changedProperties) { updated(changedProperties) {
super.updated(changedProperties);
if (changedProperties.has('opened')) { if (changedProperties.has('opened')) {
this._openedChanged(); this._openedChanged();
} }

View file

@ -1,5 +1,6 @@
/* eslint-disable import/no-extraneous-dependencies */ /* eslint-disable import/no-extraneous-dependencies */
import { LionCalendar } from '@lion/ui/calendar.js'; import { LionCalendar } from '@lion/ui/calendar.js';
import { uuid } from '@lion/ui/core.js';
import { ScopedElementsMixin } from '@open-wc/scoped-elements'; import { ScopedElementsMixin } from '@open-wc/scoped-elements';
import { html, css } from 'lit'; import { html, css } from 'lit';
import { ifDefined } from 'lit/directives/if-defined.js'; import { ifDefined } from 'lit/directives/if-defined.js';
@ -149,7 +150,7 @@ export class LionInputDatepicker extends ScopedElementsMixin(
constructor() { constructor() {
super(); super();
/** @private */ /** @private */
this.__invokerId = this.__createUniqueIdForA11y(); this.__invokerId = uuid(this.localName);
/** @protected */ /** @protected */
this._calendarInvokerSlot = 'suffix'; this._calendarInvokerSlot = 'suffix';
@ -169,11 +170,6 @@ export class LionInputDatepicker extends ScopedElementsMixin(
this._onCalendarUserSelectedChanged = this._onCalendarUserSelectedChanged.bind(this); this._onCalendarUserSelectedChanged = this._onCalendarUserSelectedChanged.bind(this);
} }
/** @private */
__createUniqueIdForA11y() {
return `${this.localName}-${Math.random().toString(36).substr(2, 10)}`;
}
/** /**
* @param {string} [name] * @param {string} [name]
* @param {unknown} [oldValue] * @param {unknown} [oldValue]

View file

@ -100,8 +100,10 @@ export class LionSwitch extends ScopedElementsMixin(ChoiceInputMixin(LionField))
/** @param {import('lit').PropertyValues } changedProperties */ /** @param {import('lit').PropertyValues } changedProperties */
updated(changedProperties) { updated(changedProperties) {
super.updated(changedProperties); super.updated(changedProperties);
if (changedProperties.has('disabled')) {
this._syncButtonSwitch(); this._syncButtonSwitch();
} }
}
/** /**
* Override this function from ChoiceInputMixin. * Override this function from ChoiceInputMixin.

View file

@ -142,6 +142,7 @@ export class LionSwitchButton extends DisabledWithTabIndexMixin(LitElement) {
/** @param {import('lit').PropertyValues } changedProperties */ /** @param {import('lit').PropertyValues } changedProperties */
updated(changedProperties) { updated(changedProperties) {
super.updated(changedProperties);
if (changedProperties.has('disabled')) { if (changedProperties.has('disabled')) {
this.setAttribute('aria-disabled', `${this.disabled}`); // create mixin if we need it in more places this.setAttribute('aria-disabled', `${this.disabled}`); // create mixin if we need it in more places
} }