onLoadPreviousChatMessages: async()

in packages/chat-component-bindings/src/handlers/createHandlers.ts [164:202]


      onLoadPreviousChatMessages: async (messagesToLoad: number) => {
        if (messageIterator === undefined) {
          // Lazy definition so that errors in the method call are reported correctly.
          // Also allows recovery via retries in case of transient errors.
          messageIterator = chatThreadClient.listMessages({ maxPageSize: 50 });
        }
        if (readReceiptIterator === undefined) {
          readReceiptIterator = chatThreadClient.listReadReceipts();
        }
        // get the earliest message time
        let remainingMessagesToGet = messagesToLoad;
        let isAllChatMessagesLoaded = false;
        let earliestTime = Number.MAX_SAFE_INTEGER;
        while (remainingMessagesToGet >= 1) {
          const message = await messageIterator.next();
          if (message?.value?.id) {
            if (parseInt(message.value.id) < earliestTime) {
              earliestTime = parseInt(message.value.id);
            }
          }

          if (message.value?.type && message.value.type === 'text') {
            remainingMessagesToGet--;
          }

          // We have traversed all messages in this thread
          if (message.done) {
            isAllChatMessagesLoaded = true;
            break;
          }
        }
        // keep fetching read receipts until read receipt time < earlist message time
        let readReceipt = await readReceiptIterator.next();
        while (!readReceipt.done && parseInt(readReceipt?.value?.chatMessageId) >= earliestTime) {
          readReceipt = await readReceiptIterator.next();
        }

        return isAllChatMessagesLoaded;
      }