@forcecalendar/core 2.1.52 → 2.1.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -320,16 +320,11 @@ export class ConflictDetector {
320
320
  return conflicts;
321
321
  }
322
322
 
323
- const conflictingAttendees = [];
324
-
325
- for (const attendee1 of event1.attendees) {
326
- for (const attendee2 of event2.attendees) {
327
- if (attendee1.email === attendee2.email) {
328
- // Same attendee in both events
329
- conflictingAttendees.push(attendee1.email);
330
- }
331
- }
332
- }
323
+ // Use Set for O(1) lookup instead of O(n*m) nested loops
324
+ const emails1 = new Set(event1.attendees.map(a => a.email));
325
+ const conflictingAttendees = event2.attendees
326
+ .filter(a => emails1.has(a.email))
327
+ .map(a => a.email);
333
328
 
334
329
  if (conflictingAttendees.length > 0) {
335
330
  // Determine severity based on attendee responses
@@ -505,13 +500,36 @@ export class ConflictDetector {
505
500
  * @private
506
501
  */
507
502
  _isWithinBusinessHours(start, end, options) {
508
- // Simple implementation - can be enhanced
509
- const startHour = start.getHours();
510
- const endHour = end.getHours();
503
+ if (options.excludeWeekends) {
504
+ const day = start.getDay();
505
+ if (day === 0 || day === 6) {
506
+ return false;
507
+ }
508
+ }
509
+
510
+ // Business hours describe a window within a single day, so a period
511
+ // spanning multiple calendar days can never fit inside them
512
+ if (
513
+ start.getFullYear() !== end.getFullYear() ||
514
+ start.getMonth() !== end.getMonth() ||
515
+ start.getDate() !== end.getDate()
516
+ ) {
517
+ return false;
518
+ }
519
+
520
+ const [businessStartHour, businessStartMinute = 0] = options.businessHours.start
521
+ .split(':')
522
+ .map(Number);
523
+ const [businessEndHour, businessEndMinute = 0] = options.businessHours.end
524
+ .split(':')
525
+ .map(Number);
526
+
527
+ const businessStart = businessStartHour * 60 + businessStartMinute;
528
+ const businessEnd = businessEndHour * 60 + businessEndMinute;
511
529
 
512
- const businessStart = parseInt(options.businessHours.start.split(':')[0]);
513
- const businessEnd = parseInt(options.businessHours.end.split(':')[0]);
530
+ const startMinutes = start.getHours() * 60 + start.getMinutes();
531
+ const endMinutes = end.getHours() * 60 + end.getMinutes();
514
532
 
515
- return startHour >= businessStart && endHour <= businessEnd;
533
+ return startMinutes >= businessStart && endMinutes <= businessEnd;
516
534
  }
517
535
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forcecalendar/core",
3
- "version": "2.1.52",
3
+ "version": "2.1.54",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "A modern, lightweight, framework-agnostic calendar engine optimized for Salesforce",