Exercício – Carregar e-mails de um usuário em lotes
Neste exercício, você estenderá o aplicativo para permitir que você carregue emails de um usuário em lotes de 10 itens.
Carregar emails em lotes de 10 itens
Comece atualizando a função getEmails()
para carregar emails em lotes de 10 itens. Se o próximo conjunto de emails a ser carregado tiver sido definido, ele será passado como o argumento da função.
No editor de código, abra o arquivo auth.js.
Atualize a assinatura da função
getEmails()
para aceitar um único argumentonextLink
:async function getEmails(nextLink) { // ... }
Se a
nextLink
tiver sido definida, a função deverá passá-la para o SDK para recuperar os dados. SenextLink
não tiver sido definida, a função deverá carregar o conjunto inicial de dados. Atualize a funçãogetEmails()
substituindo a instruçãoreturn
pela seguinte instruçãoif
:if (nextLink) { return await graphClient .api(nextLink) .get(); } else { return await graphClient .api('/me/messages') .select('subject,receivedDateTime') .orderby('receivedDateTime desc') .top(10) .get(); }
A função
getEmails()
deve ter a seguinte aparência:async function getEmails(nextLink) { ensureScope('mail.read'); if (nextLink) { return await graphClient .api(nextLink) .get(); } else { return await graphClient .api('/me/messages') .select('subject,receivedDateTime') .orderby('receivedDateTime desc') .top(10) .get(); } }
Estenda o modelo para permitir que os usuários carreguem mais emails
Você estendeu a função getEmails()
para carregar mais emails. A próxima etapa é mostrar um botão que permitirá que os usuários carreguem mais emails, se disponíveis.
No editor de código, abra o arquivo index.html.
Localize a linha
<ul id="emails"></ul>
e adicione o código a seguir imediatamente após ele para adicionar um botão que permita que os usuários carreguem mais emails.<div id="loadMoreContainer" style="display: none;"> <button onclick="displayEmail();">Load more</button> </div>
Adicionar mais detalhes
Com o aplicativo atualizado para permitir que os usuários carreguem mais emails, a etapa final é adicionar funcionalidade para lidar com o carregamento de mais emails.
No editor de código, abra o arquivo auth.js.
Antes da função
displayEmail()
, defina uma nova variável chamadanextLink
sem atribuir um valor a ela:var nextLink;
Na função
displayEmail()
, atualize a chamada para obter a funçãogetEmails()
para incluir onextLink
.var emails = await getEmails(nextLink);
Em seguida, depois de recuperar os dados, obtenha o valor da propriedade
@odata.nextLink
. Se definido, isso indicará que há mais dados disponíveis para os usuários mostrarem. Adicione o seguinte código imediatamente após a instruçãoif
na funçãodisplayEmail()
:nextLink = emails['@odata.nextLink'];
No final da função
displayEmail()
, depois de exibir os emails recuperados, role até o final da página para que o usuário possa ver imediatamente os emails recuperados.window.scrollTo({ top: emailsUl.scrollHeight, behavior: 'smooth' });
Por fim, verifique se
nextLink
retornou e, nesse caso, exiba o botão para carregar mais emails.Adicione o seguinte código ao final da função
displayEmail()
:if (nextLink) { document.getElementById('loadMoreContainer').style = 'display: block'; }
A função
displayEmail()
completa deve ter a seguinte aparência:var nextLink; async function displayEmail() { var emails = await getEmails(nextLink); if (!emails || emails.value.length < 1) { return; } nextLink = emails['@odata.nextLink']; document.getElementById('displayEmail').style = 'display: none'; var emailsUl = document.getElementById('emails'); emails.value.forEach(email => { var emailLi = document.createElement('li'); emailLi.innerText = `${email.subject} (${new Date(email.receivedDateTime).toLocaleString()})`; emailsUl.appendChild(emailLi); }); window.scrollTo({ top: emailsUl.scrollHeight, behavior: 'smooth' }); if (nextLink) { document.getElementById('loadMoreContainer').style = 'display: block'; } }
Execute seu aplicativo
Você estendeu seu aplicativo para mostrar os emails de um usuário usando Microsoft Graph em lotes de 10 itens e permitir que ele carregue mais emails. Vamos executar o aplicativo localmente.
Visualize o aplicativo da Web executando o seguinte comando no terminal.
npm start
Seu navegador deve estar apontando para
http://localhost:8080
.Selecione o botão Entrar com a Microsoft para entrar com sua conta do Microsoft 365.
Depois de entrar com sua conta, selecione o botão Mostrar email.
Você deverá ver uma lista dos últimos 10 emails do usuário exibidos no aplicativo.
Se houver mais de 10 emails em sua caixa de correio, você verá um botão que permite carregar as próximas 10 mensagens.
Pare o servidor Node.js selecionando Ctrl+C na janela do terminal.