Content
View differences
Updated by Marc Alcobé 12 days ago
**As a** meeting participant **As** a \[enter role of user\]
**I want** to view meeting details, participants, and attachments in dedicated tabs want to** \[enter objective\]
**so that** I can quickly understand logistics, who is involved, and access relevant files from my phone. \[enter desired result\]
### Acceptance Criteria **Acceptance criteria**
* The meeting screen provides a tab bar with: **Agenda**, **Backlog**, **Details**, **Participants**, **Attachments**.
<br>
**Technical notes**
* The selected tab is visually highlighted <br>
**Permissions and persists while staying on the meeting screen.
visibility considerations**
* The **Details** tab displays a “Meeting details” section containing:
* Meeting series (if _To whom is part of a series)
this feature visible?_
* Date
* Start time
* Duration
* Location (as text; if it _When is a URL, it is rendered as a tappable link)
not visible?_
**Translation considerations**
* The **Details** tab displays also the “Meeting status” section:
* Shows the current meeting status as a status pill (e.g., “Open”)
* Shows descriptive helper text explaining what the status means (as per product copy, same as in the web app)
* The **Details** tab displays an “Email calendar updates” section:
* Shows whether calendar updates are enabled/disabled
* Shows a short explanatory text (as per product copy, depending if it is a series or not)
* Provides a tappable link “edit the series template” that opens the series template (in-app if supported when <mention class="mention" data-id="75224" data-type="work_package" data-text="###75224">###75224</mention> is implemented)
* If any field is missing (e.g., no location), the corresponding row is displayed empty.
* Pull-to-refresh on the meeting screen refreshes the currently visible tab content.
* If the meeting cannot be loaded (network/server error), an error state is shown with a retry action.
* If the user lacks permission to view the meeting, the screen shows an access-denied state (no partial data).
* The **Participants** tab is a "copy" of the watchers tab on Work packages that shows:
* A search field to quickly find participants by name
* A primary action button **Add participant**
* A list of current participants with avatar + display name
* “(me)” suffix after the current user
* Tapping **Add participant** opens a participant picker:
* Allows searching users
* Confirms add _Key terms and updates the list immediately on success
* Each participant row provides an overflow menu (“…”) with actions as phrases in the work packages watchers tab:
* Remove participant (if permitted)
* Removing a participant requires confirmation and updates the list on success.
* If the user lacks permission to manage participants:
* **Add participant** is hidden
* Overflow actions that remove participants are hidden
* Participants list supports incremental loading if the list is long.
* The **Attachments** tab is a the same as in the work packages attachments tab and it shows:
* A search field/filter (by filename)
* A filter control **All types** (default)
* A primary action button **Add attachment**
* A list key languages_
**Out of attachments showing:
* Type icon (e.g., document/image)
* Filename/title
* Secondary info (e.g., “added by <user>”, relative timestamp)
* Tapping an attachment opens it:
* If supported in-app (e.g., image/PDF preview), open in-app viewer
* Otherwise, open using the system share/open-in app flow
* Each attachment row provides an overflow menu (“…”) with the same actions available in the work package attachments tab.
* Tapping **Add attachment** allows:
* Uploading from device (files/photos) if supported
* Adding a photo from camera/gallery if supported
* Taking a photo or video
* If an upload fails, the user sees an error and can retry.
* If the user lacks permission to add/remove attachments:
* **Add attachment** is hidden or disabled
* Remove action is hidden
### Technical Notes scope**
* Data model
* Meeting entity: includes meeting series reference, project reference, status, scheduling fields (date/time/duration), location string/URL, and settings for calendar updates.
* Participants: list of user references (id, name, avatar URL).
* Attachments: list of attachment references (id, filename, content type/type, createdBy, createdAt, file URL / download endpoint).
* API dependencies / contracts (OpenProject API v3 aligned where relevant)
* GET meeting details endpoint returning meeting + tabs data or individual endpoints:
* `/meetings/:id` (details)
* `/meetings/:id/participants`
* `/meetings/:id/attachments`
* Participant management:
* POST add participant(s)
* DELETE remove participant
* Attachment management:
* POST upload attachment (multipart or upload session)
* DELETE remove attachment
* GET download/open attachment (signed URL or authenticated streaming)
* Frontend vs backend responsibilities
* Backend enforces permissions; frontend must also hide/disable actions based on capability flags returned by API (preferred) or inferred permissions.
* Backend provides localized-ready status strings or stable status keys; frontend displays localized labels.
* Caching / state / performance
* Cache meeting shell data (title, tabs, status) for quick navigation; refresh on pull-to-refresh and on screen focus.
* Tab content should <br>
_Set the_ **To be loaded lazily per tab (Participants/Attachments can be fetched when opened) with a small prefetch optional for perceived speed.
* Use pagination for participants/attachments if endpoints are large; search should be client-side for small lists, server-side for large lists (capability-dependent).
* Offline / poor network
* If cached content exists, show it with an “out of date” indication and allow manual refresh.
* Mutations (add/remove participant, upload/remove attachment) require connectivity; show clear error when offline.
* UI parity with Work Package details
* Reuse existing row components, section headers, status pill component, overflow menu component, and “Add …” toolbar/button patterns from the Work Package details implementation.
### Permissions and Visibility Considerations
* Viewing
* Only users with permission informed/consulted teams** _field to view the meeting (via project membership/roles) can see Details/Participants/Attachments.
* Attachments must not include all teams necessary to be accessible via direct URL without authentication/authorization.
* Editing
* Adding/removing participants requires a specific meeting-management permission (or equivalent project permission).
* Adding/removing attachments requires attachment permission (or equivalent).
* Conditional UI
* If user cannot edit: hide/disable “Add participant”, “Add attachment”, and destructive overflow actions.
* If user can view but not manage: still show lists read-only.
* Privacy
* Participant search/picker must not leak users outside allowed scope (project-visible users as defined by server rules).
### Translation Considerations
* Must be localizable:
* Tab labels: Agenda, Backlog, Details, Participants, Attachments
* Section headers: Meeting details, Meeting status, Email calendar updates
* Button labels: Add participant, Add attachment
* Filter labels: All types
* Helper texts under status and calendar updates
* Error states and confirmation dialogs (e.g., remove participant/attachment)
* Must NOT be translated:
* Filenames (attachment names)
* IDs, stable keys, URLs
* User-provided location text (unless it is explicitly a system-generated label)
### Out informed of Scope
* Editing meeting agenda/backlog content as it will be implemented in <mention class="mention" data-id="75100" data-type="work_package" data-text="###75100">###75100</mention> and <mention class="mention" data-id="75168" data-type="work_package" data-text="###75168">###75168</mention>.
* Editing meeting series configuration inside the app as it will be implemented in <mention class="mention" data-id="75224" data-type="work_package" data-text="###75224">###75224</mention>.
* Advanced attachment features such as versioning, renaming, or tagging.
* Inviting external (non-user) participants via email.
* Full offline mutation support (queueing uploads/removals for later). changes._
**I want** to view meeting details, participants, and attachments in dedicated tabs
**so that** I can quickly understand logistics, who is involved, and access relevant files from my phone.
### Acceptance Criteria
* The meeting screen provides a tab bar with: **Agenda**, **Backlog**, **Details**, **Participants**, **Attachments**.
**Technical notes**
**Permissions
* Meeting series (if
* Start time
* Duration
* Location (as text; if it
**Translation considerations**
* Shows the current meeting status as a status pill (e.g., “Open”)
* Shows descriptive helper text explaining what the status means (as per product copy, same as in the web app)
* The **Details** tab displays an “Email calendar updates” section:
* Shows whether calendar updates are enabled/disabled
* Shows a short explanatory text (as per product copy, depending if it is a series or not)
* Provides a tappable link “edit the series template” that opens the series template (in-app if supported when <mention class="mention" data-id="75224" data-type="work_package" data-text="###75224">###75224</mention> is implemented)
* If any field is missing (e.g., no location), the corresponding row is displayed empty.
* Pull-to-refresh on the meeting screen refreshes the currently visible tab content.
* If the meeting cannot be loaded (network/server error), an error state is shown with a retry action.
* If the user lacks permission to view the meeting, the screen shows an access-denied state (no partial data).
* The **Participants** tab is a "copy" of the watchers tab on Work packages that shows:
* A search field to quickly find participants by name
* A primary action button **Add participant**
* A list of current participants with avatar + display name
* “(me)” suffix after the current user
* Tapping **Add participant** opens a participant picker:
* Allows searching users
* Confirms add
* Each participant row provides an overflow menu (“…”) with actions as
* Remove participant (if permitted)
* Removing a participant requires confirmation and updates the list on success.
* If the user lacks permission to manage participants:
* **Add participant** is hidden
* Overflow actions that remove participants are hidden
* Participants list supports incremental loading if the list is long.
* The **Attachments** tab is a the same as in the work packages attachments tab and it shows:
* A search field/filter (by filename)
* A filter control **All types** (default)
* A primary action button **Add attachment**
* A list
**Out
* Type icon (e.g., document/image)
* Filename/title
* Secondary info (e.g., “added by <user>”, relative timestamp)
* Tapping an attachment opens it:
* If supported in-app (e.g., image/PDF preview), open in-app viewer
* Otherwise, open using the system share/open-in app flow
* Each attachment row provides an overflow menu (“…”) with the same actions available in the work package attachments tab.
* Tapping **Add attachment** allows:
* Uploading from device (files/photos) if supported
* Adding a photo from camera/gallery if supported
* Taking a photo or video
* If an upload fails, the user sees an error and can retry.
* If the user lacks permission to add/remove attachments:
* **Add attachment** is hidden or disabled
* Remove action is hidden
### Technical Notes
* Data model
* Meeting entity: includes meeting series reference, project reference, status, scheduling fields (date/time/duration), location string/URL, and settings for calendar updates.
* Participants: list of user references (id, name, avatar URL).
* Attachments: list of attachment references (id, filename, content type/type, createdBy, createdAt, file URL / download endpoint).
* API dependencies / contracts (OpenProject API v3 aligned where relevant)
* GET meeting details endpoint returning meeting + tabs data or individual endpoints:
* `/meetings/:id` (details)
* `/meetings/:id/participants`
* `/meetings/:id/attachments`
* Participant management:
* POST add participant(s)
* DELETE remove participant
* Attachment management:
* POST upload attachment (multipart or upload session)
* DELETE remove attachment
* GET download/open attachment (signed URL or authenticated streaming)
* Frontend vs backend responsibilities
* Backend enforces permissions; frontend must also hide/disable actions based on capability flags returned by API (preferred) or inferred permissions.
* Backend provides localized-ready status strings or stable status keys; frontend displays localized labels.
* Caching / state / performance
* Cache meeting shell data (title, tabs, status) for quick navigation; refresh on pull-to-refresh and on screen focus.
* Tab content should
_Set the_ **To
* Use pagination for participants/attachments if endpoints are large; search should be client-side for small lists, server-side for large lists (capability-dependent).
* Offline / poor network
* If cached content exists, show it with an “out of date” indication and allow manual refresh.
* Mutations (add/remove participant, upload/remove attachment) require connectivity; show clear error when offline.
* UI parity with Work Package details
* Reuse existing row components, section headers, status pill component, overflow menu component, and “Add …” toolbar/button patterns from the Work Package details implementation.
### Permissions and Visibility Considerations
* Viewing
* Only users with permission
* Attachments must not
* Editing
* Adding/removing participants requires a specific meeting-management permission (or equivalent project permission).
* Adding/removing attachments requires attachment permission (or equivalent).
* Conditional UI
* If user cannot edit: hide/disable “Add participant”, “Add attachment”, and destructive overflow actions.
* If user can view but not manage: still show lists read-only.
* Privacy
* Participant search/picker must not leak users outside allowed scope (project-visible users as defined by server rules).
### Translation Considerations
* Must be localizable:
* Tab labels: Agenda, Backlog, Details, Participants, Attachments
* Section headers: Meeting details, Meeting status, Email calendar updates
* Button labels: Add participant, Add attachment
* Filter labels: All types
* Helper texts under status and calendar updates
* Error states and confirmation dialogs (e.g., remove participant/attachment)
* Must NOT be translated:
* Filenames (attachment names)
* IDs, stable keys, URLs
* User-provided location text (unless it is explicitly a system-generated label)
### Out
* Editing meeting agenda/backlog content as it will be implemented in <mention class="mention" data-id="75100" data-type="work_package" data-text="###75100">###75100</mention> and <mention class="mention" data-id="75168" data-type="work_package" data-text="###75168">###75168</mention>.
* Editing meeting series configuration inside the app as it will be implemented in <mention class="mention" data-id="75224" data-type="work_package" data-text="###75224">###75224</mention>.
* Advanced attachment features such as versioning, renaming, or tagging.
* Inviting external (non-user) participants via email.
* Full offline mutation support (queueing uploads/removals for later).