UNPKG

@carlos8a/react-whatsapp-floating-button

Version:
190 lines (137 loc) 13 kB
# ⚛️⚡ WhatsApp Floating Button Component for React <div align="center"> <a href="https://www.npmjs.com/package/@carlos8a/react-whatsapp-floating-button"> <img src="https://img.shields.io/npm/v/@carlos8a/react-whatsapp-floating-button.svg" alt="NPM Version" /> </a> <img src="https://img.shields.io/bundlephobia/minzip/%40carlos8a%2Freact-whatsapp-floating-button" alt="npm bundle size" /> <img src="https://img.shields.io/github/license/CarlosUlisesOchoa/react-whatsapp-floating-button" alt="GitHub License" /> <br /> </div> <p align="center"> <img src="https://github.com/user-attachments/assets/ec0d415e-f149-42d3-9a8a-b459c8f4c56c" alt="WhatsApp Floating Button GIF" /> </p> ## Description This React component offers an elegant WhatsApp floating button, serving as a bridge to the official WhatsApp application. It simulates a WhatsApp chat interface, allowing users to initiate conversations directly from your website. Upon clicking "submit," users are redirected to WhatsApp with their message pre-filled, ready to continue the conversation. Ideal for enhancing customer support and engagement, this component simplifies the transition from web inquiries to WhatsApp communication using WhatsApp's API. ## Screenshots The WhatsApp Floating Button Component supports both light and dark modes, ensuring it can integrate seamlessly with your application's theme. Below are the mockups for each mode: | Light Mode | Dark Mode | |:----------:|:---------:| | ![Light Mode](https://github.com/user-attachments/assets/40164cdb-34c5-4b5e-a34a-8e356d75c6ed) | ![Dark Mode](https://github.com/user-attachments/assets/2fa9a880-d3e1-4919-9b56-1ed48ed55cc2) | Toggle between the modes to provide a consistent user experience regardless of your app's theme. ## Installation Install the component using your preferred package manager: ### npm ```bash npm install @carlos8a/react-whatsapp-floating-button ``` ### pnpm ```bash pnpm install @carlos8a/react-whatsapp-floating-button ``` ### Yarn ```bash yarn add @carlos8a/react-whatsapp-floating-button ``` ## Usage Example Below is a basic example demonstrating how to integrate the WhatsApp floating button into your app: ```jsx import { FloatingWhatsApp } from '@carlos8a/react-whatsapp-floating-button'; const App = () => { return ( <div> <FloatingWhatsApp phoneNumber='5215540000000' // Required accountName='Carlos Ochoa' // Optional avatar='/images/avatar.webp' // Optional initialMessageByServer='Hi there! How can I assist you?' // Optional initialMessageByClient='Hello! I found your contact on your website. I would like to chat with you about...' // Optional statusMessage='Available' // Optional startChatText='Start chat with us' // Optional tooltipText='Need help? Click to chat!' // Optional allowEsc={true} // Optional // Explore all available props below /> </div> ); }; export default App; ``` ### Available Props | Prop | Type | Required | Description | Default | |---------------------------|:---------------------:|:--------:|--------------------------------------------------------------------------------------------------------------------------|----------------------------------| | `phoneNumber` | String | Yes | Phone number in [international format](https://faq.whatsapp.com/general/contacts/how-to-add-an-international-phone-number)| `5215540000000` | | `accountName` | String | No | Account username | `Account Name` | | `onClick` | Function | No | Callback fired on click | `-` | | `onSubmit` | Function | No | Callback fired on submit with the event passed | `-` | | `onClose` | Function | No | Callback fired on close | `-` | | `onLoopDone` | Function | No | Callback called when notification loop is done | `-` | | `onNotification` | Function | No | Callback fired when a notification is triggered | `-` | | `avatar` | String | No | Path to change user avatar using [static assets](https://create-react-app.dev/docs/adding-images-fonts-and-files/) | `UI Face` | | `statusMessage` | String | No | Text displayed below the account username | `Typically replies within 1 hour`| | `initialMessageByServer` | String | No | First message visitors receive | `Hello there! How can we help?` | | `initialMessageByClient` | String | No | Message that the user will send to your WhatsApp | `Hello!, I got your contact from your website. I would like to chat with you about...` | | `startChatText` | String | No | Text displayed inside the "Start Chat" button | `Start chat with us` | | `tooltipText` | String \| `null` | No | Text that will appear in the tooltip, adjacent to the WhatsApp button | `null` | | `messageDelay` | Number | No | Delay before displaying `initialMessageByServer` (seconds) | `2` | | `notification` | Boolean | No | Enables notifications (disabled after user opens the chat box) | `false` | | `notificationDelay` | Number | No | Delay between notifications (seconds) | `60` | | `notificationLoop` | Number | No | Number of times notifications loop | `0` | | `notificationStyle` | CSSProperties | No | Inline style for notification | `{}` | | `notificationClassName` | String | No | CSS class for notification indicator | `floating-whatsapp-notification` | | `allowClickAway` | Boolean | No | Allows chat box to close when clicking outside | `false` | | `allowEsc` | Boolean | No | Allows chat box to close when pressing `Escape` key | `false` | | `darkMode` | Boolean | No | Enables dark style | `false` | | `className` | String | No | CSS class for the main wrapping `Div` | `floating-whatsapp` | | `buttonClassName` | String | No | CSS class for the button | `floating-whatsapp-button` | | `style` | CSSProperties | No | Inline style for the main wrapping `Div` | `{}` | | `buttonStyle` | CSSProperties | No | Inline style for the button | `{}` | | `chatboxHeight` | Number | No | Chat box height | `320` | | `chatboxClassName` | String | No | CSS class for the chat box | `floating-whatsapp-chatbox` | | `chatboxStyle` | CSSProperties | No | Inline style for the chat box | `{}` | ### Development and Testing Files The following files are intended solely for development and testing purposes and do not form part of the component's distribution: - `<root>/index.html` (used to test the component) - `<root>/src/**/*` (excluding `<root>/src/lib/**/*` which is the component) - `<root>/public/` (used to test the component) - `<root>/preparePublish.js` (prepares the component for npm publishing) ## Building and Testing the Package **Note**: For anyone that just want to get and use the component, the [Installation](#installation) and [Usage Example](#usage-example) sections have got all you need 👍🏻. This section is for developers who want to modify the component. Follow the steps outlined below to rebuild and test your changes locally. ### Prerequisites Make sure you have Node.js (version 18 or higher) installed on your system. This project employs `pnpm` for efficient dependency management. If you don't have `pnpm`, install it with the following command: ```bash npm install -g pnpm ``` ### Setting Up the Development Environment 1. **Clone the Repository**: Get a copy of the project onto your local machine by cloning the GitHub repository. ```bash git clone https://github.com/CarlosUlisesOchoa/react-whatsapp-floating-button.git cd react-whatsapp-floating-button ``` 2. **Install Dependencies**: Use `pnpm` to install all the necessary dependencies. This ensures your environment is equipped with everything needed for building and testing the component. ```bash pnpm install ``` ### Running a Local Development Server You will be able to modify and see real-time changes due we are using Vite to dev and deploy. You can run: ```bash pnpm run dev ``` Now you will be able to start enhancing or customizing this beautiful but always improveable component 😁. ### Rebuilding the Library Execute the following command to build the library: ```bash pnpm run build:lib ``` This script performs a series of tasks: - Clears the `dist` directory for a clean build. - Adjusts TypeScript configurations for the build. - Compiles the library using Vite into the `dist` folder, which will contain the production-ready code. - Resets TypeScript configurations after the build. That's it. Now you can take a look at the ```dist``` directory where you'll find the bundled code. ## Acknowledgements - Special thanks to [@awran5](https://github.com/awran5) for the [react-floating-whatsapp](https://github.com/awran5/react-floating-whatsapp) component, which served as a base for this enhanced version. - Gratitude to [@darwinva97](https://github.com/darwinva97) for the [PR](https://github.com/awran5/react-floating-whatsapp/pull/27) contributing improvements in accessibility and SEO through `aria-hidden` attribute modifications. ### License [MIT License](LICENSE) © 2024