Sugerencias de autocompletar para las entradas de texto

Widget de entrada de texto le permite a tu complemento leer el texto que proporcionan los usuarios y reaccionar a él. Puedes configurar estos widgets para brindar a los usuarios sugerencias automáticas para texto de entrada.

Las sugerencias proporcionadas pueden provenir de una lista estática de cadenas que proporciones. Como alternativa, puedes crear las sugerencias a partir de contexto, como el texto el usuario ya escribió en el widget.

Configura sugerencias

Configurar sugerencias para una entrada de texto solo requiere que hagas lo siguiente: lo siguiente:

  • Crea una lista de sugerencias con las siguientes opciones:
    • Crear una lista estática
    • Cómo definir una acción con una función de devolución de llamada que compila esa lista dinámicamente a partir del contexto.
  • Adjunta la acción o lista de sugerencias al widget de entrada de texto.

Si proporcionas una lista estática de sugerencias y una acción, el la IU de la aplicación usa la lista estática hasta que el usuario comienza a ingresar caracteres Luego, se usa 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:

  1. Crea un Suggestions. .
  2. Agregar cada sugerencia estática mediante addSuggestion() o addSuggestions().
  3. Adjunta el Suggestions objeto al widget con TextInput.setSuggestions().

La IU muestra sugerencias estáticas en el orden en que se agregaron. La IU también busca automáticamente coincidencias de prefijos que no distinguen mayúsculas de minúsculas y filtra de sugerencias a medida que el usuario escribe caracteres en el widget.

Acciones de sugerencia

Si no usas una lista de sugerencias estáticas, debes definir una acción para crear sugerencias de forma dinámica. Para hacerlo, debes seguir estos pasos:

  1. Crea un objeto Action. y asociarla con una función de devolución de llamada que definas.
  2. Llama al elemento TextInput.setSuggestionsAction() del widget. y proporciona el objeto Action .
  3. Implementa la función de devolución de llamada para crear la lista de sugerencias y mostrar un SuggestionsResponse compilado .

La IU llama a la función de devolución de llamada cada vez que el usuario escribe un carácter en el entrada de texto, pero solo después de que el usuario haya dejado de escribir por un momento. El recibe un objeto de evento que contiene información sobre el abrir los widgets de la tarjeta. Consulta Objetos de eventos de acción para conocer los detalles.

La función de devolución de llamada debe mostrar un valor SuggestionsResponse objeto que contiene la lista de sugerencias para mostrar. La IU muestra en el orden en que se agregan. A diferencia de las listas estáticas, No filtrar de forma automática las sugerencias de devolución de llamada en función del usuario entrada. Si quieres usar ese tipo de filtrado, debes leer el valor de entrada de texto. del objeto de evento y filtrar las sugerencias a medida que creas la lista.

Ejemplo

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 segundo usando 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 setOnChangeAction() función del controlador definida que se ejecuta cuando el widget pierde el foco. Si este controlador y las sugerencias están habilitados para la misma entrada de texto, el Las siguientes reglas definen el comportamiento de interacción de la entrada de texto:

  1. El controlador setOnChangeAction() se ejecuta después de que se selecciona una sugerencia.
  2. Si el usuario presiona Intro (o hace que la entrada de texto pierda el foco) sin modificar la sugerencia seleccionada, setOnChangeAction() no se activará de nuevo.
  3. 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.
  4. Si el usuario no selecciona una sugerencia, se activa setOnChangeAction(). cuando la entrada de texto pierde el foco.