Skip to content

Feat/add calendar delegation features#8085

Open
GVodyanov wants to merge 2 commits intomainfrom
feat/add-calendar-delegation-features
Open

Feat/add calendar delegation features#8085
GVodyanov wants to merge 2 commits intomainfrom
feat/add-calendar-delegation-features

Conversation

@GVodyanov
Copy link
Copy Markdown
Contributor

@GVodyanov GVodyanov commented Mar 22, 2026

@GVodyanov GVodyanov self-assigned this Mar 22, 2026
@GVodyanov GVodyanov added the 2. developing Work in progress label Mar 22, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 22, 2026

Codecov Report

❌ Patch coverage is 0% with 9 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/services/caldavService.js 0.00% 8 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@GVodyanov GVodyanov force-pushed the feat/add-calendar-delegation-features branch from da7ae86 to 654e770 Compare March 22, 2026 22:22
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole file should be moved to cdav-library.

@GVodyanov GVodyanov marked this pull request as ready for review May 4, 2026 08:17
@ChristophWurst ChristophWurst mentioned this pull request May 4, 2026
3 tasks
@GVodyanov
Copy link
Copy Markdown
Contributor Author

Here's what everything looks like

2026-05-04-121811_2560x1440_scrot 2026-05-04-121834_2560x1440_scrot 2026-05-04-121650_2560x1440_scrot

Copy link
Copy Markdown
Member

@kra-mo kra-mo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the design side:

"Select a user" and "Search for a user…" are redundant, it's fine to just have the second if it's baked into the component anyway, so without the title. The input field should also be full-width, and Add should be a primary button.

I wonder why delegation should be its own item in the sidebar instead of just a section in Settings? I'd rather have it just there. And at that point, have + Add delegate be full-width as well.

@hamza221
Copy link
Copy Markdown
Contributor

hamza221 commented May 5, 2026

The pre-existing sharing logic doesn't work for delegation

image

A clear indication of Calendar "owner" should be visible
image

@GVodyanov
Copy link
Copy Markdown
Contributor Author

From the design side:

"Select a user" and "Search for a user…" are redundant, it's fine to just have the second if it's baked into the component anyway, so without the title. The input field should also be full-width, and Add should be a primary button.

I wonder why delegation should be its own item in the sidebar instead of just a section in Settings? I'd rather have it just there. And at that point, have + Add delegate be full-width as well.

Thanks for the review! How does this look?

image image (I know that having delegates under delegation looks a little weird as title organization but that's the setting section with the form group component, and u can't not have titles for both)

@GVodyanov GVodyanov requested a review from kra-mo May 5, 2026 17:20
@GVodyanov
Copy link
Copy Markdown
Contributor Author

It took me a while to figure out but here is everything working

image

@GVodyanov
Copy link
Copy Markdown
Contributor Author

You get the icon here to show its delegated

image

@GVodyanov GVodyanov force-pushed the feat/add-calendar-delegation-features branch from a80edc4 to 0dd4839 Compare May 6, 2026 15:01
Signed-off-by: Grigory Vodyanov <scratchx@gmx.com>

# Conflicts:
#	package-lock.json
@GVodyanov GVodyanov force-pushed the feat/add-calendar-delegation-features branch from 0dd4839 to f50f37d Compare May 6, 2026 15:04
@hamza221 hamza221 added 3. to review Waiting for reviews and removed 2. developing Work in progress labels May 6, 2026
Copy link
Copy Markdown
Member

@kra-mo kra-mo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good from the design side :)

@SebastianKrupinski
Copy link
Copy Markdown
Contributor

SebastianKrupinski commented May 7, 2026

Tested.

Found error when delegator has a shared calendar

{
  "reqId": "axdoc6W1q46YCrgBbdrq",
  "level": 0,
  "time": "2026-05-07T13:00:21+00:00",
  "remoteAddr": "127.0.0.1",
  "user": "user2",
  "app": "webdav",
  "method": "PROPFIND",
  "url": "/remote.php/dav/calendars/user1/",
  "scriptName": "/remote.php",
  "message": "Calendar with name 'company_shared_by_admin' could not be found",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0",
  "version": "34.0.0.3",
  "exception": {
    "Exception": "Sabre\\DAV\\Exception\\NotFound",
    "Message": "Calendar with name 'company_shared_by_admin' could not be found",
    "Code": 0,
    "Trace": [
      {
        "file": "/var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/DavAclPlugin.php",
        "line": 86,
        "function": "checkPrivileges",
        "class": "OCA\\DAV\\Connector\\Sabre\\DavAclPlugin",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/Server.php",
        "line": 163,
        "function": "propFind",
        "class": "OCA\\DAV\\Connector\\Sabre\\DavAclPlugin",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
        "line": 89,
        "function": "OCA\\DAV\\Connector\\Sabre\\{closure}",
        "class": "OCA\\DAV\\Connector\\Sabre\\Server",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 1052,
        "function": "emit",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 984,
        "function": "getPropertiesByNode",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 1664,
        "function": "getPropertiesIteratorForPath",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 1649,
        "function": "writeMultiStatus",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/CorePlugin.php",
        "line": 346,
        "function": "generateMultiStatus",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
        "line": 89,
        "function": "httpPropFind",
        "class": "Sabre\\DAV\\CorePlugin",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 472,
        "function": "emit",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/Server.php",
        "line": 215,
        "function": "invokeMethod",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/apps/dav/lib/Server.php",
        "line": 430,
        "function": "start",
        "class": "OCA\\DAV\\Connector\\Sabre\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/apps/dav/appinfo/v2/remote.php",
        "line": 25,
        "function": "exec",
        "class": "OCA\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/master/remote.php",
        "line": 152,
        "args": [
          "/var/www/nextcloud/master/apps/dav/appinfo/v2/remote.php"
        ],
        "function": "require_once"
      }
    ],
    "File": "/var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/DavAclPlugin.php",
    "Line": 58,
    "message": "Calendar with name 'company_shared_by_admin' could not be found",
    "exception": "{\"class\":\"Sabre\\DAV\\Exception\\NotFound\",\"message\":\"Calendar with name 'company_shared_by_admin' could not be found\",\"code\":0,\"file\":\"/var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/DavAclPlugin.php:58\",\"trace\":\"#0 /var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/DavAclPlugin.php(86): OCA\\DAV\\Connector\\Sabre\\DavAclPlugin->checkPrivileges()\\n#1 /var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/Server.php(163): OCA\\DAV\\Connector\\Sabre\\DavAclPlugin->propFind()\\n#2 /var/www/nextcloud/master/3rdparty/sabre/event/lib/WildcardEmitterTrait.php(89): OCA\\DAV\\Connector\\Sabre\\Server->OCA\\DAV\\Connector\\Sabre\\{closure}()\\n#3 /var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php(1052): Sabre\\DAV\\Server->emit()\\n#4 /var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php(984): Sabre\\DAV\\Server->getPropertiesByNode()\\n#5 /var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php(1664): Sabre\\DAV\\Server->getPropertiesIteratorForPath()\\n#6 /var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php(1649): Sabre\\DAV\\Server->writeMultiStatus()\\n#7 /var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/CorePlugin.php(346): Sabre\\DAV\\Server->generateMultiStatus()\\n#8 /var/www/nextcloud/master/3rdparty/sabre/event/lib/WildcardEmitterTrait.php(89): Sabre\\DAV\\CorePlugin->httpPropFind()\\n#9 /var/www/nextcloud/master/3rdparty/sabre/dav/lib/DAV/Server.php(472): Sabre\\DAV\\Server->emit()\\n#10 /var/www/nextcloud/master/apps/dav/lib/Connector/Sabre/Server.php(215): Sabre\\DAV\\Server->invokeMethod()\\n#11 /var/www/nextcloud/master/apps/dav/lib/Server.php(430): OCA\\DAV\\Connector\\Sabre\\Server->start()\\n#12 /var/www/nextcloud/master/apps/dav/appinfo/v2/remote.php(25): OCA\\DAV\\Server->exec()\\n#13 /var/www/nextcloud/master/remote.php(152): require_once('...')\\n#14 {main}\"}",
    "CustomMessage": "Calendar with name 'company_shared_by_admin' could not be found"
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3. to review Waiting for reviews enhancement New feature request Feature: Delegation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants