@cobuildlab/8base-chat
Version:
Chat component that uses 8base
117 lines (90 loc) • 3.15 kB
Markdown
<<<<<<< HEAD
# 8base Chat
## Usage
You should have `react` and `react-dom` as dependencies.
Example of usage (you can find code in `example/src/pages/chat/index.tsx`):
```jsx
// You need to import styles
import '8base-chat/dist/8base-chat.css';
import { withLogout } from '@8base/auth';
import React, { useCallback, useState } from 'react';
import { Query } from 'react-apollo';
// After you imported styles you can use Chat
import Chat from '8base-chat';
import { API_ENDPOINT, WORKSPACE_ID } from 'shared/constants';
import { USER_QUERY } from 'shared/graphql';
function ChatPage({ logout, auth }) {
const [isSidebarVisible, setIsSidebarVisible] = useState(true);
const toggleSidebar = useCallback(() => {
setIsSidebarVisible(value => !value);
}, []);
const onLogoutClick = useCallback(() => {
logout();
}, [logout]);
return (
<div>
<button onClick={onLogoutClick}>Logout</button>
<button onClick={toggleSidebar}>Toggle sidebar</button>
<Query query={USER_QUERY}>
{({ loading, data }) => {
if (loading || !data) {
return <div>Loading...</div>;
}
return (
<Chat
currentUser={data.user} // We need it to fetch data for currentUser (channels, etc.)
uri={API_ENDPOINT} // Where requests will be sent
authToken={auth.authState.token} // Will be used in requests 'authorization' header
workspaceId={WORKSPACE_ID} // We need it for subscriptions
isSidebarVisible={isSidebarVisible}
// You can specify which sections to display
sections={{
channels: true,
contacts: true,
dm: true,
}}
/>
);
}}
</Query>
</div>
);
}
export default withLogout(ChatPage);
```
## Styling
The chat uses CSS Variables for colors. If you want to change colors change the following variables:
```css
:root {
--chat-primary-color: #3eb7f9;
--chat-primary-bg-color: #fff;
--chat-hover-bg-color: #f4f7f9;
--chat-primary-text-color: #323c47;
--chat-secondary-text-color: #939ea7;
--chat-primary-border-color: #d0d7dd;
--chat-placeholder-color: var(--chat-secondary-text-color);
--chat-active-presence-color: #00bb6e;
--chat-message-bg-color: #4da1ff;
--chat-message-text-color: #fff;
--chat-message-link-color: var(--chat-message-text-color);
--chat-my-message-bg-color: var(--chat-primary-bg-color);
--chat-my-message-text-color: var(--chat-primary-text-color);
--chat-my-message-link-color: var(--chat-primary-color);
}
```
## Development
Launch watch mode for the chat package
```
npm run dev
```
Launch the example in order to see how the chat works
```
cd example
npm start
```
In order to generate graphql types, apollo operations and so on, run the command below:
```
npm run graphql-types
```
## Polyfills
It uses `AbortController` to cancel requests. If you need support browsers that don't support it you can add a polyfill (e.g. [abortcontroller-polyfill](https://www.npmjs.com/package/abortcontroller-polyfill))