134 lines
5.5 KiB
Markdown
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 |