feat(sharing): let share recipients recolour a shared calendar
The colour dot for a shared (non-owned) local calendar was disabled and the
colour write hit the owner-only PUT /calendars/{id} (404 for recipients). The
dot is now always editable and colour changes go through the dedicated
PUT /calendars/{id}/color endpoint, storing a recipient's own per-user colour
server-side (synced across devices) without granting write or rename. Renaming
stays owner-only. Parity with Android + server.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -426,8 +426,11 @@ class CalendarrAPI {
|
|||||||
|
|
||||||
// MARK: – Calendar colour
|
// MARK: – Calendar colour
|
||||||
|
|
||||||
|
/// Colour-only update: works for owners AND share recipients (recipients get
|
||||||
|
/// their own per-user colour; owners change the calendar's colour) — unlike
|
||||||
|
/// the owner-only PUT /calendars/{id}, and never touches the name.
|
||||||
func updateLocalCalendarColor(id: Int, color: String) async throws {
|
func updateLocalCalendarColor(id: Int, color: String) async throws {
|
||||||
_ = try await request("/api/local/calendars/\(id)", method: "PUT", body: ["color": color])
|
_ = try await request("/api/local/calendars/\(id)/color", method: "PUT", body: ["color": color])
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateICalColor(id: Int, color: String) async throws {
|
func updateICalColor(id: Int, color: String) async throws {
|
||||||
|
|||||||
@@ -169,7 +169,9 @@ struct AccountsView: View {
|
|||||||
} else {
|
} else {
|
||||||
ForEach(localCalendars) { cal in
|
ForEach(localCalendars) { cal in
|
||||||
HStack {
|
HStack {
|
||||||
CalendarColorDot(hex: cal.color, editable: cal.owned) { hex in
|
// Recipients of a shared calendar may recolour it (their
|
||||||
|
// own per-user colour); renaming stays owner-only.
|
||||||
|
CalendarColorDot(hex: cal.color, editable: true) { hex in
|
||||||
try? await api.updateLocalCalendarColor(id: cal.id, color: hex)
|
try? await api.updateLocalCalendarColor(id: cal.id, color: hex)
|
||||||
}
|
}
|
||||||
Text(cal.name)
|
Text(cal.name)
|
||||||
|
|||||||
Reference in New Issue
Block a user