El widget de entrada de texto permite que tu complemento lea y reaccione al texto que proporcionan los usuarios. Puedes configurar estos widgets a fin de proporcionar a los usuarios sugerencias automáticas para el texto de entrada.
Las sugerencias que se proporcionan pueden provenir de una lista estática de strings que usted proporciona. Como alternativa, puedes compilar las sugerencias a partir del contexto, como el texto que el usuario ya escribió en el widget.
Configura las sugerencias
La configuración de sugerencias para una entrada de texto solo requiere que hagas lo siguiente:
- Crea una lista de sugerencias de la siguiente manera:
- Crear una lista estática
- Definir una acción con una función de devolución de llamada que compila esa lista de forma dinámica a partir del contexto
- Adjunta la lista de sugerencias o la acción al widget de entrada de texto.
Si proporcionas una lista estática de sugerencias y una acción, la IU de la aplicación utiliza la lista estática hasta que el usuario comienza a ingresar caracteres. Luego, se utiliza la función de devolución de llamada y se ignora la lista estática.
Sugerencias estáticas
Para ofrecer una lista estática de sugerencias, solo debes hacer lo siguiente:
- Crea un objeto
Suggestions
. - Agrega cada sugerencia estática mediante
addSuggestion()
oaddSuggestions()
. - Adjunta el objeto
Suggestions
al widget conTextInput.setSuggestions()
.
La IU muestra sugerencias estáticas en el orden en que se agregaron. La IU también realiza automáticamente la coincidencia de prefijos sin distinción entre mayúsculas y minúsculas, y filtra la lista de sugerencias a medida que el usuario escribe los caracteres en el widget.
Acciones de sugerencia
Si no usas una lista de sugerencias estáticas, debes definir una acción para compilar tus sugerencias de manera dinámica. Para hacerlo, debes seguir estos pasos:
- Crea un objeto
Action
y asócialo con una función de devolución de llamada que definas. - Llama a la función
TextInput.setSuggestionsAction()
del widget y proporciónale el objetoAction
. - Implementa la función de devolución de llamada para compilar la lista de sugerencias y mostrar un objeto
SuggestionsResponse
compilado.
La IU llama a la función de devolución de llamada cada vez que el usuario escribe un carácter en la entrada de texto, pero solo después de que deja de escribir un momento. La función de devolución de llamada recibe un objeto de evento que contiene información sobre los widgets de la tarjeta abierta. Consulta Objetos de eventos de acción para obtener más información.
La función de devolución de llamada debe mostrar un objeto SuggestionsResponse
válido que contenga la lista de sugerencias para mostrar. La IU muestra sugerencias en el orden en que se agregan. A diferencia de las listas estáticas, la IU no realiza ningún filtro automático de sugerencias de devolución de llamada en función de la entrada del usuario. Si deseas tener ese tipo de filtrado, debes leer el valor de entrada de texto del objeto del evento y filtrar tus sugerencias a medida que construyes la lista.
Ejemplo
En el siguiente fragmento de código del complemento de Google Workspace, se muestra cómo configurar sugerencias en dos widgets de entrada de texto diferentes: el primero con una lista estática y el segundo mediante una función de devolución de llamada:
// Create an input with a static suggestion list.
var textInput1 = CardService.newTextInput()
.setFieldName('colorInput')
.setTitle('Color choice')
.setSuggestions(CardService.newSuggestions()
.addSuggestion('Red')
.addSuggestion('Yellow')
.addSuggestions(['Blue', 'Black', 'Green']));
// Create an input with a dynamic suggestion list.
var action = CardService.newAction()
.setFunctionName('refreshSuggestions');
var textInput2 = CardService.newTextInput()
.setFieldName('emailInput')
.setTitle('Email')
.setSuggestionsAction(action);
// ...
/**
* Build and return a suggestion response. In this case, the suggestions
* are a list of emails taken from the To: and CC: lists of the open
* message in Gmail, filtered by the text that the user has already
* entered. This method assumes the Google Workspace
* add-on extends Gmail; the add-on only calls this method for cards
* displayed when the user has entered a message context.
*
* @param {Object} e the event object containing data associated with
* this text input widget.
* @return {SuggestionsResponse}
*/
function refreshSuggestions(e) {
// Activate temporary Gmail scopes, in this case so that the
// open message metadata can be read.
var accessToken = e.gmail.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
var userInput = e && e.formInput['emailInput'].toLowerCase();
var messageId = e.gmail.messageId;
var message = GmailApp.getMessageById(messageId);
// Combine the comma-separated returned by these methods.
var addresses = message.getTo() + ',' + message.getCc();
// Filter the address list to those containing the text the user
// has already entered.
var suggestionList = [];
addresses.split(',').forEach(function(email) {
if (email.toLowerCase().indexOf(userInput) !== -1) {
suggestionList.push(email);
}
});
suggestionList.sort();
return CardService.newSuggestionsResponseBuilder()
.setSuggestions(CardService.newSuggestions()
.addSuggestions(suggestionList))
.build(); // Don't forget to build the response!
}
Sugerencias y OnChangeAction()
Los widgets de entrada de texto pueden tener una función de controlador setOnChangeAction()
definida que se ejecuta cada vez que el widget pierde el foco.
Si el controlador y las sugerencias están habilitados para la misma entrada de texto, las siguientes reglas definen el comportamiento de interacción de entrada de texto:
- El controlador
setOnChangeAction()
se ejecuta después de que se selecciona una sugerencia. - Si el usuario presiona Intro (o hace que la entrada de texto pierda el foco) sin modificar la sugerencia seleccionada,
setOnChangeAction()
no se vuelve a activar. setOnChangeAction()
se vuelve a activar si el usuario, después de seleccionar una sugerencia, la edita para que ya no coincida con ninguna de las sugerencias de la lista.- Si el usuario no selecciona una sugerencia,
setOnChangeAction()
se activa cuando la entrada de texto pierde el foco.