MOBILE-3814 calendar: Select custom when item over input is clicked

main
Pau Ferrer Ocaña 2022-03-22 13:22:42 +01:00
parent 82c8186007
commit a9d14f4fc3
4 changed files with 18 additions and 23 deletions

View File

@ -34,7 +34,7 @@
</ion-label> </ion-label>
<ion-radio slot="end" value="custom"></ion-radio> <ion-radio slot="end" value="custom"></ion-radio>
</ion-item> </ion-item>
<ion-item class="ion-text-wrap"> <ion-item class="ion-text-wrap" (click)="customInputClicked($event)">
<ion-label></ion-label> <ion-label></ion-label>
<div class="flex-row"> <div class="flex-row">

View File

@ -15,7 +15,6 @@
import { AddonCalendar, AddonCalendarReminderUnits, AddonCalendarValueAndUnit } from '@addons/calendar/services/calendar'; import { AddonCalendar, AddonCalendarReminderUnits, AddonCalendarValueAndUnit } from '@addons/calendar/services/calendar';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { CoreDomUtils } from '@services/utils/dom'; import { CoreDomUtils } from '@services/utils/dom';
import { CoreUtils } from '@services/utils/utils';
import { ModalController } from '@singletons'; import { ModalController } from '@singletons';
/** /**
@ -166,11 +165,9 @@ export class AddonCalendarReminderTimeModalComponent implements OnInit {
this.radioValue = 'custom'; this.radioValue = 'custom';
await CoreUtils.nextTick(); const target = <HTMLInputElement | HTMLElement | null> ev.target;
if (target) {
const target = <HTMLInputElement | Element | null> ev.target; CoreDomUtils.focusElement(target);
if (target && 'focus' in target) {
target.focus();
} }
} }

View File

@ -49,19 +49,7 @@ export class CoreAutoFocusDirective implements AfterViewInit {
await CoreDom.waitToBeInDOM(this.element); await CoreDom.waitToBeInDOM(this.element);
let focusElement = this.element; CoreDomUtils.focusElement(this.element);
if ('getInputElement' in focusElement) {
// If it's an Ionic element get the right input to use.
focusElement.componentOnReady && await focusElement.componentOnReady();
focusElement = await focusElement.getInputElement();
}
if (!focusElement) {
return;
}
CoreDomUtils.focusElement(focusElement);
} }

View File

@ -336,12 +336,22 @@ export class CoreDomUtilsProvider {
/** /**
* Focus an element and open keyboard. * Focus an element and open keyboard.
* *
* @param focusElement HTML element to focus. * @param element HTML element to focus.
*/ */
async focusElement(focusElement: HTMLElement): Promise<void> { async focusElement(
element: HTMLIonInputElement | HTMLIonTextareaElement | HTMLIonSearchbarElement | HTMLElement,
): Promise<void> {
let retries = 10; let retries = 10;
if (!focusElement.focus) { let focusElement = element;
if ('getInputElement' in focusElement) {
// If it's an Ionic element get the right input to use.
focusElement.componentOnReady && await focusElement.componentOnReady();
focusElement = await focusElement.getInputElement();
}
if (!focusElement || !focusElement.focus) {
throw new CoreError('Element to focus cannot be focused'); throw new CoreError('Element to focus cannot be focused');
} }