@@ -345,9 +345,71 @@ export const updateSeries = async (
345345 // When date/time/timezone/repeat rules changed, remove all override instances
346346 finalVevents = [ updatedMaster ] ;
347347 } else {
348- // When only properties changed, keep override instances
349- vevents [ masterIndex ] = updatedMaster ;
350- finalVevents = vevents ;
348+ // When only properties changed, keep override instances and update their metadata
349+ const updatedVevents = vevents . map ( ( vevent , index ) => {
350+ if ( index === masterIndex ) {
351+ return updatedMaster ;
352+ }
353+
354+ const [ veventType , props ] = vevent ;
355+ const updatedProps = [ ...updatedMaster [ 1 ] ] ;
356+
357+ // Fields that should be updated from master (metadata)
358+ const updateFields = [
359+ "summary" ,
360+ "description" ,
361+ "location" ,
362+ "class" ,
363+ "transp" ,
364+ "attendee" ,
365+ "organizer" ,
366+ "valarm" ,
367+ "x-openpaas-videoconference" ,
368+ ] ;
369+
370+ // Start with existing exception properties
371+ const newProps = [ ...props ] ;
372+
373+ // Update each metadata field from the master
374+ updateFields . forEach ( ( fieldName ) => {
375+ const fieldNameLower = fieldName . toLowerCase ( ) ;
376+
377+ // Remove old values of this field from exception
378+ const filteredProps = newProps . filter (
379+ ( [ k ] ) => k . toLowerCase ( ) !== fieldNameLower
380+ ) ;
381+
382+ // Get new values from updated master
383+ const newValues = updatedProps . filter (
384+ ( [ k ] ) => k . toLowerCase ( ) === fieldNameLower
385+ ) ;
386+
387+ // Replace with new values
388+ newProps . length = 0 ;
389+ newProps . push ( ...filteredProps , ...newValues ) ;
390+ } ) ;
391+
392+ // Increment sequence number for the exception
393+ const sequenceIndex = newProps . findIndex (
394+ ( [ k ] ) => k . toLowerCase ( ) === "sequence"
395+ ) ;
396+ if ( sequenceIndex !== - 1 ) {
397+ const currentSequence = parseInt ( newProps [ sequenceIndex ] [ 3 ] || "0" , 10 ) ;
398+ newProps [ sequenceIndex ] = [
399+ newProps [ sequenceIndex ] [ 0 ] ,
400+ newProps [ sequenceIndex ] [ 1 ] ,
401+ newProps [ sequenceIndex ] [ 2 ] ,
402+ String ( currentSequence + 1 ) ,
403+ ] ;
404+ } else {
405+ // Add sequence if it doesn't exist
406+ newProps . push ( [ "sequence" , { } , "integer" , "1" ] ) ;
407+ }
408+
409+ return [ veventType , newProps ] ;
410+ } ) ;
411+
412+ finalVevents = updatedVevents ;
351413 }
352414
353415 const newJCal = [
0 commit comments