nextcloud / nextcloud/calendar

[Bug]: ProposalEditor renders before CalDAV store initializes — location field resets, selectedProposal is null

Open
#8,166 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

1. to develop bug
Dominant language
JavaScript
Stars
1.2k
Forks
332
Avg merge
16h 13m
Merged PRs (30d)
137

Description

Steps to reproduce
  1. Open Nextcloud calendar
  2. Click the + next to Meeting Proposals in the left sidebar
  3. Fill in title, description, location duration and participants
  4. Click on any field eg. duration after setting the location
  5. Location resets to empty "No Location"
  6. Open an existing proposal to view responses. Second crash occurs.
Expected behavior

Location field retains its value when interacting with other fields
Proposal view renders without crashing

Actual behavior

Location is silently cleared when clicking other fields
ProposalEditor crashes with two Vue render errorrs
`[ERROR] calendar: [Vue error]: Error in render:
TypeError: can't access property "scheduleDefaultCalendarUrl",
this.currentUserPrincipal is undefined
ProposalEditor.vue:587

[ERROR] calendar: [Vue error]: Error in render:
TypeError: can't access property "title", e.selectedProposal is null
ProposalEditor.vue:967`

Calendar app version

6.2.2

CalDAV-clients used

None - web interface only

Browser

Firefox 149.0.2

Client operating system

Windows

Server operating system

Alpine Linux

Web server

Apache

Database engine version

MariaDB

PHP engine version

PHP 8.4

Nextcloud version

33

Updated from an older installed version or fresh install

None

List of activated apps
- activity: 6.0.0
  - admin_audit: 1.23.0
  - admincockpit: 1.2.3
  - announcementcenter: 7.3.0
  - app_api: 33.0.0
  - audiowaveform_preview_provider: 0.3.0
  - bruteforcesettings: 6.0.0
  - calendar: 6.2.2
  - circles: 33.0.0
  - cloud_federation_api: 1.17.0
  - comments: 1.23.0
  - contacts: 8.4.4
  - contactsinteraction: 1.14.1
  - dashboard: 7.13.0
  - dashlink: 1.2.1
  - dav: 1.36.0
  - deck: 1.17.1
  - done: 1.7.0
  - doom_nextcloud: 1.0.6
  - drawio: 4.2.3
  - federatedfilesharing: 1.23.0
  - federation: 1.23.0
  - files: 2.5.0
  - files_3dmodelviewer: 0.0.16
  - files_accesscontrol: 4.0.0
  - files_confidential: 4.1.0
  - files_downloadactivity: 1.18.1
  - files_downloadlimit: 5.1.0
  - files_external: 1.25.1
  - files_reminders: 1.6.0
  - files_sharing: 1.25.2
  - files_trashbin: 1.23.0
  - files_versions: 1.26.0
  - firstrunwizard: 6.0.0
  - forms: 5.2.7
  - integration_miro: 1.0.8
  - integration_overleaf: 2.0.1
  - logreader: 6.0.0
  - lookup_server_connector: 1.21.0
  - mail: 5.7.11
  - nextcloud_announcements: 5.0.0
  - notes: 4.13.1
  - notifications: 6.0.0
  - oauth2: 1.21.0
  - password_policy: 5.0.0
  - photos: 6.0.0
  - privacy: 5.0.0
  - profile: 1.2.0
  - provisioning_api: 1.23.0
  - recommendations: 6.0.0
  - related_resources: 4.0.0
  - richdocuments: 10.1.2
  - roll_dice_bot: 1.0.0
  - serverinfo: 5.0.0
  - settings: 1.16.0
  - sharebymail: 1.23.0
  - solitaire: 1.0.0
  - spreed: 23.0.3
  - support: 5.0.0
  - survey_client: 5.0.0
  - systemtags: 1.23.0
  - tables: 2.0.1
  - text: 7.0.0
  - theming: 2.8.0
  - twofactor_backupcodes: 1.22.0
  - twofactor_nextcloud_notification: 7.0.0
  - twofactor_totp: 15.0.0
  - updatenotification: 1.23.0
  - user_status: 1.13.0
  - viewer: 6.0.0
  - weather_status: 1.13.0
  - webhook_listeners: 1.5.0
  - whiteboard: 1.5.7
  - workflowengine: 2.15.0
Nextcloud configuration
{
    "system": {
        "htaccess.RewriteBase": "/",
        "memcache.local": "\\OC\\Memcache\\APCu",
        "apps_paths": [
            {
                "path": "/var/www/html/apps",
                "url": "/apps",
                "writable": false
            },
            {
                "path": "/var/www/html/custom_apps",
                "url": "/custom_apps",
                "writable": true
            }
        ],
        "upgrade.disable-web": true,
        "instanceid": "***REMOVED***",
        "passwordsalt": "***REMOVED***",
        "secret": "***REMOVED***",
        "trusted_domains": [
            "REMOVED"
        ],
        "datadirectory": "***REMOVED***",
        "dbtype": "mysql",
        "version": "33.0.2.2",
        "overwrite.cli.url": "REMOVED",
        "overwriteprotocol": "https",
        "trusted_proxies": "***REMOVED***",
        "dbname": "***REMOVED***",
        "dbhost": "***REMOVED***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED***",
        "dbpassword": "***REMOVED***",
        "installed": true,
        "loglevel": 2,
        "maintenance": false,
        "mail_from_address": "***REMOVED***",
        "mail_smtpmode": "smtp",
        "mail_sendmailmode": "smtp",
        "mail_domain": "***REMOVED***",
        "mail_smtphost": "***REMOVED***",
        "mail_smtpport": "465",
        "mail_smtpauth": true,
        "mail_smtpname": "***REMOVED***",
        "mail_smtppassword": "***REMOVED***",
        "app_install_overwrite": [
            "files_downloadactivity",
            "solitaire",
            "multiboards"
        ]
    }
}
Web server error log

Log file
`{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T20:16:22+00:00","remoteAddr":"","user":"--","app":"no app in context","method":"","url":"--","scriptName":"/var/www/html/cron.php","message":"Skipping updater backup clean-up - could not find updater backup folder /var/www/html/data/updater-[REMOVED]/backups","userAgent":"--","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T20:29:19+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T20:39:45+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T21:16:56+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T21:23:40+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/apps/tables/table","scriptName":"/index.php","message":"Undefined array key \"sort\" at /var/www/html/custom_apps/tables/lib/Model/ViewUpdateInput.php#89","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T21:23:54+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/apps/notes/notes","scriptName":"/index.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T21:24:19+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T21:24:41+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T21:24:54+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T22:23:26+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":3,"time":"2026-04-17T22:33:22+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"jsresourceloader","method":"GET","url":"/settings/user/workflow","scriptName":"/index.php","message":"Could not find resource core/js/systemtags.js to load","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T22:33:34+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"no app in context","method":"GET","url":"/settings/admin/groupware","scriptName":"/index.php","message":"Invalid google_oauth_client_id data provided to provideInitialState by mail","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T22:33:34+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"no app in context","method":"GET","url":"/settings/admin/groupware","scriptName":"/index.php","message":"Invalid microsoft_oauth_client_id data provided to provideInitialState by mail","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T22:39:53+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T22:40:01+00:00","remoteAddr":"","user":"--","app":"no app in context","method":"","url":"--","scriptName":"/var/www/html/cron.php","message":"Skipping updater backup clean-up - could not find updater backup folder /var/www/html/data/updater-[REMOVED]/backups","userAgent":"--","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T23:05:32+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}
{"reqId":"[REMOVED]","level":2,"time":"2026-04-17T23:05:33+00:00","remoteAddr":"[REMOVED]","user":"[REMOVED]","app":"PHP","method":"GET","url":"/ocs/v2.php/apps/dashboard/api/v1/widgets","scriptName":"/ocs/v2.php","message":"Undefined array key \"node\" at /var/www/html/custom_apps/notes/lib/Service/NoteUtil.php#201","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0","version":"33.0.2.2"}`
Browser log
`Content-Security-Policy warnings 5
Content-Security-Policy: Ignoring "'self'" within script-src-elem: 'strict-dynamic' specified now
Content-Security-Policy: Ignoring "https://cdn.jsdelivr.net" within script-src-elem: 'strict-dynamic' specified now
Content-Security-Policy: Ignoring "https://[REMOVED]" within script-src-elem: 'strict-dynamic' specified now
Content-Security-Policy: Ignoring "blob:" within script-src-elem: 'strict-dynamic' specified now
Content-Security-Policy: Ignoring 'unsafe-eval' or 'wasm-unsafe-eval' inside "script-src-elem". now

[ERROR] calendar: [Vue error]: Error in render: TypeError: can't access property "scheduleDefaultCalendarUrl", this.currentUserPrincipal is undefined
Object { app: "calendar", uid: "[REMOVED]", level: 2, error: TypeError, vm: {…}, info: "render" }
index.mjs:47:17

@nextcloud/calendar-js app is using version 2.2025b of the timezone database index.mjs:251:13
Calendar API not initialized yet ProposalEditor.vue:587:1

[Miro] standalone modal is ready integration_miro-standalone.mjs:2:1539
Initializing unified search plugin-filters from talk search.js:22:10

[WARN] @nextcloud/vue: You need to fill either the text or the ariaLabel props in the button component.
Object { uid: "[REMOVED]", app: "@nextcloud/vue", level: 2, text: undefined, ariaLabel: null, instance: {…} }
index.mjs:44:17
[WARN] @nextcloud/vue: You need to fill either the text or the ariaLabel props in the button component.
Object { uid: "[REMOVED]", app: "@nextcloud/vue", level: 2, text: undefined, ariaLabel: null, instance: {…} }
index.mjs:44:17

Notifications permissions granted NotificationsApp.vue:449:13
Polling interval updated to 30000 NotificationsApp.vue:412:12
Started background fetcher as session_keepalive is enabled NotificationsApp.vue:279:13
Got notification data, restoring default polling interval. NotificationsApp.vue:368:13

calendar home scanned
Array [ {…}, {…} ]
Array [ {…} ]
Array []
calendars.js:271:12

Skipping availability fetch for non-internal participant:
Object { id: Getter & Setter, name: Getter & Setter, address: Getter & Setter, attendance: Getter & Setter, status: Getter & Setter, realm: Getter & Setter, … }
ProposalEditor.vue:967:1
(repeated 5 times on initial load)

This page is in Quirks Mode. Page layout may be impacted. For Standards Mode use "<!DOCTYPE html>". blank

[ERROR] calendar: [Vue error]: Error in render: TypeError: can't access property "title", e.selectedProposal is null
Object { app: "calendar", uid: "[REMOVED]", level: 2, error: TypeError, vm: {…}, info: "render" }
index.mjs:47:17

Skipping availability fetch for non-internal participant:
Object { id: Getter & Setter, name: Getter & Setter, address: Getter & Setter, attendance: Getter & Setter, status: Getter & Setter, realm: Getter & Setter, … }
ProposalEditor.vue:967:1
(repeated 5 more times)`
Additional info

Root cause:
The log shows Calendar API not initialized yet at ProposalEditor.vue:587, followed by calendar home scanned appearing later. This confirms the component renders before the async CalDAV store resolves the user principal.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in ProposalEditor.vue, especially the render locations reported at lines 587 and 967, and reproduce the issue by creating a meeting proposal and opening an existing one. Trace when the CalDAV store provides currentUserPrincipal and selectedProposal relative to rendering. Done means the location remains populated while editing and the proposal view renders without either reported error.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
frontend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.