white-label-insurance-library
Version:
A reusable white-label insurance application component library.
172 lines (121 loc) • 4.19 kB
Markdown
# 📦 How to Use the White-Label Insurance Application Library
This document provides instructions on how to consume and customize the `white-label-insurance-library` npm package within your own React applications, including how to listen to events.
## 1. 📥 Consuming the Library
### Installation in Consumer App
Create a new React project (if you don't have one):
```bash
npm create vite@latest my-consumer-app -- --template react-ts
cd my-consumer-app
npm install
```
Install required dependencies:
```bash
npm install react-router-dom
npm install --save-dev @types/react-router-dom
```
Install your white-label library:
```bash
npm install white-label-insurance-library # Replace with your actual package name
```
### Integration
In your consumer application's entry point (e.g., `src/main.tsx`), import and render the `WhiteLabelApp` component. You can pass callback functions as props to `WhiteLabelApp` to listen for events.
```tsx
// my-consumer-app/src/main.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import { WhiteLabelApp, WhiteLabelAppProps } from 'white-label-insurance-library';
const handleBrandChange: WhiteLabelAppProps['onBrandChange'] = (newBrandKey) => {
console.log(`Consumer App: Brand changed to: ${newBrandKey}`);
};
const handleFormSubmit: WhiteLabelAppProps['onFormSubmit'] = (formData) => {
console.log('Form submitted successfully!', formData);
};
const handleQuestionsLoadStart: WhiteLabelAppProps['onQuestionsLoadStart'] = () => {
console.log('Questions API fetch started...');
};
const handleQuestionsLoadSuccess: WhiteLabelAppProps['onQuestionsLoadSuccess'] = () => {
console.log('Questions API fetch successful!');
};
const handleQuestionsLoadError: WhiteLabelAppProps['onQuestionsLoadError'] = (error) => {
console.error('Questions API fetch failed:', error);
};
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<BrowserRouter>
<WhiteLabelApp
onBrandChange={handleBrandChange}
onFormSubmit={handleFormSubmit}
onQuestionsLoadStart={handleQuestionsLoadStart}
onQuestionsLoadSuccess={handleQuestionsLoadSuccess}
onQuestionsLoadError={handleQuestionsLoadError}
/>
</BrowserRouter>
</React.StrictMode>,
);
```
> You may remove the default `App.tsx` and `App.css` if using `WhiteLabelApp` for all routing.
## 2. 🎨 Brand Switching
You can switch brands in two ways:
### URL Parameter (Initial Load)
Append `?brand=<brandKey>` to your application’s URL:
```
http://localhost:5173/?brand=zurich
http://localhost:5173/?brand=axa
http://localhost:5173/?brand=metlife
```
### Dropdown Selection
Use the **"Select Your Brand"** dropdown on the Welcome or Questions page. This uses internal context and does not modify the URL.
> The `onBrandChange` callback will be triggered when switching.
## 3. 🛠 Customization
### Defining New Brands
Edit `src/branding/brands.ts` in the library:
```ts
export type BrandKey = 'zurich' | 'axa' | 'metlife' | 'newbrand';
export const brands: Record<BrandKey, Brand> = {
newbrand: {
name: 'New Brand Name',
primaryColor: '#1a1a1a',
secondaryColor: '#333333',
fontFamily: '"Arial", sans-serif',
fontWeight: 400,
backgroundColor: '#f0f0f0',
logoUrl: 'https://via.placeholder.com/150/1a1a1a/FFFFFF?text=New+Brand+Logo',
buttonColor: '#1a1a1a',
buttonTextColor: '#FFFFFF',
headingFontSize: '2.0em',
inputBorderColor: '#555555',
},
};
```
Rebuild and publish:
```bash
npm run build
npm publish
```
## 4. 🎨 Overriding Styles
The library uses CSS variables. You can override them globally in your consumer app:
```css
/* src/index.css */
body {
--brand-primary: #ff5733;
--brand-background-color: #f0f8ff;
}
.questions-container {
box-shadow: 0 0 20px rgba(255, 87, 51, 0.5);
}
```
## ✅ Features
- Multi-brand white-label support
- Custom theming via CSS variables
- Callback-based communication for brand and form events
- Easy React Router integration
## 📜 License
MIT — free to use and customize.