Mission Layer Support#1589
Conversation
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Pull request overview
This PR adds API and UI support for managing Mission Layer features, including drag-and-drop filing of mission features into layers (and moving them back to the mission root).
Changes:
- Added new Marti Mission Layer CoT attach/detach endpoints and corresponding client wrapper methods.
- Updated Mission Layers UI to support breadcrumb navigation and drag-and-drop moving of features between layers/root.
- Defaulted newly created mission layers to
UIDtype (so TAK Server will return filed features).
Reviewed changes
Copilot reviewed 8 out of 10 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| api/web/src/components/CloudTAK/util/PathBreadcrumb.vue | Adds optional explicit segments + droppable breadcrumb targets and emits navigate/drop events. |
| api/web/src/components/CloudTAK/Menu/Mission/MissionLayers.vue | Switches to shared breadcrumb component and adds Sortable-based drag initiation for moving features. |
| api/web/src/components/CloudTAK/Menu/Mission/MissionLayerCreate.vue | Changes default layer type to UID with explanatory comment. |
| api/web/src/base/subscription-layer.ts | Adds attachFeatures / detachFeature client methods that call the new endpoints and refresh state. |
| api/test/marti-mission-layer-cot.srv.test.ts | Adds server route tests for attaching/detaching CoTs to/from layers. |
| api/test/fixtures/get_schema.json | Registers new endpoints in schema fixture. |
| api/stateless/routes/marti-mission-layers.ts | Implements new PUT/DELETE helper routes for filing CoTs under layers / moving back to root. |
| api/package.json | Bumps @tak-ps/node-tak version to pick up MissionLayer API support. |
| api/package-lock.json | Updates lockfile to match dependency bump (and associated transitive updates). |
| api/derived-types.d.ts | Updates generated client types for the new endpoints. |
Files not reviewed (1)
- api/package-lock.json: Generated file
Comments suppressed due to low confidence (1)
api/web/src/components/CloudTAK/util/PathBreadcrumb.vue:36
- Same issue as Home:
@drop.stop.preventwill always swallow drops even whendroppableis false. Prefer passing the event through and conditionally preventing/stopping insideonDrop.
@drop.stop.prevent='onDrop(idx + 1)'
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 10 changed files in this pull request and generated 4 comments.
Files not reviewed (1)
- api/package-lock.json: Generated file
Comments suppressed due to low confidence (1)
api/web/src/components/CloudTAK/Menu/Mission/MissionLayers.vue:349
- assertHoldsFeatures() throws on non-UID layers; if a user drops on a breadcrumb segment that is a GROUP layer, this async handler will throw and surface as an app error. Catch the assertion failure and return early (or disable drops for non-UID layers).
assertHoldsFeatures(crumb.uid);
await props.subscription.layer.attachFeatures(crumb.uid, [id]);
| @navigate='navigateToFolder' | ||
| @delete='deleteLayer' | ||
| @rename='openEdit' | ||
| @folder-drop='onFolderDrop' | ||
| @toggle-visibility='toggleMissionFolderVisibility' |
| /** Explicit segment labels - when provided navigation is emitted as a depth instead of writing to the collection model */ | ||
| segments?: string[]; |
| { | ||
| "name": "@tak-ps/CloudTAK.api", | ||
| "version": "13.50.0", | ||
| "version": "13.54.2", |
| async attachFeatures( | ||
| layeruid: string, | ||
| uids: string[] | ||
| ): Promise<void> { | ||
| const timestamp = new Date().toISOString(); |
Context