Drawers and Workflows Reference
Reference for scheduler drawers, dialogs, and workflows — Quick View, Bulk Update, Task, slots, day planning, arrival windows, recurring work, deployment, warnings, and field resources.
Before you start
- You are familiar with scheduler operations from the how-to guides.
Expected outcome
You can identify every scheduler drawer, dialog, and workflow, understand what it does, and know its fields, validation rules, and keyboard shortcuts.
Quick View drawer
Trigger: Click any job card in the work queue, board, or timeline.
Component: SchedulingJobQuickViewDialog.jsx
Sections
| Section | Content |
|---|---|
| Hero | Title, site, system, entity type icon, current warnings |
| Latest change | Who changed what, when (from scheduler history) |
| Validation warnings | Blocking and non-blocking warnings with explanations |
| Site scheduling rules | Access windows, contact requirements, parking notes |
| Edit fields | Assignees, scheduling intent, duration, status, priority, booking status, engineer visibility, and arrival window |
| Action buttons | Close, Full edit, optional Open record, task reopen/cancel, and Save quick edits |
Editable fields
| Field | Input | Constraints |
|---|---|---|
| Assignees | Multi-select engineer picker | Only canBeScheduled engineers; inspections cannot clear every assignment |
| Scheduling intent | Toggle: exact date vs target month | Mutually exclusive |
| Scheduled date | Datetime picker | ISO format |
| Target month | Month picker | YYYY-MM format |
| Duration | Number input | 15-1440 minutes |
| Arrival window | Automatic, none, or a named workspace window | Exact-dated visits can use automatic matching or an explicit reusable window. |
| Booking status | Dropdown | Provisional, date offered, confirmed, or do not move. |
| Engineer visibility | From/until datetime inputs | Optional; until cannot be before from. |
| Status | Dropdown | Tasks only: pending, in_progress, completed, cancelled |
| Priority | Dropdown | Work orders and tasks: low, normal, high, urgent |
Save behaviour
- Sends a single-job update to the server
- Validates against scheduling constraints and blocking warnings
- Refreshes the overview on success
- Closes the drawer on success
Bulk Update drawer
Trigger: Select jobs → click Bulk edit in the selection dock.
Component: SchedulingBulkUpdateDialog.jsx
Capacity: 1-100 jobs.
Toggle switches
Each field group has an independent toggle. Only toggled-on fields are sent to the server.
| Toggle | Field | Input | Constraints |
|---|---|---|---|
| Assignees | Crew assignment | Keep current, clear, or set an explicit list of canBeScheduled engineers | |
| Date | Scheduling intent | Toggle + datetime/month picker | Mutually exclusive date vs month |
| Booking status | Customer booking state | Dropdown | Provisional, date offered, confirmed, or do not move. |
| Engineer visibility | Field visibility window | From/until datetime inputs | Optional; until cannot be before from. |
| Duration | Estimated duration | Number input | 15-1440 minutes |
| Window | Schedule window | Start/end datetime pickers | Disabled when target month selected |
| Flex | Flex tolerance | Number input | 0-120 days; disabled when target month selected |
| Priority | Priority level | Dropdown | low, normal, high, urgent |
| Status | Status | Dropdown | Tasks only |
| Crew size | Crew required | Number input | 1-50 |
| Equipment | Access equipment | 7 checkboxes | mewp, scaffold, tower_scaffold, ladder, cherry_picker, rope_access, harness |
| Out of hours | OOH flag | Toggle | Boolean |
Prepopulation
- Single job selected: Form fields prepopulate from that job's current values. Toggles remain off.
- Multiple jobs selected: Form fields use defaults (crew: 1, equipment: [], OOH: false). Toggles remain off.
Validation
- At least one toggle must be enabled
- At least one job must be selected
- If the update would introduce new blocking warnings, the server rejects it
- Inspection status cannot be changed via bulk update
- Work order status cannot be changed via bulk update
Accessibility
All three operational toggle rows use aria-labelledby linking the toggle label to its checkbox input.
The crew-size input uses htmlFor/id association.
Task dialog
Trigger: Click New (create) or edit an existing task.
Component: SchedulingTaskDialog.jsx
Fields
| Field | Required | Input | Constraints |
|---|---|---|---|
| Title | ✓ | Text input | 2-200 characters |
| Type | ✓ | Dropdown | survey, dilapidation, remedial, maintenance, other |
| Description | — | Textarea | Up to 5,000 characters |
| Site | — | Searchable dropdown | Populates system options when selected |
| System | — | Dropdown (populated after site) | Requires site selection first |
| Assignee | — | Engineer dropdown | canBeScheduled engineers only |
| Status | — | Dropdown | pending, in_progress, completed, cancelled |
| Scheduling intent | — | Toggle | Exact date or target month (mutually exclusive) |
| Scheduled date | — | Datetime picker | ISO format |
| Target month | — | Month picker | YYYY-MM format |
| Duration | — | Number input | 15-1440 minutes |
| Window | — | Start/end datetime | Disabled when target month selected |
| Flex | — | Number input | 0-120 days |
Day Run Builder dialog
Trigger: Click Build day run in the page header, or select jobs for one engineer and click Build run in the selection dock.
Component: SchedulingDayRunDialog.jsx
Inputs
| Field | Input |
|---|---|
| Engineer | Dropdown of canBeScheduled engineers |
| Date | Date picker |
Algorithm
The day-run builder scores candidate jobs:
| Factor | Points | Description |
|---|---|---|
| Unscheduled | +14 | No date or target month |
| Unassigned | +12 | No engineer assigned |
| Urgent priority | +18 | Priority is urgent |
| High priority | +12 | Priority is high |
| Window urgency | +12-16 | Near end of scheduling window |
| Same postcode area | +10 | Shares area with previous stop |
| Distance proximity | +3-10 | Inversely proportional to haversine distance |
Travel: haversine at 32 km/h + 10 min overhead per stop.
Output
An ordered route of stops with estimated travel times. The user can reorder stops before applying.
Apply
Sets the scheduled date for each stop. Existing crews are preserved; the chosen engineer is added only when a stop is otherwise unassigned.
Propose Slots dialog
Trigger: Select jobs and click Propose slots.
Choose a date range, optional engineer constraints, and whether to keep current assignments. The preview ranks suggestions for every selected job. Changing the selection or any form input invalidates the old preview. Decline unwanted rows individually, then accept the remaining suggestions through the guarded bulk update. A successful apply offers undo.
Re-plan Day dialog
Trigger: Open the day replanning action for a planner date.
Choose whether to redistribute the day or shift it. Review affected customers, the proposed crew/date changes, and any unplaced work before applying. The workflow preserves unaffected crew and offers undo after a successful apply.
Arrival Windows manager
Trigger: Click Arrival windows in the Scheduling header.
Arrival windows are reusable customer promises interpreted in Europe/London time. Equal start and end times mean all day; an end earlier than the start means overnight. Labels are unique within the workspace. A window already referenced by work, or used by an undo record, cannot be edited or deleted; archive it and create a replacement. Quick View can use the automatic site/default window or a manual window for the individual job.
Batch Inspection dialog
Trigger: Click Batch schedule visits in the page header.
Component: SchedulingBatchInspectionDialog.jsx
Fields
| Field | Required | Input |
|---|---|---|
| Site | ✓ | Searchable dropdown |
| Systems | ✓ | Multi-select (populated after site) |
| Inspection type | ✓ | Annual or 6-monthly |
| Engineer | ✓ | Engineer dropdown |
| Scheduling fields | — | Date, duration, window, flex |
Capacity: Up to 50 inspections per batch.
Preview: Shows inspection count before creation.
Recurring Import dialog
Trigger: Click Import recurring work in the page header.
Component: SchedulingRecurringImportDialog.jsx
Steps
- Upload a CSV file with required columns
- Review the preview (creates, updates, skips)
- Choose conflict policy:
| Policy | Behaviour |
|---|---|
| Skip | Leave existing jobs untouched |
| Update | Overwrite existing job scheduling |
| Rebalance | Distribute work evenly across the period |
- Apply the import
Deploy Preview and Apply
Trigger: Select jobs → click Deploy in the selection dock.
Preview
Shows each selected job with its deployment readiness:
- ✓ Ready to deploy (passes all checks)
- ✗ Blocked (with reason — e.g. "no engineer assigned")
Apply
- Sets
deploymentStatetodeployed - Records
deployedAtanddeploymentBatchId - Clears
engineerAcknowledgedAt(resets acknowledgement so the engineer must re-acknowledge) - Queues email notifications to assigned engineers
- Logs the action for audit and undo
After deployment, badges show Deployed ○ (awaiting acknowledgement). When the engineer opens their day run, badges update to Deployed ✓.
Warnings dialog
Trigger: Click warning icon or "Explain warnings" in Quick View.
Component: SchedulingDialogs.jsx
Shows the full list of validation warnings for a job or selection with severity, description, and resolution guidance.
Field Resources dialog
Trigger: Click Field resources in the page header.
Component: SchedulingDialogs.jsx
Manages field-work eligibility, competency requirements, and scheduling capacity for engineers in the workspace.