feat: add video conference meeting link generation to event modal
- Add video conference utility functions for generating random meeting IDs - Implement video meeting button with camera icon in EventModal - Add copy and delete functionality with IconButton components - Support X-OPENPAAS-VIDEOCONFERENCE field in CalendarEvent type - Handle state management for editing events with/without video conference - Add meeting link footer to event description - Include comprehensive test suite for video conference utilities Features: - Generate random meeting links (format: xxx-xxxx-xxx) - Copy meeting link to clipboard - Remove video conference from events - Proper state sync when editing different events - Integration with existing JCal/ICS conversion
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* Utility functions for video conference meeting generation
|
||||
*/
|
||||
|
||||
/**
|
||||
* Generate a random meeting ID in format xxx-xxxx-xxx
|
||||
* @returns {string} Random meeting ID
|
||||
*/
|
||||
export function generateMeetingId(): string {
|
||||
const chars = 'abcdefghijklmnopqrstuvwxyz';
|
||||
const generateSegment = (length: number): string => {
|
||||
return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
|
||||
};
|
||||
|
||||
return `${generateSegment(3)}-${generateSegment(4)}-${generateSegment(3)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a complete meeting link
|
||||
* @param {string} baseUrl - Base URL for video conference (from .env.js)
|
||||
* @returns {string} Complete meeting link
|
||||
*/
|
||||
export function generateMeetingLink(baseUrl?: string): string {
|
||||
const base = baseUrl || (window as any).VIDEO_CONFERENCE_BASE_URL || 'https://meet.linagora.com';
|
||||
const meetingId = generateMeetingId();
|
||||
return `${base}/${meetingId}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add video conference footer to event description
|
||||
* @param {string} description - Original description
|
||||
* @param {string} meetingLink - Generated meeting link
|
||||
* @returns {string} Description with video conference footer
|
||||
*/
|
||||
export function addVideoConferenceToDescription(description: string, meetingLink: string): string {
|
||||
const footer = `\n\nVisio: ${meetingLink}`;
|
||||
return description + footer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract video conference link from description
|
||||
* @param {string} description - Event description
|
||||
* @returns {string | null} Video conference link if found, null otherwise
|
||||
*/
|
||||
export function extractVideoConferenceFromDescription(description: string): string | null {
|
||||
const match = description.match(/Visio:\s*(https?:\/\/[^\s]+)/);
|
||||
return match ? match[1] : null;
|
||||
}
|
||||
Reference in New Issue
Block a user