Skip to content

Commit f1b8c5a

Browse files
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" />
2 parents 6474bcb + fd95e0a commit f1b8c5a

70 files changed

Lines changed: 15985 additions & 189 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

assets/img/check-circle.svg

Lines changed: 3 additions & 0 deletions
Loading

assets/img/close-circle.svg

Lines changed: 3 additions & 0 deletions
Loading

assets/img/completed.svg

Lines changed: 6 additions & 0 deletions
Loading

assets/img/draft.svg

Lines changed: 3 additions & 0 deletions
Loading

assets/img/draw.svg

Lines changed: 3 additions & 0 deletions
Loading

assets/img/inprogress.svg

Lines changed: 12 additions & 0 deletions
Loading

assets/img/project.svg

Lines changed: 4 additions & 0 deletions
Loading

assets/img/reset.svg

Lines changed: 3 additions & 0 deletions
Loading

assets/img/upload.svg

Lines changed: 6 additions & 0 deletions
Loading

assets/img/warning.svg

Lines changed: 3 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)