From 68de0a7f5ad49be558f8dda319cd0c79d9521481 Mon Sep 17 00:00:00 2001 From: Maximilian Martin Date: Mon, 31 Aug 2026 14:08:14 +0000 Subject: [PATCH] feat: open tasks in new tab when clicked in calendar view Signed-off-by: Maximilian Martin --- src/fullcalendar/interaction/eventClick.js | 2 +- .../unit/fullcalendar/interaction/eventClick.test.js | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/fullcalendar/interaction/eventClick.js b/src/fullcalendar/interaction/eventClick.js index eddb65e3ad..eb1599dd48 100644 --- a/src/fullcalendar/interaction/eventClick.js +++ b/src/fullcalendar/interaction/eventClick.js @@ -115,5 +115,5 @@ function handleToDoClick(event, route, window, isWidget = false) { return } const url = `apps/tasks/calendars/${encodeURIComponent(calendarId)}/tasks/${encodeURIComponent(taskId)}` - window.location.href = generateUrl(url) + window.open(generateUrl(url), '_blank') } diff --git a/tests/javascript/unit/fullcalendar/interaction/eventClick.test.js b/tests/javascript/unit/fullcalendar/interaction/eventClick.test.js index 11d6620cc6..574ded8a2f 100644 --- a/tests/javascript/unit/fullcalendar/interaction/eventClick.test.js +++ b/tests/javascript/unit/fullcalendar/interaction/eventClick.test.js @@ -310,6 +310,7 @@ describe('fullcalendar/eventClick test suite', () => { protocol: 'http:', host: 'nextcloud.testing', }, + open: vi.fn(), } generateUrl @@ -328,7 +329,8 @@ describe('fullcalendar/eventClick test suite', () => { expect(generateUrl).toHaveBeenCalledTimes(1) expect(generateUrl).toHaveBeenNthCalledWith(1, 'apps/tasks/calendars/reminders/tasks/EAFB112A-4556-404A-B807-B1E040D0F7A0.ics') - expect(window.location.href).toEqual('/generated-url') + expect(window.open).toHaveBeenCalledTimes(1) + expect(window.open).toHaveBeenNthCalledWith(1, '/generated-url', '_blank') }) it('should do nothing when tasks is disabled and route is public', () => { @@ -603,6 +605,7 @@ describe('fullcalendar/eventClick test suite', () => { protocol: 'http:', host: 'nextcloud.testing', }, + open: vi.fn(), } generateUrl.mockReturnValueOnce('/generated-url') @@ -619,7 +622,8 @@ describe('fullcalendar/eventClick test suite', () => { expect(generateUrl).toHaveBeenCalledTimes(1) expect(generateUrl).toHaveBeenNthCalledWith(1, 'apps/tasks/calendars/calendar_shared_by_User%2520NAME/tasks/EAFB112A-4556-404A-B807-B1E040D0F7A0.ics') - expect(window.location.href).toEqual('/generated-url') + expect(window.open).toHaveBeenCalledTimes(1) + expect(window.open).toHaveBeenNthCalledWith(1, '/generated-url', '_blank') }) it('should encode special characters in calendarId and taskId', () => { @@ -641,6 +645,7 @@ describe('fullcalendar/eventClick test suite', () => { protocol: 'http:', host: 'nextcloud.testing', }, + open: vi.fn(), } generateUrl.mockReturnValueOnce('/generated-url') @@ -657,6 +662,7 @@ describe('fullcalendar/eventClick test suite', () => { expect(generateUrl).toHaveBeenCalledTimes(1) expect(generateUrl).toHaveBeenNthCalledWith(1, 'apps/tasks/calendars/calendar%23special/tasks/task%3Ffile%26name.ics') - expect(window.location.href).toEqual('/generated-url') + expect(window.open).toHaveBeenCalledTimes(1) + expect(window.open).toHaveBeenNthCalledWith(1, '/generated-url', '_blank') }) })