Chat service.
Bestudeer in de afbeelding de velden die je dadelijk in de interface gaat vermelden.
De interface bevat naast de ingegeven tekst chatMessage ook wat informatie over de gebruiker
zelf. Je hebt minstens zijn naam userName, zijn foto userPhoto en zijn userId
nodig. Deze informatie kan je makkelijk uit de authService filteren. De chat sorteren, doe
je met een timestamp. De timestamp laat je dynamisch op de server genereren.
Als je Firestore op voorhand een unieke documentnaam (of sleutel) chatKey laat genereren, dan
kan je de sleutel eveneens mee in de interface opnemen.
Interface aanmaken.
- Maak in de map chat de chatMessage-class aan.
$ ng g cl interfaces/chatMessage - Wijzig de code op src/app/interfaces/chat-message.ts:
Chatbox service aanmaken.
- Maak in de map services de chat-service aan en importeer de service in chat.module.ts.
$ ng g s services/chat - Wijzig de code op src/app/services/chat.service.ts:
- De constructor.
Injecteer AngularFirestore en AuthService in de constructor.
Binnen de constructor leg je eerst een referentie naar chatMessage. De eerste parameter verwijst naar de collectie (chatbox). Met de tweede, optionele, parameter kan je de selectie filteren. Hier wordt de collectie aflopend op datum gesorteerd (timestamp) en vervolgens haal je enkel de laatste 20 (variabele limit) berichten op. (Zie AngularFire2 Query Options..)
Door chatCollection met de methode valueChanges() uit te breiden, krijg je een observable stream met daarin alle data van de 20 meest recente berichten. Deze stream is aan de variabele chatMessages$ gekoppeld. Het voordeel van een stream is dat elke wijziging in de data ook dadelijk naar alle verbonden clients wordt doorgegeven. - addMessage(msg)
Laat Firestore een timestamp en een unieke documentnaam charKey berekenen en bewaar dit document in de collectie. Ga vervolgens naar deleteOldMessages() om de overbodige berichten te wissen. - deleteMessage(msg)
De parameter msg bevat een object met alle data (chatKey, chatMessage, timestamp, userId, ...) van één chatbericht. Een gebruiker kan enkel zijn eigen berichten wissen. Voor je het bericht wist, controleer je eerst of hij ook daadwerkelijk de eigenaar van het bericht is. - updatMessage(msg)
Een gebruiker kan enkel zijn eigen berichten updaten. - deleteOldMessages()
Telkens je een bericht toevoegt, ga je meteen de oudste berichten uit de collectie wissen.
Omdat je maar 20 (zie limit) berichten toont, heeft het weinig zin om alle berichten op de server te bewaren. Deze methode zorgt ervoor dat enkel de 20 recentste berichten in de collectie overblijven.