46 lines
2.2 KiB
Markdown
46 lines
2.2 KiB
Markdown
# Scheduling Interface Pattern Migration
|
|
|
|
Scheduling implements the platform interface pattern language on its owned
|
|
surfaces without importing optional module internals.
|
|
|
|
## Surface Map
|
|
|
|
| Surface | Pattern | Consequential actions | Help context |
|
|
| --- | --- | --- | --- |
|
|
| `/scheduling` request list and detail | Persistent list-detail workspace with a lifecycle rail | Open, close, remind, decide, create holds, create final event | `scheduling.list`, `scheduling.request` |
|
|
| `/scheduling` create/edit | Bounded editor with unsaved-change guard and typed Core controls | Save or discard a request definition | `scheduling.editor` |
|
|
| `/scheduling/public/:requestId/:token` | Privacy-bounded public participation form | Submit or replace the invited participant's response | `scheduling.public-participation` |
|
|
| `scheduling.widget.open-requests` | Compact dashboard contribution | Navigate to the selected request | `scheduling.request` |
|
|
|
|
## Interaction Contract
|
|
|
|
- Closing a poll, creating reminder jobs or Calendar objects, and deciding a
|
|
final slot require a shared confirmation dialog. Invitation-link revocation
|
|
uses the same component with danger emphasis.
|
|
- Disabled actions expose the active busy, permission, immutable-response, or
|
|
optional-capability reason through Core's action-tooltip and blocker
|
|
components.
|
|
- Calendar selection uses the optional `calendar.picker` UI capability and
|
|
bounded Calendar scopes. Scheduling never imports Calendar WebUI code.
|
|
- Participant selection uses Core's provider-backed `PeoplePicker`; public
|
|
participation receives only the privacy-bounded request projection.
|
|
- Stable documentation topics are available from the list, editor, detail,
|
|
public participation page, and dashboard widget. Core resolves them through
|
|
Docs when enabled and through hosted documentation otherwise.
|
|
|
|
## Verification
|
|
|
|
Run:
|
|
|
|
```bash
|
|
cd webui
|
|
npm run test:view-model
|
|
npm run test:ui-structure
|
|
```
|
|
|
|
The structural check guards shared components, optional-module boundaries,
|
|
confirmation gates, contextual documentation, public credential controls, and
|
|
request-specific widget navigation. Backend tests validate manifest metadata,
|
|
permission boundaries, lifecycle transitions, public participation, and
|
|
Calendar capability behavior.
|