T4B_Chat/utilities/README.md

134 lines
5.5 KiB
Markdown

# Utilities
This directory contains organized utility functions and modules for the T4B Chat application.
## Files
### notificationUtils.ts
Contains utility functions for creating notification channels, configuring settings, and showing local notifications.
### permissionUtils.ts
Handles notification permission requests and checks for Android and iOS platforms.
### deepLinkUtils.ts
Handles deep linking functionality for FCM notifications and chat navigation.
- `DeepLinkHandler` class for managing deep links
- Methods for handling killed app, foreground, and background deep links
- Channel ID extraction and URL building utilities
### webViewUtils.ts
Manages WebView functionality, navigation, and message handling.
- `WebViewHandler` class for WebView management
- Navigation request handling and validation
- Message processing and debug script injection
### cookieUtils.ts
Handles cookie management for WebView authentication.
- `CookieHandler` class for cookie operations
- Platform-specific cookie retrieval (iOS/Android)
- Session cookie validation and refresh functionality
### fcmUtils.ts
Manages Firebase Cloud Messaging (FCM) functionality.
- `FCMHandler` class for FCM operations
- Token management and backend communication
- Message handling for different app states
### constants.ts
Centralized configuration constants for the entire application.
- Domain configuration
- FCM endpoints
- Navigation delays
- URL patterns
- Platform configuration
- Notification settings
### loaderUtils.tsx
Beautiful custom loading components with animations and chat icons.
- `CustomLoader` - Main animated loader component
- `ProgressLoader` - Loader with progress indicator
- Predefined loader configurations for different scenarios
- Smooth animations and transitions
## Usage
Import the utilities you need in your components:
```typescript
import { showLocalNotification, createNotificationChannel } from './utilities/notificationUtils';
import { requestNotificationPermission, checkNotificationPermission } from './utilities/permissionUtils';
import { createDeepLinkHandler } from './utilities/deepLinkUtils';
import { createWebViewHandler } from './utilities/webViewUtils';
import { createCookieHandler } from './utilities/cookieUtils';
import { createFCMHandler } from './utilities/fcmUtils';
import { ALLOWED_DOMAIN, NAVIGATION_DELAYS, URL_PATTERNS } from './utilities/constants';
import { CustomLoader, createOdooLoader, createChatLoader } from './utilities/loaderUtils';
```
## Classes and Methods
### Deep Link Handler
- `handleKilledAppDeepLink(data)` - Handle deep links from killed app
- `handleForegroundBackgroundDeepLink(data)` - Handle deep links from foreground/background
- `navigateToChannel(channelId)` - Navigate to specific channel
- `handleDeepLink(deepLink)` - Process deep link URLs
### WebView Handler
- `handleNavigation(request)` - Handle WebView navigation requests
- `handleWebViewMessage(event, setWebViewCookies)` - Process WebView messages
- `handleWebViewLoadEnd(currentChannel, isNavigating)` - Handle load completion
- `injectDebugScript()` - Inject debug script into WebView
### Cookie Handler
- `getWebViewCookies()` - Get authentication cookies
- `refreshWebViewCookies()` - Set up periodic cookie refresh
- `getCookiesForUrl(url)` - Get cookies for specific URL
- `setCookiesForUrl(url, cookies)` - Set cookies for specific URL
- `clearAllCookies()` - Clear all cookies
- `isValidSessionCookie(cookies)` - Validate session cookies
### FCM Handler
- `initializeNotifications()` - Initialize FCM notifications
- `requestUserPermission()` - Request notification permissions
- `getFcmToken()` - Get FCM token
- `sendTokenToBackend(token)` - Send token to backend
- `setupMessageListeners(appState)` - Setup FCM message listeners
### Constants
- `ALLOWED_DOMAIN` - Base domain for the application
- `NAVIGATION_DELAYS` - Timing constants for navigation delays
- `URL_PATTERNS` - URL pattern templates
- `FCM_REGISTER_ENDPOINT` - FCM registration endpoint
- `COOKIE_REFRESH_INTERVAL` - Cookie refresh timing
- `NOTIFICATION_CONFIG` - Notification channel configuration
### Loader Components
- `CustomLoader` - Main animated loader with chat icon
- `ProgressLoader` - Loader with progress indicator
- `createOdooLoader()` - Pre-configured Odoo loader
- `createChatLoader()` - Pre-configured chat loader
- `createNavigationLoader()` - Pre-configured navigation loader
- `LOADER_CONFIGS` - Predefined loader configurations
### Notification Utils
- `createNotificationChannel()` - Creates Android notification channel
- `configureNotificationSettings()` - Configures notification settings
- `showLocalNotification(options)` - Shows local notification
- `shouldShowCustomNotification(appState)` - Checks if custom notification should be shown
- `testNotification()` - Test notification function
### Permission Utils
- `requestNotificationPermission()` - Requests notification permission
- `checkNotificationPermission()` - Checks current permission status
- `needsNotificationPermission()` - Checks if permission is needed
- `showPermissionExplanation()` - Shows permission explanation dialog
- `showSettingsDialog()` - Shows settings dialog for denied permissions
## Architecture Benefits
1. **Separation of Concerns**: Each utility handles a specific domain
2. **Reusability**: Utilities can be easily reused across components
3. **Maintainability**: Code is organized and easy to understand
4. **Testability**: Each utility can be tested independently
5. **Type Safety**: Proper TypeScript interfaces and types
6. **Documentation**: Comprehensive JSDoc comments throughout