Product
Socket Now Supports uv.lock Files
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
@prk/react-web-chat
Advanced tools
react-web-chat
is an instant messaging UI built with React.
Simply install it with your favorite package manager:
npm install --save-dev react-web-chat
yarn add react-web-chat
The stand-alone version of the module will render to a supplied dom element. It accepts the following parameters:
Argument | Description | Required | Type |
---|---|---|---|
url | The url of your chat server | yes | String |
element | The element react-web-chat should render to | yes | Element |
theme | A custom theme | no | Object |
client | A custom client | no | Object |
typingStatus | Configuration options for the typing status indicator. Note! This delay will be a compounded value as per all the settings you provide. | no | Object |
network | Configuration options for network communication of the default Feersum Client (NOTE! Required if using the default client, channel_id field must also be specified else the Feersum Client connection will fail! See below example.) | no | Object |
toggleComponent | Provide any element to toggle the chat view. This can be used in cases where the chat should be minimised | no | Element |
Communication with the module is handled via custom events described here.
new ReactWebChat({
url: 'http://localhost:8000',
element: myChatElement,
typingStatus: {
active: true || false, // Enable/disable typing status indicator (default = true)
baseDelay: 500, // How many ms to show the indicator for (default = 750)
variance: 250, // How many ms to vary the delay by (default = 250)
letterDelay: 30, // How many ms to add for each letter in a message (default = 20)
minDelay: 200, // The minimum delay allowed. (default = 200)
maxDelay: 3000 // The maximum delay allowed. (default = 3000)
},
network: {
channel_id: 'f8472758-f804-4a7e-a225-5e303e121099', // The required channel_id for the default feersum client.
address: 'a6424358-g73g-7h8d-92m8-6s890g5892n07', // An optional address to specify.
startNew: true, // Specify if the chat is a new instance.
retransmissionTimeout: 500, // How many ms to wait between network request retries compounded by the amount of attempts already past.
retransmissionTimeoutMax: 1000, // The maximum compounded wait in ms between network connection requests.
retransmissionAttempts: 10, // Retry limit
eventNamespace: "rwc" // Custom even namespace
}
}
});
import ReactWebChat from 'react-web-chat';
let myChatElement = document.getElementByID('my-chat-element');
const reactWebChat = new ReactWebChat({
url: 'http://localhost:8000',
element: myChatElement
});
var ReactWebChat = require('react-web-chat').default;
var myChatElement = document.getElementByID('my-chat-element');
var reactWebChat = new ReactWebChat({
url: 'http://localhost:8000',
element: myChatElement
});
react-web-chat
is also available as a UMD module. Simply load the module and instantiate a new instance as described in the example below.
NOTE: react
and react-dom
are peer dependencies so make sure they are loaded too
<html>
<head>
<link rel="stylesheet" href="https://unpkg.com/react-web-chat/umd/main.css"/>
<script crossorigin src="https://unpkg.com/react/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@prk/react-web-chat/umd/@prk/react-web-chat.min.js"></script>
</head>
<body>
<div id="my-chat-element">
<script>
var myChatElement = document.getElementById('my-chat-element');
var reactWebChat = new ReactWebChat({
url: "https://dev.feersum.io/chat_sockjs",
element: myChatElement,
network: {
channel_id: '3998e8a9-b329-4de9-a03c-040cc0348e42'
}
});
</script>
</body>
</html>
The exported ReactWebChatComponent
can be used within an existing react application.
It accepts the following parameters:
Argument | Description | Required | Type |
---|---|---|---|
url | The url of your chat server | yes | String |
theme | A custom theme | no | Object |
client | A custom client | no | Object |
import { ReactWebChatComponent } from 'react-web-chat';
const MyComponent = props => (
<div>
<ReactWebChatComponent url="http://localhost:8080" />
</div>
);
Communication with the react-web-chat
module is handled via a series of custom events.
Custom react-web-chat
events are namespaced using the rwc-
prefix.
Any dispatched redux action will fire a custom event using the following type:
rwc-ACTION_TYPE
window.addEventListener('rwc-MESSAGE_RECEIVE', function(data) {
// do something with data
});
The data
parameter object adheres to the CustomEvent specification:
https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent
A full list of actions to listen for:
Note: event namespaces can be configured by passing in the following configuration to the constructor:
new ReactWebChat({ /* ... */ network: { eventNamespace: "your-custom-namespace" } }
This will result in the following event type:
your-custom-namespace-ACTION_TYPE
Dispatching an event follows the same namespaced convention as described above.
However not all redux actions can be dispatched via custom events.
Currently only the MESSAGE_SEND
action type is supported.
More action types may be supported in future releases if justifiable use cases can be demonstrated.
function sendRWCMessage() {
var rwcEvent = window.CustomEvent('rwc-MESSAGE_SEND', {
detail: {
payload: message
}
});
window.dispatchEvent(rwcEvent);
}
var message = {
type: 'message',
layout: 'plain',
pages: [
{
text: 'Hello world'
}
]
};
sendRWCMessage(message);
react-web-chat
allows you to inject custom react components for specific parts of the UI.
Any components not specified in the custom theme object will use the default theme's components.
The following components can be overridden:
Please consult the API documentation as a guide to help you develop custom components for your themes.
import { ReactWebChatComponent } from 'react-web-chat';
// your custom theme components
import React from 'react';
import Avatar from './customTheme/Avatar';
import Button from './customTheme/Button';
import Input from './customTheme/Input';
const MyComponent = props => (
<div>
<ReactWebChatComponent
url="http://localhost:8080"
theme={{
AvatarComponent: Avatar,
ButtonComponent: Button,
InputComponent: Input
}}
/>
</div>
);
react-web-chat
supports custom network clients to manage network communication with your server.
Network clients have the following responsibilities:
Currently the only available client is rwc-feersum-client
.
It's also the default client used by react-web-chat
which happens to make use the feersum message schema.
Further reading:
In future there will hopefully be several clients to support a wider range of IM back-ends.
Writing a custom network client is easy :) All you need is an object with the following methods:
const feersumClient = {
init(url) {
// Connect to server, then bind "onmessage" and "onclose" methods.
},
send(message) {
// Translate message from feersum schema, then send to server.
},
onmessage(fn) {
// Translate message to feersum schema, then execute callback function with message as parameter.
},
onclose(fn) {
// Execute callback when the connection is closed.
}
};
FAQs
react-web-chat React component
The npm package @prk/react-web-chat receives a total of 63 weekly downloads. As such, @prk/react-web-chat popularity was classified as not popular.
We found that @prk/react-web-chat demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.