टेक्स्ट इनपुट के लिए अपने-आप पूरे होने वाले सुझाव

टेक्स्ट इनपुट विजेट की मदद से, आपका ऐड-ऑन, उपयोगकर्ताओं के दिए गए टेक्स्ट को पढ़ सकता है और उस पर प्रतिक्रिया दे सकता है. इन विजेट को कॉन्फ़िगर किया जा सकता है, ताकि उपयोगकर्ताओं को इनपुट टेक्स्ट के लिए अपने-आप सुझाव मिल सकें.

आपको दिए गए सुझाव, आपकी उपलब्ध कराई गई स्ट्रिंग की स्टैटिक सूची से आ सकते हैं. इसके अलावा, कॉन्टेक्स्ट के हिसाब से सुझाव भी दिखाए जा सकते हैं. जैसे, वह टेक्स्ट जो उपयोगकर्ता ने विजेट में पहले ही टाइप किया हो.

सुझावों को कॉन्फ़िगर करना

टेक्स्ट इनपुट के लिए सुझाव कॉन्फ़िगर करने के लिए, आपको सिर्फ़ ये काम करने होंगे:

  • इसके हिसाब से सुझावों की सूची बनाएं:
    • स्टैटिक सूची बनाना और/या
    • कॉलबैक फ़ंक्शन की मदद से किसी कार्रवाई को तय करें. यह फ़ंक्शन कॉन्टेक्स्ट के हिसाब से उस सूची को डाइनैमिक तौर पर बनाता है.
  • टेक्स्ट इनपुट विजेट में सुझाव सूची और/या कार्रवाई अटैच करें.

अगर सुझावों और कार्रवाई, दोनों की स्टैटिक सूची दी जाती है, तो ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई), स्टैटिक सूची का इस्तेमाल तब तक करता है, जब तक उपयोगकर्ता वर्ण डालना शुरू नहीं करता. ऐसा तब तक होता है, जब कॉलबैक फ़ंक्शन का इस्तेमाल किया जाता है और स्टैटिक सूची को अनदेखा कर दिया जाता है.

स्टैटिक सुझाव

सुझावों की स्टैटिक सूची ऑफ़र करने के लिए, आपको सिर्फ़ ये काम करने होंगे:

  1. कोई Suggestions ऑब्जेक्ट बनाएं.
  2. addSuggestion() या addSuggestions() का इस्तेमाल करके, हर स्टैटिक सुझाव को जोड़ें.
  3. TextInput.setSuggestions() का इस्तेमाल करके, Suggestions ऑब्जेक्ट को विजेट से अटैच करें.

यूज़र इंटरफ़ेस (यूआई) में स्टैटिक सुझाव उसी क्रम में दिखाए जाते हैं जिस क्रम में उन्हें जोड़ा गया था. यूज़र इंटरफ़ेस (यूआई) अपने-आप केस-इनसेंसिटिव प्रीफ़िक्स को मैच करता है. साथ ही, जैसे ही उपयोगकर्ता विजेट में वर्ण टाइप करता है, सुझाव सूची को फ़िल्टर करता है.

सुझाव कार्रवाइयां

अगर स्टैटिक सुझाव सूची का इस्तेमाल नहीं किया जा रहा है, तो डाइनैमिक तौर पर सुझाव देने के लिए आपको एक कार्रवाई तय करनी होगी. ऐसा करने के लिए, आप ये कदम उठा सकते हैं:

  1. एक Action ऑब्जेक्ट बनाएं और उसे अपने तय किए गए कॉलबैक फ़ंक्शन से जोड़ें.
  2. विजेट के TextInput.setSuggestionsAction() फ़ंक्शन को कॉल करें और उसे Action ऑब्जेक्ट दें.
  3. सुझावों की सूची बनाने के लिए, कॉलबैक फ़ंक्शन को लागू करें और बिल्ट-इन SuggestionsResponse ऑब्जेक्ट दिखाएं.

जब उपयोगकर्ता टेक्स्ट इनपुट में कोई वर्ण टाइप करता है, तो यूज़र इंटरफ़ेस (यूआई) कॉलबैक फ़ंक्शन को कॉल करता है. हालांकि, ऐसा तब होता है, जब उपयोगकर्ता ने कुछ समय के लिए टाइप करना बंद किया हो. कॉलबैक फ़ंक्शन को एक इवेंट ऑब्जेक्ट मिलता है, जिसमें खुले कार्ड के विजेट के बारे में जानकारी होती है. ज़्यादा जानकारी के लिए, ऐक्शन इवेंट के ऑब्जेक्ट देखें.

कॉलबैक फ़ंक्शन को एक मान्य SuggestionsResponse ऑब्जेक्ट दिखाना चाहिए, जिसमें दिखाए जाने वाले सुझावों की सूची हो. यूज़र इंटरफ़ेस (यूआई) सुझावों को उसी क्रम में दिखाता है जिस क्रम में उन्हें जोड़ा जाता है. स्टैटिक सूचियों के उलट, यूज़र इंटरफ़ेस (यूआई) में, उपयोगकर्ता के इनपुट के आधार पर कॉलबैक के सुझावों को अपने-आप फ़िल्टर नहीं किया जाता. अगर आपको इस तरह की फ़िल्टर की ज़रूरत है, तो आपको इवेंट ऑब्जेक्ट से टेक्स्ट इनपुट वैल्यू को पढ़ना होगा. साथ ही, सूची बनाते समय अपने सुझावों को फ़िल्टर करना होगा.

उदाहरण

Google Workspace ऐड-ऑन के इस कोड स्निपेट में, दो अलग-अलग टेक्स्ट इनपुट विजेट पर सुझाव कॉन्फ़िगर करने का तरीका बताया गया है. पहले विजेट में स्टैटिक सूची है और दूसरे में कॉलबैक फ़ंक्शन का इस्तेमाल करके:

// 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!
 }

सुझाव और OnChangeAction()

टेक्स्ट इनपुट विजेट में setOnChangeAction() हैंडलर फ़ंक्शन तय किया जा सकता है, जो तब काम करता है, जब विजेट फ़ोकस खो देता है. अगर यह हैंडलर और सुझाव, दोनों एक ही टेक्स्ट इनपुट के लिए चालू हैं, तो यहां दिए गए नियम, टेक्स्ट इनपुट इंटरैक्शन के व्यवहार को तय करते हैं:

  1. किसी सुझाव को चुनने के बाद, setOnChangeAction() हैंडलर काम करता है.
  2. अगर उपयोगकर्ता चुने गए सुझाव में बदलाव किए बिना Enter दबाता है (या किसी अन्य तरीके से टेक्स्ट इनपुट पर फ़ोकस नहीं करता है), तो setOnChangeAction() फिर से ट्रिगर नहीं होता.
  3. अगर उपयोगकर्ता किसी सुझाव को चुनने के बाद, उसमें बदलाव करता है, तो setOnChangeAction() फिर से ट्रिगर होता है, ताकि वह सूची में दिए गए किसी भी सुझाव से मेल न खाए.
  4. अगर उपयोगकर्ता कोई सुझाव नहीं चुनता है, तो टेक्स्ट इनपुट के फ़ोकस न होने पर setOnChangeAction() ट्रिगर हो जाता है.