Commit f1b8c5a
authored
Feature epic 3592: Implementation of Workspace Projects List, Project Creation Wizard, Task Editor, and Project-Level Access Control (#65)
## PR Summary
This PR implements the end-to-end user flows for Workspace Projects
under the TDEI Tasking Manager. It establishes:
1. **Projects Directory View** (Grid/List directory of active and draft
projects).
2. **Project Creation Wizard** (A multi-step setup flow featuring
GeoJSON uploads, interactive AOI drawing, dynamic task grid generation,
and validator assignment).
3. **Project Details Dashboard** (Tabs for Overview, Tasks list, and
Contributions, driven by an interactive MapLibre map).
4. **Task Mapping Editor** (An interactive editor screen wrapping
changeset submissions, locking controls, and peer review submissions).
5. **Granular Project-Level Access Controls** (Explicit role delegation
for Leads, Validators, and Contributors).
## Key Features & Changes Implemented
### 1. Project Directory Page (Dashboard)
* **Components:** [ProjectCard.vue], [ProjectListRow.vue],
[StatusBadge.vue]
* **Pages:** [index.vue (Workspace Projects)]
* **Details:**
* Displays all projects in a workspace with card (grid) and row (list)
layouts.
* Supports real-time text searches, sorting (by update time, name, or
status), and cursor-based pagination.
* Filters projects dynamically by status (Draft, In Progress,
Completed).
### 2. Multi-Step Project Wizard
* **Components:** [Stepper.vue], [AoiGeometryMap.vue],
[AssignUsersField.vue], [RichTextEditor.vue]
* **Pages:** [create.vue (Project Wizard)]
* **Steps Included:**
* **Step 1 (Project Details):** Defines name, description, and TMS
Imagery URL.
* **Step 2 (Area of Interest - AOI):** Provides draw controls
(polygons/rectangles) and supports uploading GeoJSON/Shapefiles with
dynamic KM² area calculations.
* **Step 3 (Settings & Task Generation):** Defines task bounding sizes
(dynamic grid calculation), task lock timeouts, and peer review
settings. Enables assigning workspace members as project-level
validators.
* **Step 4 (Review & Launch):** Displays a full visual review card of
setup variables before publishing to the backend. Includes an
HTML-sanitized rendering of markdown instructions.
### 3. Project Detail Page & Interactive Map
* **Components:** [ProjectMap.vue], [TasksTab.vue],
[ContributionsTab.vue], [TaskSetupPanel.vue]
* **Pages:** [index.vue (Project Detail)]
* **Details:**
* Integrates a MapLibre GL map that dynamically loads task grids and
status-colored polygons.
* Implements **z-index sorting** on map rendering so the selected task
is drawn on top.
* Adjusts opacity contrast
* Connects the sidebar Task List selection with the interactive map
selection.
### 4. Task Mapping Editor
* **Pages:** [editor.vue (Task Editor)]
* **Details:**
* Integrates changeset tracking using the Rapid editor wrapper.
* Implements lock status handling (lock, force unlock, task timeout
timer).
* Implements changeset submission checks and feedback forms (rejection
categories/notes).
### 5. Access Control & Contributor Roles
* **Details:**
* Restricts access using an effective role precedence model: Workspace
Lead (always has owner/lead controls), Project Lead, Validator, or
Mapper.
* Enables Project/Workspace Leads to delegate project roles, manage
contributors list with search, filter, pagination, and update
permissions dynamically.
---
### Testing Scenarios
#### 1. Project Directory & Layouts
1. Navigate to `/workspace/:id/projects`.
2. Toggle between grid and list layouts. Ensure column headers, labels,
and status badges align properly.
3. Test search filter input and status dropdown options to confirm
correct filtering of projects.
#### 2. Project Creation Stepper
1. Click **Create Project** to launch the wizard.
2. Complete Step 1 (Details).
3. On Step 2 (AOI), upload a valid GeoJSON file or draw a polygon on the
map. Verify that the map updates with the geometry and computes the
correct area.
4. On Step 3, drag/adjust the grid size and verify task grid generation
visual previews.
5. Launch the project, and ensure the draft is cleared and redirected to
the detail page.
#### 3. Task Mapping & Lock Verification
1. On the Project details page, click on a task polygon in the map or
choose a task from the list.
2. Verify that the task is highlighted with a thick dark border and high
opacity contrast.
3. Click **Lock Task**, and confirm that a lock icon appears on the map
task center and the panel shows the task timer.
4. Access the task editor at
`/workspace/:id/projects/:projectId/tasks/:taskId/editor` to verify the
Rapid integration and changeset submission controls.
---
### Screenshots:
<img width="1470" height="832" alt="Screenshot 2026-06-26 at 8 50 14 PM"
src="https://github.com/user-attachments/assets/e1e5fbb9-c987-4c50-be0a-23be319b9f26"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 50 26 PM"
src="https://github.com/user-attachments/assets/ef78ac3e-3a2a-488e-9b3f-e44817cfebcb"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 50 57 PM"
src="https://github.com/user-attachments/assets/06060514-999a-4ef9-b1bd-57d61145f97f"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 51 43 PM"
src="https://github.com/user-attachments/assets/cd7d2134-661d-44cc-b061-ee5a67ba3851"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 51 49 PM"
src="https://github.com/user-attachments/assets/6889eb4e-705f-45b9-aee3-d5fbd6fef38b"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 52 13 PM"
src="https://github.com/user-attachments/assets/e324e53d-79d2-4d10-963c-186443694ca3"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 52 33 PM"
src="https://github.com/user-attachments/assets/0bcc76be-30e6-407f-ab42-b5ea357e01ee"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 52 39 PM"
src="https://github.com/user-attachments/assets/b6605b3a-8a69-45b2-bb87-a891347e6dc3"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 52 59 PM"
src="https://github.com/user-attachments/assets/5c9a90fe-ec88-4610-895c-0dd81cd9baa0"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 53 21 PM"
src="https://github.com/user-attachments/assets/4ad95b11-cbcc-4098-afc4-9e68835c12fd"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 53 36 PM"
src="https://github.com/user-attachments/assets/4afb841a-9a67-41c9-a7fb-4a03abf16405"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 54 05 PM"
src="https://github.com/user-attachments/assets/878a656d-1591-4732-9c11-8b2687b37711"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 54 23 PM"
src="https://github.com/user-attachments/assets/2516d1f3-cc9a-48ca-a715-c2289908d8ab"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 54 37 PM"
src="https://github.com/user-attachments/assets/a26bbf51-3e55-4f9d-bd1d-67eacda84d43"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 55 24 PM"
src="https://github.com/user-attachments/assets/e9f2c846-1b82-427e-8598-e55002b1604e"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 55 44 PM"
src="https://github.com/user-attachments/assets/65d480d4-4a91-49a7-9e49-a0209483d11d"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 55 51 PM"
src="https://github.com/user-attachments/assets/9f7801ea-32fa-45e4-9a24-63ab463cceb6"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 57 39 PM"
src="https://github.com/user-attachments/assets/6d1d109d-d210-4c4a-a5eb-048ca3dd0971"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 57 45 PM"
src="https://github.com/user-attachments/assets/9c47e581-a8a4-4862-b310-fe53a46e3ba9"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 58 25 PM"
src="https://github.com/user-attachments/assets/73ada906-664a-430d-b7ff-8e50f1f08063"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 58 39 PM"
src="https://github.com/user-attachments/assets/49b9d71e-adbe-4806-8363-3ca045c4098e"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 58 44 PM"
src="https://github.com/user-attachments/assets/aa1a9172-1b3c-4096-aeee-39bbff2dabb0"
/>
<img width="1470" height="956" alt="Screenshot 2026-06-26 at 8 59 22 PM"
src="https://github.com/user-attachments/assets/38718ba3-a0ac-4214-a236-966a49223dbc"
/>70 files changed
Lines changed: 15985 additions & 189 deletions
File tree
- assets
- img
- scss
- components
- dashboard
- project-wizard
- steps
- workspace-project-details
- workspace-projects
- composables
- data
- mock-api/workspace-projects
- pages/workspace/[id]
- projects
- [projectId]
- tasks/[taskId]
- services
- types
- util
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
0 commit comments