@@ -126,17 +126,40 @@ export default defineStore('calendars', {
126126 * @return {Array }
127127 */
128128 allDeletedCalendarObjects ( state ) {
129- const calendarUriMap = { }
129+ const lastSegment = ( uri ) => ( uri ?? '' ) . split ( '/' ) . filter ( Boolean ) . at ( - 1 ) ?? ''
130+
131+ const sourceUriOf = ( calendar ) => {
132+ const tail = lastSegment ( calendar . url )
133+ const at = tail . lastIndexOf ( '_shared_by_' )
134+ if ( at > 0 ) {
135+ return tail . slice ( 0 , at )
136+ }
137+ return tail
138+ }
139+
140+ // Key calendars by `${ownerUserId}|${sourceUri}` so deleted objects
141+ // match their origin calendar across owned/shared/delegated views.
142+ const calendarBySource = new Map ( )
130143 state . calendars . forEach ( ( calendar ) => {
131- const withoutTrail = calendar . url . replace ( / \/ $ / , '' )
132- const uri = withoutTrail . slice ( withoutTrail . lastIndexOf ( '/' ) + 1 )
133- calendarUriMap [ uri ] = calendar
144+ let key = `${ lastSegment ( calendar . owner ) } |${ sourceUriOf ( calendar ) } `
145+ if ( calendar . isDelegated ) {
146+ key += lastSegment ( calendar . delegatorUrl )
147+ }
148+ calendarBySource . set ( key , calendar )
134149 } )
135150
136- return state . deletedCalendarObjects . map ( ( obj ) => ( {
137- calendar : calendarUriMap [ obj . dav . _props [ '{http://nextcloud.com/ns}calendar-uri' ] ] ,
138- ...obj ,
139- } ) )
151+ return state . deletedCalendarObjects . map ( ( obj ) => {
152+ const owner = obj . dav . calendarOwnerPrincipalUri
153+ const sourceUri = obj . dav . sourceCalendarUri
154+ let key = `${ lastSegment ( owner ) } |${ sourceUri } `
155+ if ( obj . dav . delegator ) {
156+ key += lastSegment ( obj . dav . delegator )
157+ }
158+ return {
159+ calendar : calendarBySource . get ( key ) ,
160+ ...obj ,
161+ }
162+ } )
140163 } ,
141164
142165 /**
0 commit comments