@iam_vishalkhare/chatter-box
v1.0.5
Published
ChatterBox is an angular component library planned to be utilized as chat or comment component needed for an angular application development.
Downloads
8
Maintainers
Readme
ChatterBox
ChatterBox is an angular component library planned to be utilized as chat or comment component needed for an angular application development.
Use Cases
One on one chat | Group Chat | Comment section ------ | ------ | ------ |One on one chat with a user or a chatbot - User will see his/her chat in the blue bubble| Group chat experience- User will see his/her chat in the blue background bubble. | Comment section component - User will see his/her comment in blue background bubble. | | | | |
How to Use?
- Import
ChatterBoxModule
in yourapp.module.ts
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { ChatterBoxModule } from '@iam_vishalkhare/chatter-box';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ChatterBoxModule //<-- add the module in imports
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
- Include
<vis-chatterBox>
component where this component is expected in your application.
<vis-chatterBox
[heading]=heading
[headerImage]=headerImage
[allComments]=allComments
[inputMaxLength]=inputMaxLength
[currentUserId]=currentUserId
[showErrorDiv]=showErrorDiv
[errorMsg]=errorMsg
[placeholderText]=placeholderText
(onKeyupEnter)=sendMessage($event)
(onKeyup)=onKeyUp(message)
>
</vis-chatterBox>
To brief the signatures of the components as below
| Name | Type | Optional? |Description |
|--|--|--|--|
|[heading]
| string
| No |A heading string to be displayed on the header of ChatterBox|
|[headerImage]
|string
|Yes|A URL to the image that should be displayed on the header along with heading
|
|[allComments]
|Array<CommentPayload>
|No|Array of all comment objects. Each object will be of type CommentPayload
. Definition of CommentPayload
is mentioned below.|
|[inputMaxLength]
|number
|No|Maximum length of input allowed in the textfield of ChatterBox.|
|[currentUserId]
|number
or string
|Yes|Any unique user Identifier of current/logged in user. This is used to show a user his/her own chats/comments in blue conversation bubble. All other chats/comments are shown in grey conversation bubbles.|
|[showErrorDiv]
|boolean
|Yes|Default - false
. Set True if an error needs to be shown in chatbox instead of chats. This can be used to show errors occurring while communicating with backend.|
|[errorMsg]
|string
|Yes|If there is an error, set your error message in this.|
|[placeholderText]
|string
|Yes|This text will be visible as placeholder in input field of ChatterBox. Not providing any placeholderText
will render no placeholder.|
|(onKeyupEnter
)|Callback function|No|This function will be called when return is pressed on keyboard after typing a input. Use this to create a CommentPayload
object and push it to allComments
so that it renders on the chatbox, then do whatever you want with it. E.g. Sending the message/comment to backend etc.|
|(onKeyup)
|Callback function|No|This function will be called on every keyup event of the text field.|
CommentPayload Interface
interface CommentPayload {
msgId: number;
userId?: number | string;
msg: string;
timestamp: string;
userName: string;
userImagePath?: string;
}
| Name | type | Optional | Description|
|--|--|--|--|
|msgId
|number
|No|Each message/comment should have a unique numeric value. |
|userId
|number
or string
|Yes|Each message can have a unique userId which can be either a number or a string. This is used to identify current user show that user his/her chat/comment in blue conversation bubble.|
|msg
|string
|No|Actual message to be displayed in conversation bubble.|
|timestamp
|string
|No|Timestamp to be displayed in conversation bubble.|
|userName
|string
|No|User name to be displayed in conversation bubble.|
|userImagePath
|string
|Yes|Path to user's image. If this is not provided then Image will contain first letter of User name. (See screenshots above)|
Sample implementation
- In
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { ChatterBoxModule } from '@iam_vishalkhare/chatter-box';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ChatterBoxModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
- In
app.component.html
or wherever the ChatterBox component is required.
<div style="height: 600px; width: 400px;">
<vis-chatterBox
[heading]=heading
[headerImage]=headerImage
[allComments]=allComments
[inputMaxLength]=inputMaxLength
[currentUserId]=currentUserId
[showErrorDiv]=showErrorDiv
[errorMsg]=errorMsg
[placeholderText]=placeholderText
(onKeyupEnter)=sendMessage($event)
(onKeyup)=onKeyUp(message)
>
</vis-chatterBox>
</div>
Note that <vis-chatterBox>
component is enclosed in a <div>
with some height and width. This is to demonstrate that <vis-chatterBox>
will take the height and width of it's parent <div>
- In
app.component.ts
import { Component } from '@angular/core';
import { CommentPayload } from '@iam_vishalkhare/chatter-box';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
heading = 'John Doe';
headerImage = '../assets/logo.png';
showErrorDiv: boolean;
errorMsg = 'This is an error';
inputMaxLength = 100;
placeholderText= 'Write a comment...!!!';
currentUserId = 8;
allComments: Array<CommentPayload> = [
{msgId: 4, userId: 9, msg: 'This is 2nd test comment', timestamp: '21st Sept 2019', userName: 'John Doe', userImagePath: '../assets/logo.png'},
{msgId: 3, userId: 8, msg: 'This is a test comment', timestamp: '21st Sept 2019', userName: 'Vishal Khare'},
{msgId: 5, msg: 'This is 3rd test comment', timestamp: '21st Sept 2019', userName: 'John Doe', userImagePath: '../assets/logo.png'},
{msgId: 4, userId: 9, msg: 'This is 2nd test comment', timestamp: '21st Sept 2019', userName: 'John Doe', userImagePath: '../assets/logo.png'},
];
sendMessage(msgPayload: string) {
// Constructing a desired object of type CommentPayload to be added to allComments
const payload = {
msgId: 6,
msg: msgPayload,
timestamp: '21st Sept 2019',
userName: 'Brown Fox'
};
this.allComments.push(payload);
}
onKeyUp(msgPayload: string) {
console.log(msgPayload);
}
}
Result of sample implementation
Give this component a try. Reach out to me at [email protected] in case of any questions/suggestions. Thank You...!!!